PT
Abrir o CopyPost

Webhooks: envie mensagens do Telegram para o CRM e para o seu servidor

2 minutos de leituraWebhooksIntegrações

Como receber cada post de canais do Telegram no seu serviço HTTP via webhook: formato JSON, mídia por links e verificação de assinatura em Python.

Índice
  1. Configuração
  2. O que chega
  3. Verificação da assinatura
  4. Confiabilidade
  5. Limites

Às vezes as mensagens não precisam ir para outro canal, e sim para o seu sistema: CRM, base de conhecimento, analytics, seu próprio bot. Para isso, o pipeline tem webhooks — requisições HTTP para o seu endereço a cada mensagem entregue.

Configuração #

  1. Na seção “Webhooks”, adicione o endereço do seu serviço, por exemplo https://crm.example.com/telegram.
  2. No editor do pipeline, marque esse webhook.
  3. Copie o segredo do webhook — ele é necessário para verificar a assinatura.

Um pipeline pode enviar mensagens só para o webhook, sem canais de destino.

O que chega #

Para cada mensagem (um álbum — em uma única requisição) chega um POST com JSON:

{
  "pipeline_id": 12,
  "account_id": 3,
  "chat_id": -1001234567890,
  "messages": [{
    "id": 4521,
    "date": 1791936000,
    "text": "Notícia do dia",
    "entities": [{"type": "bold", "offset": 0, "length": 7}],
    "media": {"type": "photo", "url": "https://cpo.st/m/…", "mime_type": "image/jpeg"}
  }]
}

O texto chega já depois dos filtros e substituições do pipeline. A mídia é enviada por links: o arquivo é baixado no primeiro acesso e fica disponível por 7 dias.

Verificação da assinatura #

Cada requisição é assinada: o cabeçalho X-Copyposter-Signature contém o HMAC-SHA256 da string <X-Copyposter-Timestamp>.<corpo da requisição> com o segredo do webhook. Verificação em 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  # requisição antiga — possivelmente uma repetição
    expected = "sha256=" + hmac.new(secret.encode(), timestamp.encode() + b"." + body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, signature)

Confiabilidade #

Se o serviço estiver indisponível ou responder 429/5xx, o CopyPost repete a requisição após 1 s, 5 s, 30 s, 2 minutos e 10 minutos. Responda 2xx rápido e deixe o processamento pesado em segundo plano.

O endereço precisa ser público: webhooks não são enviados para endereços locais e internos.

Limites #

1000 requisições por mês grátis; depois, pacotes de 10 000 requisições. O consumo atual aparece na página “Plano”.