CRM - Agente con IA Developers

Campos disponibles

Esta guía responde la pregunta más frecuente al integrar: "¿qué puedo obtener de cada conversación y dónde está?". Los ejemplos usan GET /api/v1/accounts/{account_id}/conversations/{conversation_id} y GET .../conversations/{conversation_id}/messages.

Mapa de campos

Dato Dónde está Notas
Id de conversación id Es el número que ves en la URL del panel.
Bandeja / línea inbox_id El detalle de la bandeja (nombre, teléfono, tipo) está en GET .../inboxes/{id}.
Canal meta.channel Channel::Whatsapp, Channel::FacebookPage, Channel::Api, Channel::WebWidget, Channel::Email, etc. Algunas conexiones de Instagram usan Channel::FacebookPage; otras usan un canal propio o externo. Revisá la bandeja y sus metadatos.
Nombre y teléfono del contacto meta.sender.name, meta.sender.phone_number También email, identifier y additional_attributes del contacto.
Campaña / anuncio de origen additional_attributes.meta_referral Cuando se registró un origen de Meta; la actualización depende del canal. Ver origen de anuncios.
Agente asignado meta.assignee id, name, email, availability_status. Puede faltar si no está asignada.
Cuándo se asignó y quién asignó Mensaje de actividad "Asignado a {agente} por {usuario}" Ver mensajes de actividad.
Hilo completo de mensajes GET .../messages Timestamp, autor, texto, adjuntos, si es privado.
Etiquetas labels Array de strings.
Estado status open, pending, snoozed, resolved.
Eventos de estado (apertura, resolución, reapertura, con autor y fecha) Mensajes de actividad + webhook conversation_status_changed Ver abajo.
Notas privadas Mensajes con private: true Vienen en el mismo hilo.
Prioridad priority urgent, high, medium, low o null.
Atributos personalizados custom_attributes Los que definiste en Ajustes → Atributos personalizados.
Fechas created_at, last_activity_at, first_reply_created_at, waiting_since Epoch en segundos.

Ejemplo recortado de una conversación:

{
  "id": 4821,
  "inbox_id": 12,
  "status": "resolved",
  "labels": ["presupuesto-enviado", "lead-ads"],
  "priority": null,
  "created_at": 1725292800,
  "additional_attributes": {
    "meta_referral": {
      "source_type": "ad",
      "source_id": "120211234567890",
      "headline": "Cocinas a medida",
      "body": "Pedí tu presupuesto sin cargo",
      "ctwa_clid": "ARAkP...",
      "captured_at": "2026-09-02T14:00:00Z"
    }
  },
  "meta": {
    "channel": "Channel::Whatsapp",
    "sender": { "id": 991, "name": "Ana Pérez", "phone_number": "+5491155551234" },
    "assignee": { "id": 7, "name": "Lucía", "email": "lucia@empresa.com" }
  }
}

Mensajes

GET .../conversations/{conversation_id}/messages devuelve los últimos 20 mensajes; para ir hacia atrás pasá ?before={id_del_mensaje_más_viejo}. Cada mensaje tiene:

Campo Significado
id Id del mensaje.
created_at Epoch en segundos.
message_type 0 entrante (cliente), 1 saliente (agente o bot), 2 actividad (sistema), 3 template.
sender Quién lo escribió. sender.type es contact (cliente), user (agente) o agent_bot (bot). En mensajes de actividad no hay sender.
content Texto del mensaje. Para actividades, el texto del evento.
private true si es una nota privada (no se envió al cliente).
content_type text, input_select, cards, form, etc.
content_attributes Datos extra según el canal (por ejemplo, a qué mensaje responde).
attachments[] Adjuntos con file_type (image, audio, video, file, location, contact, share, story_mention), data_url y thumb_url.
status sent, delivered, read o failed en salientes.

Para distinguir el autor declarado, mirá sender.type. agent_bot identifica un AgentBot; user identifica un usuario, que también puede ser el dueño de un token usado por una integración. No asumas que todo user fue escrito manualmente.

