Marcar mensaje como leído
Confirma la lectura del mensaje WhatsApp de un contacto cuando lo hayas leído o hayas empezado a gestionar su solicitud. También puedes mostrar un indicador de escritura mientras preparas una respuesta.
Requisitos previos
Necesitas una clave API con permiso de escritura WhatsApp y el ID de mensaje Bird (wam_…) de un mensaje que tu espacio de trabajo haya recibido. Usa data.whatsapp_id del webhook whatsapp.received, o el id del mensaje desde el registro WhatsApp.
Reemplaza el ID de mensaje de ejemplo con el ID de un mensaje que tu espacio de trabajo haya recibido. Inicializa el cliente para tu lenguaje usando la guía SDK de TypeScript, Python, Go o PHP. Para los ejemplos de CLI, instala y autentícate en la CLI con acceso de escritura WhatsApp. Usa el host API de tu región del espacio de trabajo en las solicitudes cURL.
1. Marcar el mensaje recibido como leído
Llama a Marcar un mensaje como leído con el ID del mensaje recibido. WhatsApp también marca como leídos los mensajes anteriores en la misma conversación, así que elige el mensaje que represente hasta dónde has leído.
const acknowledgement = await bird.whatsapp.markRead("wam_01krdgeqcxet5s7t44vh8rt9mg", {});
console.log(acknowledgement.typing_indicator);ack = client.whatsapp.mark_read("wam_01krdgeqcxet5s7t44vh8rt9mg")
print(ack.typing_indicator)ack, err := client.Whatsapp.MarkRead(context.Background(), "wam_01krdgeqcxet5s7t44vh8rt9mg", bird.WhatsappMarkReadParams{})
if err != nil {
log.Fatal(err)
}
fmt.Println(ack.TypingIndicator)use MessageBird\Wire\Model\WhatsAppReadReceiptRequest;
$ack = $bird->whatsapp->markRead(
'wam_01krdgeqcxet5s7t44vh8rt9mg',
new WhatsAppReadReceiptRequest(),
);
var_dump($ack->getTypingIndicator());bird whatsapp mark-read wam_01krdgeqcxet5s7t44vh8rt9mgcurl -X POST "https://us1.platform.bird.com/v1/whatsapp/messages/wam_01krdgeqcxet5s7t44vh8rt9mg/read" \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'Una solicitud exitosa devuelve 202 con typing_indicator: false. La confirmación se acepta para procesamiento; la respuesta no confirma que el contacto la haya visto. Las confirmaciones de lectura no generan ningún mensaje saliente facturable.
2. Mostrar escritura mientras preparas una respuesta
Para marcar el mensaje como leído y mostrar escritura, pasa typing_indicator: true en la misma solicitud:
await bird.whatsapp.markRead("wam_01krdgeqcxet5s7t44vh8rt9mg", {
typing_indicator: true,
});ack = client.whatsapp.mark_read("wam_01krdgeqcxet5s7t44vh8rt9mg", typing_indicator=True)
print(ack.typing_indicator)ack, err := client.Whatsapp.MarkRead(context.Background(), "wam_01krdgeqcxet5s7t44vh8rt9mg", bird.WhatsappMarkReadParams{
TypingIndicator: bird.Ptr(true),
})
if err != nil {
log.Fatal(err)
}
fmt.Println(ack.TypingIndicator)$ack = $bird->whatsapp->markRead(
'wam_01krdgeqcxet5s7t44vh8rt9mg',
(new WhatsAppReadReceiptRequest())->setTypingIndicator(true),
);
var_dump($ack->getTypingIndicator());bird whatsapp mark-read wam_01krdgeqcxet5s7t44vh8rt9mg --typing-indicator=truecurl -X POST "https://us1.platform.bird.com/v1/whatsapp/messages/wam_01krdgeqcxet5s7t44vh8rt9mg/read" \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"typing_indicator": true}'WhatsApp desactiva el indicador cuando envías un mensaje o después de 25 segundos. Repetir la llamada es seguro. Para refrescar la escritura, omite Idempotency-Key o usa una clave nueva; reproducir una solicitud anterior no refresca el indicador.
3. Comprobar el mensaje recibido
Recupera el mensaje para inspeccionar read_at. Después de que WhatsApp acepte la confirmación, el mensaje recibido puede incluir esta marca de tiempo y conservar su estado received. No existe un recurso de confirmación separado ni un webhook de entrega para rastrear.
Solución de problemas
- 404 (E15071): Verifica el ID del mensaje y el espacio de trabajo. Bird puede resolver un mensaje para confirmación durante 15 días; un mensaje más antiguo no se puede marcar como leído con esta operación.
- 422 (E15074): Usa un mensaje entrante que tu espacio de trabajo pueda confirmar. Un mensaje saliente no es un objetivo válido.
- 503 (E15073): Reintenta después de un fallo temporal al resolver el mensaje.
Próximos pasos
Recursos relacionados
Continúa con la documentación, guías y ejemplos sobre este tema. Los recursos están en inglés.
Ver la guíaConnecting WhatsApp to Bird: from buying a number to a live channelComprender el conceptoWhat is the 24-hour customer service window on WhatsApp?Usar la herramientaWhatsApp message builderExplorar la funcionalidadWhatsApp
Prueba el ejercicio y obtén un resumen de implementación