Passa al contenuto principale

Webhook dei lead

Il webhook elaborerà i dati per chatbot. Il webhook pubblicherà quotidianamente i lead e i record degli appuntamenti sul tuo CRM in formato JSON.

Configurazione di un webhook​

Per configurare un webhook, devi aver ricevuto un accesso ad app.neoagent.co (contatta l'assistenza 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 neoagentSignature = req.get('X-Webhook-Signature');
const { t, signature } = neoagentSignature.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 di eventi relativi a lead e appuntamenti​

Quando si verifica un evento, questo viene notificato all'URL del webhook configurato. Invia immediatamente nuovi lead e appuntamenti,

Dettagli notifica - Richiesta HTTP POST

Metodo: POST Content-Type: application/json

Corpo JSON

Esempio:

{
// SerialNumber string ID Chatbot
"SerialNumber": "59001dd73709417321c58b11693183a2",
// Type string Sono disponibili due tipi: Lead e Appuntamento
"Type": "Lead",
// FirstName string Nome utente
"FirstName": "David",
// LastName string Cognome utente
"LastName": "Garcia",
// Email string Email utente
"Email": "test@qq.com",
// PhoneNumber string Numero di telefono utente
"PhoneNumber": "",
// CreateTime string Ora di creazione (ora UTC)
"CreateTime": "2023-11-23T18:36:21.512302Z",
// Stringa di contenuto Osservazioni o contenuto dell'appuntamento
"Content": "test",
// ID sessione int ID sessione
"ID session": 31305,
// Stringa URI URI sorgente
"URI": "www.google.com"
}

Errore, nuovo tentativo​

Risposta dati: {"status":"success"} o {"status":"Success: richiesta di test ricevuta"} (sensibile alle maiuscole e alle minuscole, il valore restituito è necessario per un callback riuscito); la restituzione di altri valori è considerata un errore. Dopo un errore, riprova entro 1 minuto e 3 minuti.