Всем привет!
Сегодня мы побеседуем о том как делаются Telegram боты.
Кто ты по жизни?
Telegram боты бывают двух видов:
- Боты основанные на Webhoock
- Боты основанные на Long Polling
Первый вариант бота требует от вас поднять сервер и установить “вебхуки” для асинхронного оповещения вас о новых изменениях. На вашем сервере должен быть соответствующий роутинг.
Второй вариант бота - это имитация асинхронности. Ваш бот с определенным периодом будет запрашивать последние изменения с сервера телеграм на основании механизма long polling. Т.е. бот делает запрос и подвисает, а отвисает либо по таймауту, либо по получению новыйх обновлений. Об этом виде ботов сегодня и пойдет речь.
Long polling в разрезе работы с сетью
Когда вы работаете с Telegram Api вы нагружаете сервера Telegram. Все запросы вы отправляете по одному URL, но в один момент времени может работать только один обработчик для Telegram бота.
Интересно, что в API предусмотрена умная обработка ошибок, среди прочего, в ответе телеграм сервера, который вы за DDOS’или, может сообщить вам сколько нужно подождать, чтобы вы могли взаимодействовать с Telegram снова
Как сказано выше у вас фактически однопоточная обработка запросов к телеграм. По этому, кажется, здравым принять одну из следующих реализаций ботов:
- реализовать поток, который будет отправлять запросы и складировать ответы в общую очередь из которой потоки-обработчики будут их разбирать;
- поставить прокси-сервер, который будет затягивать последние изменения и шарить их между нодами (другими серверами) бота. В этом случае можно подменяя прокси-сервер менять реализации взаимодействия с telegram api не меняя реализацию для нод. Это решение мне нравится несколько больше, его масштабируемость зависит от потребностей в функциональности бота, т.к. если можно обрабатывать параллельно несколько чатов независимо друг от друга, то масштабируемость на пределе.
Оставим использование прокси-сервера для будущих статей, а пока давайте рассмотрим как вы можете реализовать своего бота.
Красная или синяя таблетка?
На сколько вы любите писать велосипеды? В зависимости от этого у вас есть 2 пути реализации Telegram бота:
- писать всё самому с нуля;
- воспользоваться существующей библиотекой.
Если вы используете динамически типизируемые языки, которые поддерживают нативную работу с JSON, то первый вариант, не так уж и плох, однако, уже существует большое количество библиотек для разработки ботов их публичный перечень вы можете увидеть здесь. Вы найдете много вариантов для PHP, Java, Python, Node.js и так далее. Я сейчас реализую собственную библиотеку на языке Kotlin - Clabo. Эта библиотека поможет вам на основании расширяемого DSL описать работу своего бота, например, всё что надо для запуска бота, который говорит “Привет!” по команде /start это небольшой кусочек кода по ссылке.
BotFather
В телеграме есть специальный бот, который позволяет создавать других ботов и настраивать их. Некоторые действия вы, как пользователь, не можете сделать из интерфейса, например, сменить имя бота или задать набор команд, для этого нужен BotFather.
Теперь у вас есть представление, как реализовать бота, но что с ним можно сделать? Об этом я расскажу ниже.
И зачем всё это?
Боты очень способные, они обладают следующими возможностями:
- Встраиваемый мод (Inline mode). Вы можете встроить бота прямо в строку с вводом, хорошие примеры таких ботов это GifBot и YouTubeBot. Вы вписываете имя бота, например, @youtube и он предлагает вам результаты поиска видео или вы можете авторизоваться и результаты будут специфичны для вас.
- Клавиатуры. Есть два вида клавиатур: “Клавиатура для быстрого ответа” и “Встроенная клавиатура”. Первый вариант позволяет пользователю не писать сообщение, а просто отправить его выбрав один из вариантов. Встроенная клавиатура размещается прямо под сообщением и ассоциирована именно с ним.
- Команды. Всё что вы пишете после “/” в телеграм называется командами, чтобы избежать коллизий, когда два бота в одном чате имеют одну и ту же команду используется следующий формат
/command@BotName
. - Бот может отправлять отформатированные с помощью html или markdown сообщения.
- Бот может запросить местоположение или номер телефона.
- Ботов можно добавлять в группы и, например, администрировать их.
Что в итоге?
Мы обзорно рассмотрели основы того как можно сделать ботов, для чего это и что они могут делать. Применение ботов ограничивается только вашей фантазией. Вы создаете бота и запускаете сопровождающий код, который обрабатывает сообщения. Ничего сложного. Увидимся в следующих статьях!
comments powered by Disqus