Hosting: Supabase Edge Functions
Halaman ini berisi panduan mengenai langkah-langkah meng-hosting bot grammY di Supabase.
Kamu diharuskan memiliki sebuah akun Git
Supabase Edge Functions cocok untuk sebagian besar bot yang memiliki fungsi sederhana, dan perlu kamu ketahui bahwa tidak semua fitur di Deno tersedia untuk aplikasi-aplikasi yang berjalan di Supabase Edge Functions. Contohnya, Supabase Edge Functions tidak menyediakan fitur file system. Ia serupa dengan platform serverless lainnya, namun hanya ditujukan untuk aplikasi Deno.
Hasil dari tutorial ini bisa dilihat di repositori bot kami.
Pemasangan
Untuk men-deploy bot ke Supabase Edge Functions, kamu harus membuat sebuah akun Supabase, menginstal CLI mereka, dan membuat sebuah proyek Supabase. Cara pemasangannya bisa dilihat di dokumentasi yang mereka sediakan.
Buat sebuah Supabase Function dengan cara menjalankan perintah berikut:
supabase functions new telegram-bot
Setelah berhasil membuat sebuah proyek Supabase Function, sekarang kamu bisa menulis bot-nya.
Siapkan Kodenya
Perlu diingat bahwa kamu harus menjalankan bot menggunakan webhooks. Oleh karena itu, gunakan
webhook
alih-alihCallback bot
di kode kamu..start()
Kamu bisa menggunakan contoh bot singkat ini sebagai entry point-nya.
import { Bot, webhookCallback } from "https://deno.land/x/grammy@v1.33.0/mod.ts";
const token = Deno.env.get("BOT_TOKEN");
if (!token) throw new Error("BOT_TOKEN belum diisi");
const bot = new Bot(token);
bot.command(
"start",
(ctx) => ctx.reply("Selamat datang! Bot sedang berjalan."),
);
bot.command("ping", (ctx) => ctx.reply(`Pong! ${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
Melakukan Deploy
Kamu sekarang bisa men-deploy bot ke Supabase. Perlu dicatat bahwa kamu diharuskan menonaktifkan otorisasi JWT karena Telegram menggunakan metode lain untuk memastikan request tersebut benar-benar berasal dari Telegram. Kamu bisa men-deploy function-nya dengan perintah ini:
supabase functions deploy --no-verify-jwt telegram-bot
Selanjutnya, berikan token bot ke Supabase agar kode kamu bisa mengaksesnya sebagai sebuah environment variable.
# Ganti 123:aBcDeF-gh dengan token bot-mu yang asli.
supabase secrets set BOT_TOKEN=123:aBcDeF-gh
2
Supabase Function kamu sekarang sudah berjalan. Sisanya, kita perlu memberi tahu Telegram ke mana ia harus mengirim update-update-nya. Kamu bisa melakukannya dengan memanggil set
. Contohnya, buka sebuah tab baru di browser lalu kunjungi URL berikut:
https://api.telegram.org/bot<TOKEN_BOT>/setWebhook?url=https://<ID_REFERENSI_PROYEK>.supabase.co/functions/v1/telegram-bot?secret=<TOKEN_BOT>
Ganti <TOKEN
dengan token bot kamu yang asli. Jangan lupa untuk mengganti <TOKEN
yang kedua dengan token bot-mu juga. Ganti <ID
dengan ID referensi proyek Supabase kamu.
Jika berhasil, kamu akan melihat string JSON berikut di jendela browser:
{ "ok": true, "result": true, "description": "Webhook was set" }
Selesai! Bot kamu sekarang sudah berjalan. Kirim sebuah pesan lalu bot akan membalas pesan tersebut!