Создайте и разверните своего Telegram-бота ЗДЕСЬ совершенно бесплатно!

В этом руководстве я покажу вам, как вы можете развернуть своего бота Telegram и поддерживать его работу 24/7 совершенно бесплатно.

Для разработки бота Telegram обычно используются два метода: опрос и веб-крючки. Во многих руководствах используется опрос с помощью сервера NodeJS или Python, который прослушивает все сообщения, полученные ботом. Это означает, что для его развертывания нам понадобится сервер, работающий 24 часа в сутки 7 дней в неделю и постоянно опрашивающий обновления. Существует не так много бесплатных вариантов для поддержания сервера в рабочем состоянии (наиболее распространенным является Heroku, но как только сервер засыпает, нет хорошего способа снова поднять его, чтобы он продолжал отвечать на сообщения).

Сегодня мы рассмотрим возможности веб-крючков. Установка webhook для вашего бота Telegram означает, что всякий раз, когда ваш бот получает новое сообщение, Telegram будет отправлять это обновление на вашу предварительно заданную конечную точку webhook. С нашей пользовательской конечной точки мы можем делать все, что захотим, зная, что наш бот получил сообщение, и мы можем ответить на него.

Например, когда наш бот получает сообщение от пользователя, telegram отправляет POST-запрос с полезной нагрузкой, содержащей информацию об этом сообщении (пользователь, текст сообщения, время и т.д.), на нашу предварительно определенную конечную точку. Наша конечная точка получит этот POST-запрос с полезной нагрузкой, и с ее помощью мы сможем ответить пользователю.

Но означает ли это, что нам также понадобится сервер для приема этих POST-запросов? Да, но нам не нужно, чтобы сервер работал 24 часа в сутки 7 дней в неделю. Вместо этого мы будем использовать бессерверные функции. Существует множество бесплатных вариантов бессерверных функций: Cloudflare Workers, Vercel Serverless functions и т.д.

В этом руководстве мы будем использовать Cloudflare Workers для создания конечной точки POST, которую мы настроим как веб-крючок для нашего бота Telegram.

Оглавление:

  1. Создание нового Cloudflare Worker
  2. Настройка веб-крючков для нашего бота Telegram

1. Создание нового Cloudflare Worker

  • Перейдите на сайт dash.cloudflare.com и войдите в систему (или зарегистрируйтесь).
  • На боковой панели нажмите на ‘Workers’.
  • Нажмите на «Создать службу», чтобы создать нового работника.
  • Введите имя для вашего нового рабочего и выберите ‘HTTP-обработчик’ в качестве стартера, затем нажмите ‘Создать службу’.

  • После создания службы нажмите на «Быстрое редактирование», чтобы отредактировать своего работника прямо в браузере.

  • Теперь в редакторе вы должны увидеть код по умолчанию для нового рабочего Cloudflare.
addEventListener("fetch", event => {
  event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
  return new Response("Hello world")
}
Войдите в полноэкранный режим Выход из полноэкранного режима

Логика того, как мы будем обрабатывать входящий запрос, будет выполняться в функции handleRequest.

На данном этапе полезно знать, что представляет собой полезная нагрузка, которую Telegram будет отправлять нам.

{
  "update_id": 1140,
  "message": {
    "message_id": 73,
    "from": {
      "id": "id of user",
      "is_bot": false,
      "first_name": "name of user",
      "username": "username of user",
      "language_code": "en"
    },
    "chat": {
      "id": id of chat,
      "first_name": "name of user",
      "username": "username of user",
      "type": "private"
    },
    "date": 1662102031,
    "text": "hi"
  }
}
Вход в полноэкранный режим Выйти из полноэкранного режима

Из полезной нагрузки мы можем узнать, кто является пользователем, какой чат отправляет пользователь (это важно для групповых чатов) и каков текст сообщения. Для начала давайте сделаем так, чтобы наш бот повторял сообщение пользователя, но добавлял «over» в конце сообщения.

async function handleRequest(request) {
  if (request.method === "POST") {
    const payload = await request.json() 
    // Getting the POST request JSON payload
    if ('message' in payload) { 
      // Checking if the payload comes from Telegram
      const chatId = payload.message.chat.id
      const text = payload.message.text + " over"
      const url = `https://api.telegram.org/bot${API_KEY}/sendMessage?chat_id=${chatId}&text=${text}`
      const data = await fetch(url).then(resp => resp.json()) 
      // Calling the API endpoint to send a telegram message
    }
  }
  return new Response("OK") // Doesn't really matter
}
Вход в полноэкранный режим Выход из полноэкранного режима

В этом фрагменте кода мы проверяем, является ли входящий запрос POST и содержит ли полезная нагрузка важную информацию из Telegram. Мы получаем идентификатор чата и текст из полезной нагрузки и генерируем уникальный URL-адрес, к которому мы вызовем GET, что позволит программно отправить сообщение через нашего бота. Одного еще не хватает — ${API_KEY}. Именно сюда будет подставляться API-токен бота, и мы можем задать это значение в настройках Cloudflare Workers.

  • Вернитесь к панели рабочего, нажав на «Save & Deploy», а затем выйдите из редактора.
  • На панели настроек нажмите на переменные. Здесь вы можете установить переменную окружения для рабочего.

  • Нажмите на ‘Add variable’ и введите имя переменной как API_KEY, а значение как API-токен бота и сохраните настройки.

2. Настройка вебхуков для нашего бота

Теперь, когда наша конечная точка готова, все, что осталось сделать, это установить webhook нашего бота на нашу пользовательскую конечную точку.

Имея API-токен нашего бота и URL нашего нового рабочего (который должен заканчиваться на workers.dev), подставьте значения в этот URL и просто скопируйте и вставьте его в браузер и введите

https://api.telegram.org/bot<replace with bot api token>/setWebhook?url=<replace with our worker url>
Войти в полноэкранный режим Выйти из полноэкранного режима

Если вы увидите это в ответ, значит, все готово!

{"ok":true,"result":true,"description":"Webhook was set"}
Войти в полноэкранный режим Выйти из полноэкранного режима

Разве это не просто?

Итак, теперь вы создали своего бота для Telegram, который может работать 24 часа в сутки 7 дней в неделю совершенно бесплатно! Вы можете настроить этот код так, чтобы ваш бот делал все, что захотите. В одном из следующих уроков я покажу вам, как использовать Cloudflare KV для создания простой базы данных для вашего бота, чтобы сохранить данные пользователей и расширить возможности вашего бота! Это тоже очень просто, так что лайкните этот урок, если хотите увидеть больше!

Оцените статью
devanswers.ru
Добавить комментарий