Skip to main content

Nachrichten senden und empfangen

Diese Anleitung führt Sie von einem API-Schlüssel zu einem funktionierenden Zwei-Wege-Nachrichtenfluss: eine ausgehende Nachricht senden, die Zustellung verfolgen und die Antwort auf Ihrem eigenen Server empfangen. Das Beispiel nutzt SMS – dasselbe Dreischrittmuster (senden → verfolgen → empfangen) gilt auch für WhatsApp, RCS, Viber und E-Mail, jeweils über einen eigenen Endpunkt. Das werden Sie tun:
  1. Eine Nachricht senden
  2. Die Zustellung verfolgen
  3. Eingehende Nachrichten empfangen
  4. Auf eine eingehende Nachricht antworten

Voraussetzungen

  • Ein API-Schlüssel aus Einstellungen → API-Schlüssel. Verwenden Sie beim Erstellen einen Sandbox-Schlüssel (dv_test_sk_…) – Sandbox-Versende sind kostenlos und simuliert, und liefern deterministische Zustellbelege, sodass Sie sowohl den Erfolgs- als auch den Fehlerpfad durchspielen können. Für Produktion wechseln Sie auf einen Live-Schlüssel (dv_live_sk_…).
  • Eine Absendernummer, die auf Ihrem Kanal senden darf. Für SMS ist das eine SMS-fähige Nummer, die Sie besitzen (per Numbers API oder über Dashboard → Numbers suchen und kaufen). Lassen Sie from weg, dann wählt Orbit einen zum Ziel passenden Absender.
  • Eine öffentliche HTTPS-URL für den Empfangsschritt. Während der Entwicklung eignet sich jedes Tunneling-Tool.
Alle Anfragen gehen an eine einzige Basis-URL – Sandbox verwendet denselben Host; die Auswahl erfolgt über Ihren Schlüssel, nicht über eine andere Domain:
Jede Anfrage trägt Ihren Schlüssel im X-API-Key-Header.

1. Eine Nachricht senden

Senden Sie eine SMS mit POST /messages/sms. Nur to und body sind erforderlich; from ist optional.
Die Antwort lautet 202 Accepted – die Nachricht ist persistiert und zur Zustellung in der Warteschlange eingeordnet, noch nicht an den Mobilfunkanbieter übergeben. Die Felder liegen unter data; meta trägt die request_id, die Sie für den Support loggen sollten.
Die id (msg_ gefolgt von 32 Hex-Zeichen) ist der Verweis für alle Folgeaufrufe – Statusabfragen, Zustell-Webhooks und der Message-Trace richten sich daran aus. Sandbox-Antworten fügen meta ein "test_mode": true hinzu.
Senden Sie bei jeder Sendung einen Idempotency-Key. Wenn Sie denselben Schlüssel und denselben Body innerhalb von 24 Stunden erneut senden, erhalten Sie die ursprüngliche Antwort zurück statt eine Duplikat-Sendung; bei einem anderen Body wird 409 IDEMPOTENCY_KEY_REUSED zurückgegeben.

Weitere Kanäle

Jeder Kanal hat unter der /messages-Präfix einen eigenen Endpunkt mit einer für diesen Kanal ausgelegten Body-Form. Es gibt keinen einzigen kanal-polymorphen Route – wählen Sie den Endpunkt, der zu Ihrem Kanal passt:

2. Die Zustellung verfolgen

Eine in der Warteschlange befindliche Nachricht durchläuft einen Status-Lebenszyklus, bevor sie den Empfänger erreicht:
Es gibt zwei Wege, ihm zu folgen: Abfragen (Poll) Sie die Nachricht per ID:
Webhooks abonnieren (empfohlen – ohne Polling). Pro Statusübergang wird ein Ereignis ausgelöst; jedes trägt die Nachrichten-id und den neuen status:
  • message.sent – vom Mobilfunkanbieter angenommen
  • message.delivered – dem Gerät zugestellt bestätigt
  • message.failed – endgültiger Fehler (der status in der Nutzlast unterscheidet failed, undelivered, expired und submitted_no_receipt; error_code / error_message tragen ggf. den Providergrund)
Registrieren Sie einen Webhook-Endpunkt ein Mal, danach fließen die Ereignisse:
Ein Zustellereignis sieht so aus:
Prüfen Sie den X-Orbit-Signature-Header, bevor Sie einer Nutzlast vertrauen, und deduplizieren anhand der Ereignis-id – die Zustellung erfolgt mindestens ein Mal (at-least-once). Siehe Webhook-Sicherheit für das Verifikations-Snippet.

3. Eingehende Nachrichten empfangen

Wenn jemand auf Ihre Nummer antwortet (oder Ihnen zuerst schreibt), zeichnet Orbit eine eingehende Nachricht auf und – falls Sie im Schritt oben message.received abonniert haben – sendet sie als POST an Ihre Webhook-URL:
Die eingehende Nachricht ist auch abfragbar – listen Sie alles Empfangene mit dem Filter direction=inbound:
Das eingehende Routing ist automatisch für Nummern, die Sie auf Orbit besitzen – eine Antwort auf eine Ihrer Absendernummern wird erfasst und bei message.received-Abonnement an Ihren Webhook zugestellt. Eine eigene Eingangs-URL-Kabelverlegung pro Nummer ist nicht erforderlich.

4. Auf eine eingehende Nachricht antworten

Antworten ist nur ein weiterer Sendeaufruf, adressiert zurück an den eingehenden from. Tauschen Sie to und from und rufen Sie POST /messages/sms erneut auf:
Beide Nachrichten teilen eine Konversation, sodass Sie – sobald der Thread existiert – den vollständigen Rücklauf mit dem Filter conversation_id auf GET /messages ziehen können.

Häufige Fehler

Jeder Fehler nutzt dieselbe Form – matchen Sie auf error.code (eine GROSSBUCHSTABEN-Konstante) und loggen Sie meta.request_id: Vollständige Liste: Fehlercodes.

Nächste Schritte