Базовая информация о ТГ ботах #
Телеграм-бот - виртуальный пользователь Телеграм, действиями которого можно управлять из программы, в данном случае - с Ардуины/ЕСПшки. Работает это довольно просто: программа отправляет запрос на сервер Телеграм, сервер отвечает результатом. Программа может как запросить непрочитанные сообщения, так и отправить сообщение от лица бота.
Регистрация бота #
- Написать Бате https://t.me/BotFather
- Открыть меню, выбрать команду
/newbot
- Отправить имя бота (потом его можно будет изменить)
- Отправить никнейм бота: уникальное имя, оканчивающееся на
bot
. Изменить его будет нельзя - Готово! Батя выдаст вам токен бота - уникальный код, по которому и ведётся работа с ботом
Настройка бота #
- Перейти в чат с BotFather, выбрать бота для редактирования
Webhook
режим должен быть отключен (отключен по умолчанию, если не трогали - не трогайте), иначе esp не сможет принимать сообщения- Для того, чтобы бот читал все сообщения в группе (а не только /команды), нужно отключить параметр Group Privacy в настройках бота Bot Settings. Данный параметр включен по умолчанию
- Для полноценной работы в группе (супергруппе) бота нужно сделать администратором в этой группе
Лимиты Telegram #
Телеграм устанавливает следующие лимиты на взаимодействие с ботом:
Отправка #
- В личный чат: не чаще раза в секунду. Отправлять чаще можно, но сообщение может не дойти
- В группу: не чаще 20 сообщений в минуту
- Суммарный лимит: не чаще 30 сообщений в секунду
- Бот не может писать в личку другому боту
Чтение #
- Бот может читать и взаимодействовать с сообщениями (изменять, удалять), с момента отправки которых прошло не больше 24 часов
- Бот не видит сообщения от других ботов в группе
- Телеграм разделяет текст на несколько сообщений, если длина текста превышает ~4000 символов. Эти сообщения будут иметь разный messageID в чате
- Нельзя опрашивать обновления одновременно с нескольких устройств: один бот - одна Ардуина/ЕСПшка. Отправлять команды с нескольких устройств - можно
Сообщения от себя #
Бот не видит, т.е. не получает апдейты на свои сообщения. Это ограничение можно обойти:
- Создать частный канал, добавить туда бота, сделать админом
- Создать частную группу, добавить туда бота, сделать админом
- В настройках канала привязать группу к каналу как "обсуждение"
Теперь если бот напишет пост в канал - ему придёт апдейт с этим постом из группы (считается сообщением, которое переслал "юзер" Telegram). Таким образом можно передать боту информацию с одного сервера на другой через Телеграм (только в одну сторону). Можно настроить автоудаление постов, чтобы не забивать канал.
Сообщения от других ботов #
Бот не видит, т.е. не получает апдейты на сообщения других ботов. Это ограничение можно обойти:
- Создать частный канал, добавить туда ботов, сделать админами
- Отправить пост через бота
- Все остальные боты получат апдейт с постом
Таким образом можно передавать данные между ботами через Телеграм. Можно настроить автоудаление постов, чтобы не забивать канал.