Как создать Telegram-бота на облачных функциях
Инструкция о том, как настроить Telegram-бота на Облачных функциях, используя официальный API
Введение
С помощью ботов можно упростить себе задачу коммуникации с пользователями, создав для них умного помощника. Боты понимают текстовые команды и могут обращаться к API вашего вебсайта, сервиса или быть самостоятельным продуктом с уникальными услугами. Обычно, для создания бота требуется сервер, но в этой статье мы разберем подход, позволяющий обойтись без него. Он идеален при резких колебаниях количества запросов и прекрасно выдерживает пиковые нагрузки.
Настроить Telegram-бота на Облачных функциях, используя официальный API и заготовленный нами пример, можно в 3 этапа:
- Запрограммировать логику работы Telegram-бота.
- Зарегистрировать нового бота в Telegram.
- Связать бота и его логику воедино.
Запрограммировать логику работы Telegram-бота
Чтобы упростить задачу, мы написали пример такого бота. Его исходный код доступен по ссылке github.com/selectel/cloud-telegram-bot. Он понимает команды:
/start
с приветственным сообщением;
/sticker
с ответом в виде стикера;
/getwebhook
чтобы вы могли получить информацию о настройках вашего бота;
/setwebhook
для настройки вашего бота, но об этом позже.
Пройдите следующие шаги с нашим примером бота, чтобы освоиться:
- Скачайте исходный код как архив («Clone or download» → «Download ZIP») и распакуйте его.
- Внутри должно быть:
- «setup.py» с минимальным кодом, чтобы Python-окружение приняло содержимое папки за модуль для установки;
- «requirements.txt» с описанием зависимостей;
- «bot» — папка с исходным кодом нашего бота.
- Выделите все эти файлы и папки, а затем создайте из них новый ZIP-архив, тогда исходный код внутри архива не будет иметь лишних папок (как в случае с архивом, скачанным с github).
- Перейдите в панели управления в раздел Облачная Платформа → Функции и нажмите кнопку Создать функцию.
- Выберите среду выполнения и задайте имя, например
Bot
. - В поле Загрузить выберите Архив.
- Загрузите ZIP-файл в качестве Кода функции.
- Укажите Путь к файлу как
/bot/tele_bot.py
. - Укажите Вызываемую функцию как
main
. - Получите токен по инструкции и в поле Переменные окружения добавьте его ключ и значение.
- Нажмите кнопку Сохранить и развернуть.
- Чтобы получить ссылку для вызова функции, перейдите на вкладку Триггеры и нажмите на тумблер HTTP-запрос.
Теперь у нас есть API, реализующее логику ответов бота. Следующим этапом мы зарегистрируем его в Telegram.
Зарегистрировать нового бота в Telegram
Чтобы Telegram знал о существовании нашего бота, его нужно зарегистрировать. Для этого существует только один способ:
- Найдите бота @BotFather в Телеграм. Это официальный бот, созданный специально для управления ботами.
- Отправьте ему команду:
/newbot
- @BotFather спросит вас, как вы назовёте вашего бота. Следующим сообщением отправьте его название, заканчивающееся на «_bot».
- Запишите полученный токен от @BotFather — это ключ для работы с Telegram API.
Теперь у нас API, регистрация бота в Telegram и его токен. Осталось связать это вместе.
Связать бота и его логику воедино
На этом этапе надо сделать так, чтобы бот знал токен пользователя, а Telegram знал, где его API:
- Найдите переменную окружения «TOKEN» в настройках функции. Мы оставили её пустой на первом этапе.
- Укажите в этой переменной токен вашего бота, который получили от @BotFather.
- Нажмите Сохранить и развернуть.
Далее нужно направить сообщения, которые пользователи отправляют в Telegram, нашему боту — в то API, которое для него создали.
Через бота @SelectelServerless_bot
- Найдите бота @SelectelServerless_bot в Телеграме.
- Введите команду:
/setwebhook <Токен от вашего бота> <URL от облачной функции>
- Бот ответит тем, что получит из Telegram API. Если все хорошо, это будет «true».
- Чтобы удостовериться в том, что все корректно, отправьте команду:
/getwebhook <Токен от вашего бота>
- В ответ должна прийти информация о webhook, в том числе указанный вами URL.
Заключение
Готов для работы бот, доступный в Telegram, отвечающий на команды и способный автоматически масштабироваться под нагрузкой и без сервера.