Хостинг: Cloudflare Workers (Deno)
Cloudflare Workers — это публичная платформа для бессерверных вычислений, которая предлагает удобное и простое решение для выполнения небольших рабочих нагрузок на edge.
Это руководство проведет вас через процесс размещения вашего бота на Cloudflare Workers.
Ищете версию для Node.js? В этом руководстве объясняется, как развернуть
бота Telegram на Cloudflare Workers с помощью Deno. Если вы ищете версию для Node.js, пожалуйста, ознакомьтесь с этим руководством.
Необходимые условия
Чтобы следовать дальше, убедитесь, что у вас есть учетная запись Cloudflare с рабочим, настроенным поддоменом.
Настройка
Убедитесь, что у вас установлены Deno и Denoflare.
Создайте новый каталог и создайте новый файл .denoflare
в этом каталоге. Поместите в этот файл следующее содержимое:
Примечание: Ключ «$schema» в следующем JSON-коде указывает на фиксированную версию в своем URL («v0.5.12»). На момент написания статьи это была последняя доступная версия. Вам следует обновить их до самой новой версии.
{
"$schema": "https://raw.githubusercontent.com/skymethod/denoflare/v0.5.12/common/config.schema.json",
"scripts": {
"my-bot": {
"path": "bot.ts",
"localPort": 3030,
"bindings": {
"BOT_TOKEN": {
"value": "ВАШ_ТОКЕН_БОТА"
}
},
"workersDev": true
}
},
"profiles": {
"account1": {
"accountId": "ВАШ_АККАУНТ_ID",
"apiToken": "ВАШ_API_ТОКЕН"
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Обязательно замените ВАШ
, ВАШ
и ВАШ
соответствующим образом. При создании API-токена вы можете выбрать предустановку Edit Cloudflare Workers
из предварительно настроенных разрешений.
Создание бота
Создайте новый файл с именем bot
и поместите в него следующее содержимое:
import { Bot, webhookCallback } from "https://deno.land/x/grammy@v1.30.0/mod.ts";
import { UserFromGetMe } from "https://deno.land/x/grammy@v1.30.0/types.ts";
interface Environment {
BOT_TOKEN: string;
}
let botInfo: UserFromGetMe | undefined = undefined;
export default {
async fetch(request: Request, env: Environment) {
try {
const bot = new Bot(env.BOT_TOKEN, { botInfo });
if (botInfo === undefined) {
await bot.init();
botInfo = bot.botInfo;
}
bot.command(
"start",
(ctx) => ctx.reply("Добро пожаловать! Запущен и работаю."),
);
bot.on("message", (ctx) => ctx.reply("Получил сообщение!"));
const cb = webhookCallback(bot, "cloudflare-mod");
return await cb(request);
} catch (e) {
return new Response(e.message);
}
},
};
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Развертывание вашего бота
Это так же просто, как бегать:
denoflare push my-bot
В результате выполнения этой команды вы получите информацию о хосте, на котором запущен worker. Обратите внимание на строку, содержащую что-то вроде <мой
. Это хост, на котором ваш бот ожидает вызова.
Настройка вебхука
Нам нужно указать Telegram, куда отправлять обновления. Откройте браузер и перейдите по этому URL-адресу:
https://api.telegram.org/bot<токен>/setWebhook?url=https://<мой_бот>.<мой_поддомен>.workers.dev/
Замените <токен>
, <мой
и <мой
своими значениями. Если настройка прошла успешно, вы увидите JSON-ответ следующего вида:
{
"ok": true,
"result": true,
"description": "Webhook was set"
}
2
3
4
5
Тестирование вашего бота
Откройте приложение Telegram и запустите своего бота. Если он ответит, значит, все готово!
Отладка вашего бота
Для тестирования и отладки вы можете запустить локальный или удаленный сервер разработки перед развертыванием бота в производстве. Просто выполните следующую команду:
denoflare serve my-bot
После запуска сервера разработки вы можете протестировать своего бота, отправив ему примеры обновлений с помощью таких инструментов, как curl
, Insomnia или Postman. Примеры обновлений см. на здесь, а более подробную информацию о структуре обновлений здесь.