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

Ihre erste Nachricht

Senden Sie einen WhatsApp-Text, lesen Sie den Verlauf wieder aus und zeigen Sie dem Kunden blaue Haken an.

Einen Text senden

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 besteht nur aus internationalen Ziffern, ohne + – z. B. 40700000000. text darf höchstens 4096 Zeichen lang sein. Für Medien übergeben Sie media statt text: { filename, mimetype, data (base64, ≤ 16 MB), caption? } – genau eines der beiden Felder. Sprachnachrichten verwenden mimetype: audio/ogg und einen Dateinamen im Format voice-*.ogg. Verwendet whatsapp.send.

Setzen Sie Ihr HTTP-Timeout auf mindestens 180 Sekunden

Ein qr-Versand dauert normalerweise 1–7 s, bei langen Texten bis zu etwa 20 s, und der Selbstheilungspfad kann ~2,5 Minuten brauchen. Ein cloud_api-Versand dauert etwa 1 s. Ein langsamer Versand ist kein Fehler – ein Client, der nach 30 s aufgibt und es erneut versucht, sendet dem Kunden die Nachricht doppelt. Übergeben Sie immer einen idempotencyKey (eine UUID pro logischem Versand) und wiederholen Sie die Anfrage mit demselben Schlüssel.

Zwei IDs – verknüpfen Sie über die richtige

Die Antwort enthält zwei Kennungen, die nicht austauschbar sind.

IdWo sie vorkommtWofür Sie sie verwenden
messageId (eine cuid)messageId bei POST, id bei GET, message.id in beiden WebhooksDie einzige zum Verknüpfen geeignete ID. Speichern Sie sie beim Senden, entdoppeln Sie darüber und ordnen Sie message.status-Ereignisse ihr zu.
waMessageIdwaMessageId (REST), wa_id (Webhooks), wa_message_id (Mediensendung)Support-Tickets und Debugging. Sie kann null sein – verknüpfen oder entdoppeln Sie niemals darüber.

Ein Sonderfall lohnt sich einzuplanen: { "messageId": null, "waMessageId": "…", "status": …, "persisted": false } mit HTTP 200 bedeutet, dass die Nachricht zugestellt wurde, aber nicht gespeichert wurde. Wiederholen Sie die Anfrage in diesem Fall nicht.

Den Verlauf auslesen

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
}

Neueste zuerst, cursorbasiert paginiert: limit liegt zwischen 1 und 100 (Standard 20), und cursor nimmt den nextCursor der vorherigen Antwort entgegen. Verwendet whatsapp.read.

Dem Kunden blaue Haken zeigen

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

Rufen Sie dies auf, wenn ein Operator die Konversation in Ihrer Oberfläche öffnet – andernfalls öffnet niemand den Chat in WhatsApp, die Nachrichten des Kunden behalten die zwei grauen Haken, und der Verlauf wirkt ignoriert. Der Body ist { connectionId, phone?, messageId? } mit mindestens einem von phone / messageId (die cuid einer eingehenden Nachricht; messageId hat Vorrang, wenn beide angegeben sind). Es verwendet whatsapp.send, nicht whatsapp.read, weil es eine Lesebestätigung an den Kunden überträgt. Idempotent, kein Schlüssel, kein Rate Limit. Gibt { "ok": true, "marked": 3 } zurück.

Weiter

  • Eingehende Nachrichten per Benachrichtigung erhalten statt per Polling: Webhooks.
  • Ohne Code umsetzen: n8n oder MCP.
  • Einen Client aus dem Vertrag generieren: npx @openapitools/openapi-generator-cli generate -i https://developers.wasync.app/openapi.json -g typescript-fetch -o ./wasync-client
War diese Seite hilfreich?

On this page