Pular para o conteúdo

Webhooks

Quando você chama o endpoint Chat informando webhook_url, a API opera em modo assíncrono: em vez de manter a conexão aberta enquanto o agente processa, a API retorna 202 Accepted na hora e envia o resultado para a URL do webhook assim que o processamento termina.

Use webhooks para não bloquear sua aplicação enquanto a IA pensa — ideal para integrações via n8n, Make, Zapier ou qualquer backend que não queira lidar com long-polling.

  1. Você chama POST /chat/{agentId} com webhook_url no body (e opcionalmente metadata).
  2. A API responde imediatamente com 202 Accepted, devolvendo conversation_id e message_id. O status é "processing".
  3. Quando o agente termina, a API faz um POST para a sua webhook_url com o WebhookPayload completo.
Terminal window
curl -X POST https://api.squados.io/v1/chat/{agentId} \
-H "Authorization: Bearer pk_sua_chave_aqui" \
-H "Content-Type: application/json" \
-d '{
"message": "Qual o status do pedido #1234?",
"webhook_url": "https://sua-app.com/webhooks/squados",
"metadata": {
"crm_ticket_id": "TKT-9981",
"customer_email": "[email protected]"
}
}'

Resposta 202:

{
"success": true,
"conversation_id": "conv_abc123",
"message_id": "msg_xyz789",
"status": "processing"
}

Quando o processamento termina, seu endpoint recebe um POST com o seguinte schema:

CampoTipoDescrição
eventstringTipo do evento: message.completed, message.received ou message.error
agent_iduuidID do agente que processou a mensagem
conversation_iduuidID da conversa (o mesmo do 202)
message_iduuidID da mensagem (o mesmo do 202)
responsestringResposta gerada pelo agente. Presente em message.completed
errorstringDescrição do erro. Presente em message.error
modelstringModelo LLM usado na geração
credits_usednumberCréditos consumidos pelo processamento
metadataobjectO objeto metadata que você enviou na requisição original, ecoado intacto
timestampdate-timeMomento em que o evento foi gerado (ISO 8601)

Exemplo de payload message.completed:

{
"event": "message.completed",
"agent_id": "agt_550e8400-e29b-41d4-a716-446655440000",
"conversation_id": "conv_abc123",
"message_id": "msg_xyz789",
"response": "O pedido #1234 está em separação no estoque e a previsão de despacho é amanhã.",
"model": "gpt-4o-mini",
"credits_used": 3,
"metadata": {
"crm_ticket_id": "TKT-9981",
"customer_email": "[email protected]"
},
"timestamp": "2026-06-08T14:32:07Z"
}
EventoQuando ocorre
message.completedO agente terminou de gerar a resposta com sucesso
message.receivedA mensagem foi recebida e está na fila (notificação intermediária)
message.errorOcorreu um erro durante o processamento

O objeto metadata que você enviou no request original é ecoado intacto no campo metadata do webhook. Use isso para casar a resposta do agente com o registro de origem no seu sistema — ticket de suporte, lead do CRM, pedido de e-commerce, qualquer coisa.

Exemplo: request com metadata de CRM

Terminal window
curl -X POST https://api.squados.io/v1/chat/{agentId} \
-H "Authorization: Bearer pk_sua_chave_aqui" \
-H "Content-Type: application/json" \
-d '{
"message": "Resuma o histórico deste cliente.",
"webhook_url": "https://sua-app.com/webhooks/squados",
"metadata": {
"crm_ticket_id": "TKT-9981",
"customer_email": "[email protected]"
}
}'

Webhook recebido:

{
"event": "message.completed",
"response": "O cliente tem 3 compras nos últimos 6 meses, nenhuma reclamação aberta...",
"metadata": {
"crm_ticket_id": "TKT-9981",
"customer_email": "[email protected]"
},
"timestamp": "2026-06-08T14:32:07Z"
}

Seu endpoint deve responder com um status 2xx (200, 201 ou 204) logo após receber o payload — sem processamento pesado dentro do handler. A API interpreta qualquer resposta não-2xx como falha de entrega.

// Resposta mínima aceita (corpo pode ser vazio)
HTTP/1.1 200 OK

Para erros e códigos de status da API, consulte a referência de Erros.