Блог - Просто о сложном

Разработка 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. Now let's choose a username for your 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).



 Cообщения в Телеграм можно оформлять и форматировать. Это очень удобно - текст может содержать не только обычный текст, но и жирный, курсив и др. Разметка текста делается в 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 и нажимает на "Принять" на сайте.

Заключение


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