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

Ваше первое сообщение

Отправьте текстовое сообщение в WhatsApp, прочитайте переписку и покажите клиенту синие галочки.

Отправка текста

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 указываются только цифры в международном формате, без +, например 40700000000. Длина text — не более 4096 символов. Для медиафайлов передайте media вместо text: { filename, mimetype, data (base64, ≤ 16 MB), caption? } — строго одно из двух. Для голосовых сообщений используйте mimetype: audio/ogg и имя файла вида voice-*.ogg. Требуется whatsapp.send.

Установите HTTP-таймаут не менее 180 секунд

Отправка через qr обычно занимает 1–7 с, для длинных текстов — до 20 с, а путь самовосстановления может занять около 2,5 минуты. Отправка через cloud_api занимает около 1 с. Медленная отправка — это не ошибка: клиент, который сдаётся через 30 с и повторяет запрос, отправит покупателю сообщение дважды. Всегда передавайте idempotencyKey (UUID на каждую логическую отправку) и повторяйте запрос с тем же ключом.

Два идентификатора — используйте для связи нужный

В ответе приходят два идентификатора, и они не взаимозаменяемы.

IdГде встречаетсяДля чего использовать
messageId (cuid)messageId в POST, id в GET, message.id в обоих webhooksЕдинственный идентификатор для связывания. Сохраните его при отправке, дедуплицируйте по нему, сопоставляйте с ним события message.status.
waMessageIdwaMessageId (REST), wa_id (webhooks), wa_message_id (отправка медиа)Обращения в поддержку и отладка. Может быть null — не связывайте и не дедуплицируйте по нему.

Стоит предусмотреть один вырожденный случай: ответ { "messageId": null, "waMessageId": "…", "status": …, "persisted": false } с HTTP 200 означает, что сообщение доставлено, но не сохранено. Не повторяйте запрос.

Чтение переписки

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
}

Сначала новые сообщения, постраничная выдача по курсору: limit — от 1 до 100 (по умолчанию 20), а в cursor передаётся nextCursor из предыдущего ответа. Требуется whatsapp.read.

Синие галочки для клиента

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"}'

Вызывайте этот метод, когда оператор открывает диалог в вашем интерфейсе. Иначе никто не откроет чат в WhatsApp, сообщения клиента останутся с двумя серыми галочками, и переписка будет выглядеть проигнорированной. Тело запроса — { connectionId, phone?, messageId? }, при этом нужен хотя бы один из параметров phone / messageId (cuid входящего сообщения; если переданы оба, приоритет у messageId). Метод требует whatsapp.send, а не whatsapp.read, потому что клиенту отправляется уведомление о прочтении. Идемпотентен, ключ не нужен, лимита запросов нет. Возвращает { "ok": true, "marked": 3 }.

Дальше

  • Получайте уведомления о входящих сообщениях вместо опроса: Webhooks.
  • Соберите интеграцию без кода: n8n или MCP.
  • Сгенерируйте клиент по контракту: npx @openapitools/openapi-generator-cli generate -i https://developers.wasync.app/openapi.json -g typescript-fetch -o ./wasync-client
Была ли эта страница полезной?

On this page