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.