• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Статья также доступна на украинском (перейти к просмотру).

Узнайте, как работают чат-боты в Telegram, их компоненты, API-запросы и настройки веб-хуков

Содержание:

Появление и активное использование мессенджеров привело к развитию направления диалоговых интеллектуальных систем или чат ботов, способных с легкостью решать различные бизнес-задачи. Для их реализации достаточно базовых знаний по использованию PHP и соответствующая техническая поддержка со стороны системы обмена сообщений или мессенджера. Рассмотрим принцип взаимодействия компонентов диалоговой системы для мессенджера Телеграм и главные способы работы с ними. Кроме того, нами будет приведен алгоритм действий для регистрации собственного чат-бота в указанном мессенджере.

Компоненты чат-бота и их взаимодействие

Чат роботы является веб-версией интеллектуальных систем, построенных на базе знаний. Критерием их «правильной» работы является способность «выдержать» тест Тьюринга. Соответствующие тесты ежегодно проводятся для наиболее известных ботов, что превращается в своеобразное соревнование. Примером тому является конкурс Лебнера.

Рабочая конфигурация любого виртуального помощника обычно состоит из следующих компонентов или модулей (см. Рисунок 1):

  • Интерфейс взаимодействия с чат ботом (интерфейс приложения);

  • Модуль разработки;

  • Сервер мессенджера;

  • Запросы и веб-хуки.

 

Рисунок 1. Схема взаимодействия компонентов чат бота в Телеграм.

Интерфейс приложения

Интерфейс взаимодействия с чат ботом или интерфейс приложения обеспечивает возможности «общения» с роботом с помощью любых доступных средств – «живым» языком, графического интерфейса, командной строчки или смешанного интерфейса, как у Телеграм. Здесь достаточно отправить боту сообщения, и он активируется и ответит в соответствии со своей «задачей» или целью создания.

Пользователи могут передавать боту любые данные – текстовые или голосовые сообщения, файлы, информацию о местонахождении и т.д. Кроме того, мессенджер предоставляет возможность создания графических интерфейсов на базе языка сценариев. JavaScript. 

В Телеграм указанный интерфейс также используется для управления ботом и получения дополнительной информации о нем. Такой вид взаимодействия происходит с помощью команд, начинающихся символом "/". Все они могут быть доступны как разработчикам, так и пользователям чата. Их список можно получить, введя в командной строчке:  /help. 

Модуль разработки

Модуль разработки является «мозгом» чата бота и полностью определяет его «поведение». Его можно разбить на два основных компонента: 

  • База знаний;

  • Логика приложения и механизм принятия решений.

База знаний присутствует в любой диалоговой интеллектуальной системе независимо от ее ориентации. Ее основная задача – создать для работы «словарный запас» в определенной предметной области – банковском деле, области финансов, гуманитарной сфере и т.д. Если бот самообучающийся, то его база знаний постоянно пополняется за счет ранее сформированных ответов по заданным ему вопросам.

Формирование базы знаний обычно происходит на стороне разработки бота, то есть мессенджер не вмешивается в этот процесс. И это логично, поскольку именно разработчик определяет цель создания работы и их возможности.        

Логика приложения и механизм принятия решений определяют алгоритмы обработки запроса пользователя и правила формирования ответов на основе базы знаний. Именно в этом модуле заранее программируется, как именно должен ответить бот в той или иной ситуации. Модуль «подчиняется» только разработчику. 

Например, рассмотрим несколько распространенных вариантов формирования ответов пользователю для простейшего бота. Его база знаний обычно содержит список вопросов и соответствующие каждому из них ответы. В этом случае алгоритмы формирования ответа могут быть следующими:

  • Ориентация на ключевые слова. Выбирается и ответ, содержание которого прямо или косвенно связано со словами, содержащимися в запросе. Например, если в запросе присутствуют слова ромашка, гортензия и фиалка, то, очевидно, будет предоставлен ответ со словом цветы.

  • Совпадение слова или фразы. Это очевидный и простой вариант ответа.

  • Совпадение контекста. В этом случае ответ может формироваться за счет анализа введенных ранее вопросов со стороны этого пользователя.

