Webhook: Kirim Pesan dari Telegram ke CRM dan Server Anda Sendiri
Cara menerima setiap post dari channel Telegram di layanan HTTP Anda lewat webhook: format JSON, media lewat link, dan verifikasi tanda tangan dengan Python.
Kadang pesan Telegram tidak dibutuhkan di channel lain, melainkan di sistem Anda sendiri: CRM, basis pengetahuan, analitik, atau bot buatan sendiri. Untuk itu, pipeline punya webhook — request HTTP ke alamat Anda setiap kali ada pesan yang terkirim.
Pengaturan #
- Di bagian «Webhook», tambahkan alamat layanan Anda, misalnya
https://crm.example.com/telegram. - Di editor pipeline, centang webhook tersebut.
- Salin secret webhook — ini dibutuhkan untuk memverifikasi tanda tangan.
Pipeline bisa mengirim pesan hanya ke webhook, tanpa channel penerima.
Apa yang dikirim #
Untuk setiap pesan (album — dalam satu request) dikirim POST berisi JSON:
{
"pipeline_id": 12,
"account_id": 3,
"chat_id": -1001234567890,
"messages": [{
"id": 4521,
"date": 1791936000,
"text": "Berita hari ini",
"entities": [{"type": "bold", "offset": 0, "length": 7}],
"media": {"type": "photo", "url": "https://cpo.st/m/…", "mime_type": "image/jpeg"}
}]
}
Teks dikirim setelah melewati filter dan penggantian pipeline. Media dikirim sebagai link: file diunduh saat pertama kali diakses dan tersedia selama 7 hari.
Verifikasi tanda tangan #
Setiap request ditandatangani: header X-Copyposter-Signature berisi HMAC-SHA256 dari string
<X-Copyposter-Timestamp>.<body request> dengan secret webhook. Verifikasi dengan Python:
import hmac, hashlib, time
def verify(secret: str, timestamp: str, body: bytes, signature: str) -> bool:
if abs(time.time() - int(timestamp)) > 300:
return False # request lama — mungkin pengulangan
expected = "sha256=" + hmac.new(secret.encode(), timestamp.encode() + b"." + body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, signature)
Keandalan #
Jika layanan Anda tidak bisa diakses atau merespons 429/5xx, CopyPost akan mengulang request setelah
1 dtk, 5 dtk, 30 dtk, 2 menit, dan 10 menit. Balas dengan 2xx secepatnya, dan jalankan pemrosesan
berat di latar belakang.
Alamatnya harus publik: webhook tidak dikirim ke alamat lokal maupun internal.
Batas #
1000 request per bulan gratis, selebihnya tersedia paket berisi 10.000 request. Pemakaian saat ini bisa dilihat di halaman «Paket».