Webhooks
Recibe notificaciones automáticas cuando ocurren eventos en tu tienda.
Configuración
Configura tu endpoint de webhooks en el Dashboard:
- Ve a Configuración → Webhooks
- Añade tu URL de endpoint
- Selecciona los eventos que quieres recibir
- Guarda la configuración
Formato de petición
POST /tu-endpoint-webhook
Content-Type: application/json
X-Neuroon-Signature: sha256=abc123...
X-Neuroon-Event: search.completed
{
"id": "evt_123abc",
"type": "search.completed",
"created": "2024-01-15T10:30:00Z",
"data": {
// Datos específicos del evento
}
}
Verificar firma
Valida que los webhooks provienen de Neuroon:
const crypto = require('crypto');
function verifyWebhook(payload, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return `sha256=${expected}` === signature;
}
// En tu endpoint
app.post('/webhook', (req, res) => {
const signature = req.headers['x-neuroon-signature'];
const isValid = verifyWebhook(
JSON.stringify(req.body),
signature,
process.env.WEBHOOK_SECRET
);
if (!isValid) {
return res.status(401).send('Invalid signature');
}
// Procesar evento
res.status(200).send('OK');
});
Reintentos
Si tu endpoint no responde con 2xx:
| Intento | Espera |
|---|---|
| 1 | Inmediato |
| 2 | 5 minutos |
| 3 | 30 minutos |
| 4 | 2 horas |
| 5 | 24 horas |
Después de 5 intentos fallidos, el webhook se desactiva.
Buenas prácticas
- Responde rápido - Devuelve
200 OKinmediatamente - Procesa async - Usa colas para procesamiento pesado
- Idempotencia - El mismo evento puede llegar múltiples veces
- Logging - Guarda logs para debugging
app.post('/webhook', async (req, res) => {
// Responder inmediatamente
res.status(200).send('OK');
// Procesar en background
queue.add('process-webhook', req.body);
});