Push-API erstellen
Senden Sie eine Benachrichtigung oder eine Nachricht an ein einzelnes Gerät oder eine Geräteliste.
Der übermittelte Inhalt kann nur ein per JSON dargestelltes Push-Objekt sein.
Dies ist die aktuelle Version der Push-API. Die Verbesserungen in Version v4 sind:
- Zugriffsautorisierung per HTTP Basic Authentication. So kann die gesamte API-Anfrage mit gängigen HTTP-Tools abgewickelt werden, z. B. curl, Browser-Plugins usw.
- Push-Inhalt vollständig im JSON-Format.
Anfrage-Limits
Unsere API begrenzt die Aufrufhäufigkeit, um Stabilität und Fairness des Dienstes zu gewährleisten. Die QPS-Limits (Queries Per Second) pro AppKey lauten:
- Standard-Limit: Maximal 500 Anfragen pro Sekunde.
- Erweitertes Limit: Wenn Sie unseren kostenpflichtigen Tarif nutzen und Ihr kostenpflichtiger AppKey ein höheres QPS-Limit benötigt, wenden Sie sich bitte an unser Vertriebsteam: Sales@engagelab.com.
Anfragemethode
POST
Aufrufadresse
Die Schnittstellen-Serviceadresse steht in eins-zu-eins-Beziehung zum gewählten Zugangspunkt des Rechenzentrums. Bitte verwenden Sie die Aufrufadresse, die zum Zugangspunkt Ihrer Anwendung passt.
Derzeit betreibt EngageLab zwei Zugangspunkte in Rechenzentren; die Daten zwischen verschiedenen Service-Zugangspunkten sind vollständig isoliert. Sie können die Aufrufadresse entsprechend dem beim Anlegen des Produkts gewählten Rechenzentrum-Zugangspunkt wählen.
POST v4/push
Aufrufvalidierung
Weitere Informationen finden Sie in der REST-API-Übersicht unter Authentifizierungsmethode.
Anfragebeispiel
Anfrage-Header
> POST /v4/push HTTP/1.1
> Authorization: Basic Yzk2ZjQyZTBkMmU2NjJlNDVkMDM1YWIxOmRmNGQ1OWU4NGVhYzJmOWQ1M2IzNmYxMg==
Anfrage-Body
{
"from": "push",
"to": "all",
"body": {
"platform": "all",
"notification": {
"alert" :"Hello, Push!",
"android": {
"alert": "Hi, Push!",
"title": "Send to Android",
"builder_id": 1,
"extras": {
"newsid": 321
}
},
"ios": {
"alert": "Hi, MTPush!",
"sound": "default",
"badge": "+1",
"extras": {
"newsid": 321
}
}
},
"options": {
"time_to_live": 60,
"apns_production": false
}
},
"request_id": "12345678",
"custom_args":{
"Engagelab": "push to you"
}
}'
> POST /v4/push HTTP/1.1
> Authorization: Basic Yzk2ZjQyZTBkMmU2NjJlNDVkMDM1YWIxOmRmNGQ1OWU4NGVhYzJmOWQ1M2IzNmYxMg==
Anfrageparameter
Die Parameterstruktur des Pushs ist in der folgenden Tabelle beschrieben:
| Schlüsselwort | Typ | Option | Bedeutung |
|---|---|---|---|
| from | String | Optional | Aktueller Dienst-Absender |
| to | String oder JSON-Objekt | Erforderlich | Empfangsziel |
| body | JSON-Objekt | Erforderlich | Anfrage-Body |
| platform | String oder JSON-Array | Erforderlich | Push-Plattform |
| notification | JSON-Objekt | Optional | message ist genau eines erforderlich; beide dürfen nicht gleichzeitig vorkommen. |
| message | JSON-Objekt | Optional | notification ist genau eines erforderlich; beide dürfen nicht gleichzeitig vorkommen. |
| options | JSON-Objekt | Optional | Push-Parameter |
| request_id | String | Optional | Vom Kunden definierbares optionales Feld zur Zuordnung der Antwort zu einer bestimmten Anfrage. |
| custom_args | JSON-Objekt | Optional | Vom Kunden definierbare optionale Felder, die beim Callback zurückgegeben werden. Der Wert umfasst maximal 128 Zeichen. |
from
Aktueller Dienst-Absender, Typ String, optionales Feld.
Anfragebeispiel
{
"from":"push"
}
to
Push-Geräteobjekt: Liste der Geräte, an die gesendet werden kann. Zur Festlegung des Ziels stellt App Push verschiedene Wege bereit, z. B. Alias, Tag, Registrierungs-ID, Untergruppe, Broadcast usw.
Push-Ziel
Neben Broadcast gibt es folgende Möglichkeiten:
| Schlüsselwort | Typ | Bedeutung | Beschreibung | Hinweis |
|---|---|---|---|---|
| all | String | Broadcast senden | Push an alle Geräte | Das Ziel umfasst Geräte, die in den letzten 365 Tagen aktiv waren. |
| tag | JSON-Array | Tag | Array. Mehrere Tags stehen in ODER-Beziehung, d. h. Vereinigungsmenge. | Tags für großflächige Geräte- bzw. Nutzerattribute. |
| tag_and | JSON-Array | Tag AND | Array. Mehrere Tags in UND-Beziehung, d. h. Schnittmenge. | Unterscheidet sich von tag; maximal 20 pro Push. |
| tag_not | JSON-Array | Tag NOT | Array. Zuerst Vereinigung mehrerer Tags, danach Komplement zu dieser Menge. | Pro Push maximal 20. |
| alias | JSON-Array | Alias | Array. Mehrere Aliase in ODER-Beziehung, d. h. Vereinigungsmenge. | Nutzer über Alias identifizieren. |
| registration_id | JSON-Array | Registrierungs-ID | Array. Mehrere Registrierungs-IDs in ODER-Beziehung, d. h. Vereinigungsmenge. | Gerätekennung. Pro Push maximal 1000. |
| live_activity_id | String | Kennung für Live Activity | Entspricht dem Wert liveActivityId im iOS SDK. |
Bei Updates einer Live Activity erforderlich. |
| seg | JSON | Nutzergruppen-ID | ID der in der Konsole angelegten Nutzergruppe. Als Array definiert, derzeit aber nur ein Eintrag pro Push. | Derzeit ist nur ein Eintrag pro Push möglich. |
Die implizite Beziehung mehrerer Werte in einem Array ist ODER (Vereinigung); bei tag_and hingegen UND (Schnittmenge) innerhalb des Arrays.
Wird tag_not allein verwendet, wenden wir die tag_not-Logik auf die Broadcast-Nutzer an.
Diese Typen können kombiniert werden. Bei Kombination mehrerer Ausdrücke gilt implizit UND (Schnittmenge). Beispiel:
"to" : {"tag" : [ "tag1", "tag2"], "tag_and" : ["tag3", "tag4"], "tag_not" : ["tag5", "tag6"] }
Zuerst wird das Feld tag ausgewertet tag1 oder tag2 = A;
dann das Feld tag_and tag3 und tag4 = B;
dann tag_not nicht (tag5 oder tag6) = C;
Das Endergebnis von to ist A und B und C.
Beispiel
- Push an alle (Broadcast):
{
"to": "all",
}
- Push an mehrere Tags (mindestens eines der Tags): in Shenzhen, Guangzhou oder Peking
{
"to":{
"tag":[
"Shenzhen",
"Guangzhou",
"Beijing"
]
}
}
- Push an mehrere Tags (alle Tags gleichzeitig): in Shenzhen und „female“
{
"to":{
"tag_and":[
"Shenzhen",
"female"
]
}
}
- Push an mehrere Aliase:
{
"to":{
"alias":[
"4314",
"892",
"4531"
]
}
}
- Push an mehrere Registrierungs-IDs:
{
"to": {
"registration_id": [
"4312kjklfds2",
"8914afd2",
"45fdsa31"
]
}
}
- Mehrere Zieltypen gleichzeitig: in Shenzhen oder Guangzhou und gleichzeitig „female“ und „members“
{
"to":{
"tag":[
"Shenzhen",
"Guangzhou"
],
"tag_and":[
"female",
"members"
]
}
}
- Live-Activity-Nachricht senden
{
"to": {
"live_activity_id": "LiveActivity-1"
}
}
Push an Nutzersegment-ID:
{
"to": {
"seg": {
"id":"segid"
}
}
}
Body
Anfrage-Body. Unterstützte Felder:
| Schlüsselwort | Typ | Option | Bedeutung |
|---|---|---|---|
| platform | String oder JSON-Array | Erforderlich | Push-Plattform |
| notification | JSON-Objekt | Optional | message betrachtet werden; genau eines von beiden, nicht beides. |
| message | JSON-Objekt | Optional | notification betrachtet werden; genau eines von beiden, nicht beides. |
| live_activity | JSON-Objekt | Optional | notification oder message betrachtet werden; live_activity darf nicht gleichzeitig mit notification oder message vorkommen. |
| options | JSON-Objekt | Optional | Push-Parameter |
Plattform
MTPush unterstützt Push für Android, iOS und HarmonyOS. Schlüsselwörter: "android", "ios", "hmos".
Ist die Zielplattform iOS, muss die Push-Umgebung über das Feld apns_production in options gesetzt werden: true = Produktionsumgebung (APNs Production), false = Entwicklungsumgebung (APNs Sandbox).
Push an alle Plattformen:
{ "platform" : "all" }
Bestimmte Plattformen auswählen:
{
"platform": [
"android",
"ios",
"hmos"
]
}
Notification
Das Objekt „Notification“ ist einer der Inhalts-Entity-Typen eines Pushs (der andere ist „Message“) und wird dem Client als Benachrichtigung zugestellt.
| Schlüsselwort | Typ | Option | Bedeutung | Beschreibung |
|---|---|---|---|---|
| alert | String oder JSON-Objekt | Erforderlich | Inhalt | Der eigentliche Nachrichtentext. Fehlt alert unter android oder ios, wird dieser Wert verwendet. |
| android | JSON-Objekt | Optional | Android-Plattformeigenschaften | Push-Parameter für Android, siehe Android-Beschreibung |
| ios | JSON-Objekt | Optional | iOS-Plattformeigenschaften | Push-Parameter für iOS, siehe iOS-Beschreibung |
| hmos | JSON-Objekt | Optional | hmos-Plattformeigenschaften | Push-Parameter für HarmonyOS, siehe hmos-Beschreibung |
Alert
Die Eigenschaft alert auf dieser Ebene (direkt unter dem Notification-Objekt) ist eine Kurzform: Ist der Alert auf allen Plattformen gleich, können Sie alert nicht pro Plattform setzen; dieser Wert gilt. Gibt es plattformspezifische Definitionen, überschreiben diese den Wert hier.
{
"notification" : {
"alert" : "Hello, Push!"
}
}
Das oben definierte Notification-Objekt wird an alle in platform genannten Plattformen mit derselben Alert-Nachricht gesendet.
Android
Benachrichtigungen unter Android werden vom MTPush SDK gemäß den Benachrichtigungsleisten-Stilen angezeigt. Unterstützte Felder:
| Schlüsselwort | Datentyp | Optional | Bedeutung | Beschreibung |
|---|---|---|---|---|
| alert | String oder JSON-Objekt | Erforderlich | Benachrichtigungsinhalt | alert der übergeordneten Ebene. |
| title | String | Optional | Benachrichtigungstitel | |
| builder_id | Int | Optional | ID des Benachrichtigungsleisten-Stils | Das Android SDK kann benutzerdefinierte Benachrichtigungslayouts setzen; dieses Feld wählt den Stil. |
| channel_id | String | Optional | Android Notification Channel ID | Bis 1000 Byte; ab Android 8.0 können Sie Benachrichtigungskanäle konfigurieren. Steuert die Darstellung anhand der Kanal-ID. |
| priority | Int | Optional | Anzeigepriorität in der Benachrichtigungsleiste | Standard 0, Bereich -2 bis 2. |
| category | String | Optional | Filterung oder Sortierung des Benachrichtigungseintrags | Hängt vollständig von der Strategie des Herstellers ab. |
| style | Int | Optional | Typ des Benachrichtigungsleisten-Stils | Stiltyp der Benachrichtigungsleiste, Standard 0. 1=bigText, 2=Inbox, 3=bigPicture |
| big_text | String | Optional | Big-Text-Stil der Benachrichtigungsleiste | style = 1; Inhalt als großer Text. |
| inbox | JSONObject | Optional | Textelement-Stil (Inbox) | style = 2, bis zu 5 Einträge, je max. 1024 Zeichen. Beispiel: {"box0":"content1"}. |
| big_pic_path | String | Optional | Großbild-Stil der Benachrichtigungsleiste | style = 3, derzeit JPEG (nur FCM), .BMP (nur FCM), .jpg und .png. |
| extras | JSON-Objekt | Optional | Zusatzfelder | Eigene Key/Value-Informationen im JSON-Format für die Geschäftslogik. |
| intent | JSON-Objekt | Optional | Zielseite für Navigation (empfohlen) | Mit intent die Zielseite bei Klick auf die Benachrichtigung festlegen. Empfehlung: intent setzen, sonst kann ein Klick wirkungslos sein. Drei Typen:intent:#Intent;action=action path;component= package name /full activity name;endintent:#Intent;action=android.intent.action.MAIN;end (feste Adresse)scheme://test?key1=val1&key2=val2 |
| large_icon | String | Optional | Großes Benachrichtigungssymbol | |
| small_icon | String | Optional | Kleines Benachrichtigungssymbol | small_icon_uri leer ist, wird standardmäßig dieses Feld genutzt. |
| sound | String | Optional | Klang | /res/raw/ im Android-Projekt.channel_id gesetzt ist. |
| badge_add_num | Int | Optional | Badge-Erhöhung relativ zum bisherigen Wert | badge_add_num = 1 und bisheriges Badge 2 → Anzeige 3. |
| badge_set_num | Int | Optional | Badge auf festen Wert setzen | badge_set_num = 1 → Anzeige immer 1. |
| badge_class | String | Optional | Einstiegs-Activity-Klasse zum Desktop-Symbol, z. B. "com.test.badge.MainActivity" |
badge_add_num, beide erforderlich. |
| display_foreground | String | Optional | App im Vordergrund: Benachrichtigung anzeigen | "1": Benachrichtigung in der Leiste auch im Vordergrund."0": im Vordergrund keine Leisten-Popup. |
| group_id | String | Optional | Nachrichtengruppen-ID | Eindeutige Kennung zur Gruppierung und Steuerung des Zusammenklappens. Seit MTPush Android SDK 5.3.0. |
| is_fold | String | Optional | Nachricht zusammenklappen | true = geklappt, false = nicht geklappt. Zusammen mit group_id: gleiche group_id und is_fold=true → automatisch geklappt; nur group_id ohne is_fold oder is_fold=false → kein automatisches Klappen. Ab MTPush Android SDK 5.3.0. |
{
"notification": {
"android": {
"alert": "hello, MTPush!",
"title": "Push test",
"builder_id": 3,
"style": 1,
"big_text": "big text content",
"inbox":JSONObject,
"big_pic_path": "picture url",
"priority": 0,
"category": "category str",
"large_icon": "http://pushapi-sgp.engagelab.comlargeIcon.jpg",
"small_icon": "http://www.small.com/small_icon.jpg",
"intent": {
"url": "intent:#Intent;component=push.pushapi-sgp.engagelab.com/com.example.mtpushdemo.SettingActivity;end"
},
"extras": {
"news_id": 134,
"my_key": "a value"
}
}
}
}
iOS
APNs-Benachrichtigungen auf iOS.
Der Inhalt wird vom MTPush-Proxy an Apple APNs gesendet und erscheint auf dem Gerät als Systembenachrichtigung.
Der Inhalt entspricht der APNs-Spezifikation; unterstützte Felder:
| Schlüsselwort | Typ | Option | Bedeutung | Beschreibung |
|---|---|---|---|---|
| alert | String oder JSON-Objekt | Erforderlich | Benachrichtigungsinhalt | alert der Elternebene. |
| sound | String oder JSON-Objekt | Optional | Benachrichtigungston | |
| badge | Int oder String | Optional | App-Badge | |
| content-available | Boolean | Optional | Hintergrund-Push | Details: "content-available":true = Background Remote Notification, sonst normale Remote Notification: Background Remote Notification |
| mutable-content | Boolean | Optional | Benachrichtigungserweiterung | iOS 10 Notification Service Extension zur Zustellungsanzeige; Client muss die Service Extension implementieren und serverseitig mutable-content setzen.true: UNNotificationServiceExtension. |
| category | String | Optional | Nur iOS 8. Wert des APNs-Felds „category“. | |
| extras | JSON-Objekt | Optional | Erweiterte Felder | Eigene Key/Value-Daten. |
| thread-id | String | Optional | Benachrichtigungsgruppe | Gruppierung von Remote-Benachrichtigungen mit gleicher thread-id. |
| interruption-level | String | Optional | Unterbrechungsstufe (Priorität, Zustellung) | iOS 15: einer von active, critical, passive, timeSensitive, siehe UNNotificationInterruptionLevel. |
iOS-Benachrichtigungen von MTPush werden an APNs weitergeleitet. Die Benachrichtigungslänge in MTPush ist auf 4000 Byte begrenzt. MTPush nutzt UTF-8; ein chinesisches Zeichen zählt 3 Byte.
Beispiel serverseitige Zustellung:
{
"notification": {
"ios": {
"alert": "hello, Push!",
"sound": "sound.caf",
"badge": 1,
"extras": {
"news_id": 134,
"my_key": "a value"
}
}
}
}
Vom Client empfangene Nachricht:
{
"_j_msgid" = 813843507;
aps = {
alert = "hello,Push!";
badge = 1;
sound = "sound.caf";
};
"my_key" = "a value";
"news_id" = 134;
}
hmos
HarmonyOS-Benachrichtigungen werden vom MTPush SDK gemäß Benachrichtigungsleisten-Stilen angezeigt. Unterstützte Felder:
| Schlüsselwort | Typ | Option | Bedeutung | Beschreibung |
|---|---|---|---|---|
| alert | String | Erforderlich | Benachrichtigungsinhalt | Überschreibt den Eltern-alert. Leerer String: nicht in der Leiste. Limits: Push-Beschränkungen. |
| title | String | Optional | Benachrichtigungstitel | Ersetzt den App-Namen. Siehe Push-Beschränkungen. |
| category | String | Erforderlich | Nachrichtenkategorie | Vom Anbieter vorgeschrieben. Harmony-Kategoriestandards. Entspricht notification.hmos.category. |
| large_icon | String | Optional | Großes Symbol | Nur HTTPS-URL, z. B. https://example.com/image.png. ≤30 KB, Breite×Höhe < 12800 Pixel. |
| intent | JSONObject | Erforderlich | Navigationsziel | Drei Typen: 1) App-Start: action.system.home 2) Deeplink: scheme://host?key=val 3) Action: com.test.action. Beispiel: {"url":"action.system.home"}. |
| badge_add_num | Int | Optional | Badge-Inkrement | Auslassen: Badge unverändert. Bereich 1–99, addiert zum aktuellen Badge. |
| badge_set_num | Int | Optional | Badge-Fixwert | Auslassen: unverändert. Bereich 0–99, setzt Badge fix. |
| test_message | Boolean | Optional | Testnachrichten-Flag | false: normal (Standard); true: Test. |
| receipt_id | String | Optional | Huawei-Receipt-ID | Eindeutige ID für Harmony-Downlink-Receipt-Konfiguration. |
| extras | JSON | Optional | Zusatzfelder | Eigene JSON-K/V für die Geschäftslogik. |
| style | Int | Optional | Benachrichtigungsstil | Standard 0. 0: normal; 3: mehrzeiliger Text. |
| inbox_content | [String] | Optional | Mehrzeiliger Text | Bei style=3 erforderlich. Bis 3 Einträge, je ≤1024 Zeichen; Abschneiden mit „…“. |
| push_type | Int | Optional | Push-Typ | Standard 0. Unterstützt: 0-Benachrichtigung, 2-erweiterte Benachrichtigung, 10-VoIP-Anruf. Andere ungültig. |
| extra_data | String | Optional | Erweiterte Daten | Entspricht Huawei extraData. Bei push_type=2 oder 10 erforderlich; bei 0 ignoriert. |
| display_foreground | String | Optional | Anzeige bei App im Vordergrund | "1": anzeigen; "0": nicht anzeigen. |
Beispiel:
{
"notification": {
"hmos": {
"alert": "Hi, MTPush!",
"title": "",
"category": "",
"intent": {"url": ""},
"badge_add_num": 1,
"test_message": true,
"receipt_id": "",
"extras": {},
"style": 0,
"inbox_content": [],
"push_type": 0,
"extra_data": "",
"display_foreground": "1"
}
}
}
Message
In-App-Nachrichten (auch: benutzerdefinierte oder durchgereichte Nachrichten).
- Werden nicht in der Benachrichtigungsleiste angezeigt; das MTPush SDK übergibt den Inhalt an die App.
- iOS erhält diesen Teil über den In-App-Push-Kanal (nicht APNS), wenn die App im Vordergrund ist.
Unterstützte Felder:
| Schlüsselwort | Typ | Option | Bedeutung |
|---|---|---|---|
| msg_content | String oder JSON-Objekt | Erforderlich | Nachrichteninhalt |
| title | String | Optional | Nachrichtentitel |
| content_type | String | Optional | Inhaltstyp |
| extras | JSON-Objekt | Optional | Optionale JSON-Parameter |
| test_message | Boolean | Optional | Testnachrichten-Flag (HarmonyOS) |
| receipt_id | String | Optional | Huawei-Receipt-ID (HarmonyOS) |
Beispiel:
{
"message": {
"msg_content": "Hi,Push",
"content_type": "text",
"title": "msg",
"extras": {
"key": "value"
}
}
}
Live_activity
Hinweis: Live-Activity-Nachrichten erfordern ein iOS-P8-Zertifikat; in den iOS-Authentifizierungseinstellungen im Web-Portal wählen Sie „Token Authentication Configuration“.
Der Inhalt einer Live-Activity-Nachricht umfasst folgende Felder:
| Schlüsselwort | Typ | Option | Beschreibung |
|---|---|---|---|
| ios | JSON-Objekt | Erforderlich | Detaillierte Felder siehe iOS JSON-Objekt. |
iOS JSON-Objekt {#ios-json-object}
| Schlüsselwort | Typ | Option | Beschreibung |
|---|---|---|---|
| event | string | Erforderlich | Erstellung: "start", Update: "update", Ende: "end"; bei event=start erforderlich |
| attributes-type | string | Optional | Live-Activity-Typ, vom Entwickler definiert; bei event=start verpflichtend |
| content-state | JSON-Objekt | Erforderlich | Dynamischer Inhalt; muss zum Client-SDK passen (Apple content-state). |
| alert | JSON-Objekt | Optional | Siehe iOS alert JSON-Objekt. |
| dismissal-date | int | Optional | Anzeigezeitpunkt für das Ende der Live Activity. |
| attributes | JSON-Objekt | Optional | Statischer Inhalt; muss zum Client-SDK passen (Apple attributes). |
| stale-date | int | Optional | Ablauf der Anzeige; liegt er vor der aktuellen Zeit, wird die Activity nicht aktualisiert. |
| relevance-score | int | Optional | Priorität auf der Dynamic Island, 1–100, höher = wichtiger; ohne Angabe höchste Priorität. |
| apns-priority | int | Optional | 5 oder 10, Standard 10; apns-priority=5 zählt nicht gegen Apples Ratenlimit, Überschreitung begrenzt Benachrichtigungen. |
iOS alert JSON-Objekt {#ios-alert-json-object}
| Schlüsselwort | Typ | Option | Beschreibung |
|---|---|---|---|
| title | string | Optional | Titel auf Apple-Watch-Nachrichten. |
| body | string | Optional | Text auf Apple-Watch-Nachrichten. |
| sound | string | Optional | Benachrichtigungston. |
- Live-Activity-Nachrichten von Engagelab Push werden an Apple-Server weitergeleitet. Dynamische Update-Daten (ActivityKit) dürfen 4096 Byte nicht überschreiten.
- Engagelab Push begrenzt aus Repackaging- und Sicherheitsgründen die Gesamtlänge der Parameter unter
live_activityfür"ios": { }inkl. Inhalt auf 3584 Byte. JPush/MTPush nutzt UTF-8 (ein chinesisches Zeichen = 3 Byte).
Beispiel Live-Activity-Push
attributes-type und live_activity_id kommen aus dem Entwickler-SDK. Vor Nutzung müssen Start- und Update-Token gemeldet werden. Ablauf siehe Apple: Live Activities mit Push.
Erstellen
{ "from": "push", "to": { "registration_id": [ "161a3797c816b134042" ] }, "body": { "platform": "ios", "live_activity": { "ios": { "event": "start", "content-state": { "eventStr": "hello", "eventTime":1685952000 }, "attributes": { "name": "1", "number": 2, "tag": "mytag" }, "alert": { "title": "hello", "body": "welcome" }, "attributes-type": "my_la_type", "relevance-score": 100, "apns-priority": 100 } } }, "request_id": "12345678", "custom_args": "12345678" }{ "from": "push", "to": { "registration_id": [ "161a3797c816b134042" ] }, "body": { "platform": "ios", "live_activity": { "ios": { "event": "start", "content-state": { "eventStr": "hello", "eventTime":1685952000 }, "attributes": { "name": "1", "number": 2, "tag": "mytag" }, "alert": { "title": "hello", "body": "welcome" }, "attributes-type": "my_la_type", "relevance-score": 100, "apns-priority": 100 } } }, "request_id": "12345678", "custom_args": "12345678" }Diesen Codeblock im schwebenden Fenster anzeigenAktualisieren
{ "from": "push", "to": { "live_activity_id": "my_la_id" }, "body": { "platform": "ios", "live_activity": { "ios": { "event": "update", "content-state": { "eventStr": "test_live", "eventTime": 198 }, "alert": { "title": "123411", "body": "123411" } } } }, "request_id": "12345678", "custom_args": "12345678" }{ "from": "push", "to": { "live_activity_id": "my_la_id" }, "body": { "platform": "ios", "live_activity": { "ios": { "event": "update", "content-state": { "eventStr": "test_live", "eventTime": 198 }, "alert": { "title": "123411", "body": "123411" } } } }, "request_id": "12345678", "custom_args": "12345678" }Diesen Codeblock im schwebenden Fenster anzeigen
Voip
iOS-VoIP. Dieser Typ darf nicht mit anderen iOS-Nachrichtentypen kombiniert werden. Anfragestruktur:
{
"from": "push",
"to": {
"registration_id": [ "1a0018970a91da03de5" ]
},
"request_id": "12345",
"custom_args": "12345",
"body": {
"platform": "ios",
"voip": {
"key": "value // Any custom key/value pair that will be passed to the APP"
}
}
}
Options
Aktuelle Push-Optionen:
| Schlüsselwort | Typ | Option | Bedeutung | Beschreibung |
|---|---|---|---|---|
| time_to_live | Int oder String | Optional | Offline-Aufbewahrung (Sekunden) | Ist der Nutzer offline, kann die Nachricht für diese Dauer gehalten und bei erneutem Online-Sein erneut zugestellt werden. Standard 86400 (1 Tag), maximal 15 Tage. Ist der vom Anbieter unterstützte Maximalwert kleiner, gilt dieser. 0 = keine Offline-Aufbewahrung; nur online empfangbar. |
| override_msg_id | Long | Optional | Zu überschreibende Nachrichten-ID | Soll ein früherer Push ersetzt werden, die vorherige msg_id angeben. Offline wird der Inhalt aktualisiert; auf Android bleibt die Benachrichtigung in der Leiste und wird durch neuen Inhalt ersetzt, solange sie nicht gelöscht wurde. Wirksam 1 Tag. Existiert msg_id nicht im Zeitfenster, Fehler 7006 und kein Push. Nur Android; Kanäle: Engagelab, Xiaomi, Meizu, OPPO, FCM, Huawei (EMUI10+). |
| apns_production | Boolean | Optional | APNs-Produktionsumgebung | Nur iOS-Benachrichtigungen.true: Produktion;false: Entwicklung.false, sonst bei Auslassung true. Es wird dringend empfohlen, dieses Feld in Push-Anfragen explizit zu setzen. |
| apns_collapse_id | String | Optional | Kennung zum Aktualisieren von iOS-Benachrichtigungen | Stimmt eine neue APNs-Benachrichtigung mit einer bestehenden im Notification Center in apns-collapse-id überein, wird der Inhalt aktualisiert und nach oben gesetzt. Max. 64 Byte. |
| big_push_duration | Int | Optional | Dauer für verteiltes Senden (Minuten) | „Slow Push“: gleichmäßige Verteilung über n Minuten; max. 1440. |
| multi_language | json object | Optional | Mehrsprachiger Push | Siehe multi_language. |
| third_party_channel | JSON-Objekt | Optional | Android-Herstellerkanal-Konfiguration | Gilt nur für Nutzer mit Herstellerkanal; siehe third_party_channel. |
| classification | Int | Optional | Nachrichtenklassifikation | EngageLab bewertet den Typ nicht. Standard 0. 0: Betriebs-/Marketingnachrichten. 1: Systemnachrichten. |
| voice_value | String | Optional | Sprachdatei-Wert | Mehrere Werte durch Komma, # steuert Parsing; sonst direkter Dateiname. Dezimalpunkt in Zahlen → Dateiname z. B. point.mp3. Sprachen u. a. "en", "zh-Hans", "zh-Hant". Passt der Inhalt nicht zur Sprachregel, keine Sprachausgabe. |
| enhanc_message | Bool | Optional | In-App-Nachrichtenanzeige verbessern | true aktivieren, false deaktivieren. Sind Benachrichtigungsrechte aus und die App ist im Vordergrund, wird der Leisteninhalt als In-App-Nachricht gezeigt. Standard false, nur bei expliziter Aktivierung. |
| plan_id | String | Optional | Push-Plan-Kennung | Plan muss zuvor angelegt werden (Konsole oder API). |
| cid | String | Optional | Anfrage-Kennung gegen doppelte Pushs | Nur Buchstaben, Ziffern, Unterstrich, Minus, Länge ≤ 64. Muss pro AppKey eindeutig sein. Doppelte Pushs vermeiden |
| auto_truncation | bool | Optional | Automatisches Kürzen zu langer Herstellerkanal-Nachrichten | Standard true. Ist der Body für den Herstellerkanal zu lang, wird gekürzt. Mit false abschaltbar. |
Mehrsprachiger Push {#multi_language}
Feld für mehrsprachigen Push von EngageLab Push. Sie können pro Nutzersprache angepasste Titel und Texte senden, indem Sie Sprachen und Inhalte in der Anfrage angeben.
Anfrageparameter
| Schlüsselwort | Typ | Option | Bedeutung | Beschreibung |
|---|---|---|---|---|
| en | string | Optional | Sprachschlüssel | Entspricht der Nutzersprache; Codes siehe Anhang. |
| content | string | Optional | Nachrichteninhalt | Ersetzt je nach Sprache notification.android.alert, notification.ios.alert, notification.web.alert und message.msg_content. |
| title | string | Optional | Nachrichtentitel | Ersetzt je nach Sprache notification.android.title, notification.ios.alert, notification.web.title und message.title. |
| ios_subtitle | string | Optional | iOS-Untertitel | Ersetzt je nach Sprache Daten in notification.ios.alert. |
- HarmonyOS: Nutzen Sie
third_party_channel.hmos.distribution_new; nicht von der globalen Konfiguration betroffen.
Anfragebeispiel
HTTP Request Method: POST
Request URL: /v4/grouppush or /v4/push
Request Data Format: JSON
Request Example:
{
"options": {
"multi_language": {
"en": {
"content": "",
"title": "",
"ios_subtitle": ""
}
}
}
}
Anfragebeispiel
Successful Response:
{
}
Failed Response:
{
"code": 400,
"data": "",
"message": "Error Message"
}
Herstellerkanal (third_party_channel) {#third_party_channel}
Persönliche Einstellungen für Android-Herstellerkanäle. Unterstützte Schlüssel: xiaomi, huawei, meizu, oppo, vivo, fcm, honor, hmos – eine oder mehrere gleichzeitig. Pro Herstellertyp können folgende Optionen gesetzt werden:
Anfrageparameter
| Schlüsselwort | Typ | Option | Bedeutung | Beschreibung |
|---|---|---|---|---|
| distribution_new | String | Erforderlich | _ | Wenn Engagelab- und Herstellerkanäle parallel genutzt werden, Downlink-Priorität setzen.mtpush: erzwungen über den Engagelab-Kanal.pns_mtpush: bei FCM+inländischer Herstellerkombination zuerst Xiaomi/Huawei/Meizu/OPPO/Vivo/Honor, bei Fehlschlag Engagelab.mtpush_pns: zuerst Engagelab, offline dann Herstellerkanal (Hersteller sekundär).fcm_mtpush: zuerst FCM, bei Fehlschlag Engagelab.mtpush_fcm: zuerst Engagelab, offline dann FCM (FCM sekundär). Hinweis: Bei den vier Strategien pns_mtpush/fcm_mtpush/mtpush_pns/mtpush_fcm: Hat ein Gerät nur einen verfügbaren System-Push-Kanal (FCM oder Hersteller), werden die FCM-/Hersteller-Strategien ignoriert und der integrierte Kanal genutzt. |
| channel_id | String | Optional | Kategorien der Benachrichtigungsleiste | channel_id gibt es auch unter Android. Ist es hier gesetzt, hat es Vorrang vor android.channel_id.category und notify_level zu befüllen. |
| classification | Int | Optional | Kategorie der Leistennachricht | vivo-Herstellerkategorie, Standard 0. |
| pushMode | Int | Optional | vivo-Push-Modus | Standard 0. Details: vivo pushMode. Test-Push: Testgeräte-ID im vivo-Backend hinterlegen. |
| importance | String | Optional | Intelligente Klassifikation (Huawei/Honor) | Entspricht Huaweis importance; leer = Standard "NORMAL". Referenz: Huawei notification message intelligent classification。 |
| urgency | String | Optional | Priorität (Huawei) | HIGH Sondergenehmigung bei Huawei: How to apply for special permission。 |
| category | String | Optional | Szenario-Kennzeichen (Huawei, vivo, OPPO) | Für Huawei, vivo, OPPO: „Cloud“-Nachrichtentyp, Alarmverhalten und beschleunigte Zustellung. |
| notify_level | Int | Optional | OPPO: Alarmstufen der Leistennachricht | 1 Leiste, 2 Leiste+Sperrbildschirm, 16 Leiste+Sperrbildschirm+Banner+Vibration+Klingelton. notify_level nur für „Service and Communication“. notify_level ist category erforderlich. |
| small_icon_uri | String | Optional | Kleines Symbol (Hersteller) | |
| small_icon_color | String | Optional | Farbe kleines Symbol (Xiaomi) | Anpassung an Xiaomi-Farbe; leer = grau (Feature wird von Xiaomi eingeschränkt). |
| big_text | String | Optional | Großtext (Hersteller) | big_text aus android.style=1 in android. |
| only_use_vendor_style | Boolean | Optional | Nur Hersteller-Stil | Nur Stil des eigenen Kanals, nicht aus android, Standard false.true: nur Herstellerstil.false: auch android-Stil möglich. |
| big_picture_id | String | Optional | OPPO-Großbild-ID | style=3 (Großbild). ID über Bild-Upload-API, hier eintragen. |
| small_picture_id | String | Optional | OPPO-Kleinsymbol-ID |
Zur Vereinheitlichung der Mehrkanal-Strategie wurde die Konfiguration von
distribution_newangepasst. Bestehende herstellerspezifische Einstellungen bleiben gültig; empfohlen ist schrittweise Migration zur globalen Konfiguration (Wirksam ab 2025.04.03):
- Priorität (neue Regeln)
- Höchste Priorität: global
third_party_channel.distribution_new(empfohlen)
Beispiel:"distribution_new": "pns_mtpush" - Zweite Priorität: pro Hersteller
third_party_channel.{vendor_key}.distribution_new(Legacy)
Nur wenn global nicht gesetzt - Ohne Konfiguration: Standard
pns_mtpush
- Höchste Priorität: global
Hinweise zur Kompatibilität
- Abwärtskompatibilität: Hersteller-Level funktioniert weiter, wenn das globale Feld leer ist.
- Konflikt: Sind global und Hersteller gesetzt, gilt nur der globale Wert.
- Langfristig: Hersteller-
distribution_newkann entfallen; bitte frühzeitig anpassen.
Anfragebeispiel
{
"third_party_channel": {
"distribution_new": "pns_mtpush",
"xiaomi": {
"channel_id": "*******",
"small_icon_uri": "http://f6.market.xiaomi.com/download/MiPass/x/x.png",
"small_icon_color": "#ABCDEF"
},
"huawei": {
"importance": "NORMAL",
"small_icon_uri": "https://xx.com/xx.jpg",
"only_use_vendor_style": true
},
"oppo": {
"channel_id": "*******",
"big_picture_id": "",
"small_picture_id": ""
},
"vivo": {
"pushMode": 0
},
"hmos": {
"distribution_new": "pns_mtpush"
}
}
}
Request_id
Optionales, vom Kunden definiertes Request-ID-Feld. Dient der Zuordnung von Anfrage und Antwort.
Anfragebeispiel
{
"request_id":"12345678"
}
Antwortbeispiel
{
"msg_id": "1225764",
"request_id": "12345678"
}
Custom_args
Vom Kunden definiertes optionales Feld; nicht in der direkten API-Antwort, aber im Callback.
Anfragebeispiel
{
"custom_args":{
"args1": "args1"
}
}
Rückgabeparameter
Erfolgreiche Antwort
| Feld | Typ | Option | Beschreibung |
|---|---|---|---|
| request_id | String | Optional | Die mitgeschickte benutzerdefinierte ID wird unverändert zurückgegeben. |
| message_id | String | Erforderlich | Nachrichten-ID, eindeutige Kennung einer Nachricht. |
< HTTP/1.1 200 OK
< Content-Type: application/json
{"request_id":"18","msg_id":"1828256757"}
Fehlerhafte Antwort
HTTP-Status 4xx oder 5xx; Antwortbody enthält u. a.:
| Feld | Typ | Option | Beschreibung |
|---|---|---|---|
| code | int | Erforderlich | Fehlercode, siehe Fehlercodes |
| message | String | Erforderlich | Fehlerdetails |
{
"error":{
"code": 3002,
"message": "Push.template field must be set correctly when type is template"
}
}
Antwort des Aufrufs
HTTP-Statuscode
Referenz: HTTP-Status-Code
Fehlercodes {#fehlercodes}
| Code | Beschreibung | Erläuterung | HTTP-Statuscode |
|---|---|---|---|
| 20101 | Ungültige Push-Parameter | Registrierungs-ID ungültig oder nicht zur aktuellen appkey gehörig | 400 |
| 21001 | Nur HTTP POST unterstützt | GET nicht unterstützt | 405 |
| 21002 | Pflichtparameter fehlt | Korrigieren | 400 |
| 21003 | Ungültiger Parameterwert | Korrigieren | 400 |
| 21004 | Verifizierung fehlgeschlagen | Korrigieren, siehe Aufrufvalidierung | 401 |
| 21005 | Nachricht zu groß | Korrigieren; Notification/Message max. 4000 Byte | 400 |
| 21008 | Ungültiger app_key-Parameter | appkey prüfen, Leerzeichen etc. | 400 |
| 21009 | Interner Systemfehler | Support kontaktieren | 400 |
| 21011 | Kein passendes Push-Ziel | Feld to prüfen |
400 |
| 21015 | Parametervalidierung fehlgeschlagen | Unerwartete Parameter | 400 |
| 21016 | Parametervalidierung fehlgeschlagen | Falscher Typ oder Länge überschritten | 400 |
| 21030 | Interner Timeout | Später erneut versuchen | 503 |
| 21050 | Ungültiger live_activity-Event | Event muss start, update oder end sein |
400 |
| 21051 | Ungültiges live_activity-Ziel | Bei Erstellung nur Broadcast oder Registrierungs-ID | 400 |
| 21052 | Ungültiger live_activity attributes-type | Bei event=start darf attributes-type nicht leer sein |
400 |
| 21053 | Ungültiger live_activity content-state | content-state darf nicht leer sein |
400 |
| 21054 | live_activity-Fehler: Benachrichtigung und Custom-Message nicht gleichzeitig | voip, message, notification, live_activity schließen sich aus |
400 |
| 21055 | live_activity iOS ohne P8-Zertifikat | Live Activity nur mit P8-Zertifikat | 400 |
| 21056 | live_activity nur iOS | platform muss ios sein |
400 |
| 21057 | VoIP nicht mit anderen Typen kombinierbar | voip, message, notification, live_activity schließen sich aus |
400 |
| 21058 | VoIP nur iOS | platform muss ios sein |
400 |
| 23006 | Parameterfehler | big_push_duration über Maximum 1440 |
400 |
| 23008 | Schnittstellen-Rate-Limit | Push-QPS-Limit (500) erreicht | 400 |
| 23009 | Push-Berechtigungsfehler | Client-IP nicht in IP-Whitelist | 400 |
| 27000 | Interner Speicherfehler | Erneut versuchen | 500 |
| 27001 | Parameterfehler | Verifizierungsinformation leer | 401 |
| 27008 | Parameterfehler | third_party_channel mit distribution, aber leerer alert |
401 |
| 27009 | Parameterfehler | Ungültiges oder leeres distribution in third_party_channel |
401 |
| 21038 | Push-Berechtigungsfehler | VIP abgelaufen oder nicht aktiv | 401 |
| 21306 | Parameterfehler | Benachrichtigung und Custom-Message nicht gleichzeitig | 401 |
| 21059 | Parameterfehler | Dieser Nachrichtentyp unterstützt kein big_push_duration |
401 |
Push-Beschränkungen
| Anbieterkanal | Titellänge | Inhaltslänge | Sensible Begriffe | Sonstiges |
|---|---|---|---|---|
| Engagelab-Kanal | Kein Limit, Gesamtgröße begrenzt | Kein Limit, Gesamtgröße begrenzt | Gemäß Sensitivwörter-Funktion | Notification/Message in MTPush max. 4000 Byte. |
| Huawei-Kanal | Kein Limit, Gesamt < 4096 Byte, Titel empfohlen ≤ 40 Zeichen | Kein Limit, Gesamt < 4096 Byte, Inhalt empfohlen ≤ 1024 Zeichen | Keine Inhalte zu Regierung, Führungspersonen, Taiwan-Unabhängigkeit etc. | Standard für [Marketing Notification]: stille Benachrichtigung ohne Ton/Vibration. |
| Honor-Kanal | Kein Limit, Gesamt < 4096 Byte | Kein Limit, Gesamt < 4096 Byte | Wie Huawei-Themen | – |
| Meizu-Kanal | ≤ 32 Zeichen | ≤ 100 Zeichen | Sonderzeichen wie # verboten | |
| Xiaomi-Kanal | ≤ 50 Zeichen | ≤ 128 Zeichen | z. B. #, >> verboten | |
| OPPO-Kanal | ≤ 50 Zeichen | Inhalt abhängig vom Stil: 1) Standard (style=1): ≤ 50; 2) Langtext (style=2): ≤ 128; 3) Großbild (style=3): ≤ 50. | Gemäß Sensitivwörter | Zeichenlänge: inkl. Emoji und Sonderzeichen je 1 Zeichen. |
| vivo-Kanal | ≤ 40 Zeichen | ≤ 100 Zeichen | ||
| APNS-Kanal | ≤ 20 Zeichen (40 lateinisch), Rest mit Ellipse | Gemäß Sensitivwörter | Body max. 4 KB (4096 Byte). VoIP max. 5 KB (5120 Byte). | |
| FCM-Kanal | Kein Limit, Gesamt begrenzt | Kein Limit, Gesamt begrenzt | Gemäß Sensitivwörter | Wie MTPush 4000 Byte. |
| Harmony-Kanal | Kein Limit, Gesamt begrenzt | Kein Limit, Gesamt begrenzt | Gemäß Sensitivwörter | Body max. 4096 Byte (ohne Push Token). |
Mehrsprachige Sprachcodes
| Sprache | Code |
|---|---|
| Englisch | en |
| Arabisch | ar |
| Chinesisch (vereinfacht) | zh-Hans |
| Chinesisch (traditionell) | zh-Hant |
| Tschechisch | cs |
| Dänisch | da |
| Niederländisch | nl |
| Französisch | fr |
| Deutsch | de |
| Hindi | hi |
| Italienisch | it |
| Japanisch | ja |
| Koreanisch | ko |
| Malaiisch | ms |
| Russisch | ru |
| Spanisch | es |
| Thai | th |
| Vietnamesisch | vi |
| Indonesisch | id |
| Norwegisch | no |
| Schwedisch | sv |
| Polnisch | pl |
| Türkisch | tr |
| Hebräisch | he |
| Portugiesisch | pt |
| Rumänisch | ro |
| Ungarisch | hu |
| Finnisch | fi |
| Griechisch | el |
| Ukrainisch | uk |
| Laotisch | lo |
| Portugiesisch (Portugal) | pt_PT |
| Portugiesisch (Brasilien) | pt_BR |
| Spanisch (Argentinien) | es_AR |
| Spanisch (Spanien) | es_ES |
| Spanisch (Lateinamerika) | es_419 |










