Telegram API. Как написать бота?

Как сделать своего телеграм бота

Автор: Ivan Osipov
Дата публикации: 2017-07-23
В категориях: Development, Telegram
Тэги: development, telegram, bot

Всем привет!

Сегодня мы побеседуем о том как делаются 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