Webhooks: mensajes de Telegram a tu CRM y a tu servidor
Cómo recibir cada publicación de tus canales de Telegram en tu propio servicio HTTP con webhooks: formato JSON, multimedia por enlace y firma en Python.
A veces no necesitas los mensajes en otro canal, sino en tu propio sistema: un CRM, una base de conocimiento, analítica o tu propio bot. Para eso el flujo tiene webhooks: solicitudes HTTP a tu dirección con cada mensaje entregado.
Configuración #
- En la sección «Webhooks» agrega la dirección de tu servicio, por ejemplo
https://crm.example.com/telegram. - En el editor del flujo marca ese webhook.
- Copia el secreto del webhook: lo necesitas para verificar la firma.
Un flujo puede enviar mensajes solo al webhook, sin canales de destino.
Qué llega #
Por cada mensaje (un álbum, en una sola solicitud) llega un POST con JSON:
{
"pipeline_id": 12,
"account_id": 3,
"chat_id": -1001234567890,
"messages": [{
"id": 4521,
"date": 1791936000,
"text": "Noticia del día",
"entities": [{"type": "bold", "offset": 0, "length": 7}],
"media": {"type": "photo", "url": "https://cpo.st/m/…", "mime_type": "image/jpeg"}
}]
}
El texto llega ya con los filtros y reemplazos del flujo aplicados. Los archivos multimedia se envían como enlaces: el archivo se descarga en el primer acceso y está disponible durante 7 días.
Verificar la firma #
Cada solicitud va firmada: el encabezado X-Copyposter-Signature contiene el HMAC-SHA256 de la cadena
<X-Copyposter-Timestamp>.<cuerpo de la solicitud> con el secreto del webhook. Verificación en 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 # solicitud antigua: puede ser una repetición
expected = "sha256=" + hmac.new(secret.encode(), timestamp.encode() + b"." + body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, signature)
Confiabilidad #
Si tu servicio no está disponible o responde 429/5xx, CopyPost repetirá la solicitud a los 1 s, 5 s,
30 s, 2 minutos y 10 minutos. Responde 2xx rápido y haz el procesamiento pesado en segundo plano.
La dirección debe ser pública: los webhooks no se envían a direcciones locales ni internas.
Límites #
1000 solicitudes al mes gratis; después, paquetes de 10 000 solicitudes. El consumo actual se ve en la página «Plan».