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

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

Джун уронил прод

Время чтения: 10 минут

Уровень читателя: 💾💾💾 из 10

Хеллоу, ворлд!

Если вы читаете этот пост, значит, скорее всего, у вас есть Telegram аккаунт и сегодня это важно, а еще это значит, что на канале Джун уронил прод пришло время для нового поста. Сегодня мы побеседуем о том как делаются Telegram боты.

Кто ты по жизни?

Telegram боты бывают двух видов:

  • Боты основанные на Webhoock
  • Боты основанные на Https Get

Первый вариант бота требует от вас поднять сервер и установить "вебхуки" для асинхронного оповещения вас о новых изменениях. На вашем сервере должен быть соответствующий роутинг.

Второй вариант бота - это имитация асинхронности. Ваш бот с определенным периодом будет запрашивать последние изменения с сервера телеграм на основании механизма long pool. Т.е. бот делает запрос и подвисает, а отвисает либо по таймауту, либо по получению новыйх обновлений. Об этом виде ботов сегодня и пойдет речь.

Long pooling в разрезе работы с сетью

Когда вы работаете с Telegram Api вы нагружаете сервера Telegram. Все запросы вы отправляете по одному URL, но в один момент времени может работать только один обработчик для 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 сообщения.
  • Бот может запросить местоположение или номер телефона.
  • Ботов можно добавлять в группы

Что в итоге?

Мы рассмотрели основы того как можно сделать ботов, для чего это и что они могут делать. Применение ботов ограничивается только вашей фантазией.

С вами был канал Джун уронил прод, если статья была вам полезна и интересна, то присоединяйтесь к нам. Каждый день вы найдете что-то новое и интересное из области программирования и IT.

Report Page