Блог - Просто про складне

Розробка Telegram роботів. Теорія та практика.

Зміст:


Інструменти API
Що таке поллінг та вебхукі
BotFather та налаштування параметрів чату
Налаштування інтерфейсу робота
Функціональність робота
Прийом платежів

Інструменти API


Сьогодні мова піде про практичну реалізацію ботів в популярному месенджері Telegram. Як вони створюються, які інструменти API використовуються і що потрібно для того, щоб програміст міг написати код автоматичного чату.

На сьогоднішній день існують три офіційні інструменти для комунікації з двигуном популярного месенджера. Це Telegram API, Telegram Bot API та бібліотека Telegram Database Library (скорочено TDLib). TDLib підтримує всі функції Telegram та спрощує розробку додатків Telegram на будь-якій платформі – на Android, iOS, Windows, macOS, Linux.

Писати свій бот можна будь-якою мовою, це не принципово. Наприклад, Node.js використовує модуль Node-Telegram-bot для взаємодії з офіційним API Telegram Bot. На JavaScript для цієї мети існує бібліотека Telegraf, для PHP є PHP Telegram API та NovaGram, для Rust це фреймфорки carapax та teloxide, для С++ бібліотека tgbot-cpp, для Kotlin створена спеціальна оболонка Kotlin Telegram Bot. Мовою програмування Python використовуються Telethon і Pyrogram, а також асинхронна бібліотека AOIgram, яка вважається на сьогоднішній день найкращим інструментом.

Що таке поллінг та вебхукі


Кожен чат-бот повинен виконувати моніторинг на предмет оновлень. Ось тут і знадобляться бібліотеки та фреймворки, головним чином, для того, щоб не прописувати вручну HTTP-запити від робота до сервера. Telegram має два способи отримання інформації про оновлення. Перший варіант називається polling (від англ. pollng – "опитування"). Цей спосіб отримання оновлень у тому, що чат бот постійно опитує сервер. Цей варіант не оптимальний, проте його легше реалізувати і, якщо аудиторія не обчислюється сотнями тисяч користувачів, такий механізм передачі оновлень підійде для більшості проектів. В крайньому випадку можна використовувати його різновид - long polling, варіант, коли відповідь відбувається довше, або тому, що надійшов апдейт, або через те, що тайм-аут вийшов і потрібно розривати з'єднання. Інший спосіб отримання апдейтів від сервера - з допомогою про вебхуков. Вебхук - це зворотний принцип - коли сервер сам посилає інформацію боту про те, що в чаті відбулися події.

Постійний обмін повідомленнями означає велике навантаження на сервер, тому в API закладені деякі обмеження, які слід враховувати під час розробки чат-ботів. Бот може обробляти не більше одного повідомлення на секунду, а в груповому чаті не більше 20 повідомлень. В одній групі може бути до 20 ботів. Чат бот може надсилати персональне повідомлення лише користувачам, які його запустили. Між собою роботи спілкуватися не можуть.

BotFather та налаштування параметрів чату


Незалежно від того, якою мовою ви будете створювати бот, він генерується однаково вбудованим сервісом - службовим роботом BotFather. Щоб завести собі бота, потрібно ввести його назву в Telegram і надіслати команду /newbot. У відповідь прийде повідомлення Alright, a new bot. How are we going to call it? Please choose a name for your bot.” Ця робота пропонує вам придумати для нового чату ім'я. Це може бути будь-яке ім'я. Потім буде новий запит - “Good. Нові роки choose a username для вашої bot.”. Тепер потрібно дати ім'я користувача для бота. При цьому, зверніть увагу, що наприкінці імені обов'язково має бути слово “bot”, наприклад archie_pizza_bot. На цьому генерування робота закінчується і починається його налаштування та конфігурація його опцій. Перевірити працю робота можна, якщо перейти за посиланням http://t.me/archie_pizza_bot. Разом з адресою вашого робота ви отримуєте токен, який вам знадобиться для написання автоматичного чату.


