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
}
]
}
| 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:
- Internes statistisches Analysefeldanalysis
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:
- Nachrichteninhalt (sensible Information)message_content- Anzahl der Nachrichtenfragmente (internes Feld)parts- Nachrichtentyp (internes Feld)msg_type- Protokolltyp (internes Feld)protocol_type- Anbieter-ID (sensible Information)supplier_ids
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:
- Internes Abrechnungsfeld (Einheit 1/10000)cost10000- Absenderkosten (Einheit 1/10000)sender_cost10000
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
}
}
]
}
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"
}
}
}
]
}
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"
}
}
}
]
}
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
}
}
}
]
}
Hinweise
Regeln für die Feldrückgabe
- Alle als
omitemptymarkierten 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
- Alle als
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
- Der Nachrichteninhalt (
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
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
Beschreibung der Zeitstempel
itime: Zeitstempel, zu dem der Callback erfolgte, in Sekundenmsg_time: Zeitstempel, zu dem die Nachricht erstellt wurde, in Sekundendelivered_time: Kwai-spezifisches Feld, Zustellzeitstempel, in Millisekunden
Benutzerdefinierte Parameter
- Das Feld
custom_argsgibt 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
- Das Feld
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_extrazur Unterstützung von Kwai-Kunden hinzugefügt - Felder mit sensiblen Informationen gefiltert, um die Sicherheit zu erhöhen