Mensajes de actividad

Los cambios de asignación, estado, etiquetas y prioridad quedan registrados como mensajes con message_type: 2 dentro del mismo hilo, con created_at y el texto del evento en el idioma de la cuenta:

Evento Texto (español)
Asignación Asignado a {agente} por {usuario}
Autoasignación {usuario} auto-asignado a esta conversación
Desasignación Conversación no asignada por {usuario}
Asignación a equipo Asignado a {equipo} por {usuario}
Resolución La conversación fue marcada como resuelta por {usuario}
Reapertura La conversación fue reabierta por {usuario}
Pendiente / pospuesta La conversación fue marcada como pendiente por {usuario} / La conversación fue pospuesta por {usuario}
Resolución automática La conversación fue marcada por el sistema debido a {n} días de inactividad
Reapertura automática El sistema reabrió la conversación debido a un nuevo mensaje entrante.
Etiquetas {usuario} agregó {etiquetas} / {usuario} eliminó a {etiquetas}
Prioridad {usuario} estableció la prioridad a {prioridad} / {usuario} eliminó la prioridad

Los textos dependen del idioma de la cuenta (los de arriba son los de español). Cuando lo hace una regla de automatización o el bot, el texto lo indica en lugar del nombre de un usuario. Si necesitás estos eventos estructurados en lugar de texto, usá los webhooks conversation_updated y conversation_status_changed, que traen changed_attributes con el valor anterior y el nuevo.

Escritura

Acción Request
Agregar nota privada POST .../conversations/{id}/messages con {"content": "texto", "message_type": "outgoing", "private": true}
Enviar mensaje al cliente Igual, con "private": false (respeta la ventana de 24 h de WhatsApp; fuera de ella hay que usar un template).
Aplicar etiquetas POST .../conversations/{id}/labels con {"labels": ["etiqueta-1"], "mode": "append"}. Sin mode reemplaza el conjunto completo.
Asignar agente POST .../conversations/{id}/assignments con {"assignee_id": 7} (o {"team_id": 3}).
Cambiar estado POST .../conversations/{id}/toggle_status con {"status": "resolved"}.
Prioridad POST .../conversations/{id}/toggle_priority con {"priority": "high"}.
Atributos personalizados POST .../conversations/{id}/custom_attributes con {"custom_attributes": {"clave": "valor"}}. Reemplaza el objeto completo: conservá las otras claves.
Nota en el contacto POST .../contacts/{contact_id}/notes con {"content": "texto"}.

Administrá las etiquetas de la cuenta desde Ajustes → Etiquetas o POST .../labels. Para ejemplos completos y semántica de reemplazo, consultá gestionar conversaciones.

IDs, fechas y revisiones

Campo Cómo usarlo
id de conversación ID público relativo a la cuenta. Enlazalo siempre con account_id; no uses el ID interno de una base de datos.
conversation_id de mensaje por API El mismo ID público de conversación.
created_at, last_activity_at por API Epoch en segundos. Multiplicá por 1.000 para new Date(...) en JavaScript.
created_at de un evento de mensaje ISO 8601. En los eventos de conversación, created_at sigue siendo epoch.
snoozed_until Puede ser una fecha ISO 8601 o null.
history_revision Revisión opaca del historial cuando la instalación la incluye. Puede cambiar por creación, edición o borrado de mensajes. Compará igualdad; no la interpretes como una fecha ni como un cursor.

Los campos opcionales pueden faltar o venir en null. En algunas fechas calculadas, la ausencia aparece como 0; no la conviertas en una fecha de negocio válida. No confundas meta.channel de la respuesta REST con channel en la raíz de un webhook de conversación.

¿Falta algo en la documentación?

Contanos qué intentabas hacer y qué información necesitás. El equipo revisa cada reporte para mejorar estas guías.

La página se incluye en el reporte. No necesitás una cuenta de Monday.