Passa al contenuto principale

Webhook di conversazione

Il webhook elaborerà i dati per chatbot. Il webhook pubblicherà quotidianamente i record della cronologia del log delle chat sul tuo CRM in formato JSON.

Configurazione di un webhook

Per configurare un webhook, devi aver ricevuto un accesso ad app.neoagent.co (contatta il supporto di app.neoagent.co se non disponi già di questo accesso):

  • Accedi ad app.neoagent.co e clicca su Area di lavoro.
  • Inserisci l'URL del webhook dell'endpoint configurato nella scheda Webhook.
  • Clicca su Salva.

Una volta inserito l'URL del webhook, la chiave di firma del webhook viene generata automaticamente.

Endpoint di ricezione

Affidati all'autenticità dei tuoi webhook utilizzando la chiave di firma webhook menzionata sopra, una chiave segreta univoca condivisa tra la tua applicazione e app.neoagent.co, per verificare gli eventi inviati ai tuoi endpoint. La chiave di firma del webhook produrrà la X-Webhook-Signature, che puoi utilizzare per confrontarla con una firma webhook prevista, per verificare gli eventi provenienti da app.neoagent.co.

X-Webhook-Signature

Quando app.neoagent.co invia un webhook alla tua app, includerà l'intestazione X-Webhook-Signature nel seguente formato:

X-Webhook-Signature: t=1492774577,v1=5257a869e7ecebeda32affa62cdca3fa51cad7e77a0e56ff536d0ce8e108d8bd

Confronta la X-Webhook-Signature, preceduta da v1=, con la firma prevista. Se corrispondono, puoi essere certo che il payload dell'evento è stato emesso da app.neoagent.co e non è stato manomesso.

const crypto = require('crypto');

// Chiave di firma webhook dell'applicazione
const webhookSigningKey = ({}).WEBHOOK_SIGNING_KEY;

// Estrai il timestamp e la firma dall'intestazione
const newoaksSignature = req.get('X-Webhook-Signature');
const { t, signature } = newoaksSignature.split(',').reduce((acc, currentValue) => {
const [key, value] = currentValue.split('=');

if (key === 't') {
// Timestamp UNIX
acc.t = value;
}

if (key === 'v1') {
acc.signature = value
}

return acc;
}, {
t: '',
signature: ''
});

if (!t || !signature) throw new Error('Firma non valida');

// Crea il payload firmato concatenando il timestamp (t), il carattere '.' e il payload JSON del corpo della richiesta.
const data = t + '.' + JSON.stringify(req.body);

const expectedSignature = crypto.createHmac('sha256', webhookSigningKey).update(data, 'utf8').digest('hex');

// Determina la firma prevista calcolando un HMAC con la funzione hash SHA256.

if (expectedSignature !== signature) {
// La firma non è valida!
throw new Error('Firma non valida');
}

Ascolto degli eventi dei log delle chat

Quando si verifica un evento, questo viene notificato all'URL del webhook configurato. Invia tutti i log delle chat di tutti i chatbot di proprietà degli utenti del giorno precedente alle 2:00 di ogni giorno (ora UTC).

Dettagli notifica - Richiesta HTTP POST

Metodo: POST Content-Type: application/json

Intestazioni di richiesta aggiuntive

X-Webhook-Signature: Firma della richiesta Corpo JSON

Corpo JSON

Esempio:

{
"Collection": [
{
"SerialNumber": "59001dd73709417321c58b11693183a2",
"Name": "test...",
"StartTime": "2023-11-21T00:00:00Z",
"EndTime": "2023-11-22T00:00:00Z",
"Conversations": [
{
"SessionID": 31302,
"CreateTime": "2023-11-21T16:22:42.264484Z",
"URI": "www.google.com",
"Messages": [
{
"Type": "AI",
"Content": "Hi What can I help you with?"
},
{
"Type": "User",
"Content": "make an appointment"
},
{
"Type": "AI",
"Content": "Please select the date and time..."
}
]
}
]
}
]
}

Descrizione corpo JSON:

  • SerialNumber stringa ID Chatbot
  • Name stringa Nome Chatbot
  • StartTime stringa Ora di inizio (ora UTC)
  • EndTime stringa Ora di fine (ora UTC)
  • Conversations Object array
    • SessionID int ID sessione
    • CreateTime stringa Ora di creazione (ora UTC)
    • URI stringa URI sorgente
    • Messages Object array
      • Type stringa Esistono due tipi di messaggi, User e AI
      • Content stringa Contenuto del messaggio

Error retry

Risposta dati: {"status":"success"} o {"status":"Success: test request received"} (sensibile alle maiuscole e alle minuscole, il valore di ritorno richiesto per un callback riuscito); la restituzione di altri valori è considerata un errore. In caso di errore, riprovare entro 1 minuto e 3 minuti.