Saltar al contenido principal

Webhook de leads

El webhook procesará los datos para el chatbot. El webhook publicará diariamente los leads y los registros de citas en tu CRM en formato JSON.

Configuración de un webhook

Para configurar un webhook, debes haber recibido acceso a app.neoagent.co (contacta con el soporte de app.neoagent.co si no tienes este acceso):

  • Inicia sesión en app.neoagent.co y haz clic en Área de trabajo.
  • Introduce la URL del webhook del endpoint configurado en la pestaña Webhook.
  • Haz clic en Guardar.

Una vez ingresada la URL del webhook, la clave de firma del webhook se generará automáticamente.

Endpoint de recepción

Confía en la autenticidad de tus webhooks utilizando la clave de firma del webhook mencionada anteriormente, una clave secreta única compartida entre tu aplicación y app.neoagent.co, para verificar los eventos enviados a tus endpoints. La clave de firma del webhook producirá la X-Webhook-Signature, que puedes utilizar para compararla con una firma webhook prevista, para verificar los eventos provenientes de app.neoagent.co.

X-Webhook-Signature

Cuando app.neoagent.co envía un webhook a tu aplicación, incluirá el encabezado X-Webhook-Signature en el siguiente formato:

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

Compara la X-Webhook-Signature, precedida por v1=, con la firma prevista. Si coinciden, puedes estar seguro de que el payload del evento ha sido emitido por app.neoagent.co y no ha sido manipulado.

const crypto = require('crypto');

// Clave de firma del webhook de la aplicación
const webhookSigningKey = ({}).WEBHOOK_SIGNING_KEY;

// Extrae el timestamp y la firma del encabezado
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 no válida');

// Crea el payload firmado concatenando el timestamp (t), el carácter '.' y el payload JSON del cuerpo de la solicitud.
const data = t + '.' + JSON.stringify(req.body);

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

// Determina la firma prevista calculando un HMAC con la función hash SHA256.

if (expectedSignature !== signature) {
// ¡La firma no es válida!
throw new Error('Firma no válida');
}

Escucha de eventos relacionados con leads y citas

Cuando se produce un evento, se notifica a la URL del webhook configurado. Envía de inmediato nuevos leads y citas,

Detalles de la notificación - Solicitud HTTP POST

Método: POST Content-Type: application/json

Cuerpo JSON

Ejemplo:

{
// SerialNumber string ID Chatbot
"SerialNumber": "59001dd73709417321c58b11693183a2",
// Type string Hay dos tipos disponibles: Lead y Cita
"Type": "Lead",
// FirstName string Nombre del usuario
"FirstName": "David",
// LastName string Apellido del usuario
"LastName": "Garcia",
// Email string Correo electrónico del usuario
"Email": "test@qq.com",
// PhoneNumber string Número de teléfono del usuario
"PhoneNumber": "",
// CreateTime string Hora de creación (hora UTC)
"CreateTime": "2023-11-23T18:36:21.512302Z",
// String de contenido Observaciones o contenido de la cita
"Content": "test",
// ID de sesión int ID de sesión
"ID session": 31305,
// String URI URI fuente
"URI": "www.google.com"
}

Error, nuevo intento

Respuesta de datos: {"status":"success"} o {"status":"Success: solicitud de prueba recibida"} (sensible a mayúsculas y minúsculas, el valor devuelto es necesario para un callback exitoso); la devolución de otros valores se considera un error. Tras un error, vuelve a intentar dentro de 1 minuto y 3 minutos.