mirlo

Mensajes

Enviar y consultar mensajes via WhatsApp

Verificar Ventana de Conversacion (24h)

WhatsApp permite enviar mensajes de texto libre solo dentro de una ventana de 24 horas desde el ultimo mensaje del contacto. Fuera de esa ventana, unicamente puedes iniciar conversacion con un template aprobado por Meta.

Este endpoint te dice si la ventana esta abierta o cerrada. Solo necesitas el numero de telefono.

Flujo recomendado

  1. Consulta la ventana del contacto
  2. Ventana open — envia texto libre con POST .../messages
  3. Ventana closed — envia un template con POST .../messages/send-template

Endpoint

GET /v2/messages/organizations/{organization_id}/contacts/addresses/{address}/service-window?organization_address={org_address}
ParametroTipoUbicacionDescripcion
organization_idstringPath *UUID de tu organizacion
addressstringPath *Numero del contacto (ej: 5215512345678)
organization_addressstringQuery *Phone Number ID de tu numero de WhatsApp

Ejemplo:

curl -X GET "https://api.mirlo.com/v2/messages/organizations/{organization_id}/contacts/addresses/5215512345678/service-window?organization_address=100000000000001" \
  -H "X-API-Key: sk_live_tu_api_key"

Response:

{
  "status": "open"
}
StatusSignificadoAccion
openVentana activa (ultimo mensaje entrante hace menos de 24h)Enviar texto libre
closedVentana cerrada (mas de 24h sin mensaje entrante)Enviar template

La ventana de 24h se renueva con cada mensaje entrante del contacto. Consulta este endpoint antes de cada envio para elegir entre texto libre o template.


Enviar Template Message

Envia un mensaje de WhatsApp usando un template de Meta a un solo destinatario. Este es el endpoint mas simple y recomendado para la mayoria de integraciones y automatizaciones.

POST /v2/messages/organizations/{organization_id}/messages/send-template

Request Body

{
  "organization_address": "100000000000001",
  "to": "+525512345678",
  "meta_template_id": "999888777666555",
  "do_not_pause": false,
  "components": [
    {
      "type": "body",
      "parameters": [
        { "type": "text", "parameter_name": "nombre_cliente", "text": "Juan Perez" },
        { "type": "text", "parameter_name": "numero_pedido", "text": "#12345" }
      ]
    }
  ]
}

Ejemplo con imagen en header

{
  "organization_address": "100000000000001",
  "to": "+525512345678",
  "meta_template_id": "999888777666555",
  "do_not_pause": true,
  "components": [
    {
      "type": "header",
      "parameters": [
        { "type": "image", "image": { "link": "https://example.com/image.jpg" } }
      ]
    },
    {
      "type": "body",
      "parameters": [
        { "type": "text", "parameter_name": "nombre", "text": "Juan" }
      ]
    }
  ]
}

Parametros

CampoTipoRequeridoDescripcion
organization_addressstringSiPhone Number ID de WhatsApp Business
tostringSiNumero de telefono del destinatario (formato E.164)
meta_template_idstringSiID del template en Meta
do_not_pausebooleanNoSi es true, no pausa el agente/bot despues de enviar. Default: false
componentsarrayNoVariables del template (header, body, buttons)

Response (201 Created)

{
  "id": "12345678-abcd-1234-efgh-123456789abc",
  "conversation_id": "87654321-dcba-4321-hgfe-cba987654321",
  "external_id": "wamid.HBgNNTIxNTUzOTg3NTg0NhUCABEYEjE4RTZBRUQyRjc3OEQ0NDQ0MwA=",
  "status": {
    "pending": "2026-01-22T20:26:38.569Z",
    "accepted": "2026-01-22T20:26:39.161Z"
  },
  "template_name": "mi_template",
  "template_language": "es"
}

Consultar estado del mensaje

GET /v2/messages/organizations/{organization_id}/messages/{id}
EstadoDescripcion
pendingCreado, esperando envio
acceptedAceptado por Meta
sentEnviado
deliveredEntregado al dispositivo
readLeido por el usuario
failedError (ver status.error para detalles)

Errores comunes

