Saltar al contenido principal

Descripción General

Puede crear webhooks para recibir notificaciones cuando ocurran ciertos eventos en su cuenta. Por ejemplo, puede crear webhooks para recibir notificaciones cuando se crea, actualiza o elimina una campaña. Para recibir notificaciones, debe especificar la URL donde se enviarán las notificaciones. Cuando ocurra un evento, su URL recibirá una solicitud HTTP POST con los detalles del evento. Su URL:
  • Debe ser públicamente accesible
  • Debe poder recibir solicitudes POST
  • Debe devolver un código de estado HTTP 2xx para solicitudes exitosas
Para crear un webhook, debe llamar a la API Create Webhook. Puede especificar el evento que activará el webhook usando el campo channel. Solo puede crear un webhook por canal.

Reintentos

Si su URL de webhook no es alcanzable en el momento del evento, reintentaremos enviar la solicitud hasta 5 veces con retroceso exponencial dentro del próximo 1 minuto. Solo reintentaremos la solicitud para códigos de estado HTTP 5xx o 429.

Validación

Para asegurarse de que su servidor solo procese entregas de webhook que fueron enviadas por Topsort y que la entrega no fue manipulada, debe validar la firma del webhook antes de procesar la entrega. Topsort usará su secreto de webhook y el payload del evento para generar una firma e incluirla en el encabezado HTTP X-TS-Signature-256 para cada entrega. Puede especificar su secreto de webhook al crear un webhook. Si no especifica un secreto, generaremos uno para usted. Debe almacenar su secreto de forma segura en su servidor. Topsort usa HMAC hex digest para calcular el hash de la firma. La firma siempre comenzará con sha256=. Debe verificar que la firma sea correcta recalculando el hash en su lado y comparándolo con la firma en el encabezado X-TS-Signature-256.

Ejemplo de verificación de firma

import hmac
import hashlib

secret = "my-webhook-secret"
request = ... # incoming request from the webhook delivery

signature = hmac.new(
    key=secret.encode(),
    msg=await request.body(),
    digestmod=hashlib.sha256,
).hexdigest()

expected_signature = "sha256=" + signature
incoming_signature = request.headers["X-TS-Signature-256"]
if not hmac.compare_digest(incoming_signature, expected_signature):
    # The signature is not valid, do not process the delivery
else:
    # The signature is valid, process the delivery