Saltar para o conteúdo principal

Descrição Geral

Você pode criar webhooks para receber notificações quando certos eventos ocorrerem em sua conta. Por exemplo, você pode criar webhooks para receber notificações quando uma campanha é criada, atualizada ou excluída. Para receber notificações, você deve especificar a URL para onde as notificações serão enviadas. Quando um evento ocorrer, sua URL receberá uma solicitação HTTP POST com os detalhes do evento. Sua URL:
  • Deve ser publicamente acessível
  • Deve ser capaz de receber solicitações POST
  • Deve retornar um código de status HTTP 2xx para solicitações bem-sucedidas
Para criar um webhook, você deve chamar a API Create Webhook. Você pode especificar o evento que acionará o webhook usando o campo channel. Você só pode criar um webhook por canal.

Tentativas

Se sua URL de webhook não estiver acessível no momento do evento, tentaremos reenviar a solicitação até 5 vezes com retrocesso exponencial dentro do próximo 1 minuto. Só tentaremos novamente a solicitação para códigos de status HTTP 5xx ou 429.

Validação

Para garantir que seu servidor processe apenas entregas de webhook que foram enviadas pela Topsort e que a entrega não foi adulterada, você deve validar a assinatura do webhook antes de processar a entrega. A Topsort usará seu segredo de webhook e o payload do evento para gerar uma assinatura e incluí-la no cabeçalho HTTP X-TS-Signature-256 para cada entrega. Você pode especificar seu segredo de webhook ao criar um webhook. Se você não especificar um segredo, geraremos um para você. Você deve armazenar seu segredo de forma segura em seu servidor. A Topsort usa HMAC hex digest para calcular o hash da assinatura. A assinatura sempre começará com sha256=. Você deve verificar se a assinatura está correta recalculando o hash do seu lado e comparando-o com a assinatura no cabeçalho X-TS-Signature-256.

Exemplo de verificação de assinatura

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