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

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

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

Запрограммировать логику работы Телеграм-бота

Чтобы упростить задачу, мы написали пример такого бота. Его исходный код доступен по ссылке github.com/selectel/cloud-telegram-bot. Он понимает команды:

  • /start с приветственным сообщением;
  • /sticker с ответом в виде стикера;
  • /getwebhook чтобы вы могли получить информацию о настройках вашего бота;
  • /setwebhook для настройки вашего бота, но об этом позже.

Пройдите следующие шаги с нашим примером бота, чтобы освоиться:

  1. Скачайте исходный код как архив («Clone or download» → «Download ZIP») и распакуйте его.
  2. Внутри должно быть:
    • «setup.py» с минимальным кодом, чтобы Python-окружение приняло содержимое папки за модуль для установки;
    • «requirements.txt» с описанием зависимостей;
    • «bot» — папка с исходным кодом нашего бота.
  3. Выделите все эти файлы и папки, а затем создайте из них новый ZIP-архив, тогда исходный код внутри архива не будет иметь лишних папок (как в случае с архивом, скачанным с github).
  4. Перейдите в Облачная ПлатформаФункцииСоздать функцию, подробнее.
  5. Задайте имя, например, «Bot».
  6. Загрузите ZIP-файл в качестве Исполняемого кода.
  7. Укажите Путь к файлу в архиве как «/bot/tele_bot.py».
  8. Укажите Вызываемую функцию в коде как «main».
  9. Добавьте переменную окружения «TOKEN», но пока не задавайте для неё значения, мы коснёмся этого на следующем этапе.
  10. Нажмите кнопку Сохранить и развернуть.
  11. Поставьте галочку, что нужна Публичная ссылка.

Теперь у нас есть API, реализующее логику ответов бота. Следующим этапом мы зарегистрируем его в Telegram.

Зарегистрировать нового бота в Telegram

Чтобы Telegram знал о существовании нашего бота, его нужно зарегистрировать. Для этого существует только один способ:

  1. Найдите бота @BotFather в Телеграм. Это официальный бот, созданный специально для управления ботами.
  2. Отправьте ему команду:

    /newbot
  3. @BotFather спросит вас, как вы назовёте вашего бота. Следующим сообщением отправьте его название, заканчивающееся на «_bot».

  4. Запишите полученный токен от @BotFather — это ключ для работы с Telegram API.

Теперь у нас API, регистрация бота в Telegram и его токен. Осталось связать это вместе.

Как связать бота и его логику воедино?

На этом этапе надо сделать так, чтобы бот знал токен пользователя, а Telegram знал, где его API:

  1. Найдите переменную окружения «TOKEN» в настройках функции. Мы оставили её пустой на первом этапе.
  2. Укажите в этой переменной токен вашего бота, который получили от @BotFather.
  3. Нажмите Сохранить и развернуть.

Далее нужно направить сообщения, которые пользователи отправляют в Telegram, нашему боту — в то API, которое для него создали.

Способ 1. Через бота @SelectelServerless_bot

  1. Найдите бота @SelectelServerless_bot в Телеграме.
  2. Введите команду:

    /setwebhook <Токен от вашего бота> <URL от облачной функции>
  3. Бот ответит тем, что получит из Telegram API. Если всё хорошо, это будет «true».

  4. Чтобы удостовериться в том, что всё корректно, отправьте команду:

    /getwebhook <Токен от вашего бота>
  5. В ответ должна прийти информация о webhook, в том числе указанный вами URL.

Способ 2. Из заготовленной формы

Откройте форму (или скопируйте её к себе в Облачное хранилище). Вставьте токен от вашего бота в первое поле, URL облачной функции во второе и нажмите на кнопку «Set Webhook». Произойдёт обращение к api.telegram.org, и вы увидите результат.

Примечание: может понадобиться наличие VPN.

Итог

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