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.