Він виглядає приблизно так: 2110295744:AAGOg4FEfZdZBA-IC9a-9е3kASM4UDVKi-c. Код цього токена необхідно зберігати у безпечному місці, за його допомогою можна керувати ботом. Усього користувач може створювати до двадцяти роботів і керувати ними через службовий бот BotFather. Готовий бот можна відредагувати під свої цілі, наприклад, змінити ім'я або додати опис. Щоб побачити налаштування для редагування властивостей бота, відкрийте BotFather та введіть /mybots .
Для швидкого керування ботом можна встановити команди (/setcommands), які будуть відображатися при введенні “/”. Фраза, що прописується в розділі меню BotFather inline placeholder message, буде показана одразу після введення імені користувача @archie_pizza_bot у рядку будь-якого чату. У профілі робота можна включити картинку-аватар (кнопка меню BotFather - Edit Botpic).


Налаштування інтерфейсу


Офіційний API дозволяє використовувати різні кнопки для більш комфортної навігації в роботі. Так, наприклад, у чаті можуть бути задіяні keyboard buttons. Ці кнопки можливо використовувати для швидкого надсилання повідомлень з очевидними репліками або командами, наприклад, “Привіт!”, “Як справи?”, “Поки що!” і т.д.

Окремий тип клавіш називається Callback. Після натискань на такі кнопки роботи змінюють вихідне повідомлення або виводять на екран повідомлення – типу повідомлення (notification) або попередження (alert).


 Повідомлення у Телеграм можна оформляти та форматувати. Це дуже зручно - текст може містити не тільки звичайний текст, але й жирний, курсив та ін. Розмітка тексту робиться в HTML і Markdown (Bot API). Написи можна робити жирним зображенням, похилим курсивом, можна вставляти посилання і т.д. Цей простий метод форматування дуже зручний для оформлення оголошень, наприклад, під час проведення акцій.


Бот може працювати у режимі Inline. Він дає змогу надрукувати ім'я бота в полі для введення повідомлення, а потім дописати запит на 256 символів. Результат буде виведено у меню. Такий режим також зручний для швидкого пошуку зображень чи текстової інформації.

Функціональність робота


Відмінною особливістю роботів у Telegram є те, що вони не можуть отримувати старі повідомлення. Оновлення приходять лише раз, тому розробник ботів повинен сам дбати про запис історії чатів та інших подій, якщо це важливо.
Усім користувачам групового чату та каналу у Телеграмі призначається власний ID. У коді робота розрізняти чати слід саме за id, тому що цей ідентифікатор статичний. Також можна використовувати спеціальний інструмент - службовий бот @username_to_id_bot, який відобразить цей параметр.
Боти не можуть надсилати повідомлення іншим ботам, але можуть вести модерацію в групі. Наприклад, якщо хтось із учасників групи порушує правила, чат-бот може автоматично визначати "стоп-слова" (у тому числі і змінюючи регістр), видаляти саме повідомлення, а також банити недоброзичливого користувача з чату. Для роботів є така настройка як режим приватності Privacy mode (включається через меню системного робота). Якщо ви плануєте наділяти бот адміністраторськими функціями, цей режим слід вимкнути. За замовчуванням ця опція задіяна, і тому бот бачить лише повідомлення зі згадкою самого бота, а також службові повідомлення та репліки-відповіді користувачів. Призначається бот адміном у групі так само, як і будь-який користувач чату.


Прийом платежів


Бот у Телеграм може приймати платежі більш ніж з 200 країн від різних платіжних систем - Payme, Stripe, YooMoney, Sberbank, PSB, Tranzzo, CLICK та ін. При цьому слід мати на увазі те, що сам Telegram не займається проведенням транзакцій, а тільки надає платформу для їх реалізації. Також Telegram не збирає платіжну інформацію та не бере комісію. Підключення платіжних систем відбувається через меню BotFather (кнопка Payments).

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

Висновок


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