CodigoMensaje
400Organization address does not have an access token
400Parameter name is missing (template usa NAMED params)
404Organization address not found
404Failed to get template from Meta

Enviar Mensaje (Texto Libre)

Envia un mensaje de texto directo (sin template) a un destinatario.

Los mensajes sin template solo pueden enviarse dentro de la ventana de 24 horas despues de que el usuario te envio un mensaje. Fuera de esta ventana, debes usar templates.

POST /v2/messages/organizations/{organization_id}/messages

Request Body

{
  "organization_address": "100000000000001",
  "service": "whatsapp",
  "contact_address": "5215512345678",
  "direction": "outgoing",
  "content": {
    "kind": "text",
    "text": "Hola, gracias por contactarnos. En que podemos ayudarte?"
  }
}

Ejemplo enviando imagen

{
  "organization_address": "100000000000001",
  "service": "whatsapp",
  "contact_address": "5215512345678",
  "direction": "outgoing",
  "content": {
    "kind": "image",
    "text": "Aqui esta la imagen que solicitaste",
    "file": {
      "uri": "https://example.com/imagen.jpg",
      "mime_type": "image/jpeg"
    }
  }
}

Parametros

CampoTipoRequeridoDescripcion
organization_addressstringSiPhone Number ID de WhatsApp Business
servicestringSiServicio: whatsapp, instagram, messenger
contact_addressstringSiNumero de telefono del destinatario (sin prefijo +)
directionstringSiUsar outgoing para enviar mensajes
contentobjectSiObjeto con el contenido del mensaje
content.kindstringSiTipo: text, image, video, audio, document
content.textstringDependeTexto del mensaje (requerido para text, caption para image/video)

Response (201 Created)

{
  "id": "12345678-abcd-1234-efgh-123456789abc",
  "conversation_id": "87654321-dcba-4321-hgfe-cba987654321",
  "external_id": "wamid.HBgNNTIxNTUzOTg3NTg0NhUCABEYEjE4RTZBRUQyRjc3OEQ0NDQ0MwA=",
  "status": {
    "pending": "2026-01-22T20:26:38.569Z",
    "accepted": "2026-01-22T20:26:39.161Z"
  }
}

Errores comunes

CodigoMensaje
400Organization address does not have an access token
400Message failed to send (fuera de ventana de 24 horas)
404Organization address not found

Listar Mensajes

GET /v2/messages/organizations/{organization_id}/messages
ParametroTipoDescripcion
conversation_idUUIDFiltrar por conversacion
directionstringFiltrar por direccion (incoming, outgoing)
start_dateISO 8601Fecha inicio del rango
end_dateISO 8601Fecha fin del rango

Ejemplos:

# Obtener ultimos 50 mensajes
curl -X GET "https://api.mirlo.com/v2/messages/organizations/{organization_id}/messages?conversation_id={id}&take=50" \
  -H "X-API-Key: sk_live_tu_api_key"

# Mensajes del ultimo mes
curl -X GET "https://api.mirlo.com/v2/messages/organizations/{organization_id}/messages?conversation_id={id}&start_date=2025-12-22T00:00:00Z&end_date=2026-01-22T23:59:59Z" \
  -H "X-API-Key: sk_live_tu_api_key"

# Solo mensajes entrantes
curl -X GET "https://api.mirlo.com/v2/messages/organizations/{organization_id}/messages?conversation_id={id}&direction=incoming" \
  -H "X-API-Key: sk_live_tu_api_key"

Tipos de Contenido

TipoDescripcion
textMensaje de texto
imageImagen
videoVideo
audioAudio
documentDocumento
locationUbicacion
data + templateTemplate de WhatsApp

Referencia Rapida de Endpoints

Todos bajo https://api.mirlo.com/v2/messages/organizations/{organization_id}

MetodoEndpointDescripcion
POST.../messages/send-templateEnviar template message (recomendado)
POST.../messagesEnviar mensaje de texto (ventana 24h)
GET.../messagesListar mensajes
GET.../messages/{id}Obtener un mensaje
GET.../contacts/addresses/{address}/service-windowVerificar ventana de servicio 24h

En esta pagina