Webhooks: envie mensagens do Telegram para o CRM e para o seu servidor
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.
À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 #
- Na seção “Webhooks”, adicione o endereço do seu serviço, por exemplo
https://crm.example.com/telegram. - No editor do pipeline, marque esse webhook.
- 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”.