Webhooks y N8N
Los webhooks permiten que Funnel+ envíe notificaciones en tiempo real a sistemas externos cada vez que ocurre un evento.
Concepto: Webhook vs API
|
Webhook |
API |
| Dirección |
Funnel+ → Tu sistema |
Tu sistema → Funnel+ |
| Cuándo |
Automático, cuando ocurre un evento |
Bajo demanda, cuando vos lo pedís |
| Para qué |
Notificaciones en tiempo real |
Enviar mensajes, crear tickets, etc. |
Configuración de Webhooks
Método 1: Por Canal (recomendado para empezar)
- Ingresá a Configuraciones > Canales > Configuración del Canal
- Activá la opción Webhook
- Ingresá la URL POST de tu destino (ej: URL de N8N)
- Seleccioná los eventos que querés enviar
- Opcionalmente agregá una API Key de N8N para seguridad
Método 2: Por Cola/Integración
- Ingresá a Registros > Colas > Integraciones
- Creá una integración tipo N8N/Webhook
- Configurá: Nombre, URL POST y API Key opcional
- Vinculá la integración a una cola
- Opción "Iniciar integración al transferir": activa el webhook inmediatamente al transferir un ticket a esa cola
Eventos Disponibles
| Evento |
Tipo |
Cuándo se dispara |
| Nuevo ticket (usuario) |
NewTicketUserCreate |
Un usuario crea un ticket manualmente |
| Nuevo ticket |
NewTicket |
Se abre un ticket nuevo (mensaje entrante) |
| Ticket transferido |
TransferTicket |
Se transfiere a otra cola o usuario |
| Ticket cerrado |
ClosedTicket |
Se cierra la conversación |
| Mensaje recibido/enviado |
(mensaje) |
Cada mensaje nuevo |
Estructura del Payload
Cada evento envía un JSON con esta estructura:
Datos del Mensaje
| Campo |
Descripción |
messageId |
Identificador único del mensaje |
messageBody |
Texto del mensaje |
timestamp |
Marca de tiempo UNIX |
fromMe |
true si fue enviado, false si fue recibido |
mediaType |
Tipo: image, video, audio, document |
mediaUrl |
URL de descarga del archivo adjunto |
sendType |
Origen: "manual", "bot", "API" |
status |
Estado de entrega: delivered, read |
Datos del Ticket
| Campo |
Descripción |
id |
ID del ticket |
status |
Estado: pending, open, closed |
protocol |
Número de protocolo |
queueId |
ID de la cola |
apiConfig |
Clave externa (externalKey) |
isGroup |
Si es un grupo de WhatsApp |
closingReasonId |
Motivo de cierre (solo en ClosedTicket) |
| Campo |
Descripción |
id |
ID del contacto |
name |
Nombre completo |
phoneNumber |
Número de teléfono |
email |
Email |
kanbanId |
Lista del CRM |
followupId |
Follow-up activo |
Datos del Usuario (solo en envíos manuales)
| Campo |
Descripción |
id |
ID del usuario/agente |
name |
Nombre del agente |
email |
Email del agente |
Configuración Importante: Filtro de Estado
Controlá qué tickets generan webhooks de mensajes:
| Configuración |
Resultado |
| Tickets abiertos: ON |
Recibe webhooks de tickets en estado "Abierto" |
| Tickets pendientes: ON |
Recibe webhooks de tickets en estado "Pendiente" |
| Ambos OFF |
No se envían webhooks de mensajes |
Cuidado: Si activás eventos de mensajes pero desactivás ambos filtros de estado, no vas a recibir ningún webhook.
Ejemplos Prácticos con N8N
Ejemplo 1: Registrar ventas en Google Sheets
Webhook Trigger (ClosedTicket)
→ IF: closingReasonId = "Venta concretada"
→ Google Sheets: Agregar fila
- Fecha, Nombre del contacto, Teléfono, Agente, Protocolo
Ejemplo 2: Alerta de insatisfacción por Slack
Webhook Trigger (Mensaje recibido)
→ IF: evaluación ≤ 2
→ Slack: Enviar mensaje al canal #alertas
- "⚠ Evaluación baja: [contacto] calificó [nota] al agente [usuario]"
Webhook Trigger (NewTicket)
→ Mailchimp: Buscar suscriptor por email
→ IF: no existe → Crear suscriptor
→ IF: existe → Actualizar tags
Ejemplo 4: Notificar despacho desde sistema de logística
Sistema de logística → API Funnel+: Enviar mensaje
POST /api/messages/send
{
"number": "5491155551234",
"body": "¡Tu pedido #12345 fue despachado! Seguimiento: [link]"
}
Ejemplo 5: Crear tarea en Trello al transferir ticket
Webhook Trigger (TransferTicket)
→ IF: queueId = cola "Soporte Técnico"
→ Trello: Crear tarjeta
- Lista: "Por hacer"
- Título: "Soporte: [nombre contacto] - Protocolo [protocol]"
- Descripción: último mensaje del cliente