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

Pierwsza wiadomość

Wyślij wiadomość tekstową na WhatsApp, odczytaj wątek i pokaż klientowi niebieskie znaczniki.

Wysyłanie wiadomości tekstowej

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

Pole to zawiera wyłącznie cyfry w formacie międzynarodowym, bez znaku + — np. 40700000000. Pole text może mieć najwyżej 4096 znaków. W przypadku multimediów zamiast text podaj media: { filename, mimetype, data (base64, ≤ 16 MB), caption? } — dokładnie jedno z tych dwóch pól. Wiadomości głosowe używają mimetype: audio/ogg oraz nazwy pliku voice-*.ogg. Wymaga uprawnienia whatsapp.send.

Ustaw limit czasu HTTP na co najmniej 180 sekund

Wysyłka przez qr trwa zwykle 1–7 s, przy długich tekstach do około 20 s, a ścieżka samonaprawy może zająć ok. 2,5 minuty. Wysyłka przez cloud_api trwa około 1 s. Wolna wysyłka nie oznacza błędu — klient, który rezygnuje po 30 s i ponawia żądanie, wysyła odbiorcy tę samą wiadomość dwa razy. Zawsze przekazuj idempotencyKey (UUID dla każdej logicznej wysyłki) i ponawiaj żądanie z tym samym kluczem.

Dwa identyfikatory — łącz dane po właściwym

Odpowiedź zawiera dwa identyfikatory i nie są one wymienne.

IdGdzie występujeDo czego służy
messageId (cuid)messageId w POST, id w GET, message.id w obu webhookachJedyny identyfikator nadający się do łączenia danych. Zapisz go przy wysyłce, deduplikuj po nim i dopasowuj do niego zdarzenia message.status.
waMessageIdwaMessageId (REST), wa_id (webhooki), wa_message_id (wysyłka multimediów)Zgłoszenia do wsparcia i diagnostyka. Może mieć wartość null — nigdy nie łącz ani nie deduplikuj po nim.

Warto uwzględnić w kodzie jeden przypadek szczególny: odpowiedź { "messageId": null, "waMessageId": "…", "status": …, "persisted": false } z kodem HTTP 200 oznacza, że wiadomość została dostarczona, ale nie została zapisana. Nie ponawiaj wysyłki.

Odczyt wątku

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
}

Od najnowszych, z paginacją kursorową: limit przyjmuje wartości 1–100 (domyślnie 20), a cursor przyjmuje wartość nextCursor z poprzedniej odpowiedzi. Wymaga uprawnienia whatsapp.read.

Niebieskie znaczniki dla klienta

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

Wywołaj tę metodę, gdy operator otwiera rozmowę w Państwa interfejsie — w przeciwnym razie nikt nigdy nie otworzy czatu w WhatsApp, wiadomości klienta pozostaną z dwoma szarymi znacznikami, a wątek będzie wyglądał na zignorowany. Treść żądania to { connectionId, phone?, messageId? }, w której podaje się co najmniej jedno z pól phone / messageId (cuid wiadomości przychodzącej; gdy podano oba, pierwszeństwo ma messageId). Metoda wymaga uprawnienia whatsapp.send, a nie whatsapp.read, ponieważ wysyła potwierdzenie odczytu do klienta. Jest idempotentna, nie wymaga klucza i nie ma limitu zapytań. Zwraca { "ok": true, "marked": 3 }.

Dalej

  • Otrzymuj powiadomienia o wiadomościach przychodzących zamiast odpytywać API: Webhooks.
  • Zbuduj to bez kodu: n8n lub MCP.
  • Wygeneruj klienta na podstawie kontraktu: npx @openapitools/openapi-generator-cli generate -i https://developers.wasync.app/openapi.json -g typescript-fetch -o ./wasync-client
Czy ta strona była pomocna?

On this page