Saltar para o conteúdo principal
Uma entrega é um evento a caminho de um endpoint. Se três dos seus endpoints estão inscritos em contact.created, um contato novo gera três entregas, cada uma acompanhada e tentada de novo por conta própria.

O que conta como entregue

A Ciarem envia o evento no momento em que ele acontece, normalmente em poucos segundos, e espera até 10 segundos pela resposta do seu servidor. Uma entrega com falha é tentada de novo automaticamente.

Novas tentativas

Depois de uma falha, a Ciarem espera e tenta de novo, com uma espera maior a cada vez: As novas tentativas continuam até a entrega ter 3 dias. Depois disso a Ciarem desiste dela e a marca como Falhou. Na prática são cerca de 14 tentativas. As novas tentativas rodam uma vez por minuto, então uma tentativa pode começar até um minuto depois do horário agendado. Cada tentativa envia o mesmo corpo com o mesmo id de evento. Só o cabeçalho Ciarem-Signature muda, porque cada tentativa é assinada com um timestamp novo.

Status das entregas

Quando um endpoint continua falhando

Se todas as entregas para um endpoint falham por 3 dias seguidos, a Ciarem desliga o endpoint. No painel ele aparece como Desativado por falhas repetidas; na API, enabled é false e disabled_reason é auto_failures. Uma única entrega bem-sucedida zera a contagem, então um endpoint com falhas ocasionais nunca é desativado. Enquanto um endpoint está desativado:
  • Nada é enviado para ele, e os eventos que acontecem nesse meio-tempo não são guardados para depois.
  • As entregas que aguardavam uma nova tentativa são marcadas como Falhou.
Para ligá-lo de novo, corrija o seu servidor e depois escolha Ativar no menu do endpoint, ou envie PATCH /v1/webhook-endpoints/{id} com {"enabled": true}. A entrega recomeça com os eventos novos a partir desse ponto. Para recuperar o que você perdeu, veja Recuperar o atraso depois de uma queda.

Pausar um endpoint por conta própria

Escolha Desativar no menu do endpoint, ou envie {"enabled": false}, para parar as entregas sem excluir o endpoint. Ele se comporta como no caso automático: nada é enviado enquanto está desligado, as novas tentativas pendentes são descartadas, e ativá-lo depois não reenvia eventos antigos. disabled_reason é user. Excluir um endpoint também exclui o registro de entregas dele.

Se o seu plano mudar

Os webhooks fazem parte do acesso à API. Se a sua organização passar para um plano sem ele, ou se um teste terminar sem uma assinatura, a Ciarem para de enviar eventos imediatamente. Seus endpoints são mantidos, e as entregas recomeçam sozinhas quando você volta ao Growth ou ao Scale. Os eventos que aconteceram nesse intervalo não são enviados depois.

Duplicados e ordem

Construa o seu handler em torno de dois fatos: O mesmo evento pode chegar mais de uma vez. A Ciarem garante que cada evento é entregue pelo menos uma vez, não exatamente uma vez. A causa mais comum é uma nova tentativa depois que o seu servidor processou o evento mas respondeu devagar demais. Faça com que tratar o evento seja seguro de repetir:
  • Guarde o id de cada evento que você processa e pule qualquer id que já tenha visto. Guardar os ids por alguns dias é suficiente, já que as novas tentativas param depois de 3 dias.
  • Ou torne a própria ação repetível, por exemplo “definir a etapa do contato como X” em vez de “avançar o contato uma etapa”.
Os eventos podem chegar fora de ordem. Um evento tentado de novo chega depois de outros mais novos, e dois eventos com segundos de diferença podem trocar de lugar. Não presuma que o último evento que você recebeu é o estado mais recente:
  • Compare created_at no envelope, ou updated_at no contato, com o que você já guardou, e ignore os dados mais antigos.
  • Para conversas, espere que messages.inbound possa chegar antes do conversation.created da mesma conversa.
  • Quando a ordem importa, trate o evento como um sinal e leia o estado atual pela API.

O registro de entregas

Cada entrega dos últimos 30 dias fica registrada, com o corpo exato que foi enviado. No painel: abra Configurações → Webhooks e clique em um endpoint. A tabela Entregas mostra cada evento, o status dele, o código de resposta do seu servidor e o número de tentativas. Clique em uma linha para ver o corpo que foi enviado, o id do evento, a resposta do seu servidor ou o erro, e a última e a próxima tentativa. Com a API:
response_status é null quando o seu servidor nunca respondeu (um timeout ou um erro de conexão); nesse caso error diz o que deu errado. Duas coisas não estão no registro: os eventos de teste, e as entregas sobre um contato que depois foi apagado de forma permanente, que são removidas junto com os dados do contato.

Enviar uma entrega novamente

Você pode reenviar qualquer entrega do registro, seja qual for o status dela, por exemplo depois de corrigir um bug no seu handler.
  • No painel: clique na entrega para abri-la e depois clique em Enviar novamente.
  • Com a API: POST /v1/webhook-deliveries/{delivery_id}/redeliver.
A entrega volta para Pendente e é enviada em menos de um minuto, com o mesmo corpo e o mesmo id de evento. Como o id não muda, um handler que remove duplicados vai pulá-la: apague esse id do seu lado antes se quiser que ela seja processada de novo. Enviar novamente é recusado com 409 endpoint_disabled enquanto o endpoint está desligado. Ative-o primeiro.

Recuperar o atraso depois de uma queda

As novas tentativas cobrem quedas de até 3 dias. Para algo mais longo, ou para o tempo em que um endpoint ficou desativado, faça a conciliação pela API:
  • Contatos: liste-os com GET /v1/contacts e compare updated_at com o que você tem.
  • Conversas: liste-as com GET /v1/conversations e leia as mensagens das que mudaram.
Uma conciliação periódica como esta é uma boa prática mesmo quando tudo funciona. Ela protege você de bugs do seu lado que os webhooks sozinhos não conseguem revelar.

Gerenciar endpoints com a API

Tudo o que há no painel também está disponível para uma chave de API. Os detalhes completos de solicitação e resposta estão na referência da API, em Webhooks. Erros específicos dos webhooks, além dos gerais: Estas chamadas contam para o seu limite de uso como qualquer outra solicitação à API. Os eventos que a Ciarem envia para você não contam.

Solução de problemas