Hosting: Vercel Serverless Functions
Di tutorial kali ini, kami akan memandu kamu untuk men-deploy bot di Vercel dengan menggunakan Vercel Serverless Functions, tentunya dengan asumsi kamu sudah memiliki sebuah akun Vercel.
Struktur Proyek
Untuk menggunakan Vercel Serverless Functions, kamu cuma perlu memindahkan kode ke direktori api
seperti contoh di bawah. Silahkan baca dokumentasi Vercel untuk info lebih lanjut.
.
├── node_modules/
├── build/
├── api/
│ └── bot.ts
├── package.json
├── package-lock.json
└── tsconfig.json
Jika kamu menggunakan TypeScript, kamu mungkin juga tertarik untuk menginstal @vercel
sebagai dev dependency (tidak wajib diinstal untuk mengikuti tutorial ini).
Mengatur Vercel
Langkah selanjutnya adalah membuat sebuah file versel
di tingkat teratas (top level) struktur proyek kamu. Sehingga, untuk contoh struktur kita tadi, isi file-nya kurang lebih terlihat seperti ini:
{
"functions": {
"api/bot.ts": {
"memory": 1024,
"maxDuration": 10
}
}
}
2
3
4
5
6
7
8
Jika kamu menggunakan paket Vercel yang versi gratis, konfigurasi
memory
danmax
kamu sebaiknya mengikuti contoh di atas agar batas limit tidak terlampaui.Duration
Jika kamu tertarik untuk mempelajari file konfigurasi vercel
ini, silahkan baca dokumentasi berikut.
Mengatur TypeScript
Di file tsconfig
kita perlu menentukan direktori output-nya sebagai build
serta direktori root-nya sebagai api
. Ini perlu dilakukan karena kita sebelumnya telah mencantumkan direktori tersebut di opsi deploy Vercel.
{
"compilerOptions": {
"target": "ES2019",
"module": "commonjs",
"rootDir": "./api",
"moduleResolution": "node",
"resolveJsonModule": true,
"outDir": "./build",
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"strict": true,
"skipLibCheck": true
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
File Utama
Baik menggunakan TypeScript maupun JavaScript, kita wajib mempunyai sebuah source file atau file utama agar bot bisa dijalankan. Secara garis besar, isinya kurang lebih seperti ini:
import { Bot, webhookCallback } from "grammy";
const token = process.env.BOT_TOKEN;
if (!token) throw new Error("BOT_TOKEN belum diisi");
const bot = new Bot(token);
export default webhookCallback(bot, "std/http");
2
3
4
5
6
7
8
Vercel Edge Functions memiliki dukungan terbatas terhadap grammY
Meski kamu masih bisa menggunakan paket inti grammY dan sejumlah plugin lainnya, beberapa plugin tertentu mungkin tidak akan kompatibel karena Edge Runtime Vercel belum mendukung dependensi Node.js secara keseluruhan.
Saat ini, kami tidak memiliki daftar lengkap plugin yang kompatibel, sehingga kamu perlu mencobanya sendiri.
Tambahkan baris ini pada kode di atas jika kamu ingin beralih ke Edge Functions:
export const config = {
runtime: "edge",
};
2
3
Kunjungi Website Vercel
Dengan asumsi bahwa kamu sudah memiliki sebuah akun Vercel dan akun GitHub yang saling terhubung, buat sebuah proyek baru lalu pilih repository bot GitHub kamu. Atur beberapa pengaturan di Build & Development Settings:
- Output directory:
build
- Install command:
npm install
Jangan lupa untuk menambahkan secrets di pengaturan, misalnya token bot kamu sebagai environment variable. Jika sudah, klik deploy!
Mengatur Webhook
Langkah yang terakhir adalah menghubungkan aplikasi Vercel kamu ke Telegram. Ubah URL berikut dengan informasi yang sesuai kemudian jalankan URL-nya di browser kamu:
https://api.telegram.org/bot<BOT_TOKEN>/setWebhook?url=<HOST_URL>
Isian HOST
mungkin sedikit rumit karena kamu perlu memasukkan domain aplikasi Vercel beserta rute ke kode bot kamu, misalnya https://
. Dimana bot
adalah file bot
atau bot
kamu.
Jika semuanya berjalan lancar, kamu akan melihat respon berikut di jendela browser kamu.
{
"ok": true,
"result": true,
"description": "Webhook was set"
}
2
3
4
5
Selamat! Bot kamu sekarang siap untuk digunakan.