Logo Site EngageLab Mark Colored TransparentDokumentation
Suchen

Lebenszyklus-Status-Callback-Schnittstelle

Dieses Dokument beschreibt die Datenstruktur und Feldbeschreibungen der Callback-Schnittstelle für den Lebenszyklusstatus von Nachrichten. Das System sendet die Statusinformationen per HTTP POST an die vom Kunden konfigurierte URL, wenn sich der Nachrichtenstatus ändert.

Callback-Methode

  • Anfragemethode: POST
  • Content-Type: application/json
  • Erfolgsantwort: HTTP-Statuscode 200 oder 204
  • Wiederholung bei Fehler: Gibt der Kunde keinen Erfolgsstatuscode zurück, wiederholt das System den Versuch automatisch

Datenstruktur

1. Äußere Struktur (ReportLifecycles)

{ "total": 1, "rows": [ { // ReportLifecycle object array } ] }
              
              {
  "total": 1,
  "rows": [
    {
      // ReportLifecycle object array
    }
  ]
}

            
Diesen Codeblock im schwebenden Fenster anzeigen
Feldname Typ Beschreibung Erforderlich
total int64 Gesamtzahl der Datensätze Ja
rows array Array mit Lebenszyklus-Statusdaten Ja

2. ReportLifecycle-Objekt

Die Struktur jedes Elements im Array rows ist wie folgt:

Feldname Typ Beschreibung Erforderlich
message_id string Nachrichten-ID Ja
to string Empfängernummer Ja
server string Diensttyp Ja
channel string Kanaltyp Ja
itime int64 Callback-Zeitstempel (Sekunden) Ja
custom_args map[string]any Benutzerdefinierte Parameter (beim Senden übergeben) Nein
status object Objekt mit Statusdetails Nein

3. Status-Objekt

Objekt mit Statusdetails:

Feldname Typ Beschreibung Erforderlich
message_status string Nachrichtenstatus, z. B.: sent, sent_fail, delivered, delivered_fail, verified usw. Ja
status_data object Statusdatenobjekt, siehe unten Ja
billing object Abrechnungsinformationsobjekt, siehe unten Nein
error_code int Fehlercode, 0 bedeutet kein Fehler Ja
error_detail object Fehlerdetailobjekt, siehe unten Nein
kwai_extra object Kwai-spezifische Erweiterungsinformationen, siehe unten Nein

Hinweis: Die folgenden Felder werden für interne Statistiken verwendet und nicht an den Kunden zurückgemeldet:

  • analysis - Internes statistisches Analysefeld

4. StatusData-Objekt

Statusbezogene Basisdaten:

Feldname Typ Beschreibung Erforderlich
msg_time int64 Zeitstempel der Nachrichtenerstellung (Sek.) Ja
message_id string Nachrichten-ID Ja
current_send_channel string Name des aktuellen Sendekanals Ja
template_key string Konfigurationsschlüssel der Vorlage Ja
business_id string Business-ID Ja

Hinweis: Die folgenden Felder sind sensible Informationen oder interne Felder, wurden gefiltert und werden nicht an den Kunden zurückgemeldet:

  • message_content - Nachrichteninhalt (sensible Information)
  • parts - Anzahl der Nachrichtenfragmente (internes Feld)
  • msg_type - Nachrichtentyp (internes Feld)
  • protocol_type - Protokolltyp (internes Feld)
  • supplier_ids - Anbieter-ID (sensible Information)

5. Billing-Objekt

Abrechnungsinformationen (werden nur zurückgegeben, wenn Abrechnungsdaten vorliegen):

Feldname Typ Beschreibung Erforderlich
cost float64 Kostenbetrag (auf 4 Dezimalstellen genau) Ja
currency string Währung, fest auf "USD" Ja

Hinweis: Die folgenden Felder sind interne Abrechnungsfelder und werden nicht an den Kunden zurückgemeldet:

  • cost10000 - Internes Abrechnungsfeld (Einheit 1/10000)
  • sender_cost10000 - Absenderkosten (Einheit 1/10000)

6. ErrorDetail-Objekt

Fehlerdetails (werden nur bei einem Fehler zurückgegeben):

Feldname Typ Beschreibung Erforderlich
message string Beschreibung der Fehlermeldung Ja
channel_code string Ursprünglicher vom Kanal zurückgegebener Fehlercode Ja
channel_message string Ursprüngliche vom Kanal zurückgegebene Fehlermeldung Ja

7. KwaiExtra-Objekt

Kwai-kundenspezifische Erweiterungsinformationen (werden nur im Status delivered und für Kwai-Kunden zurückgegeben):

Feldname Typ Beschreibung Erforderlich
delivered_time int64 Zustellzeitstempel (Millisekunden) Ja
parts int Abrechnungseinheiten Ja
duration int64 Antwortdauer (Sek.), nur bei Sprachnachrichten Nein

Beschreibung des Nachrichtenstatus

Gängige Werte für den Nachrichtenstatus:

Statuswert Beschreibung
sent An den Kanal gesendet
sent_fail Versand fehlgeschlagen
delivered An das Endgerät des Benutzers zugestellt
delivered_fail Zustellung fehlgeschlagen
verified Benutzer verifiziert (z. B. OTP-Code verwendet)

Callback-Beispiele

Beispiel 1: Nachricht erfolgreich zugestellt

{ "total": 1, "rows": [ { "message_id": "123456789", "to": "+6598765432", "server": "sms", "channel": "sms", "itime": 1701234567, "custom_args": { "order_id": "ORDER123", "user_id": "USER456" }, "status": { "message_status": "delivered", "status_data": { "msg_time": 1701234560, "message_id": "123456789", "current_send_channel": "CHANNEL_A", "template_key": "verify_code", "business_id": "1001" }, "billing": { "cost": 0.005, "currency": "USD" }, "error_code": 0 } } ] }
              
              {
  "total": 1,
  "rows": [
    {
      "message_id": "123456789",
      "to": "+6598765432",
      "server": "sms",
      "channel": "sms",
      "itime": 1701234567,
      "custom_args": {
        "order_id": "ORDER123",
        "user_id": "USER456"
      },
      "status": {
        "message_status": "delivered",
        "status_data": {
          "msg_time": 1701234560,
          "message_id": "123456789",
          "current_send_channel": "CHANNEL_A",
          "template_key": "verify_code",
          "business_id": "1001"
        },
        "billing": {
          "cost": 0.005,
          "currency": "USD"
        },
        "error_code": 0
      }
    }
  ]
}

            
Diesen Codeblock im schwebenden Fenster anzeigen

Beispiel 2: Versand der Nachricht fehlgeschlagen

{ "total": 1, "rows": [ { "message_id": "123456790", "to": "+6598765433", "server": "sms", "channel": "sms", "itime": 1701234568, "status": { "message_status": "sent_fail", "status_data": { "msg_time": 1701234561, "message_id": "123456790", "current_send_channel": "CHANNEL_B", "template_key": "verify_code", "business_id": "1001" }, "error_code": 4001, "error_detail": { "message": "Invalid phone number", "channel_code": "INVALID_NUMBER", "channel_message": "The phone number format is invalid" } } } ] }
              
              {
  "total": 1,
  "rows": [
    {
      "message_id": "123456790",
      "to": "+6598765433",
      "server": "sms",
      "channel": "sms",
      "itime": 1701234568,
      "status": {
        "message_status": "sent_fail",
        "status_data": {
          "msg_time": 1701234561,
          "message_id": "123456790",
          "current_send_channel": "CHANNEL_B",
          "template_key": "verify_code",
          "business_id": "1001"
        },
        "error_code": 4001,
        "error_detail": {
          "message": "Invalid phone number",
          "channel_code": "INVALID_NUMBER",
          "channel_message": "The phone number format is invalid"
        }
      }
    }
  ]
}

            
Diesen Codeblock im schwebenden Fenster anzeigen

Beispiel 3: Zustellung der Nachricht fehlgeschlagen (mit Abrechnungsinformationen)

{ "total": 1, "rows": [ { "message_id": "123456791", "to": "+6598765434", "server": "sms", "channel": "sms", "itime": 1701234570, "custom_args": { "campaign": "new_year_promo" }, "status": { "message_status": "delivered_fail", "status_data": { "msg_time": 1701234562, "message_id": "123456791", "current_send_channel": "CHANNEL_C", "template_key": "marketing", "business_id": "1001" }, "billing": { "cost": 0.0045, "currency": "USD" }, "error_code": 5002, "error_detail": { "message": "Phone number unreachable", "channel_code": "UNREACHABLE", "channel_message": "Subscriber absent" } } } ] }
              
              {
  "total": 1,
  "rows": [
    {
      "message_id": "123456791",
      "to": "+6598765434",
      "server": "sms",
      "channel": "sms",
      "itime": 1701234570,
      "custom_args": {
        "campaign": "new_year_promo"
      },
      "status": {
        "message_status": "delivered_fail",
        "status_data": {
          "msg_time": 1701234562,
          "message_id": "123456791",
          "current_send_channel": "CHANNEL_C",
          "template_key": "marketing",
          "business_id": "1001"
        },
        "billing": {
          "cost": 0.0045,
          "currency": "USD"
        },
        "error_code": 5002,
        "error_detail": {
          "message": "Phone number unreachable",
          "channel_code": "UNREACHABLE",
          "channel_message": "Subscriber absent"
        }
      }
    }
  ]
}

            
Diesen Codeblock im schwebenden Fenster anzeigen

Beispiel 4: Sprachnachricht eines Kwai-Kunden zugestellt

{ "total": 1, "rows": [ { "message_id": "123456792", "to": "+6598765435", "server": "voice", "channel": "voice", "itime": 1701234575, "status": { "message_status": "delivered", "status_data": { "msg_time": 1701234565, "message_id": "123456792", "current_send_channel": "VOICE_CHANNEL_A", "template_key": "voice_verify", "business_id": "2001" }, "billing": { "cost": 0.012, "currency": "USD" }, "error_code": 0, "kwai_extra": { "delivered_time": 1701234575000, "parts": 1, "duration": 45 } } } ] }
              
              {
  "total": 1,
  "rows": [
    {
      "message_id": "123456792",
      "to": "+6598765435",
      "server": "voice",
      "channel": "voice",
      "itime": 1701234575,
      "status": {
        "message_status": "delivered",
        "status_data": {
          "msg_time": 1701234565,
          "message_id": "123456792",
          "current_send_channel": "VOICE_CHANNEL_A",
          "template_key": "voice_verify",
          "business_id": "2001"
        },
        "billing": {
          "cost": 0.012,
          "currency": "USD"
        },
        "error_code": 0,
        "kwai_extra": {
          "delivered_time": 1701234575000,
          "parts": 1,
          "duration": 45
        }
      }
    }
  ]
}

            
Diesen Codeblock im schwebenden Fenster anzeigen

Hinweise

  1. Regeln für die Feldrückgabe

    • Alle als omitempty markierten Felder erscheinen nicht im zurückgegebenen JSON, wenn der Wert leer oder null ist
    • Sensible Informationen und interne Felder wurden vor dem Callback gefiltert oder gelöscht
  2. Sicherheit

    • Der Nachrichteninhalt (message_content) wird nicht an den Kunden zurückgemeldet
    • Sensible Informationen wie Anbieter-IDs (supplier_ids) wurden gefiltert
    • Interne Abrechnungsfelder (cost10000, sender_cost10000) werden nicht zurückgemeldet
  3. Empfangsanforderungen

    • Die Callback-Schnittstelle des Kunden muss innerhalb von 5 Sekunden eine Antwort zurückgeben
    • Sie muss den HTTP-Statuscode 200 oder 204 zurückgeben, um den erfolgreichen Empfang anzuzeigen
    • Werden andere Statuscodes zurückgegeben oder tritt eine Zeitüberschreitung auf, wiederholt das System den Versuch automatisch
  4. Wiederholungsmechanismus

    • Nach einem fehlgeschlagenen Callback wird der Versuch automatisch wiederholt
    • Das Wiederholungsintervall vergrößert sich schrittweise
    • Die Daten werden während des Wiederholungszeitraums in Redis gespeichert
  5. Beschreibung der Zeitstempel

    • itime: Zeitstempel, zu dem der Callback erfolgte, in Sekunden
    • msg_time: Zeitstempel, zu dem die Nachricht erstellt wurde, in Sekunden
    • delivered_time: Kwai-spezifisches Feld, Zustellzeitstempel, in Millisekunden
  6. Benutzerdefinierte Parameter

    • Das Feld custom_args gibt die beim Senden der Nachricht übergebenen benutzerdefinierten Parameter unverändert zurück
    • Werden beim Senden keine benutzerdefinierten Parameter übergeben, erscheint dieses Feld nicht in den Callback-Daten

Fehlercode-Referenz

Beschreibungen gängiger Fehlercodes (für konkrete Fehlercodes siehe bitte die Fehlercode-Dokumentation):

Fehlercode Beschreibung
0 Kein Fehler, Vorgang erfolgreich
4001 Fehler im Nummernformat
4002 Nummer existiert nicht
5001 Kanal abgelehnt
5002 Benutzer nicht erreichbar
6001 Netzwerk-Zeitüberschreitung

Ausführlichere Beschreibungen der Fehlercodes finden Sie in der separaten Fehlercode-Dokumentation.

Änderungsprotokoll

  • 2024-01: Erstversion
  • Feld kwai_extra zur Unterstützung von Kwai-Kunden hinzugefügt
  • Felder mit sensiblen Informationen gefiltert, um die Sicherheit zu erhöhen
Icon Solid Transparent White Qiyu
Vertrieb kontaktieren