- List WhatsApp conversations —
GET /api/v2/public/whatsapp/conversations - List messages in a WhatsApp conversation —
GET /api/v2/public/whatsapp/conversations/{session_id}/messages
Conceptos
- Una conversación (una sesión) es una ventana de conversación de WhatsApp acotada con un único número de cliente. Un cliente acumula varias conversaciones con el tiempo, a medida que las ventanas se abren y se cierran.
- Cada conversación pertenece a un cliente (cuando el número coincide con un contacto) y contiene una lista ordenada de mensajes.
- Las conversaciones tienen un estado (
new,ai_handling,human_handling,resolved,expired), una dirección (inbound/outbound), una etiqueta de disposición opcional y un sentimiento opcional.
Quién envió qué
Tres campos responden a tres preguntas distintas; no los confundas:
Una misma conversación suele mezclar varias personas y uno o más agentes de IA (un bot abre,
una persona toma el control, otra cierra), y por eso
participants existe aparte de
assigned_users.
participants siempre está completo: cubre toda la conversación aunque pidas
include_messages=false o la transcripción venga recortada. Solo aparecen remitentes
identificados; los mensajes sincronizados desde la app de WhatsApp Business no tienen
remitente atribuible y no aportan ninguna entrada.
Solicitudes habituales
- Solo metadatos
- Transcripciones completas, más recientes primero
- Filtrar por cliente y disposición
- Mensajes por persona del equipo
La forma más rápida de ver qué hay.
participants viene completo igualmente.Sincronización incremental
No vuelvas a descargar todo en cada ejecución:1
Guarda el updated_at más reciente que hayas visto
Cada conversación trae
updated_at, que avanza cuando llega un mensaje o cambian el
estado, la disposición o el resumen.2
Pide solo lo que cambió
En la siguiente ejecución envía esa marca como
updated_after y ordena con
sort_by=updated_at para un orden predecible:3
Recorre las páginas
Mantén los mismos filtros y aumenta
offset en limit hasta leer count elementos.Conversaciones largas
Cada conversación incluye como máximomax_messages_per_session mensajes (500 por defecto,
los más antiguos primero). Una transcripción más larga se recorta y se marca con
has_more_messages: true: pide el resto con el endpoint de mensajes, paginando con
limit / offset:
participants completo de la conversación, así
que nunca necesitas una segunda llamada al listado solo para eso.
Conversación de ejemplo
Notas y límites
- Solo lectura. Estos endpoints nunca modifican conversaciones.
- Los archivos multimedia no se descargan: solo se devuelven
kind,mime,filenameycaption. - Los campos internos (modelo, tokens, costo, claves de almacenamiento) nunca se exponen.
- Cambios aditivos. Pueden añadirse campos nuevos (
senderyparticipantsllegaron así, junto a unsender_typesin cambios). Ignora los campos que no reconozcas. - Hoy no se aplica límite de solicitudes; pagina con
limit≤ 50 en lugar de pedir cargas máximas en bucle.