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" }
              
              {
    "echostr": "12345678"
}

            
Diesen Codeblock im schwebenden Fenster anzeigen

Response Body:

12345678
              
              12345678

            
Diesen Codeblock im schwebenden Fenster anzeigen

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
              
              X-CALLBACK-ID: timestamp=1681991058;nonce=123123123123;username=test;signature=59682d71e2aa2747252e4e62c15f6f241ddecc8ff08999eda7e0c4451207a16b

            
Diesen Codeblock im schwebenden Fenster anzeigen

Erklärung der Parameter:

  • timestamp ist der Zeitstempel der Callback-Nachricht (im Standardformat),
  • nonce ist eine Zufallszahl,
  • signature ist die Signaturinformation.

Die Signatur wird wie folgt gebildet:

signature=HMAC-SHA256(secret, timestamp+nonce+username)
              
              signature=HMAC-SHA256(secret, timestamp+nonce+username)

            
Diesen Codeblock im schwebenden Fenster anzeigen

Antwortmechanismus

Nach Erhalt des Callbacks von Engagelab muss innerhalb von 3 Sekunden wie folgt geantwortet werden:

  • Erfolgreicher Empfang: Der HTTP-Statuscode muss 200 oder 204 sein, eine Antwortnachricht ist nicht erforderlich.
  • Fehlgeschlagener Empfang: Der HTTP-Statuscode muss 5XX oder 4XX sein und eine Antwortnachricht enthalten. Das Format lautet:
{ "code": 2002, "message": "error" }
              
              {
    "code": 2002,
    "message": "error"
}

            
Diesen Codeblock im schwebenden Fenster anzeigen
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
              
              POST /developer_define_url HTTP/1.1
Content-Type: application/json

            
Diesen Codeblock im schwebenden Fenster anzeigen

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 } } ] }
              
              {
    "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
            }
        }
    ]
}

            
Diesen Codeblock im schwebenden Fenster anzeigen

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

  1. Plan-Ziele → Gültige Ziele
  2. Gültige Ziele → Gesendet
  3. Gesendet → Zugestellt
  4. Zugestellt → Klicks

Wichtige Hinweise:

  1. Klicks und Zustellungen können auf manchen Kanälen doppelt gezählt werden. Führen Sie ggf. eine eigene Duplikatsbereinigung durch.
  2. Die Zustell- und Anzeigeanzahl wird 5 Tage nach erfolgreicher Zustellung nicht mehr angepasst.
icon
Vertrieb kontaktieren