Webhook Telegram Bot: Cara Setting setWebhook, Secret Token, dan Mengatasi Error
Webhook telegram bot membuat Telegram mengirim setiap update ke URL HTTPS milikmu lewat request POST, jadi bot tidak perlu terus-menerus memanggil getUpdates. Caranya: panggil setWebhook sekali dengan URL publik, tambahkan secret_token untuk keamanan, lalu cek statusnya dengan getWebhookInfo.
Webhook vs getUpdates
| getUpdates (long polling) | Webhook | |
|---|---|---|
| Cara kerja | Bot meminta update ke Telegram | Telegram mengirim update ke server bot |
| Butuh URL HTTPS publik | Tidak | Ya |
| Cocok untuk | Development, bot di laptop | Produksi, serverless, n8n |
Kedua cara ini tidak bisa dipakai bersamaan. Apa pun pilihannya, update disimpan di server Telegram maksimal 24 jam sampai diterima bot. Kalau baru mulai, polling sudah cukup. Lihat panduan cara membuat bot Telegram.
Syarat webhook
- URL HTTPS publik. Server Bot API resmi tidak menerima URL
http://, dan alamatlocalhosttidak bisa dijangkau Telegram. - Port: hanya 443, 80, 88, atau 8443. Port selain 443 ditulis di URL, misalnya
https://bot.example.com:8443/webhook. - Sertifikat: sertifikat valid dari CA tepercaya dengan rantai intermediate yang lengkap, atau sertifikat self-signed yang diunggah lewat parameter
certificate. CN/SAN harus cocok dengan domain, dan minimal TLS 1.2. - IPv4 (IPv6 belum didukung untuk webhook), dan tanpa redirect.
Cara setting webhook dengan setWebhook
curl -X POST "https://api.telegram.org/bot123456789:AAEexampleTokenReplaceWithYours/setWebhook" \
-H "Content-Type: application/json" \
-d '{
"url": "https://bot.example.com/telegram/webhook",
"secret_token": "Rahasia_Panjang-2026",
"allowed_updates": ["message", "callback_query"],
"drop_pending_updates": true,
"max_connections": 40
}'
Jika berhasil, API mengembalikan "result": true. Arti parameternya:
url: alamat HTTPS penerima update.secret_token: 1–256 karakter, hanyaA-Z,a-z,0-9,_, dan-. Dikirim di headerX-Telegram-Bot-Api-Secret-Tokenpada setiap request.allowed_updates: jenis update yang ingin diterima. Kalau tidak diisi, pengaturan sebelumnya yang dipakai.drop_pending_updates: buang update yang menumpuk sebelum webhook dipasang.max_connections: koneksi simultan 1–100, default 40.certificatedanip_address: untuk sertifikat self-signed dan IP tetap.
Sertifikat self-signed harus diunggah sebagai file (multipart), bukan string:
curl -F "url=https://bot.example.com:8443/webhook" \
-F "certificate=@public.pem" \
"https://api.telegram.org/bot123456789:AAEexampleTokenReplaceWithYours/setWebhook"
Ingin mencoba tanpa terminal? Buka setWebhook di Bot API Tester, isi parameter di form, lalu jalankan.
Cek status dengan getWebhookInfo
curl "https://api.telegram.org/bot123456789:AAEexampleTokenReplaceWithYours/getWebhookInfo"
{
"ok": true,
"result": {
"url": "https://bot.example.com/telegram/webhook",
"has_custom_certificate": false,
"pending_update_count": 3,
"last_error_date": 1793232000,
"last_error_message": "Wrong response from the webhook: 500 Internal Server Error",
"max_connections": 40,
"allowed_updates": ["message", "callback_query"]
}
}
urlkosong berarti webhook tidak terpasang dan bot memakaigetUpdates.pending_update_countyang terus bertambah berarti update tidak berhasil terkirim.last_error_messagedanlast_error_datemenunjukkan error terakhir: respons non-2xx, timeout, atau masalah sertifikat.
Verifikasi header X-Telegram-Bot-Api-Secret-Token
URL webhook bisa ditebak atau bocor. Dengan secret_token, handler bisa menolak request yang tidak berasal dari webhook milikmu. Contoh dengan Flask:
import hmac
import os
from flask import Flask, abort, request
app = Flask(__name__)
SECRET = os.environ["WEBHOOK_SECRET"]
@app.post("/telegram/webhook")
def telegram_webhook():
got = request.headers.get("X-Telegram-Bot-Api-Secret-Token", "")
if not hmac.compare_digest(got, SECRET):
abort(403)
update = request.get_json(silent=True) or {}
handle_update(update) # fungsi milikmu, usahakan cepat
return "", 200
Jangan memakai token bot sebagai path URL. Path bisa tercatat di log server, sedangkan secret_token dikirim lewat header.
Balas 2xx secepatnya
Jika server membalas selain 2xx, Telegram mengulang pengiriman update beberapa kali sebelum menyerah. Akibatnya update menumpuk dan bisa diproses dua kali. Tips:
- Balas
200segera, lalu kerjakan proses berat (AI, database, API lain) di background atau antrean. - Simpan
update_idyang sudah diproses untuk mengabaikan update duplikat. - Jangan sampai error di logika bot membuat handler membalas 500 terus-menerus.
Untuk membalas pengguna, panggil sendMessage seperti di panduan kirim pesan bot Telegram.
Kembali ke polling dengan deleteWebhook
curl "https://api.telegram.org/bot123456789:AAEexampleTokenReplaceWithYours/deleteWebhook?drop_pending_updates=true"
Parameter drop_pending_updates opsional. Tanpa parameter itu, update yang menunggu tetap bisa diambil dengan getUpdates.
Troubleshooting webhook telegram bot
- Error 400 berisi
An HTTPS URL must be provided for webhook. URL diawalihttp://. Gunakanhttps://dengan sertifikat yang valid. 409 Conflictsaat memanggilgetUpdates. Webhook masih aktif. Hapus dengandeleteWebhook, atau tetap pakai webhook dan hentikan skrip polling.- Webhook tiba-tiba berhenti. Satu bot hanya punya satu webhook. Aplikasi lain dengan token yang sama mungkin memanggil
setWebhookdan menimpa URL kamu. CekurldigetWebhookInfo, dan pakai bot terpisah per integrasi. Jika token bocor, baca panduan token bot Telegram. - Webhook telegram n8n di localhost. Jika n8n berjalan di
localhostatau hanya HTTP, Telegram tidak bisa mengirim update. n8n harus bisa diakses dari internet lewat HTTPS, misalnya di server dengan domain dan sertifikat, atau lewat tunnel HTTPS. Setelah itu pastikangetWebhookInfomenampilkan URL publik tersebut. - Masalah sertifikat. Rantai intermediate tidak lengkap atau CN tidak cocok dengan domain. Detailnya ada di panduan webhook resmi.
Pertanyaan umum
Apa itu webhook telegram bot?
Mekanisme push: Telegram mengirim setiap update ke URL HTTPS milikmu lewat request POST berisi JSON, sehingga bot tidak perlu memanggil getUpdates terus-menerus.
Bagaimana cara cek webhook telegram sudah aktif?
Panggil getWebhookInfo. Jika url terisi, webhook aktif. Perhatikan last_error_message dan pending_update_count untuk melihat apakah update berhasil dikirim.
Bagaimana cara menghapus webhook telegram?
Panggil deleteWebhook (opsional dengan drop_pending_updates=true), atau panggil setWebhook dengan url kosong. Setelah itu getUpdates bisa dipakai lagi.
Port apa saja yang didukung webhook Telegram?
Hanya 443, 80, 88, dan 8443, dan koneksinya tetap wajib HTTPS di port mana pun.
Kenapa webhook telegram n8n tidak menerima pesan?
Penyebab paling umum: n8n berjalan di localhost atau tanpa HTTPS sehingga tidak bisa dijangkau Telegram, atau webhook bot sudah ditimpa oleh aplikasi lain yang memakai token yang sama. Cek dengan getWebhookInfo.
Apakah webhook dan getUpdates bisa dipakai bersamaan?
Tidak. Selama webhook terpasang, getUpdates mengembalikan 409 Conflict. Pilih salah satu.
Panduan terkait
Cara Membuat Bot Telegram: dari BotFather sampai Pesan Pertama
Cara membuat bot telegram langkah demi langkah: daftar di @BotFather, simpan token, cek dengan getMe, lalu kirim pesan pertama lewat curl dan Python.
Kirim Pesan Bot Telegram dengan Telegram Bot API (sendMessage)
Kirim pesan bot telegram lewat Bot API: contoh sendMessage dengan curl, Python, dan JavaScript, format HTML/MarkdownV2, tombol inline, dan solusi error.
Telegram Bot Token: Cara Mendapatkan, Mengecek, dan Mencabut Token
Cara mendapatkan token bot telegram dari @BotFather, melihat token bot lama, mengecek dengan getMe, dan me-revoke token yang bocor. Lengkap dengan contoh.
Chat ID Telegram Dimana? Cara Mendapatkan Chat ID User, Grup, dan Channel
Chat id telegram dimana? Cara mendapatkan chat id user, grup, supergroup, dan channel lewat getUpdates, plus solusi saat result kosong atau error 409.