Eventi Webhook
Eventi disponibili
| Evento | Descrizione |
|---|---|
call.ended | Emesso quando una chiamata AI termina (completata, fallita o cancellata) |
Altri eventi in arrivo
I futuri eventi includeranno appointment.created, appointment.cancelled, sms.received, contact.created e altri.
call.ended
Inviato quando una chiamata AI termina, indipendentemente dall'esito.
Payload
json
{
"id": "evt-delivery-uuid",
"event": "call.ended",
"timestamp": "2026-04-05T14:04:00Z",
"data": {
"callId": "clx-call-001",
"organizationId": "clx-org-001",
"agentId": "clx-agent-001",
"agentName": "Agente Vendite",
"customerName": "Mario Rossi",
"customerPhone": "+1234567890",
"fromNumber": "+0987654321",
"direction": "OUTBOUND",
"status": "completed",
"duration": 240,
"disconnectionReason": "agent_hangup",
"sentiment": "positive",
"summary": "Discusso il piano enterprise. Il cliente è interessato al piano annuale.",
"transcript": "Agente: Buongiorno Mario, sono...\nMario: Salve, sì stavo...",
"callSuccessful": true,
"tokenCost": 12.50,
"startedAt": "2026-04-05T14:00:00Z",
"endedAt": "2026-04-05T14:04:00Z",
"metadata": {
"campaign_id": "estate_2026"
}
}
}Campi
| Campo | Tipo | Descrizione |
|---|---|---|
callId | string | Identificativo univoco della chiamata |
organizationId | string | ID della tua organizzazione |
agentId | string | Agente che ha gestito la chiamata |
agentName | string | Nome visualizzato dell'agente |
customerName | string | null | Nome della persona chiamata |
customerPhone | string | Numero di telefono destinatario |
fromNumber | string | Numero chiamante usato |
direction | string | INBOUND o OUTBOUND |
status | string | Stato finale della chiamata |
duration | integer | Durata della chiamata in secondi |
disconnectionReason | string | null | Motivo della disconnessione |
sentiment | string | null | Sentiment rilevato dall'AI |
summary | string | null | Riepilogo della chiamata generato dall'AI |
transcript | string | null | Trascrizione completa della chiamata |
callSuccessful | boolean | null | Se la chiamata ha raggiunto il suo obiettivo |
tokenCost | number | Costo in token/crediti |
startedAt | string | null | Orario di inizio ISO 8601 |
endedAt | string | null | Orario di fine ISO 8601 |
metadata | object | null | Metadati personalizzati impostati alla creazione |
Esempio di handler (Node.js)
javascript
app.post('/webhook', (req, res) => {
const { event, data } = req.body
if (event === 'call.ended') {
console.log(`Chiamata ${data.callId} terminata`)
console.log(`Stato: ${data.status}, Durata: ${data.duration}s`)
console.log(`Sentiment: ${data.sentiment}`)
// Salva nel tuo CRM, notifica il team, ecc.
if (data.callSuccessful) {
notifyTeam(`Chiamata riuscita con ${data.customerName}`)
}
}
// Rispondi sempre 2xx
res.status(200).json({ received: true })
})
