> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getnexor.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Eventos: Mensaje enviado, entregado y recibido

> Recibe un webhook cuando se envía un mensaje a un lead, cuando le llega, o cuando el lead escribe, en vez de consultar la API.

Estos eventos le avisan a tu servidor de cada mensaje entre tu agente y un lead, en el momento en que ocurre. Úsalos en vez de consultar la API para buscar mensajes nuevos.

| Tipo de evento | Se dispara cuando | Canales |
| - | - | - |
| `message.sent` | El proveedor acepta un mensaje para el lead. Lo puede enviar el agente, una cadencia o una persona de tu equipo. | WhatsApp, SMS, correo, iMessage, Instagram, Messenger |
| `message.delivered` | El proveedor confirma que el mensaje llegó al teléfono o al correo del lead | WhatsApp, SMS, correo |
| `message.received` | El lead envía un mensaje | WhatsApp, SMS, correo, iMessage, Instagram, Messenger |

Cada evento se dispara como máximo una vez por mensaje. Las llamadas no disparan estos eventos.

Un mensaje que no se pudo enviar nunca dispara `message.sent`. Para los fallos, usa [Outreach fallido](/docs/es/api/webhooks/outreach-failed.md).

Si WhatsApp informa que el mensaje fue leído antes de informar que fue entregado, `message.delivered` igual se dispara una vez.

## Payload

```json theme={null}
{
  "event_type": "message.received",
  "event_id": "...",
  "webhook_id": "...",
  "delivery_id": "...",
  "timestamp": "2026-10-22T16:30:05.000Z",
  "client_id": "...",
  "test": false,
  "data": {
    "message": {
      "id": "uuid",
      "direction": "inbound",
      "channel": "whatsapp",
      "type": "text",
      "text": "Hola, ¿tienen disponibilidad mañana?",
      "status": "delivered",
      "provider_message_id": "wamid.HBgL...",
      "thread_id": "uuid",
      "sent_at": "2026-10-22T16:30:00.000Z"
    },
    "lead": {
      "id": "uuid",
      "first_name": "Tony",
      "last_name": "Stark",
      "email": "tony@example.com",
      "phone": "+15550000000",
      "company": "Stark Industries",
      "source": "api",
      "external_id": null,
      "metadata": {}
    },
    "workflow": {
      "id": "uuid",
      "name": "Lead a intención de compra"
    }
  }
}
```

## Campos

### `data.message`

| Campo | Tipo | Descripción |
| - | - | - |
| `id` | string (uuid) | ID del mensaje. Úsalo para ignorar una entrega que ya procesaste. |
| `direction` | string | `outbound` para `message.sent` y `message.delivered`, `inbound` para `message.received` |
| `channel` | string | `whatsapp`, `sms`, `email`, `imessage`, `instagram` o `messenger` |
| `type` | string \| null | Tipo de mensaje cuando se conoce, como `text`, `template`, `image` o `audio` |
| `text` | string \| null | Texto del mensaje |
| `status` | string \| null | `sent` para `message.sent`, `delivered` para `message.delivered`. En `message.received` es el estado guardado del mensaje entrante. |
| `provider_message_id` | string \| null | ID del mensaje en el proveedor, cuando se conoce |
| `thread_id` | string (uuid) \| null | ID de la conversación. `null` en correo. |
| `sent_at` | string (ISO 8601) \| null | Cuándo se envió el mensaje |

### `data.lead`

| Campo | Tipo | Descripción |
| - | - | - |
| `id` | string (uuid) | ID del lead |
| `first_name` | string \| null | Nombre del lead |
| `last_name` | string \| null | Apellido del lead |
| `email` | string \| null | Correo del lead |
| `phone` | string \| null | Teléfono del lead |
| `company` | string \| null | Empresa del lead |
| `source` | string | Origen guardado para el lead |
| `external_id` | string \| null | ID en un sistema externo |
| `metadata` | object | Metadata del lead |

### `data.workflow`

La tarea a la que pertenece el mensaje. Si Nexor no puede saber cuál es, ambos campos son `null`.

| Campo | Tipo | Descripción |
| - | - | - |
| `id` | string (uuid) \| null | ID de la tarea |
| `name` | string \| null | Nombre de la tarea |

## Filtros

1. Usa el selector de **Tarea** para recibir mensajes de todas las tareas o de una sola. Un mensaje sin tarea conocida no coincide con un webhook de una sola tarea.
2. Agrega un filtro de **Canal** para recibir mensajes de un solo canal, por ejemplo solo WhatsApp.

Un filtro solo aplica a los eventos que tienen su campo. En un webhook que también escucha cambios de etapa, un filtro de Canal no limita los eventos de cambio de etapa.

## Pruebas

Presiona **Probar** en el webhook para enviar a tu endpoint un ejemplo del evento de mensaje seleccionado. Las entregas de prueba llevan `"test": true`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.