Следует отметить, что модуль разработки является отдельной веб-системой, к которой можно обращаться. Обычно он имеет свой веб- и IP-адрес, на который поступают запросы со стороны сервера Телеграм.

Сервер мессенджера

Сервер мессенджера выполняет функции сервера по отношению к приложению (клиент) и «организует» связь между всеми компонентами его конфигурации. Например, при формировании сообщения пользователем в интерфейсе приложения, оно попадает на сервер мессенджеру, который уже решает, что с ним делать дальше – сохранить временно у себя или сразу отправить в модуль разработки.

Алгоритм действий сервера зависит от его настроек, устанавливаемых из модуля разработки. Такая возможность существует благодаря имеющемуся на сервере программному интерфейсу или Bot API (в соответствии с документацией мессенджера). В настоящее время последней версией является Bot API 8.1, к которой было добавлено несколько новых классов по сравнению с предыдущей версией Bot API 8.0. Подробная документация по Bot API находится по этому адресу.

Таким образом, в процессе работы модуль разработки сотрудничает с сервером мессенджера, определяя все его действия по отношению к клиенту.         

Сервер Телеграм, так же как и модуль разработки, имеет свой веб-адрес, к которому можно обращаться по HTTP-канала. По умолчанию установлен следующий адрес:

https://api.telegram.org 

Однако местонахождение сервера не является принципиальным вопросом и поэтому может быть изменено. Например, вы можете перенести его на любой локальный адрес. При этом режим работы сервера также будет изменен. В этом случае будет расширен диапазон возможностей для работы с ним. Приведем лишь некоторые из преимуществ:

  • В 1000 раз увеличится максимальное значение параметра max_webhook_connections метода setWebhook (рассмотрим далее);

  • Для веб-хуков могут быть использованы любые локальные IP-адреса и порты;

  • Будут сняты ограничения на размер загружаемых файлов.

Вопросы использования локального режима работы сервера должны решаться в зависимости от поставленных перед разработчиками бота задач.

Установить локальный сервер можно, воспользовавшись кодом, предоставленным на странице разработчиков.

Запросы и веб-хуки

Запросы и веб-хуки являются механизмом взаимодействия между сервером и модулем разработки. Они поддерживают рабочий процесс и позволяют своевременно вносить коррективы в работу приложения.

API-запросы формируются в модуле разработки и отправляются по HTTP-канала к серверу мессенджера. Они имеют только одно направление – от разработки до сервера.

Поддерживается следующий формат API-запроса к серверу:

https://api.telegram.org/bot/METHOD_NAME

Здесь token – токен аутентификации чат бота, генерируемый при его создании. METHOD_NAME – конкретный метод, определенный в Bot API.

Приведем основные правила формирования API-запроса:

  • Поддержка GET и POST  методов передачи данных;

  • Обязательно использование кодирования UTF-8;

  • Названия методов из Bot API могут указываться в любом регистре символов;

  • Параметры могут быть переданы в следующих форматах:

  • application/json;
  • application/x-www-form-urlencoded;
  • multipart/form-data;
  • строчка URL.

Пример API.-запроса на обновление данных:

https://api.telegram.org/bot1h23G576lAkCyDlF123yghIkldeyxt7W2v1u789rw25/getUpdates

Ответ от сервера на любой API-запрос всегда приходит в формате JSON. Соответственно, все типы данных у них есть JSON-объектами. И потому для возможности использования полученных данных в сценариях PHP, их необходимо декодировать, например, с помощью функции json_decode().

Веб-хуки является средством реагирования сервера на действия пользователя в режиме реального времени. По сути, это обратные вызовы по HTTP, имеющие только одно направление – от сервера к модулю разработки. HTTP-запрос в формате JSON или сериализированный и отправит его в модуль разработки. Указанный режим работы сервера устанавливается по умолчанию, однако при необходимости его можно изменить.

