# fluent-support/2.4.5/app/Http/Controllers/ChatMessageParserController.php

Fluent Support – Helpdesk &amp; Customer Support Ticket System, version 2.4.5. 101 lines.

- Page: https://pluginprobe.com/plugins/fluent-support/2.4.5/code/app/Http/Controllers/ChatMessageParserController.php
- Raw: https://pluginprobe.com/plugins/fluent-support/2.4.5/raw/app/Http/Controllers/ChatMessageParserController.php
- Modified: 2026-10-09T15:31:16+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/fluent-support/2.4.5/code/app/Http/Controllers/ChatMessageParserController.php#L10-L20`.

```php
<?php

namespace FluentSupport\App\Http\Controllers;

use FluentSupport\Framework\Http\Request\Request;
use FluentSupport\App\Services\Helper;
use FluentSupport\App\Services\ThirdParty\HandleSlackEvent;
use FluentSupport\App\Services\ThirdParty\HandleTelegramEvent;

/**
 * Incoming webhooks from chat integrations (Telegram, Slack).
 */

class ChatMessageParserController extends Controller
{
    /**
     * Records a Telegram reply as a ticket response.
     *
     * @param Request $request
     * @param HandleTelegramEvent $handler
     * @param string $token
     * @throws Exception
     * @return mixed
     */
    public function handleTelegramWebhook(Request $request, HandleTelegramEvent $handler, $token)
    {
        if (!$this->verifyWebhookSignature('telegram', $request)) {
            return $this->sendError([
                'message' => __('Invalid request signature.', 'fluent-support'),
                'status'  => false
            ], 403);
        }

        try {
            return $this->sendSuccess([
                'message' => __('Response has been successfully recorded', 'fluent-support'),
                'status'  => true,
                'data'    => $handler->handleEvent($request->all(), $token)
            ]);
        } catch (\Exception $e) {
            return $this->sendError([
                'message' => Helper::getSafeErrorMessage($e),
                'status'  => false
            ]);
        }
    }

    /**
     * @param Request $request
     * @param HandleSlackEvent $handler
     * @param string $token
     * @return array
     */
    public function handleSlackEvent(Request $request, HandleSlackEvent $handler, $token)
    {
        if (!$this->verifyWebhookSignature('slack', $request)) {
            return $this->sendError([
                'message' => __('Invalid request signature.', 'fluent-support'),
                'status'  => false
            ], 403);
        }

        if ($request->getSafe('type', 'sanitize_text_field') === 'url_verification') {
            return new \WP_REST_Response($request->getSafe('challenge', 'sanitize_text_field'), 200, [
                'Content-Type' => 'text/plain; charset=utf-8'
            ]);
        }

        try {
            return $this->sendSuccess([
                'message' => 'received',
                'result' => $handler->handleEvent($token)
            ]);
        } catch (\Exception $e) {
            return $this->sendError([
                'message' => Helper::getSafeErrorMessage($e),
                'status'  => false
            ]);
        }
    }

    /**
     * Signature checks are opt-in via fluent_support/verify_webhook_signature_{platform}.
     * With no verifier hooked, the handlers' token check is the only guard.
     *
     * @param string $platform 'telegram' or 'slack'
     * @param Request $request
     * @return bool
     */
    private function verifyWebhookSignature($platform, Request $request)
    {
        $hookName = 'fluent_support/verify_webhook_signature_' . $platform;

        if (!has_filter($hookName)) {
            return true;
        }

        return (bool) apply_filters($hookName, false, $request);
    }
}

```
