ES
Abrir CopyPost

Webhooks: mensajes de Telegram a tu CRM y a tu servidor

2 minutos de lecturaWebhooksIntegraciones

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.

Contenido
  1. Configuración
  2. Qué llega
  3. Verificar la firma
  4. Confiabilidad
  5. Límites

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 #

  1. En la sección «Webhooks» agrega la dirección de tu servicio, por ejemplo https://crm.example.com/telegram.
  2. En el editor del flujo marca ese webhook.
  3. 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».