# Eventos de reacción de WhatsApp

Una reacción con emoji anota un mensaje existente en lugar de crear uno nuevo, por lo que nunca aparece como un mensaje independiente ni en los [eventos de ciclo de vida](/docs/guides/whatsapp/events/lifecycle) del mensaje. Bird mantiene dos vistas en su lugar: las reacciones presentes en el mensaje en este momento y un registro de cada cambio que llevó a ese estado. Ambas registran cambios del contacto y de tu número comercial.

Para recibir aviso de la reacción de un contacto en el momento en que ocurre, suscríbete a [`whatsapp.reacted`](/docs/guides/whatsapp/webhooks/reactions). Para agregar o eliminar las tuyas, consulta [Enviar reacciones](/docs/guides/whatsapp/reactions).

## Requisitos previos

Una clave API con permiso de lectura WhatsApp, y el ID (`wam_…`) del mensaje al que se reaccionó.

## 1. Leer las reacciones actuales

Si tu aplicación muestra la reacción actualmente asociada a un mensaje, [recupera el mensaje](/docs/api/reference/get-whatsapp-message) y lee su `reactions`. La lista contiene una reacción vigente por remitente y se omite cuando no hay reacciones presentes.

Para `GET /v1/whatsapp/messages/wam_01ky8b3xq4gd7pmzn2ka51f7te`, los campos relacionados con reacciones tienen esta forma (otros campos del mensaje omitidos):

```json
{
  "id": "wam_01ky8b3xq4gd7pmzn2ka51f7te",
  "reactions": [
    {
      "emoji": "👍",
      "from": { "phone_number": "+14155550100" }
    }
  ]
}
```

El mensaje conserva su contenido, dirección y estado de entrega originales. `reactions[].from` identifica a la persona que reaccionó.

Este es el estado que debes mostrar. Los [webhooks de reacción](/docs/guides/whatsapp/webhooks/reactions) pueden compartir marca de tiempo y llegar desordenados, así que úsalos como disparador para volver a leer el mensaje en lugar de como el estado actual.

## 2. Leer el registro de reacciones

[Lista de eventos de reacción](/docs/api/reference/list-whatsapp-message-reaction-events) con `GET /v1/whatsapp/messages/{message_id}/reaction-events` para ver cada cambio en el mensaje referenciado, del más reciente al más antiguo: adiciones, reemplazos y eliminaciones. Cada entrada tiene un ID de reacción (`war_…`), el `emoji`, quién hizo el cambio en `from`, una marca de tiempo `occurred_at` y un `status`:

- `received`: un cambio de un contacto.
- `sent`: WhatsApp aceptó un cambio de [tu número comercial](/docs/guides/whatsapp/reactions).
- `failed`: WhatsApp rechazó tu cambio.
- `rejected`: Bird rechazó tu cambio antes de enviarlo.

Una entrada `failed` o `rejected` incluye el motivo en `error`. Una eliminación incluye `emoji: null`. Un cambio tuyo que aún está pendiente no tiene entrada hasta que se conozca su resultado. Una reacción nunca se cobra, por lo que ningún fallo aquí es de facturación.

El API de eventos de reacción devuelve una respuesta paginada. Este ejemplo muestra una reacción comercial rechazada y una reacción de contacto recibida anteriormente:

```json
{
  "data": [
    {
      "id": "war_01krdgeqcxet5s7t44vh8rt9mh",
      "emoji": "🎉",
      "status": "rejected",
      "from": {
        "phone_number": "+13124495569"
      },
      "error": {
        "code": "internal_error",
        "description": "the receiving number is no longer connected",
        "occurred_at": "2026-08-28T19:04:22Z"
      },
      "occurred_at": "2026-08-28T19:04:22Z"
    },
    {
      "id": "war_01krdgeqcxet5s7t44vh8rt9mg",
      "emoji": "👍",
      "status": "received",
      "from": {
        "phone_number": "+14155550100",
        "bsuid": "US.13491208655302741918"
      },
      "occurred_at": "2026-08-28T19:01:10Z"
    }
  ],
  "next_cursor": null,
  "prev_cursor": null,
  "refresh_cursor": "eyJ2IjoxLCJzIjoiMjAyNi0wOC0yOFQxOTowNDoyMloiLCJpIjoiMDE5ZTFiMDctNWQ5ZC03NjhiLTkzZTgtODRkYzUxOGQyNjkxIn0"
}
```

El historial de reacciones es independiente de los eventos de entrega del mensaje. El endpoint de [eventos de ciclo de vida](/docs/guides/whatsapp/events/lifecycle) no contiene cambios de `whatsapp.reacted`. Para retención y paginación, sigue la [referencia del registro de reacciones](/docs/api/reference/list-whatsapp-message-reaction-events).

## Solución de problemas

- **La reacción no aparece en la lista de mensajes**: Busca el mensaje original. Una reacción está asociada a él y no tiene una fila de mensaje independiente.
- **El estado de la reacción cambia inesperadamente**: Lee el `reactions` del mensaje en lugar de ordenar los eventos de webhook por hora de llegada o marca de tiempo.

## Próximos pasos

- [Webhooks de reacción](/docs/guides/whatsapp/webhooks/reactions): recibe notificaciones cuando un contacto reacciona
- [Enviar o eliminar una reacción](/docs/guides/whatsapp/reactions)
- [Eventos de ciclo de vida](/docs/guides/whatsapp/events/lifecycle): la línea de tiempo de entrega de un mensaje

## Related resources

- [Connecting WhatsApp to Bird: from buying a number to a live channel](/learn/whatsapp/connecting-whatsapp-to-bird) (video)
- [What is the 24-hour customer service window on WhatsApp?](/explained/whatsapp/what-is-the-24-hour-customer-service-window) (answer)
- [WhatsApp message builder](/tools/whatsapp-message-builder) (tool)
- [WhatsApp](/whatsapp-api) (product)

[Get an implementation brief](/learn/workspace?topic=whatsapp)
