Начало работы
Чтобы начать, отправьте сообщение @BotFather в Telegram, чтобы зарегистрировать своего бота и получить его токен аутентификации.
Токен вашего бота — это его уникальный идентификатор. Храните его в безопасном месте и делитесь им только с теми, кому нужен прямой доступ к боту.
Создать нового бота можно при помощи команды
/newbot
Документация Telegram Bot API - https://core.telegram.org/bots/api
Все запросы к API Telegram Bot производятся на адрес следующего формата:
https://api.telegram.org/bot<ТОКЕН>/<МЕТОД>
Ответ содержит объект JSON, который всегда имеет логическое поле «ok» и может иметь необязательное строковое поле «description» с описанием результата.
Telegram поддерживает HTTP-методы GET и POST.
Тип содержимого может быть как x-www-form-urlencoded так и application/json.
Ограничения API
- В одном чате не отправляйте более одного сообщения в секунду. Telegram может разрешить кратковременные превышения этого лимита, но в конечном итоге вы начнете получать ошибки 429.
- В группе боты не могут отправлять более 20 сообщений в минуту.
- Что касается массовых уведомлений, боты не могут отправлять более 30 сообщений в секунду, если не включено платное увеличение лимита.
Настройка вебхука
Webhook позволяет боту работать без постоянного опроса сервера, отправляя данные на ваш сервер только тогда, когда пользователи взаимодействуют с ботом.
Установите ваш ендпоинт сценария как Webhook с помощью метода Telegram API
setWebhook
.Где взять URL эндпоинта сценария?
После установки вебхука можно отправлять боту команды и обрабатывать их сценарием.
Отправка сообщений в чат бота
Для отправки сообщений HTTP запросом в Телеграм используется метод
sendMessage
.Обязательные параметры метода
sendMessage
:Параметр | Тип | Описание |
chat_id | Число или строка | Уникальный идентификатор чата или имя пользователя канала (в формате @channelusername) |
text | Строка | Текст отправляемого сообщения. 1-4096 символов |
Сценарии и обработка команд
Чтобы избежать превышения ограничений API Телеграма и снизить нагрузку на сценарий рекомендуется разделить логику обработки команд бота от HTTP запросов к его API.
Пример сценария для первичной обработки запросов из Телеграма - именно этот сценарий указан в боте как Webhook и отвечает за обработку команд пользователя. Ответы на команды пользователя записываются в специальную таблицу очереди сообщений. В конце сценария вызывается сценарий обработки очереди сообщений.
Работа сценария обработчика сообщений может занимать время из-за перебоев в сети, долгих ответов сервера и обработки большого количества сообщений. Чтобы исключить вероятность запуска одного и того же обработчика по несколько раз, можно создать специальную таблицу статуса обработчика с одним логическим значением, которое будет меняться на 1 если обработчик включен и 0 если он закончил работу - это поможет принимать решение касательно запуска сценария.
Пример таблицы статуса обработчика сообщений
Пример таблицы очереди сообщений
Сценарий обработки очереди сообщений - отвечает за HTTP запросы к API Телеграма и отправку сообщений из очереди методом
sendMessage
.Создание меню команд
Чтобы создать набор вариантов команд в чате бота, можно использовать меню команд бота (бот автоматически подскажет пользователю доступные команды) или клавиатуру с кнопками команд.
Меню команд
Меню команд позволяет ботам показывать список доступных команд пользователю.
Если пользователь введет
/
в чате с ботом, ему автоматически предложат установленные команды в выпадающем меню.Для установки меню команд можно использовать метод
set_my_commands
Клавиатура с кнопками команд
Есть возможность использовать ReplyKeyboardMarkup для создания кнопок команд прямо в чате, которые будут отображаться под строкой ввода сообщения. Это особенно удобно, если вы хотите, чтобы пользователь выбирал из предложенных вариантов, не вводя команды вручную.
При отправке команды
/start
пользователю предложат эти кнопки под строкой ввода текста.Inline-кнопки с callback_data
Этот подход позволяет задать кнопке данные, которые отправляются боту при нажатии на неё, не посылая текст в чат.
Цепочка вопросов-ответов (квиз)
Для создания цепочки сообщений или квиза в Telegram-боте требуется разработать логику отслеживания состояния диалога с пользователем и отправки соответствующих сообщений в зависимости от его ответов.
Такую функциональность можно реализовать с помощью вспомогательной таблицы для учета сессий. При первом обращении пользователя создается новая сессия, в которую сохраняются ID пользователя, ID чата и текущий этап диалога (или номер вопроса в квизе). При последующих обращениях или ответах этого же пользователя бот использует данные из таблицы, чтобы отвечать в соответствии с текущим этапом диалога.