Callback-API
Übersicht
Nachrichtenstatus-Daten werden an das Unternehmenssystem zurückgemeldet, um eine statistische Auswertung zu ermöglichen.
Callback-Adresse
Das Unternehmen muss eine Callback-Adresse (alternativ: Callback-URL) zum Empfang von Nachrichtenstatus-Änderungen festlegen. Aktuell gibt es hierfür keine Web-Oberfläche. Bitte wenden Sie sich an das technische Personal von Engagelab, um die Callback-Adresse einzurichten.
Überprüfung der Gültigkeit der Callback-Adresse
Bei der Konfiguration der Callback-Adresse im Push-Backend unter Anwendungseinstellungen wird eine POST-Anfrage mit einem zufällig generierten, 8-stelligem String als echostr-Parameter im Request-Body gesendet. Sie müssen den Wert von echostr im Response-Body zurückgeben, wie im folgenden Format:
Request Body:
{
"echostr": "12345678"
}
Response Body:
12345678
Sicherheitsmechanismus
Optional zur Client-Authentifizierung.
Um sicherzustellen, dass die Nachrichten tatsächlich von Engagelab stammen, können Sie die Authentizität der POST-Daten überprüfen. Alternativ können Sie die POST-Daten auch ohne Authentifizierung direkt auswerten.
Die Authentifizierung erfolgt wie folgt:
- Konfigurieren Sie in der Engagelab-Konsole einen Benutzernamen für den Callback (
username) sowie ein Callback-Geheimnis (secret) für die Callback-Adresse.
Lesen Sie X-CALLBACK-ID aus dem Request-Header, wie im folgenden Beispiel:
X-CALLBACK-ID: timestamp=1681991058;nonce=123123123123;username=test;signature=59682d71e2aa2747252e4e62c15f6f241ddecc8ff08999eda7e0c4451207a16b
Erklärung der Parameter:
timestampist der Zeitstempel der Callback-Nachricht (im Standardformat),nonceist eine Zufallszahl,signatureist die Signaturinformation.
Die Signatur wird wie folgt gebildet:
signature=HMAC-SHA256(secret, timestamp+nonce+username)
Antwortmechanismus
Nach Erhalt des Callbacks von Engagelab muss innerhalb von 3 Sekunden wie folgt geantwortet werden:
- Erfolgreicher Empfang: Der HTTP-Statuscode muss
200oder204sein, eine Antwortnachricht ist nicht erforderlich. - Fehlgeschlagener Empfang: Der HTTP-Statuscode muss
5XXoder4XXsein und eine Antwortnachricht enthalten. Das Format lautet:
{
"code": 2002,
"message": "error"
}
| Feld | Typ | Erforderlich/Optional | Beschreibung |
|---|---|---|---|
code |
int | Optional | Fehlercode |
message |
string | Optional | Fehlerdetails |
Callback-Felder im Detail
Nachrichtenkörper
| Feldname | Typ | Erforderlich/Optional | Beschreibung |
|---|---|---|---|
total |
int | Erforderlich | Anzahl der Nachrichten in diesem Callback |
rows |
array | Erforderlich | Liste mit Detailinformationen zu den Nachrichtenstatus-Änderungen; enthält die folgenden Felder: |
Felder des rows-Arrays
| Feldname | Typ | Erforderlich/Optional | Beschreibung |
|---|---|---|---|
message_id |
string | Erforderlich | Eindeutige Kennung der Nachricht |
from |
string | Optional | Absender, standardmäßig ist dies der appkey |
to |
string | Optional | Empfängerkennung (z. B. „registrationID“) |
server |
string | Erforderlich | Name des Nachrichtenservices, mögliche Werte: AppPush, WebPush |
channel |
string | Erforderlich | Nachrichtenkanal, mögliche Werte: EngageLab, HuaWei, XiaoMi, MeiZu, OPPO, VIVO, HONOR, FCM, APNs |
custom_args |
object | Optional | Benutzerdefinierte Parameter, wie bei der Nachrichtenerstellung übergeben |
itime |
int | Erforderlich | Tatsächlicher Zeitstempel des Nachrichtenstatus; kann zusammen mit message_status zur Zeitermittlung verwendet werden |
status |
object | Erforderlich | Statusinformationen der Nachricht, enthält die folgenden Felder: |
Felder des status-Objekts
| Feldname | Typ | Erforderlich/Optional | Beschreibung |
|---|---|---|---|
message_status |
string | Erforderlich | Nachrichtenstatus, mögliche Werte: target_valid, sent, delivered, click, target_invalid, sent_failed, delivered_failed, no_click |
status_data |
object | Optional | Benutzerdefinierte Statusdaten, enthält die folgenden Felder: |
channel_message_id |
string | Optional | Nachrichten-ID des Drittanbieterkanals |
ntf_msg |
int | Erforderlich | Nachrichtentyp, mögliche Werte: 1: Benachrichtigung, 2: Benutzerdefinierte Nachricht, 5: iOS Echtzeit-Aktivität, 6: iOS VOIP-Nachricht, 7: In-App-Nachricht |
platform |
string | Erforderlich | Push-Plattform, mögliche Werte: a: Android, i: iOS, b: Web |
uid |
int | Erforderlich | UID des Empfängers der Push-Nachricht |
app_version |
string | Erforderlich | SDK-integrierte App-Version, ermittelt über das SDK-Reporting |
channel |
string | Erforderlich | SDK-integrierter App-Kanal, ermittelt über das SDK-Reporting |
msg_time |
int | Erforderlich | Zeitpunkt der Nachrichtenzustellung bzw. des erfolgreichen API-Versands |
time_zone |
string | Erforderlich | Zeitzone der Organisation |
loss_valid_type |
int | Optional | Hat keine Relevanz, kann ignoriert werden |
plan_user_total |
int | Optional | Hat keine Relevanz, kann ignoriert werden |
callback_type |
int | Optional | Hat keine Relevanz, kann ignoriert werden |
error_code |
int | Optional | Fehlercode, nur im Fehlerfall vorhanden |
error_detail |
object | Optional | Detaillierte Fehlerinformationen, nur im Fehlerfall; enthält die folgenden Felder: |
message |
string | Optional | Beschreibung des Fehlergrundes, nur für FCM-Kanal relevant |
loss |
object | Optional | Verlustinformationen; enthält die folgenden Felder: |
loss_source |
string | Optional | Quelle des Verlusts, mögliche Werte: EngageLab, HuaWei, XiaoMi, MeiZu, OPPO, VIVO, HONOR, FCM, APNs |
loss_step |
int | Optional | Verluststufe, mögliche Werte: 1: Plan-Ziel → Gültiges Ziel, 2: Gültiges Ziel → Gesendete Menge, 3: Gesendete Menge → Zugestellte Menge, 4: Zugestellte Menge → Klickmenge |
Nachrichtenstatus: Werte und Bedeutung
| Statuswert | Bedeutung | Beschreibung |
|---|---|---|
target_valid |
Gültiges Ziel | Gilt als gültig, wenn der Nutzer in den letzten 365 Tagen aktiv war. |
sent |
Erfolgreich gesendet | Erfolgreich an den Server gesendet. |
delivered |
Erfolgreich zugestellt | Für EngageLab, XiaoMi, OPPO, VIVO: zugestellt basierend auf dem echten Callback;Für FCM und APNs: zugestellt, wenn erfolgreich an den Anbieter-Server gesendet;Für HuaWei, MeiZu, HONOR: Wenn kein Anbieter-Callback konfiguriert ist, gilt als zugestellt, wenn an den Anbieter-Server gesendet; bei konfiguriertem Callback zählt der echte Anbieter-Callback. |
click |
Nutzer hat geklickt | Vom SDK gemeldeter Nutzerklick. |
target_invalid |
Ungültiges Ziel | Gilt als ungültig gemäß Verluststufe 1 der Verlusttabelle. |
sent_failed |
Senden fehlgeschlagen | Gilt als ungültig gemäß Verluststufe 2 der Verlusttabelle. |
delivered_failed |
Zustellung fehlgeschlagen | Gilt als fehlgeschlagen gemäß Verluststufe 3 der Verlusttabelle. |
no_click |
Klick fehlgeschlagen | Gilt als fehlgeschlagen gemäß Verluststufe 4 der Verlusttabelle, nur für In-App-Nachrichten. |
Callback-Inhalt und Beispiele
Callback-Methode: POST
Content-Type: application/json
Callback-Beispiel
Request Header
POST /developer_define_url HTTP/1.1
Content-Type: application/json
Request Body
{
"total": 1,
"rows": [
{
"message_id": "1666165485030094861", // Nachrichten-ID bei EngageLab (message_id)
"from": "", // Absender
"to": "", // Empfänger, registrationID
"server": "AppPush",
"channel": "FCM",
"custom_args": {}, // Die beim Erstellen der Nachricht übergebenen Parameter
"itime": 1640707579, // z. B. Zeitpunkt der Zustellung
"status": {
// Felder bei Erfolg
"message_status": "delivered", // Nachrichtenstatus
"status_data": { // Benutzerdefinierte Daten
"channel_message_id": "wamid.123321abcdefed==", // Optional, Nachrichten-ID des Drittanbieterkanals
"ntf_msg": 1, // Nachrichtentyp
"platform": "a", // Push-Plattform
"uid": 100, // Nutzer-ID für die Push-Nachricht
"app_version": "", // SDK-integrierte App-Version
"channel": "", // SDK-integrierter App-Kanal
"msg_time": 1640707579, // Zeitpunkt der Zustellung
"time_zone": "+8", // Zeitzone der Organisation
"loss_valid_type": 0, // Ohne Bedeutung
"plan_user_total": 0, // Ohne Bedeutung
"callback_type": 0 // Ohne Bedeutung
},
// Felder bei Fehler
"error_code": 0, // Fehlercode - entsprechend dem Lifecycle-Fehlercode
"error_detail": {
"message": "" // Fehlerursache
},
"loss": {
"loss_source": "vivo",
"loss_step": 1
} // Verluststufe und -quelle
}
}
]
}
Parameterbeschreibung und Werte
| Wert | Bedeutung |
|---|---|
target_valid |
Gültiges Ziel |
sent |
Erfolgreich gesendet |
delivered |
Erfolgreich zugestellt |
click |
Nutzer hat geklickt |
target_invalid |
Ungültiges Ziel |
sent_failed |
Senden fehlgeschlagen |
delivered_failed |
Zustellung fehlgeschlagen |
Verluststufen und Bedeutung
- Plan-Ziele → Gültige Ziele
- Gültige Ziele → Gesendet
- Gesendet → Zugestellt
- Zugestellt → Klicks
Wichtige Hinweise:
- Klicks und Zustellungen können auf manchen Kanälen doppelt gezählt werden. Führen Sie ggf. eine eigene Duplikatsbereinigung durch.
- Die Zustell- und Anzeigeanzahl wird 5 Tage nach erfolgreicher Zustellung nicht mehr angepasst.