Настроить веб-хуки можно с помощью метода setWebhook, который имеет несколько параметров. Приведем некоторые из них:

  • url – указывается веб-адрес ресурса, которому сервер отправляет webhook-запрос;

  • ip_address – фиксированная IP-адрес для отправки webhook-запросов, указываемых на замену адресу, определенному через DNS ;

  • secret_token – токен, который будет содержаться в заголовке X-Telegram-Bot-Api-Secret-Token webhook-запросов;

  • max_connections – максимальное количество одновременных HTTPS-подключение к веб-хуку из диапазона от 1 до 100, используется для регулировки нагрузки на чат бот;

  • Certificate – для загрузки сертификата открытого ключа; используется для проверки корневого сертификата.

Приведем основные правила для возможности установки безошибочных настроек для указанного метода:

  • Порты, используемые для веб-хуков: 80, 88, 443 да 8443;

  • При наличии настроенного веб-хука для обновления данных, «стандартное» обновление с помощью функции getUpdates невозможно.

Приведем пример API-запроса к серверу Телеграм для настройки веб-адреса модуля разработки: 

https://api.telegram.org/bot1h23G576lAkCyDlF123yghIkldeyxt7W2v1u789rw25/setWebhook?url=https://my_domain.ua/script.php

Здесь достаточно было использовать только параметр url методу setWebhook.

Информацию о текущем статусе веб-хука всегда можно получить с помощью метода getWebhookInfo, используемый без параметров.

Само собой, веб-хук всегда можно исключить из системы. Это можно сделать с помощью метода deleteWebhook. В этом случае обновления будут производиться стандартной функцией getUpdates.

Регистрация чат бота в Телеграм

Для того чтобы зарегистрировать чат в мессенджере Телеграм необходимо выполнить следующие действия:

Найти в мессенджере аккаунт с именем @BotFather;

Нажать кнопку START под выведенным сообщением;

В строке для ввода сообщений ввести команду /newbot или выбрать ее с помощью мыши среди выведенных команд;

Ввести общее имя своего помощника, в нашем случае это имя my_assistant;

Ввести уникальное имя для вашего бота, которое бы заканчивалось на «bot», у нас это UkraineHosterBot;

Записать или скопировать выведенный на экране секретный токен созданного чат бота, первые семь цифр полученного нами токена – 8160145.  

После выполнения указанных действий чат будет зарегистрирован в системе Телеграм и готов к использованию.

Пример простейшего Telegram-бота

<?php

// Чтение входящего JSON
$input = file_get_contents('php://input');
$update = json_decode($input, true);

// Логирование для отладки (не рекомендуется в продакшене)
file_put_contents('log.txt', print_r($update, true), FILE_APPEND);

// Проверка, что запрос содержит сообщение
if (isset($update['message'])) {
    $chatId = $update['message']['chat']['id'];
    $messageText = $update['message']['text'] ?? '';

    // Простейший обработчик сообщений
    $responseText = match (strtolower($messageText)) {
        '/start' => 'Привет! Я Telegram-бот.',
        '/help' => 'Я могу отвечать на команды /start и /help.',
        default => 'Извините, я вас не понял.',
    };

    // Отправка ответа
    sendTelegramMessage($chatId, $responseText);
}

/**
 * Функция для отправки сообщения в чат Telegram
 *
 * @param int $chatId
 * @param string $messageText
 */
function sendTelegramMessage(int $chatId, string $messageText): void
{
    $botToken = '<BOT_TOKEN>'; // Замените на ваш токен
    $url = "https://api.telegram.org/bot{$botToken}/sendMessage";

    $data = [
        'chat_id' => $chatId,
        'text' => $messageText,
    ];

    $options = [
        'http' => [
            'header'  => "Content-type: application/json\r\n",
            'method'  => 'POST',
            'content' => json_encode($data),
        ],
    ];

    $context = stream_context_create($options);
    file_get_contents($url, false, $context);
}

В следующей статье будут рассмотрены типы запросов и методы управления интерфейсом.

Подписывайтесь на наш Телеграм-канал https://t.me/freehostua, чтобы быть в курсе новых полезных материалов

Смотрите наш канал Youtube на https://www.youtube.com/freehostua.

Мы в чем ошиблись, или что-то пропустили?

Напишите об этом в комментариях, мы с удовольствием ответим и обсуждаем Ваши замечания и предложения.

Дата: 27.12.2024
Автор: Александр Ровник
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
navigate
go
exit
Спасибо, что выбираете FREEhost.UA