Su primer mensaje
Envíe un texto de WhatsApp, lea la conversación y dé al cliente los checks azules.
Enviar un texto
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 👋"}'{
"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.
| Id | Dónde aparece | Para qué usarlo |
|---|---|---|
messageId (un cuid) | messageId en POST, id en GET, message.id en ambos webhooks | El único id para relacionar datos. Guárdelo al enviar, deduplique con él y úselo para asociar los eventos message.status. |
waMessageId | waMessageId (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
curl "https://developers.wasync.app/api/v1/messages?connectionId=conn_8f3a21&limit=20" \
-H "Authorization: Bearer $WASYNC_API_KEY"{
"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
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
Su primera llamada
Liste las conexiones a las que puede acceder su clave y compruebe que tiene capacidad antes de aprovisionar otra.
Producto
La aplicación WASync dentro de Bitrix24, documentada función por función. Estas páginas son las que enlaza la lista de "Novedades" de la aplicación, y se mantienen al día a medida que cambian las funciones.