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

Зміст:
Поява та активне використання месенджерів призвело до розвитку напрямку діалогових інтелектуальних систем або чат ботів, котрі здатні з легкістю вирішувати різноманітні бізнес-завдання. Для їх реалізації достатньо базових знань з використання 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<token>/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