Хостинг: Supabase Edge Functions
Цей посібник розповість вам, як ви можете розмістити ваших ботів grammY на Supabase.
Зверніть увагу, що вам потрібен обліковий запис 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.27.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
Розгортання
Тепер ви можете розгорнути свого бота на 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
. Наприклад, відкрийте нову вкладку у вашому браузері та перейдіть за цим посиланням:
https://api.telegram.org/bot<токен-бота>/setWebhook?url=https://<ідентифікатор-проєкту>.supabase.co/functions/v1/telegram-bot?secret=<токен-бота>
Замініть <токен
на свій реальний токен бота. Також замініть другий аргумент <токен
на свій реальний токен бота. Замініть <ідентифікатор
ідентифікатором вашого проєкту Supabase.
Тепер ви повинні побачити на сторінці вашого браузера наступний текст.
{ "ok": true, "result": true, "description": "Webhook was set" }
Готово! Ваш бот працює. Перейдіть до Telegram та подивіться, як бот відповідає на повідомлення!