Хостинг: Supabase Edge Functions
В этом руководстве рассказывается о том, как разместить своих ботов grammY на Supabase.
Обратите внимание, что перед использованием Supabase Edge Functions вам необходимо иметь аккаунт на Git
Supabase Edge Functions идеально подходит для большинства простых ботов, при этом следует учитывать, что не все функции Deno доступны для приложений, работающих на Supabase Edge Functions. Например, на Supabase Edge Functions нет файловой системы. Она такая же, как и на многих других бессерверных платформах, но предназначена для приложений Deno.
Результат этого урока можно увидеть в нашем репозитории примеров ботов.
Установка
Чтобы развернуть Supabase Edge Function, вам нужно создать учетную запись Supabase, установить их CLI и создать проект Supabase. Сначала вам следует следовать их документации, чтобы все настроить.
Создайте новую функцию Supabase Function, выполнив следующую команду:
supabase functions new telegram-bot
Создав проект Supabase Function, вы можете написать своего бота.
Настройка
Помните, что вам нужно запускать бота на вебхуках, поэтому в коде следует использовать
webhook
, а не вызыватьCallback bot
..start()
Вы можете использовать этот короткий пример бота в качестве отправной точки.
import { Bot, webhookCallback } from "https://deno.land/x/grammy@v1.30.0/mod.ts";
const token = Deno.env.get("BOT_TOKEN");
if (!token) throw new Error("BOT_TOKEN не установлен");
const bot = new Bot(token);
bot.command(
"start",
(ctx) => ctx.reply("Добро пожаловать! Запущен и работаю."),
);
bot.command("ping", (ctx) => ctx.reply(`Понг! ${new Date()}`));
const handleUpdate = webhookCallback(bot, "std/http");
Deno.serve(async (req) => {
try {
const url = new URL(req.url);
if (url.searchParams.get("secret") !== bot.token) {
return new Response("not allowed", { status: 405 });
}
return await handleUpdate(req);
} catch (err) {
console.error(err);
}
return new Response();
});
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
Развертывание
Теперь вы можете развернуть своего бота на Supabase. Обратите внимание, что вам придется отключить JWT-авторизацию, поскольку Telegram использует другой способ убедиться, что запросы поступают от Telegram. Вы можете развернуть функцию с помощью этой команды.
supabase functions deploy --no-verify-jwt telegram-bot
Далее необходимо передать токен бота в Supabase, чтобы ваш код имел к нему доступ как к переменной окружения.
# Замените 123:aBcDeF-gh на свой настоящий токен бота.
supabase secrets set BOT_TOKEN=123:aBcDeF-gh
2
Ваш Supabase Function теперь работает. Осталось только указать Telegram, куда отправлять обновления. Это можно сделать с помощью вызова set
. Например, откройте новую вкладку в браузере и перейдите по этому URL:
https://api.telegram.org/bot<токен>/setWebhook?url=https://<ID_ПРОЕКТА>.supabase.co/functions/v1/telegram-bot?secret=<токен>
Замените <токен>
на ваш настоящий токен бота. Также замените второй <токен>
на ваш реальный токен бота. Замените <ID
на идентификатор ссылки вашего проекта Supabase.
Теперь вы должны увидеть это в окне браузера.
{ "ok": true, "result": true, "description": "Webhook was set" }
Готово! Теперь ваш бот работает. Перейдите в Telegram и посмотрите, как он отвечает на сообщения!