Как создать Telegram-бота на облачных функциях - Академия Selectel

Как создать Telegram-бота на облачных функциях

Инструкция о том, как настроить Telegram-бота на Облачных функциях, используя официальный API

Введение

С помощью ботов можно упростить себе задачу коммуникации с пользователями, создав для них умного помощника. Боты понимают текстовые команды и могут обращаться к API вашего вебсайта, сервиса или быть самостоятельным продуктом с уникальными услугами. Обычно, для создания бота требуется сервер, но в этой статье мы разберем подход, позволяющий обойтись без него. Он идеален при резких колебаниях количества запросов и прекрасно выдерживает пиковые нагрузки.
Настроить Telegram-бота на Облачных функциях, используя официальный API и заготовленный нами пример, можно в 3 этапа:

  1. Запрограммировать логику работы Telegram-бота.
  2. Зарегистрировать нового бота в Telegram.
  3. Связать бота и его логику воедино.

Запрограммировать логику работы 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 

/setwebhook <Токен от вашего бота> <URL от облачной функции>
  • Бот ответит тем, что получит из Telegram API. Если все хорошо, это будет «true».
  • Чтобы удостовериться в том, что все корректно, отправьте команду:
/getwebhook <Токен от вашего бота>
  • В ответ должна прийти информация о webhook, в том числе указанный вами URL.

Заключение

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