Одна из самых крутых фишек мессенджера Telegram — это боты. О них сегодня и пойдёт речь.
В мессенджере Telegram, есть особые аккаунты, операторами которых могут являться не люди, а специальным образом написанные программы, расположенные на сторонних ресурсах (не на серверах Telegram). Эти программы-операторы называются ботами. Боты могут получать адресованные им сообщения, а также генерировать и отправлять ответные сообщения. Всё это они делают через свой аккаунт, используя специальный API.
API для создания ботов является открытым (вот ссылка), соответственно, любой желающий может создать для бота аккаунт в Telegram и прикрутить к нему свою программу-оператора.
Взаимодействие Telegram и внешней программы-оператора (то есть бота) осуществляется через http-запросы с помощью набора предоставляемых API методов.
Когда бот отправляет запросы — он авторизуется в Telegram с помощью специального уникального ключа, называемого токеном. Такая авторизация позволяет Телеграму быть уверенным, что данный конкретный запрос поступил именно от нашего бота.
Токен мы получаем при регистрации в Telegram нового бота и его нужно беречь от посторонних глаз. Любой, кто завладеет токеном сможет посылать запросы от имени нашего бота и получать предназначенные боту данные. Если токен был скомпроментирован — его можно перевыпустить (сгенерировать заново), при этом старый токен будет считаться утратившим силу и перестанет открывать доступ к аккаунту бота. Подробнее о получении токена и его перевыпуске можно прочитать во второй части этой статьи.
Получение данных от Telegram возможно двумя способами:
- webhook
- long polling
При работе через вебхуки обо всех изменениях в чатах, каналах и группах, в которых участвует наш бот, ему сразу же сообщает Telegram, отправляя в http-запросах структуры данных, называемые апдейтами (Updates). Полная структура апдейтов (объекты, поля, типы данных и всё остальное) есть на страничке с описанием API для создания ботов (ссылка выше). Добавлю только, что все данные прилетают из Telegram в виде json-объектов, так что их очень удобно распарпарсивать, например, средствами того же php.
Webhook — удобная и быстрая штука, но его использование требует от нас некоторых дополнительных телодвижений:
- Во-первых, мы должны рассказать Телеграму где расположена программа-оператор. Чтобы Телеграм мог найти нашего бота, используя систему DNS, нам нужно иметь место на хостинге и зарегистрированный интернет-домен. Проще говоря, чтобы сказать где нас искать — нужно получить в сети какую-то постоянную прописку. Далее мы просто заливаем к себе на сайт программу-оператор и сообщаем мессенджеру о том, где она расположена. Это называется «установить webhook».
- Во-вторых, Telegram согласен отправлять нам запросы исключительно по защищённому протоколу https. То есть нам нужна поддержка хостингом этого протокола и SSL-сертификат. Благо, сейчас почти все хостинги бесплатно выдают сертификат SSL начального уровня (это как раз без разницы) и поддерживают https (по-крайней мере мой хостер — поддерживает и выдаёт).
Подробно о том, как устанавливать и использовать вебхуки, написано в третьей части этой статьи.
В случае с методом longpolling бот должен сам периодически запрашивать апдейты у Telegram, используя метод getUpdates. Опрос должен происходить не реже 1 раза в сутки, поскольку дольше Telegram не согласен хранить апдейты. Кроме того, воспользоваться методом getUpdates можно только в том случае, если для бота не установлен webhook.
В случае с longpolling мы должны выбрать компромисс между оперативностью получения данных и ресурсами, затрачиваемыми на опрос серверов Telegram.
Если опрашивать слишком редко — будет слишком большой лаг между моментом, когда кто-то посылает боту данные, и моментом, когда бот эти данные получает. В результате бот будет очень заторможенно реагировать на посылаемые ему сообщения.
Слишком частый опрос может вызвать слишком большую нагрузку на ваш сервер (как в плане трафика, так и в плане ресурсов), поскольку в этом случае приходится гонять по сети и обрабатывать очень много бесполезной информации (формировать и посылать на сервера Telegram запросы, ответами на которые будут сообщения, что нам ничего не прислали).
Единственный, зато зачастую решающий, плюс метода longpolling заключается в том, что нам не нужно иметь в сети никакой постоянной прописки, поскольку мы не просим ничего никуда присылать и нам не нужно оставлять никакого обратного адреса. То есть в этом случае робота можно запустить где угодно, хоть на своём домашнем компьютере.
Метод longpolling подробно разобран в пятой части этой статьи.
Всё, с обзорной вводной частью на этом закончим, а далее будем по порядку и более детально разбираться с регистрацией аккаунта бота и обоими методами взаимодействия бота с мессенджером Telegram.
- Часть 1. Что такое Telegram боты и как они работают
- Часть 2. Регистрация аккаунтов Telegram ботов в картинках
- Часть 3. Пишем простого чат-бота для Telegram на чистом php (webhook)
- Часть 4. Прикручиваем MySQL к чат-боту для Telegram на php (webhook)
- Часть 5. Пишем Telegram бота на php для работы через longpolling
- Часть 6. Делаем пользовательскую клавиатуру для бота
- Дополнение. Как отправлять правильные https-запросы через curl и при чём здесь SSL-cертификаты