ID
Buka CopyPost

Webhook: Kirim Pesan dari Telegram ke CRM dan Server Anda Sendiri

2 menit bacaWebhookIntegrasi

Cara menerima setiap post dari channel Telegram di layanan HTTP Anda lewat webhook: format JSON, media lewat link, dan verifikasi tanda tangan dengan Python.

Daftar isi
  1. Pengaturan
  2. Apa yang dikirim
  3. Verifikasi tanda tangan
  4. Keandalan
  5. Batas

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 #

  1. Di bagian «Webhook», tambahkan alamat layanan Anda, misalnya https://crm.example.com/telegram.
  2. Di editor pipeline, centang webhook tersebut.
  3. 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».