What's new, 21 October 2026: A customer who sends several messages before the bot's first reply no longer gets the opening sequence of a Chat Flow twice
WASync · Developers

Su primer mensaje

Envíe un texto de WhatsApp, lea la conversación y dé al cliente los checks azules.

Enviar un texto

POST /messages
curl -X POST https://developers.wasync.app/api/v1/messages \
  -H "Authorization: Bearer $WASYNC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"connectionId":"conn_8f3a21","to":"40700000000","text":"Hi from my app 👋"}'
200 response
{
  "messageId": "cmqj3k2ab0001xyz",
  "waMessageId": "[email protected]_3EB0A1B2C3",
  "status": "sent"
}

to son solo dígitos en formato internacional, sin +; por ejemplo, 40700000000. text admite como máximo 4096 caracteres. Para enviar un archivo, use media en lugar de text: { filename, mimetype, data (base64, ≤ 16 MB), caption? }. Debe enviar exactamente uno de los dos. Las notas de voz usan mimetype: audio/ogg y un nombre de archivo voice-*.ogg. Usa whatsapp.send.

Configure un timeout HTTP de al menos 180 segundos

Un envío qr suele tardar de 1 a 7 s, hasta unos 20 s con textos largos, y la ruta de autorreparación puede tardar ~2,5 minutos. Un envío cloud_api tarda alrededor de 1 s. Un envío lento no es un fallo: si su cliente se rinde a los 30 s y reintenta, el cliente recibirá el mensaje dos veces. Pase siempre un idempotencyKey (un UUID por cada envío lógico) y reintente con el mismo.

Dos ids: relacione por el correcto

La respuesta incluye dos identificadores y no son intercambiables.

IdDónde aparecePara qué usarlo
messageId (un cuid)messageId en POST, id en GET, message.id en ambos webhooksEl único id para relacionar datos. Guárdelo al enviar, deduplique con él y úselo para asociar los eventos message.status.
waMessageIdwaMessageId (REST), wa_id (webhooks), wa_message_id (envío de archivos)Tickets de soporte y depuración. Puede ser null: nunca relacione ni deduplique con él.

Conviene prever un caso degradado: { "messageId": null, "waMessageId": "…", "status": …, "persisted": false } con HTTP 200 significa que el mensaje se entregó, pero no se guardó. No lo reintente.

Leer la conversación

GET /messages
curl "https://developers.wasync.app/api/v1/messages?connectionId=conn_8f3a21&limit=20" \
  -H "Authorization: Bearer $WASYNC_API_KEY"
200 response
{
  "messages": [
    {
      "id": "cmqj3k2ab0001xyz",
      "waMessageId": "[email protected]_3EB0A1B2C3",
      "connectionId": "conn_8f3a21",
      "direction": "outgoing",
      "text": "Hi from my app 👋",
      "mediaUrl": null,
      "mediaType": null,
      "status": "delivered",
      "errorMessage": null,
      "createdAt": "2026-07-22T10:00:00.000Z"
    }
  ],
  "nextCursor": "cmqj3k2ab0001xyz",
  "hasMore": true
}

Del más reciente al más antiguo, con paginación por cursor: limit va de 1 a 100 (por defecto 20) y cursor recibe el nextCursor de la respuesta anterior. Usa whatsapp.read.

Dar al cliente los checks azules

POST /messages/read
curl -X POST https://developers.wasync.app/api/v1/messages/read \
  -H "Authorization: Bearer $WASYNC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"connectionId":"conn_8f3a21","phone":"40700000000"}'

Llame a este endpoint cuando un operador abra la conversación en su interfaz. De lo contrario, nadie abre el chat en WhatsApp, los mensajes del cliente se quedan con los dos checks grises y la conversación parece ignorada. El cuerpo es { connectionId, phone?, messageId? }, con al menos uno de phone / messageId (el cuid de un mensaje entrante; si se envían ambos, prevalece messageId). Usa whatsapp.send, y no whatsapp.read, porque transmite un acuse de lectura al cliente. Es idempotente, no requiere clave y no tiene límite de frecuencia. Devuelve { "ok": true, "marked": 3 }.

Siguiente

  • Reciba avisos de los mensajes entrantes en lugar de consultar periódicamente: Webhooks.
  • Constrúyalo sin código: n8n o MCP.
  • Genere un cliente a partir del contrato: npx @openapitools/openapi-generator-cli generate -i https://developers.wasync.app/openapi.json -g typescript-fetch -o ./wasync-client
¿Le resultó útil esta página?

On this page