Webhooks
A Diska envia webhooks de saída para os seus sistemas quando acontecem eventos (chamadas concluídas, marcações) e recebe webhooks externos para eventos assíncronos.
Webhooks de saída (eventos de chamada)
Registe endpoints via Canal API com o âmbito webhooks:manage:
POST /v1/webhook-endpoints
Authorization: Bearer dsk_…
{
"url": "https://o-seu-sistema.com/hooks/diska",
"events": ["call.completed"]
}
A resposta inclui o secret de assinatura (dskw_…) — guarde-o: só é mostrado uma vez.
Eventos disponíveis
| Evento | Quando dispara | Payload |
|---|---|---|
call.completed | Uma chamada termina com sucesso e o processamento pós-chamada conclui. Chamadas falhadas, canceladas ou abandonadas não disparam este evento. | Transcrição completa, dados extraídos, avaliações, sentimento, acções executadas, call_id (utilizável em GET /v1/calls/{call_id}). |
booking.created | Uma marcação é criada durante uma chamada. | booking_id, session_id. |
Verificar a assinatura
Cada entrega inclui os cabeçalhos:
X-Diska-Event: call.completed
X-Diska-Delivery: <uuid único da entrega>
X-Diska-Timestamp: <segundos unix>
X-Diska-Signature: sha256=<hex>
A assinatura é HMAC-SHA256 do texto {timestamp}.{corpo do pedido} com o secret do endpoint:
import hashlib, hmac
def is_valid(secret: str, timestamp: str, body: bytes, signature: str) -> bool:
expected = hmac.new(secret.encode(), f"{timestamp}.".encode() + body, hashlib.sha256).hexdigest()
return hmac.compare_digest(f"sha256={expected}", signature)
Rejeite pedidos com timestamp com mais de 5 minutos para evitar replay.
Entrega e falhas
- Responda
2xxrapidamente (ideal: enfileire e processe depois). Qualquer outra resposta conta como falha. - Cada entrega tenta até 3 vezes com backoff; erros
4xx(excepto 408/429) não são repetidos. - Após 20 falhas consecutivas o endpoint é desactivado automaticamente (
disabled_reasonexplica). Corrija e reactive comPATCH /v1/webhook-endpoints/{id}{"active": true}. - Use
POST /v1/webhook-endpoints/{id}/testpara receber umpingassinado e validar a sua implementação. - A entrega é best-effort: para reconciliação,
GET /v1/callscontinua a ser a fonte de verdade.
Webhooks de entrada
SMS inbound
POST /api/v1/webhooks/sms/inbound
Recebe mensagens SMS do fornecedor Ombala. O body varia conforme payload do fornecedor. A API valida a origem, associa a uma sessão se existir e pode avançar o fluxo quando configurado para esperar resposta.
Configure o URL do webhook no dashboard do fornecedor:
https://api.diska.ai/api/v1/webhooks/sms/inbound
Segurança: valide assinaturas ou tokens do fornecedor quando disponíveis, use HTTPS e limite IPs de origem se o fornecedor o suportar.
Futuro
Eventos de saída adicionais (call.failed, estados de chamada em tempo real) e webhooks de entrada para Cal.com e Twilio estão planeados.

