Contacts

Envía un mensaje al contacto (como operador)

El mensaje siempre queda guardado en la conversación; delivery.ok dice si además salió por el canal. Un 2xx con delivery.ok: false significa "quedó registrado pero no le llegó al contacto" — hay que mirarlo, no alcanza con el código HTTP.

Desde la bandeja (sesión del panel) el envío es una intervención humana: pausa el piloto automático por los minutos que tenga configurados el workspace (paused_until en la respuesta) y viaja con el tag HUMAN_AGENT en Messenger/IG.

Con API key el envío es automático: NO pausa el piloto y respeta la pausa vigente. Si el contacto está silenciado (piloto apagado, pausa vigente o chat en «Hablar con humano») devuelve 409 autopilot_silenced y no se envía ni se guarda nada.

Pide el scope channels:send, no contacts:write. Una key de test (met_test_) no puede ejercerlo: devuelve 403 test_mode_restricted.

post/contacts/{contactId}/messages

Request

  • Base URL: https://api.met.meteor.com.co/api/v1
  • URL: https://api.met.meteor.com.co/api/v1/contacts/{contactId}/messages
  • Auth: one of:
    • bearer (a scheme the document does not define)
    • HTTP bearer

Path parameters

contactIdnumber required

ID del contacto del CRM.

Request body

client_message_idstring uuid

Identidad estable de la intención de envío. La genera el navegador antes del primer POST y la conserva en cualquier reintento; así una respuesta HTTP perdida no produce un segundo mensaje para el contacto.

contentstring required

Puede venir vacío cuando el mensaje es solo adjuntos (ej. nota de voz sin texto) — el "ni texto ni adjuntos" lo rechaza el servicio, no el DTO.

line_idstring

Línea emisora, para el conmutador de la cabecera del chat.

Sin esto el envío sale siempre por la línea del último entrante, que es lo correcto al responder. Pero con varias líneas conectadas un operador puede querer ESCRIBIR PRIMERO por otra —abrir la conversación desde el número de ventas cuando la persona venía hablando con soporte—, y esa intención no se puede deducir del historial: hay que declararla.

Tiene que ser una línea del workspace; si no, el envío falla con detalle en vez de salir por un número equivocado (strictLineId del resolver).

Response

successtrue required

Siempre true en una respuesta 2xx.

Example response

{
  "data": {
    "delivery": {
      "error": "Contacto sin teléfono",
      "ok": true
    },
    "message": {
      "agent_id": 77,
      "channel_id": 5,
      "contact_id": 4821,
      "content": "¿Todavía tienen disponibilidad para el viernes?",
      "created_at": "2026-07-30T04:12:33.120385Z",
      "id": 918273,
      "message_type": "text",
      "origin": "panel",
      "role": "user",
      "sent_by_name": "Ana Ruiz",
      "sent_by_user_id": 42,
      "source": "whatsapp"
    },
    "paused_until": "2026-07-30T04:42:33.120Z"
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.