Як швидко створити serverless Telegram-бота: покроковий гайд
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті
Привіт, я Олексій Павленко, Engineering Manager в компанії iDeals. Хочу поділитися важливою за поточної ситуації інструкцією. Створення Telegram-ботів для розсилки або інформування стає дедалі більш популярним напрямом. Пропоную розглянути, як швидко створити свого бота і зробити його доступним для всіх. Стек — NodeJs + AWS + Telegraf.
По-перше, бот буде написанний за допомогою serverless-фреймворка. Для інтеграції з AWS нам необхідні ключі. Якщо ви не маєте юзера, заходимо на AWS IAM:
1. Додати юзера
2. Додати ім’я і вибираємо тільки «Access key» у «AWS access type»
3. Вибрати «Attach existing policies directly» з «AdministratorAccess»
Наступні кроки — тиснемо «далі».
І на виході ми отримуємо юзера, а також «Access key» і «Secret key». Вони допоможуть сконфігурувати локальну машину для інтеграції. Важливо: збережіть ці дані, адже повторно «Secret key» показаний не буде.
Добре, тепер ми закінчили підготовчу роботу щодо інтеграції з AWS. Переходимо до створення API ключа для Telegram. Такий ключ необхідно отримати у так званого Telegram бота — BotFather. Вбиваємо у пошуку BotFather, запускаємо і слідуємо інструкціям. Детальніше про можливості ботів і їхнє створення можна прочитати тут.
В кінці отримаємо token, який буде необхідний для інтеграції та деплою.
Перед тим як перейти до безпосереднього написання бота, встановимо залежності та інтеграції з AWS на стороні локальної машини.
Встановлюємо пакет serverless та записуємо ключі.
npm install -g serverless
serverless config credentials —provider provider —key key —secret secret
Створюємо проект з NodeJS та встановлюєм Telegraf — бот API фреймворк для NodeJS.
serverless create —template aws-nodejs
Це створить дуже простий шаблон для майбутніх функцій Node.js . Основне в цьому шаблоні — це файли: handler.js та serverless.yml. handler.js — наш код, а serverless.yml — файл конфігурації сервера, в якому можна оголосити тригер сервера та інші параметри.
npm i telegraf —save
Замінюємо контент файла serverless.yml
service: new-bot provider: name: aws runtime: nodejs12.x region: us-east-1 functions: start: handler: handler.start events: - http: path: webhook method: post cors: true
І код самого бота. Файл handler.js
const { Telegraf } = require('telegraf') // Telegram API token який ми отримали const token = "51xx2xxxAESFGXa_m1sfjjxxx2-bL7xxefwGPY" // створення бота const bot = new Telegraf(token); // початок діалогу з ботом bot.start((ctx) => ctx.reply("Российский военный корабль иди на х*й") ); // запуск бота module.exports = { bot, }; // вебхук це і є той самий вебхук, який буде відповідати за роботу нашого бота module.exports.start = async (event) => { try { let body = event.body[0] === "{" ? JSON.parse(event.body) : JSON.parse(Buffer.from(event.body, "base64")); await bot.handleUpdate(body); return { statusCode: 200, body: "" }; } catch (err) { // error handler } }; // прив'язка вебхуку до робота module.exports.setWebhook = async (event) => { try { //отримання url методу, коли він буде опублікований const url = `https://${event.headers.Host}/${event.requestContext.stage}/webhook`; // виклика методf API телеграм-бота await bot.telegram.setWebhook(url); return { statusCode: 200, headers: {"Access-Control-Allow-Origin": "*"}, body: JSON.stringify({ url }), }; } catch (err) { } };
Наступний крок — це деплой бота.
serverless deploy
Якщо все пройде успішно, приходит наступний респонс, де важливим є POST URL, який знадобиться на останньому кроці.
Для того, щоб вебхук вступив в дію, виконайте наступну команду.
curl --request POST --url https://api.telegram.org/bot<Telegram API token>/setWebhook?url=https://<отриманний POST URL>/dev/webhook --header 'content-type: application/json'
Вийде щось схоже:
curl --request POST --url https://api.telegram.org/bot123345678:KDFSFGXa_m1sfjgfdf_tttt-bL7vsB5TCefwGPY/setWebhook?url=https://asdfg12345.execute-api.us-east-1.amazonaws.com/dev/webhook --header 'content-type: application/json'
Теперь базовий бот готовий. Наповнюйте функціональністю і користуйся з розумом 🇺🇦
10 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів