Публікації

Інтеграція з чат ботом Telegram

2022-10-25 14:54 Публікації
Загальні відомості
Чат боти поступово стають невід'ємною частиною автоматизації бізнесу.

Сценаріїв використання безліч, серед деяких з них:
  • організація інтернет магазинів з можливістю перегляду каталогу товарів та формування замовлень
  • надання оперативної управлінської звітності
  • організація вузькоспеціалізованих інтерфейсів для співробітників, яким не потрібен повноцінний клієнт облікової системи (наприклад, комірникам для комплектації замовлень)
  • створення опитувань та розсилання оповіщень

Способи інтеграції чат бота Telegram
Взаємодія чат бота Telegram та будь-якої інформаційної системи зводиться до простого алгоритму: надсилання повідомлення чат боту — отримання відповіді. Складність виникає у тому, як саме отримувати відповідь. Можна створити регламентне завдання, яке періодично опитуватиме сервер Telegram, а можна налаштувати чат бота так, щоб він сам за вказаною адресою відразу надсилав відповідь, як тільки користувач його введе.

Перший спосіб виконується методом "getUpdates" і його ми розглядати не будемо, так як він досить простий у реалізації.

Другий метод більш складний, і передбачає використання Webhooks — вказівку Telegram адреси, на який він повинен моментально надсилати повідомлення. Ось про нього і хотілося б поговорити, оскільки він складніший у налаштуванні, але забезпечує більш якісну взаємодію з користувачем.

Суть цієї технології в тому, що чат боту повідомляється захищений статичний https:// адресу, після чого Telegram відправляє на нього повідомлення в JSON-форматі. Можна по-різному організувати обробку повідомлень чат бота, наприклад, через власний веб-сервер або перенаправлення на localhost командою ngrok (ngrok http 5000). Розглянемо обробку повідомлень за допомогою http-сервісу на веб-сервері IIS.


Підготовка серверу
Спочатку нам потрібен безпосередньо сам сервер зі статичною адресою. На ньому необхідно встановити IIS, процес детально описаний, наприклад, у цій статті, тому докладно не будемо зупинятися.

Публікація http-сервісу
Створюємо користувача та пароль для доступу до http-сервісу. Наприклад, логін hs, пароль 12 345.
Далі потрібно створити та опублікувати http-сервіс у конфігураторі BAF.


Текст методу TelegramPOST може бути таким:
Функція TelegramPOST (Запит Сервісу)
TelegramСервер.ОбробитиЗапитСервісуІВідправитиВідповідь (ЗапитСервісу);
Відповідь = Новий HTTPСервісВідповідь (200);
Повернення Відповідь;
КінецьФункції
Функція повинна повертати код 200. Відповідь чату виконується в тілі процедури TelegramСервер.
HTTPЗ'єднання = Новий HTTPЗ'єднання ("api.telegram.org", 443,15,Новий ЗахищенеЗ'єднанняOpenSSL ());
HTTP З'єднання.
Після цього публікуємо веб-сервіс.

Створення самописного сертифікатау та встановлення взаємозв'язку http-сервісу та чат боту.
Оскільки Telegram використовує захищене з'єднання, необхідно встановити сертифікат безпеки. Можна або придбати, або створити власний самописний. Відмінність у тому, що самопідписаний не буде вважатися довіреним, але для чат робота його достатньо.


Розглянемо процес створення. Оригінал взято звідси.
Качаємо та встановлюємо OpenSSL. Генеруємо файли ключа та сертифіката
"C:\Program Files\OpenSSL-Win64\bin\openssl.exe" req -newkey rsa:2048 -sha256 -nodes -keyout webhook. key -x509 -days 9999 -out webhook. cer -subj "/C=US/ ST=State/L=Cyti/O=You Company/CN=IP_Адреса_сервера"
-days 9999 — термін дії сертифіката
-out webhook. cer — ім'я файлу сертифіката
You Company — ім'я компанії
У результаті отримаємо два файли webhook. key (приватний ключ) та webhook. cer (власне сертифікат).

2. Шукаємо в інтернеті утиліту pvk. exe авторства Dr Stephen N Henson. Конвертуємо приватний ключ у формат PVK та встановлюємо пароль на ключ. Наприклад 12 345 678
"C:\Program Files\pvktool\pvk.exe" -in D:\ webhook. key -out D:\ webhook. pvk -topvk pass: 12 345 678

3. Створюємо з файлу сертифіката та файлу PVK сертифікат PFX.
"C:\Program Files\pvk2pfx\pvk2pfx.exe" -pvk D:\ webhook. pvk -spc D:\ webhook. cer -pfx D:\ webhook. pfx -pi 12 345 678 -po

4. Цей сертифікат можна імпортувати до IIS та зв’язати з ним порт SSL (443).


Потім - сайти - змінити прив'язки.


Встановлюємо прив'язку до 443 порту


5. Прив’язку сертифіката до чату зручно зробити за допомогою простої html-сторінки
<html>
<body>
<form action="https://api.telegram.org/token_чатбота/setwebhook" method="post" enctype="multipart/form-data">
Select Certificate to upload (*.сer):
<input type="file" name="certificate" id="fileToUpload">
URL: <input type="text" name="url" value="https://hs:123 456 789@255.255.255.255/MyBase/hs/telegram/post_message/"><br>
<input type="submit" value="Upload Certificate" name="submit">
</form>
</body>
</html>
Де
token_чата — токен чат-бота
hs:123 456 789 — логін пароль користувача BAF з доступу до http сервісу
255.255.255.255- ip адреса бази BAF
MyBase — ім'я бази
В інтерфейсі сторінки потрібно вибрати файл сертифіката

6. Перевірка прив’язки чат боту
Після цього можна перевірити прив’язку командою
https://api.telegram.org/token_чатбота/getWebhookInfo


Висновок
На закінчення хочеться сказати, що подібним чином можна організувати інтеграцію з чат ботом Viber і Facebook messaging. Програмну логіку відповідей чат боту краще організовувати з використанням механізму завдань та бізнес-процесів.

Якщо Вам потрібна інтеграція, залиште заявку.