Telegram Bot API
🌐 Bahasa Indonesia

Webhook Telegram Bot: Cara Setting setWebhook, Secret Token, dan Mengatasi Error

· 8 menit baca

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 kerjaBot meminta update ke TelegramTelegram mengirim update ke server bot
Butuh URL HTTPS publikTidakYa
Cocok untukDevelopment, bot di laptopProduksi, 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

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:

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"]
  }
}

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:

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

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.

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.