Як швидко створити 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'

Теперь базовий бот готовий. Наповнюйте функціональністю і користуйся з розумом 🇺🇦

👍ПодобаєтьсяСподобалось11
До обраногоВ обраному10
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

запустив по інструкції, видає: {
“ok”: false,
“error_code”: 401,
“description”: “Unauthorized”
}

Коментар порушує правила спільноти і видалений модераторами.

а можна інструкцію по створенню спам бота по ніку користувача, проти рашистів?

Для начала надо прочитать документацию по АПИ чтобы не задавать таких глупых вопросов.

Якщо є потреба в боті, значно простіше використати sendpulse.ua/...​features/chatbot/telegram, чи щось схоже на нього.

Это асинхронный бот?

Для того, щоб вебхук вступив в дію, виконайте наступну команду.

так, вебхук = асинхронний
телеграм буде надсилати повідомлення, коли щось надійде до нього.

Супер. Можно ли использовать ваш труд для образовательных целей? На каких условиях?

Я не автор, але я впевнений, що автор для цього і виклав, щоб цим користувалися.

Звичайно, використовуйте. Було б цікаво дізнатися більше інформації. Якщо щось необхідно, пишіть

Підписатись на коментарі