Payload de webhook de WhatsApp
Los webhooks de WhatsApp se envían para mensajes, reacciones y confirmaciones de lectura.
Payload de ejemplo
1 { 2 "event": { 3 "id": "evt_wa_abc123", 4 "channel": "whatsapp", 5 "timestamp": 1706640000.0, 6 "data": { 7 "timestamp": 1706640000.0, 8 "direction": "inbound", 9 "platform": "whatsapp", 10 "message_id": "wamid_xyz789", 11 "chat_id": "chat_456", 12 "content": "I'd like to schedule an appointment for next week", 13 "is_from_account": false, 14 "account_id": "acc_123", 15 "sender_attendee": { 16 "attendee_id": "att_789", 17 "attendee_name": "John Doe", 18 "attendee_provider_id": "+15551234567", 19 "attendee_profile_url": "https://..." 20 }, 21 "social_event_type": "message_received", 22 "attendees": [ 23 { 24 "attendee_id": "att_789", 25 "attendee_name": "John Doe", 26 "attendee_provider_id": "+15551234567" 27 } 28 ], 29 "attachments": [ 30 { 31 "id": "att_001", 32 "type": "image", 33 "url": "https://storage.example.com/attachments/img_001.jpg", 34 "mimetype": "image/jpeg", 35 "size": { 36 "width": 1024, 37 "height": 768 38 } 39 } 40 ], 41 "usage_data": { 42 "prompt_tokens": 200, 43 "completion_tokens": 60, 44 "model": "gpt-4" 45 }, 46 "tools_called": ["book_appointment"], 47 "tool_results": { 48 "book_appointment": { 49 "success": true, 50 "datetime": "2024-02-01T10:00:00Z" 51 } 52 }, 53 "analysis_result": { 54 "sentiment": "positive", 55 "intent": "schedule" 56 }, 57 "appointments": [ 58 { 59 "datetime": "2024-02-01T10:00:00Z", 60 "type": "consultation" 61 } 62 ] 63 } 64 }, 65 "lead_id": "lead_123", 66 "lead_contact": { 67 "number": "+15551234567", 68 "email": "john@example.com", 69 "name": "John Doe" 70 }, 71 "business_id": "biz_456", 72 "lead_created": false 73 }
Referencia de campos
Campos principales
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
timestamp | float | Sí | Marca de tiempo Unix epoch |
direction | string | Sí | inbound o outbound |
platform | string | Sí | Siempre whatsapp |
message_id | string | Sí | ID de mensaje de WhatsApp |
chat_id | string | Sí | ID del hilo de conversación |
content | string | Sí | Contenido del mensaje |
is_from_account | boolean | Sí | True si fue enviado por la cuenta conectada |
account_id | string | Sí | ID de cuenta de WhatsApp conectada |
social_event_type | string | Sí | Tipo de evento (ver valores abajo) |
Valores de social_event_type
| Valor | Descripción |
|---|---|
message_received | Nuevo mensaje recibido |
message_reaction | Reacción añadida al mensaje |
message_read | Mensaje marcado como leído |
message_edited | Mensaje fue editado |
message_deleted | Mensaje fue eliminado |
Objeto sender_attendee
| Campo | Tipo | Descripción |
|---|---|---|
attendee_id | string | ID interno del asistente |
attendee_name | string | Nombre visible |
attendee_provider_id | string | Número de teléfono |
attendee_profile_url | string | URL de foto de perfil (opcional) |
Campos opcionales
| Campo | Tipo | Descripción |
|---|---|---|
attendees | array | Lista de participantes de la conversación |
attachments | array | Adjuntos de medios |
usage_data | object | Uso de tokens LLM |
tools_called | array | Lista de nombres de herramientas ejecutadas |
tool_calls | array | Datos sin procesar de llamadas a herramientas |
tool_results | object | Resultados detallados de ejecución de herramientas |
analysis_result | object | Resultado del análisis de IA |
appointments | array | Datos de citas extraídos |
execution_context | object | Contexto del activador de origen |
reaction | string | Reacción emoji (para eventos de reacción) |
reaction_sender | object | Quién envió la reacción |
Array de attachments
| Campo | Tipo | Descripción |
|---|---|---|
id | string | ID del adjunto |
type | string | image, video, audio, document, sticker |
url | string | URL de descarga |
mimetype | string | Tipo MIME |
sticker | boolean | True si es sticker |
unavailable | boolean | True si expiró/no está disponible |
size | object | Dimensiones (ancho, alto) para imágenes/videos |
message_id | string | ID de mensaje asociado |
Campos de división de mensajes
Para mensajes largos que se dividen:
| Campo | Tipo | Descripción |
|---|---|---|
split_message_info | object | Metadatos de división |
original_full_message | string | Mensaje completo antes de dividir |
Campos de acumulación de mensajes
Para mensajes rápidos acumulados:
| Campo | Tipo | Descripción |
|---|---|---|
accumulation_info | object | Metadatos de acumulación |
accumulated_content | string | Contenido del mensaje combinado |