Пишем телеграм бота на Go и AWS Lambda

0
290
Пишем телеграм бота на Go и AWS Lambda
Пишем телеграм бота на Go и AWS Lambda

Что будем делать?

Будем писать простой телеграм бот, отвечающий тем же сообщением, что и отправили.

Пишем телеграм бота на Go и AWS Lambda
Пишем телеграм бота на Go и AWS Lambda

Почему AWS Lambda ?

  1. Удобство деплоя, просто пишешь sls deploy, и lambda уже выгружена
  2. Платишь только за время, когда lambda работает
  3. Не надо настраивать никаких серверов, и беспокоиться о масштабировании

Что понадобится?

  • Установленный go
  • Nodejs и npm для установки serverless
  • AWS аккаунт для деплоя

TLDR

  • Клонируем репозиторий https://github.com/R11baka/echotgbot
  • Устанавливаем в .env файле BOT_TOKEN переменную
  • Компилируем бинарник env GOOS=linux go build -o bin/webhook main.go
  • Выгружаем лямбду с помощью sls deploy
  • Устанавливаем webhook с помощью BOT_TOKEN

Регистрация в AWS

  • Регистирируем пользователя в AWS aws console и получаем aws_access_key_id, и aws_secret_access_key и прописываем их в .aws/credentials файле

Вот как выглядит мой .aws/credentials

Регистрация бота

Для начала, нам надо зарегистировать бота в BotFather. Идем по ссылке, отправляем команду BotFather /newbot, придумываем имя боту, описание. В конце, BotFather вернет нам токен бота.Этот токен понадобится,нам для дальнейшей разработки.

Установка Serverless

Serverless-это framework, облегчающий настройку, деплой AWS Lambda функций. Написан на node, поэтому для его установки понадобится nodejs и npm. Устанавливаем serverless через npm

npm install -g serverless

После установки serverless проверяем, все ли установилось

Теперь можно приступить к конфигурации serverless. Все настройки для serverless лежат в serverless.yml файле,который мы и создадим со следующим контентом

Имлементация логики бота на Go

  1. Устанавливаем библиотеки telebot.v2 и aws-lambda-go

2. Создаем файл main.go с контентом

Текущая документация в tucnak/telebot.v2 немного устарела, и если просто написать return вместо return events.APIGatewayProxyResponse{Body: "ok", StatusCode: 200}, nil, то телеграм будет повторно отправлять сообщения к боту.

Deploy бота

  • Создаем файл .env и вставляем API_TOKEN полученный от BotFather
Проверяем serverlss конфиг с помощью команды. Не должно быть никаких ошибок.
Потом собираем бинарник
И выгружаем его с помощью serverless
При успешной выгрузке, мы получим в конце
https://y7p31bwnu1.execute-api.us-west-1.amazonaws.com/dev/webhook => этот эндпоинт и token бота нужен нам, чтобы установить webhook

Интеграция с telegram

Осталось сообщить телеграму, какой эндпоинт дергать при получении сообщения. Делается это командой setWebhook

Проверка что webhook установлен, происходит с помощью getWebhookInfo

Ошибки

Если что-то пошло не так,идем в CloudWatch и смотрим логи,или же из консоли также можно посмотреть логи

 

Возможно вам будет интересно:

— Телеграм боты — что необходимо знать программисту

— Шпаргалка по Jest с примерами кода.

— Шпаргалка по Redux с примерами кода (stylesheet).

источник