Disparado quando uma parada é marcada como não realizada.
activity.outcome e activity.windowCompliance não aparecem neste tipo — o
próprio eventType já é o desfecho.
activity.completedAtaqui é o instante da tentativa, não de uma conclusão, e
activity.driverIdé quem tentou atender a parada.
O bloco
routeestá presente, salvo numa parada que não pertence a nenhuma rota.
deviceIdevehicleIdpodem não vir. O contrato os declara opcionais e eles
são omitidos doeventDataquando não há dispositivo ou veículo associado. O
envelope interno ainda carregadeviceIdcomo string vazia — é uma restrição do
nosso armazenamento, não um identificador válido. Use oeventData.
Trate o webhook como sinal, não como fonte da verdade. O evento é publicado
dentro da transação do domínio, então numa falha rara você pode receber um evento
cujo estado não persistiu. Em caso de divergência, reconcilie por
GET /public/v2/routes.
eventDataé aninhado. Um handler que espera o formato plano dos demais tipos
não encontra nenhum campo — eles vivem emeventData.routeeeventData.activity.
Entregue pela assinatura do tipo activities.
A Cobli envia este evento como POST application/json para a URL cadastrada na
assinatura, assinado em X-Cobli-Signature. Responda 2xx em até 5 segundos e
deduplique por eventId.
200Evento aceito. Responda 2xx em até 5 segundos — enfileire e processe de forma assíncrona se o seu processamento for demorado. Nenhuma retentativa é feita.
400Evento rejeitado de forma permanente — use para assinatura HMAC inválida ou payload malformado. A Cobli trata 4xx como falha definitiva e não retenta, com duas exceções: 429 (ver abaixo) e 401 em assinaturas com Bearer auth habilitado, em que a Cobli renova o token e retenta. Não devolva 4xx para um eventType que você não espera: ignore-o e responda 2xx.
500Falha temporária no seu lado. A Cobli faz até 5 tentativas no total, com backoff exponencial entre elas — 2 s → 4 s → 8 s → 15 s —, jitter de ±20 % e teto de 15 s por intervalo. O mesmo vale para timeout: sem resposta em 5 segundos.