Créer une API push
Poussez une notification ou un message vers un seul appareil ou une liste d'appareils.
Le contenu envoyé ne peut être qu'un objet push représenté en JSON.
Ceci est la dernière version de l'API Push. Les améliorations de la version v4 sont :
- Utilisation de l'authentification HTTP Basic pour l'autorisation d'accès. Ainsi, l'ensemble de la requête API peut être réalisée à l'aide d'outils HTTP courants, tels que : curl, extensions de navigateur, etc.
- Le contenu push est entièrement au format JSON.
Limites de fréquence des requêtes
Notre API impose des limites de fréquence d'appel afin de garantir la stabilité et l'équité du service. Les limites QPS (requêtes par seconde) pour chaque AppKey sont les suivantes :
- Limite standard : 500 requêtes maximum par seconde.
- Limite avancée : Si vous êtes abonné à notre offre payante et que votre AppKey payant nécessite une limite QPS plus élevée, veuillez contacter notre équipe commerciale : Sales@engagelab.com.
Méthode de requête
POST
Adresse d'appel
L'adresse du service d'interface correspond point à point au point d'accès sélectionné du centre de données. Veuillez sélectionner l'adresse d'appel correspondant au point d'accès de service de votre application.
Actuellement, EngageLab a déployé et prend en charge deux points d'accès de centres de données, et les données entre différents points d'accès de service sont totalement isolées. Vous pouvez sélectionner l'adresse d'appel en fonction du point d'accès du centre de données choisi lors de la création du produit.
POST v4/push
Validation de l'appel
Pour plus d'informations, consultez la vue d'ensemble de l'API REST dans la description de la Méthode d'authentification.
Exemple de requête
En-tête de requête
> POST /v4/push HTTP/1.1
> Authorization: Basic Yzk2ZjQyZTBkMmU2NjJlNDVkMDM1YWIxOmRmNGQ1OWU4NGVhYzJmOWQ1M2IzNmYxMg==
Corps de la requête
{
"from": "push",
"to": "all",
"body": {
"platform": "all",
"notification": {
"alert" :"Hello, Push!",
"android": {
"alert": "Hi, Push!",
"title": "Envoyer à 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"
}
}
Paramètres de la requête
La structure des paramètres du push, comme détaillé dans le tableau suivant :
| Mot-clé | Type | Option | Signification |
|---|---|---|---|
| from | String | Optionnel | Expéditeur du service actuel |
| to | String ou Objet JSON | Requis | Cible d'envoi |
| body | Objet JSON | Requis | Corps de la requête d'envoi |
| platform | String ou Tableau JSON | Requis | Plateforme de push |
| notification | Objet JSON | Optionnel | |
| message | Objet JSON | Optionnel | |
| options | Objet JSON | Optionnel | Paramètre de push |
| request_id | String | Optionnel | Champ optionnel défini par le client pour identifier quelle requête est retournée en réponse. |
| custom_args | Objet JSON | Optionnel | Champs optionnels définis par le client, retournés lors du callback. La valeur contient un maximum de 128 caractères. |
from
Expéditeur du service actuel, de type String, champ optionnel.
Exemple de requête
{
"from":"push"
}
to
Objet Appareil Push, qui indique la liste des appareils vers lesquels un push peut être envoyé. Pour confirmer l'objet appareil push, App Push propose plusieurs méthodes, telles que : alias, tag, registration ID, sous-groupe, diffusion, etc.
Cible de push
Il existe plusieurs façons de choisir un équipement en dehors de la diffusion, comme suit :
| Mot-clé | Type | Signification | Description | Remarque |
|---|---|---|---|---|
| all | String | Diffusion | Push pour tous les appareils | Le push cible les appareils qui ont été actifs au cours des 365 derniers jours. |
| tag | Tableau JSON | Tag | Tableaux. La relation entre plusieurs tags est OU, c'est-à-dire la concaténation. | Utilisez les tags pour effectuer des sous-groupes d'attributs d'appareil ou d'utilisateur. |
| tag_and | Tableau JSON | Tag AND | Tableau. Plusieurs tags sont en relation ET, c'est-à-dire qu'ils prennent l'intersection. | À ne pas confondre avec tags, jusqu'à 20 à la fois. |
| tag_not | Tableau JSON | Tag NOT | Tableau. Entre plusieurs labels, l'ensemble fusionné est pris d'abord, puis le complémentaire pour ce résultat. | Push jusqu'à 20 à la fois. |
| alias | Tableau JSON | Alias | Tableau. Plusieurs alias sont en relation OU, c'est-à-dire concaténation. | Identifiez un utilisateur avec un alias. |
| registration_id | Tableau JSON | ID d'inscription | Tableau. Plusieurs IDs d'inscription sont en relation OU, c'est-à-dire concaténation. | Identification de l'appareil. Push jusqu'à 1000 à la fois. |
| live_activity_id | String | Identifiant d'activité en temps réel | Correspond à la valeur de liveActivityId dans le SDK iOS. | Doit être fourni lors de la mise à jour d'une activité en temps réel. |
| seg | JSON | ID de segment utilisateur | L'ID du groupe utilisateur créé sur la page. Défini comme un tableau, mais actuellement limité à un push à la fois. | Actuellement, la limitation est qu'un seul push est possible à la fois. |
La relation implicite entre plusieurs valeurs dans un tableau est OU, c'est-à-dire la concaténation ; cependant, tag_and est différent car la relation entre plusieurs valeurs dans un tableau est ET, c'est-à-dire l'intersection.
Si tag_not est utilisé seul, nous effectuerons le traitement tag_not parmi les utilisateurs en diffusion.
Ces types peuvent coexister. La relation implicite entre plusieurs polynômes lors de la coexistence est ET, c'est-à-dire l'intersection. Par exemple :
"to" : {"tag" : [ "tag1", "tag2"], "tag_and" : ["tag3", "tag4"], "tag_not" : ["tag5", "tag6"] }
Calculez d'abord le résultat du champ "tag" tag1 ou tag2 = A ;
Puis calculez le résultat du champ "tag_and" tag3 et tag4 = B ;
Puis calculez le résultat du champ "tag_not" non (tag5 ou tag6) = C ;
Le résultat final de "to" est A et B et C .
Exemple
- Push vers tous (diffusion) :
{
"to": "all"
}
- Push vers plusieurs tags (si l'un des tags est satisfait) : à Shenzhen, Guangzhou ou Pékin
{
"to":{
"tag":[
"Shenzhen",
"Guangzhou",
"Beijing"
]
}
}
- Push vers plusieurs tags (doit être dans la plage de plusieurs tags en même temps) : à Shenzhen et "femme"
{
"to":{
"tag_and":[
"Shenzhen",
"female"
]
}
}
- Push vers plusieurs alias :
{
"to":{
"alias":[
"4314",
"892",
"4531"
]
}
}
- Push vers plusieurs IDs d'inscription :
{
"to": {
"registration_id": [
"4312kjklfds2",
"8914afd2",
"45fdsa31"
]
}
}
- Peut être poussé simultanément vers plusieurs types de cibles : à Shenzhen ou Guangzhou et sont "femmes" "membres"
{
"to":{
"tag":[
"Shenzhen",
"Guangzhou"
],
"tag_and":[
"female",
"members"
]
}
}
- Push d'un message d'activité en temps réel
{
"to": {
"live_activity_id": "LiveActivity-1"
}
}
Push vers un ID de segmentation utilisateur :
{
"to": {
"seg": {
"id":"segid"
}
}
}
Body
Corps de la requête d'envoi. Les champs pris en charge sont les suivants :
| Mot-clé | Type | Options | Signification |
|---|---|---|---|
| platform | String ou Tableau JSON | Requis | Plateforme de push |
| notification | Objet JSON | Optionnel | |
| message | Objet JSON | Optionnel | |
| live_activity | Objet JSON | Optionnel | |
| options | Objet JSON | Optionnel | Paramètres de push |
Plateforme
MTPush prend actuellement en charge le push pour les plateformes Android, iOS et HarmonyOS. Les mots-clés sont : "android", "ios", "hmos".
Si la plateforme cible est iOS, vous devez définir l'environnement de push via le champ apns_production dans options. true signifie environnement de production, false signifie environnement de développement.
Push vers toutes les plateformes :
{ "platform" : "all" }
Désignation de plateformes spécifiques :
{
"platform": [
"android",
"ios",
"hmos"
]
}
Notification
L'objet "Notification", qui est l'un des objets de contenu d'une push (l'autre étant "Message"), est envoyé au client en tant que "Notification".
| Mot-clé | Type | Option | Signification | Description |
|---|---|---|---|---|
| alert | String ou Objet JSON | Requis | Contenu | Le contenu du message lui-même. Si alert n'est pas spécifié sous android ou ios, il sera utilisé. |
| android | Objet JSON | Optionnel | Propriétés de la plateforme android | Paramètres de push pour Android, voir description android |
| ios | Objet JSON | Optionnel | Propriétés de la plateforme ios | Paramètres de push pour iOS, voir description ios |
| hmos | Objet JSON | Optionnel | Propriétés de la plateforme hmos | Paramètres de push pour HarmonyOS, voir description hmos |
Alert
La propriété "alert" à cet emplacement (directement sous l'objet notification) est une définition raccourcie, et si le message d'alerte est identique sur toutes les plateformes, l'alerte peut ne pas être définie sous la plateforme, et cette valeur primera. Si une définition est présente pour chaque plateforme, elle la remplacera.
{
"notification" : {
"alert" : "Hello, Push!"
}
}
L'objet notification défini ci-dessus sera envoyé vers plusieurs plateformes spécifiées par "platform" et toutes auront le même message d'alerte.
Android
Les notifications sur la plateforme Android sont affichées par le SDK MTPush selon des styles spécifiques de barre de notification. Les champs pris en charge sont les suivants :
| Mot-clé | Type de données | Optionnel | Signification | Description |
|---|---|---|---|---|
| alert | String ou Objet JSON | Requis | Contenu de la notification | |
| title | String | Optionnel | Titre de la notification | |
| builder_id | Int | Optionnel | ID du style de barre de notification | Le SDK Android peut définir des mises en page personnalisées de notification, et ce champ spécifie quel style utiliser. |
| channel_id | String | Optionnel | ID du canal de notification Android | Jusqu'à 1000 octets, à partir d'Android 8.0, vous pouvez configurer les canaux de notification. Ce champ spécifie l'effet d'affichage de la barre de notification selon l'ID du canal. |
| priority | Int | Optionnel | Priorité d'affichage de la barre de notification | Par défaut 0, plage de -2 à 2. |
| category | String | Optionnel | Filtrage ou tri de l'entrée de la barre de notification | Cela dépend entièrement de la stratégie de gestion du fabricant. |
| style | Int | Optionnel | Type de style de la barre de notification | Permet de spécifier le type de style de la barre de notification, par défaut 0. 1=bigText, 2=Inbox, 3=bigPicture |
| big_text | String | Optionnel | Style de barre de notification grand texte | |
| inbox | Objet JSON | Optionnel | Style de barre de notification liste de textes | |
| big_pic_path | String | Optionnel | Style de barre de notification grande image | |
| extras | Objet JSON | Optionnel | Champs supplémentaires | Définissez des informations personnalisées Key/Value au format JSON pour un usage métier. |
| intent | Objet JSON | Optionnel | Spécifier la page cible de navigation (recommandé) | Utilisez le champ intent pour spécifier la page cible à laquelle naviguer lors du clic sur la notification. Il est recommandé de remplir ce champ, sinon le clic sur la notification peut ne pas entraîner d'action de navigation. Ce champ prend en charge trois types :intent:#Intent;action=action path;component= nom du package /nom complet de l'activité;endintent:#Intent;action=android.intent.action.MAIN;end (adresse fixe)scheme://test?key1=val1&key2=val2 |
| large_icon | String | Optionnel | Grande icône de notification | |
| small_icon | String | Optionnel | Petite icône de notification | |
| sound | String | Optionnel | Son | |
| badge_add_num | Int | Optionnel | Définir la valeur incrémentale du badge, à ajouter au badge d'origine | |
| badge_set_num | Int | Optionnel | Définir une valeur fixe pour le badge | |
| badge_class | String | Optionnel | Classe Activity d'entrée de l'application correspondant à l'icône du bureau, ex : "com.test.badge.MainActivity" | |
| display_foreground | String | Optionnel | Application au premier plan, afficher ou non les notifications | |
| group_id | String | Optionnel | ID de groupe de message | Identifiant unique pour le regroupement des messages, utilisé pour contrôler l'effet de regroupement. Pris en charge depuis MTPush Android SDK version 5.0.1. |
{
"notification": {
"android": {
"alert": "hello, MTPush!",
"title": "Test push",
"builder_id": 3,
"style": 1,
"big_text": "contenu grand texte",
"inbox": Objet JSON,
"big_pic_path": "url image",
"priority": 0,
"category": "catégorie 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
Notifications APNs sur la plateforme iOS.
Le contenu de la notification est envoyé par l'agent MTPush au serveur Apple APNs et est présenté sur l'appareil iOS sous forme de notification système.
Le contenu de la notification est conforme aux spécifications APNs et prend en charge les champs suivants :
| Mot-clé | Type | Option | Signification | Description |
|---|---|---|---|---|
| alert | String ou JSON Object | Obligatoire | Contenu de la notification | |
| sound | String ou JSON Object | Optionnel | Son de notification | |
| badge | Int ou String | Optionnel | Badge de l'application | |
| content-available | Boolean | Optionnel | Réveil par push | Pour plus de détails, référez-vous à : "content-available":true lors du push signifie qu'il s'agit d'une Background Remote Notification, sinon c'est une Remote Notification normale :Background Remote Notification |
| mutable-content | Boolean | Optionnel | Extension de notification | Fonctionnalité Notification Service Extension ajoutée à iOS 10 pour signaler l'état de livraison de chaque message APNs, l'utilisation de cette fonctionnalité nécessite que le client implémente l'interface Service Extension et utilise le champ mutable-content côté serveur pour compléter la configuration. |
| category | String | Optionnel | Uniquement pris en charge dans iOS 8. Définit la valeur du champ "category" dans le payload APNs. | |
| extras | JSON Object | Optionnel | Champs étendus | Les informations Key/value ici sont personnalisées pour une utilisation métier. |
| thread-id | String | Optionnel | Groupe de notifications | Les notifications distantes iOS sont regroupées par cette propriété, de sorte que les notifications avec le même thread-id sont regroupées ensemble. |
| interruption-level | String | Optionnel | Niveaux de perturbation des notifications pour la priorité et les délais de livraison | Pour iOS 15, le niveau de notification ne peut être qu'un parmi active, critical, passive, timeSensitive, référez-vous à :UNNotificationInterruptionLevel. |
Les notifications iOS de MTPush sont transférées aux serveurs APNs. La longueur des notifications dans MTPush est limitée à 4000 octets. MTPush utilise l'encodage utf-8 lors du push, donc un caractère chinois occupe 3 octets en longueur.
Exemple d'envoi côté serveur :
{
"notification": {
"ios": {
"alert": "hello, Push!",
"sound": "sound.caf",
"badge": 1,
"extras": {
"news_id": 134,
"my_key": "a value"
}
}
}
}
Message reçu par le client :
{
"_j_msgid" = 813843507;
aps = {
alert = "hello,Push!";
badge = 1;
sound = "sound.caf";
};
"my_key" = "a value";
"news_id" = 134;
}
hmos
Les notifications sur la plateforme HarmonyOS sont affichées par le SDK MTPush selon les styles de la barre de notification. Les champs pris en charge sont les suivants :
| Mot-clé | Type | Option | Signification | Description |
|---|---|---|---|---|
| alert | String | Obligatoire | Contenu de la notification | Remplace l'alerte parent si défini. Une chaîne vide masque la notification de la barre. Voir Limitations de push pour les limites. |
| title | String | Optionnel | Titre de la notification | Remplace le nom de l'application si défini. Voir Limitations de push. |
| category | String | Obligatoire | Catégorie de message | Obligatoire par le fabricant. Suivre les normes de catégorie de message Harmony. Correspond à notification.hmos.category. |
| large_icon | String | Optionnel | Grande icône | URL HTTPS uniquement, ex. https://example.com/image.png. ≤30 Ko, largeur*hauteur < 12800 pixels. |
| intent | JSON Object | Obligatoire | Cible de navigation | Trois types pris en charge : 1) Accueil app : action.system.home 2) Deeplink : scheme://host?key=val 3) Action : com.test.action. Exemple : {"url":"action.system.home"}. |
| badge_add_num | Int | Optionnel | Incrément de badge | Si omis, ne change pas le badge. Plage 1-99. Ajoute au badge actuel. |
| badge_set_num | Int | Optionnel | Valeur fixe de badge | Si omis, ne change pas le badge. Plage 0-99. Définit le badge à une valeur fixe. |
| test_message | Boolean | Optionnel | Indicateur de message de test | false : normal (par défaut) ; true : message de test. |
| receipt_id | String | Optionnel | ID de réception Huawei | ID unique pour spécifier la configuration de réception Harmony. |
| extras | JSON Object | Optionnel | Champs supplémentaires | JSON K/V personnalisé pour utilisation métier. |
| style | Int | Optionnel | Style de notification | Par défaut 0. 0 : normal ; 3 : texte multi-lignes. |
| inbox_content | String[] | Optionnel | Contenu texte multi-lignes | Obligatoire lorsque style=3. Jusqu'à 3 éléments. Chaque ≤1024 caractères ; tronqué avec "…". |
| push_type | Int | Optionnel | Type de push | Par défaut 0. Pris en charge : 0-notification, 2-notification étendue, 10-appel VoIP. Autres invalides. |
| extra_data | String | Optionnel | Données étendues | Correspond au extraData de Huawei. Obligatoire lorsque push_type=2 ou 10 ; ignoré lorsque push_type=0. |
| display_foreground | String | Optionnel | Afficher la notification quand l'app est au premier plan | "1" : afficher ; "0" : ne pas afficher. |
Exemple :
{
"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
Messages in-app. Également appelés : messages personnalisés, messages pass-through.
- Cette partie n'est pas affichée dans la barre de notification, le SDK MTPush reçoit le contenu du message et le transmet à l'application.
- iOS obtient cette partie dans un canal de message in-app push (pas APNS) avec l'application au premier plan.
Les champs pris en charge sont les suivants :
| Mot-clé | Type | Option | Signification |
|---|---|---|---|
| msg_content | String ou JSON Object | Obligatoire | Contenu du message |
| title | String | Optionnel | Titre du message |
| content_type | String | Optionnel | Type de contenu du message |
| extras | JSON Object | Optionnel | Paramètres optionnels au format JSON |
| test_message | Boolean | Optionnel | Indicateur de message de test, pour utilisation HarmonyOS |
| receipt_id | String | Optionnel | ID de réception Huawei, pour utilisation HarmonyOS |
Exemple :
{
"message": {
"msg_content": "Hi,Push",
"content_type": "text",
"title": "msg",
"extras": {
"key": "value"
}
}
}
Live_activity
Remarque : Les messages d'activité en temps réel nécessitent l'utilisation d'un certificat iOS P8, qui correspond à la sélection de « Configuration d'authentification par token » dans les paramètres de méthode d'authentification iOS du WebPortal.
Le corps du contenu des messages d'activité en temps réel comprend les informations de champ suivantes :
| Mot-clé | Type | Options | Description |
|---|---|---|---|
| ios | JSON Object | Obligatoire | Pour les champs détaillés, référez-vous à la section iOS JSON Object. |
iOS JSON Object
| Mot-clé | Type | Options | Description |
|---|---|---|---|
| event | string | Obligatoire | Création : "start", Mise à jour : "update", Fin : "end" ; obligatoire lorsque event=start |
| attributes-type | string | Optionnel | Type d'activité en temps réel, une valeur définie par le développeur ; obligatoire lorsque event=start |
| content-state | JSON Object | Obligatoire | Contenu dynamique de l'activité en temps réel, doit correspondre à la valeur du SDK client (correspond au champ content-state d'Apple). |
| alert | JSON Object | Optionnel | Référez-vous à iOS alert JSON Object pour plus de détails. |
| dismissal-date | int | Optionnel | Temps d'affichage pour la fin de l'activité en temps réel. |
| attributes | JSON Object | Optionnel | Contenu statique de l'activité en temps réel, doit correspondre à la valeur du SDK client (correspond au champ attributes d'Apple). |
| stale-date | int | Optionnel | Délai d'expiration pour l'affichage de l'activité en temps réel ; si inférieur à l'heure actuelle, l'activité ne se mettra pas à jour. |
| relevance-score | int | Optionnel | Priorité d'affichage de l'activité en temps réel sur Dynamic Island, valeurs de 1 à 100, corrélées positivement avec l'importance de l'activité ; par défaut la plus élevée si non spécifié. |
| apns-priority | int | Optionnel | 5 ou 10, par défaut 10 ; les notifications avec apns-priority=5 ne consommeront pas la limite de débit d'Apple, dépasser la limite restreindra les notifications. |
iOS alert JSON Object
| Mot-clé | Type | Options | Description |
|---|---|---|---|
| title | string | Optionnel | Titre affiché sur les messages Apple Watch. |
| body | string | Optionnel | Contenu affiché sur les messages Apple Watch. |
| sound | string | Optionnel | Son de notification. |
- Les messages d'activité en temps réel iOS pour Engagelab Push sont transférés aux serveurs Apple. Apple exige que les données de mise à jour dynamique pour les messages d'activité en temps réel (ActivityKit) ne dépassent pas 4096 octets.
- Engagelab Push, en raison des exigences de reconditionnement et en tenant compte de la redondance de sécurité, stipule que la longueur totale dans les paramètres "live_activity" pour "iOS" : { } et le contenu entre les accolades ne doit pas dépasser 3584 octets. JPush utilise l'encodage UTF-8, ce qui signifie qu'un caractère chinois occupe 3 octets.
Exemple de push d'activité en temps réel
Le attributes-type et le live_activity_id utilisés pour les activités en temps réel sont rapportés depuis le SDK développeur. Avant d'utiliser les activités en temps réel, le push-to-start token et le update-token de l'appareil doivent être rapportés. Pour les procédures détaillées, référez-vous aux instructions du fabricant Apple sur les activités en temps réel.
Créer
{ "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" }Afficher ce bloc de code dans la fenêtre flottanteMettre à jour
{ "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" }Afficher ce bloc de code dans la fenêtre flottante
Voip
Fonction iOS VOIP. Ce type ne prend pas en charge la coexistence avec d'autres types de messages iOS. Référez-vous à la structure des paramètres de requête :
{
"from": "push",
"to": {
"registration_id": [ "1a0018970a91da03de5" ]
},
"request_id": "12345",
"custom_args": "12345",
"body": {
"platform": "ios",
"voip": {
"key": "value // Toute paire clé/valeur personnalisée qui sera transmise à l'APP"
}
}
}
Options
Les options actuelles de notification push comprennent les éléments suivants :
| Mot-clé | Type | Option | Signification | Description |
|---|---|---|---|---|
| time_to_live | Int ou String | Optionnel | Durée de rétention des messages hors ligne (secondes) | Si l'utilisateur est hors ligne au moment du push, le message peut être conservé pendant une durée spécifiée pour être poussé à nouveau lorsqu'il se connecte. Par défaut 86400 (1 jour), maximum 15 jours. Si le maximum pris en charge par l'opérateur est inférieur à la valeur définie, le maximum de l'opérateur est utilisé. Définir à 0 signifie que les messages hors ligne ne sont pas conservés ; seuls les utilisateurs en ligne au moment du push recevront le message. |
| override_msg_id | Long | Optionnel | ID du message à remplacer | Si le push actuel est destiné à remplacer un précédent, entrer le msg_id du push précédent aura pour effet de le remplacer. Ce champ est uniquement efficace pour Android et ne prend en charge que le canal Engagelab, le canal Xiaomi, le canal Meizu, le canal OPPO, le canal FCM et le canal Huawei (appareils EMUI10 et supérieur). |
| apns_production | Boolean | Optionnel | Environnement de production APNs | Ce champ est uniquement valide pour les notifications iOS. |
| apns_collapse_id | String | Optionnel | Identifiant pour mettre à jour les notifications iOS | Si une nouvelle notification APNs correspond à une notification existante dans le Centre de notifications avec le même apns-collapse-id, le contenu de la nouvelle notification la mettra à jour et la placera en haut du Centre de notifications. L'id de regroupement ne doit pas dépasser 64 octets. |
| big_push_duration | Int | Optionnel | Durée de push cadencé (minutes) | Également connu sous le nom de push lent, il réduit la vitesse de push rapide d'origine, distribuant le push uniformément aux utilisateurs cibles sur les n minutes spécifiées ; le maximum est 1440. |
| multi_language | json object | Optionnel | Paramètres de push multilingue | Paramètres d'adaptation pour le contenu push multilingue, voir multi_language pour plus de détails. |
| third_party_channel | JSON Object | Optionnel | Informations de configuration du canal fabricant Android | Paramètres uniquement valides pour les utilisateurs configurés avec des canaux fabricants, voir third_party_channel pour plus de détails. |
| classification | Int | Optionnel | Paramètre de classification des messages push | EngageLab ne juge ni ne calibre le type de message spécifié. Si non spécifié, la valeur par défaut est 0. 0 : Représente les messages opérationnels. 1 : Représente les messages système. |
| voice_value | String | Optionnel | Valeur du fichier vocal | Plusieurs paramètres sont séparés par des virgules, avec '#' indiquant le besoin d'analyse ; sinon, il correspond directement au fichier de langue par défaut. Les langues actuellement prises en charge sont "en" (anglais), "zh-Hans" (chinois simplifié) et "zh-Hant" (chinois traditionnel). |
| enhanc_message | Bool | Optionnel | Activer l'affichage des messages in-app | true - activer l'amélioration ; false - désactiver l'amélioration. Si les autorisations de notification sont désactivées, l'activation de cette fonctionnalité affichera le contenu du message de la barre de notification comme un message in-app lorsque l'utilisateur exécute l'application au premier plan. La valeur par défaut est false. |
| plan_id | String | Optionnel | Identifiant de plan push | Vous devez d'abord créer l'identification du plan. Il peut être créé sur la console ou via l'API. |
| cid | String | Optionnel | Identifiant de requête push, utilisé pour empêcher les pushs en double | Seuls les lettres, chiffres, underscores et tirets sont autorisés, et la longueur ne dépasse pas 64 caractères. Ce champ doit être unique sous le même AppKey. Comment éviter les pushs en double |
| auto_truncation | bool | Optionnel | Si les messages trop longs pour le canal fabricant doivent être automatiquement tronqués | Par défaut true. Si le corps du message envoyé au canal fabricant est trop long, il sera automatiquement tronqué. Si la troncation n'est pas souhaitée, vous pouvez passer false. |
Multi_language
Ce champ est destiné à la fonctionnalité de push multilingue du service EngageLab Push. Il vous permet d'envoyer un contenu de notification personnalisé aux utilisateurs dans différentes langues. En spécifiant plusieurs langues avec leur contenu de message, titres et sous-titres iOS correspondants dans la requête push, vous pouvez envoyer des notifications push appropriées basées sur les paramètres de langue de l'utilisateur.
Paramètres de requête
| Mot-clé | Type | Options | Signification | Description |
|---|---|---|---|---|
| en | string | Optionnel | Clé de langue | Correspond à la langue de l'utilisateur, voir l'annexe pour les codes clés. |
| content | string | Optionnel | Contenu du message | Remplace les données dans notification.android.alert, notification.ios.alert, notification.web.alert et message.msg_content en fonction de la langue de l'utilisateur. |
| title | string | Optionnel | Titre du message | Remplace les données dans notification.android.title, notification.ios.alert, notification.web.title et message.title en fonction de la langue de l'utilisateur. |
| ios_subtitle | string | Optionnel | Sous-titre iOS | Remplace les données dans notification.ios.alert en fonction de la langue de l'utilisateur. |
- Remarque HarmonyOS : Lors de l'utilisation de HarmonyOS, utilisez
third_party_channel.hmos.distribution_new. Il n'est pas affecté par la configuration globale.
Exemple de requête
HTTP Request Method: POST
Request URL: /v4/grouppush or /v4/push
Request Data Format: JSON
Exemple de requête :
{
"options": {
"multi_language": {
"en": {
"content": "",
"title": "",
"ios_subtitle": ""
}
}
}
}
Exemple de réponse
Réponse réussie :
{
}
Réponse échouée :
{
"code": 400,
"data": "",
"message": "Message d'erreur"
}
Third_party_channel
Ce champ est utilisé pour remplir les informations personnalisées du canal fabricant Android, la clé prend en charge ces canaux fabricants : xiaomi, huawei, meizu, oppo, vivo, fcm, honor, hmos. Un ou plusieurs d'entre eux peuvent exister en même temps, la CLÉ de chaque type de fabricant peut actuellement contenir les options suivantes :
Paramètres de requête
| Mot-clé | Type | Option | Signification | Description |
|---|---|---|---|---|
| distribution_new | String | Obligatoire | _ | Lorsque les canaux Engagelab et fabricant coexistent, définir la priorité de distribution. |
| channel_id | String | Optionnel | Catégories de messages de la barre de notification | channel_id est également disponible sur Android. Si ce champ est rempli, il aura la priorité ; sinon, la définition de android.channel_id s'appliquera.category et notify_level ci-dessous. |
| classification | Int | Optionnel | Catégories de messages de la barre de notification | Catégorie de message de la barre de notification du fabricant vivo, par défaut 0. |
| pushMode | Int | Optionnel | Mode push vivo | Par défaut 0. Voir vivo pushMode. Pour utiliser le push de test, vous devez configurer manuellement l'ID de l'appareil de test dans le backend vivo. |
| importance | String | Optionnel | Classification intelligente des messages de la barre de notification Huawei/Honor | Pour s'adapter à la classification intelligente des messages de la barre de notification Huawei, correspondant au champ importance de Huawei, par défaut "NORMAL", référence : Classification intelligente des notifications Huawei. |
| urgency | String | Optionnel | Priorité des messages personnalisés fabricant Huawei | Pour adapter la priorité des messages personnalisés du fabricant Huawei. |
| category | String | Optionnel | Logo de scénario de message personnalisé fabricant Huawei | Pour s'adapter aux exigences de notification Huawei, vivo et OPPO, ce champ est utilisé pour identifier le type de message "notification cloud", déterminer les méthodes d'alerte de notification et accélérer la livraison de certains types de messages. |
| notify_level | Int | Optionnel | Niveaux d'alerte des messages de la barre de notification OPPO | 1 pour Barre de notification, 2 pour Barre de notification + écran de verrouillage, 16 pour Barre de notification + écran de verrouillage + bannière + vibration + sonnerie. notify_level ne s'applique qu'aux messages "Service et Communication". notify_level, le paramètre category doit être inclus. |
| small_icon_uri | String | Optionnel | Style de petite icône pour les messages fabricant | |
| small_icon_color | String | Optionnel | Couleur du style de petite icône fabricant Xiaomi | Pour adapter la couleur du style de petite icône des messages du fabricant Xiaomi, par défaut gris si non rempli (Xiaomi ne prend officiellement plus en charge les petites icônes personnalisées). |
| big_text | String | Optionnel | Style de texte large pour les messages fabricant | |
| only_use_vendor_style | Boolean | Optionnel | Utiliser uniquement le style défini dans son propre canal | Utiliser uniquement le style défini dans son propre canal, pas celui défini dans android, par défaut false. |
| big_picture_id | String | Optionnel | ID de grande image OPPO | |
| small_picture_id | String | Optionnel | ID de petite icône OPPO |
Pour unifier les stratégies multi-canaux fabricants et simplifier la logique de configuration, la méthode de configuration du champ
distribution_newest ajustée comme suit. Vos configurations héritées au niveau fabricant resteront effectives, mais il est recommandé de migrer progressivement vers les configurations globales pour éviter les risques de compatibilité futurs. (Les nouvelles règles entreront en vigueur à partir du 2025.04.03) :
- Priorité de configuration (Nouvelles règles)
- Première priorité : Configuration globale
third_party_channel.distribution_new(Nouvelle méthode recommandée)
Exemple :"distribution_new": "pns_mtpush" - Deuxième priorité : Configuration au niveau fabricant
third_party_channel.{vendor_key}.distribution_new(Méthode compatible héritée)
Ne prend effet que lorsque la configuration globale n'est pas définie - Aucune configuration : stratégie par défaut : pns_mtpush
- Première priorité : Configuration globale
Notes de compatibilité
- Garantie de compatibilité : Les configurations héritées au niveau fabricant fonctionneront toujours si le champ global n'est pas défini, garantissant aucun impact sur les services existants.
- Résolution de conflit : Si les champs global et au niveau fabricant sont tous deux configurés, seule la valeur globale sera lue, et les configurations au niveau fabricant seront ignorées.
- Plan à long terme : Le
distribution_newau niveau fabricant pourrait être supprimé dans les versions futures. Veuillez vous adapter à l'avance si possible.
Exemple de requête
{
"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
ID de requête, un champ optionnel défini par le client. Utilisé par le client pour identifier quelle requête est en cours et retourné dans la réponse.
Exemple de requête
{
"request_id":"12345678"
}
Exemple de retour
{
"msg_id": "1225764",
"request_id": "12345678"
}
Custom_args
Défini par le client, champ optionnel qui n'est pas retourné dans la réponse et est retourné dans le callback.
Exemple de requête
{
"custom_args":{
"args1": "args1"
}
}
Paramètres de retour
Retour réussi
| Champ | Type | Option | Description |
|---|---|---|---|
| request_id | String | Optionnel | L'ID personnalisé soumis lors de la requête est retourné tel quel dans la réponse. |
| message_id | String | Obligatoire | ID du message, qui identifie de manière unique un message. |
< HTTP/1.1 200 OK
< Content-Type: application/json
{"request_id":"18","msg_id":"1828256757"}
Retour en échec
Le code de statut http est 4xx ou 5xx et le corps de la réponse contient les champs suivants :
| Champ | Type | Option | Description |
|---|---|---|---|
| code | int | Obligatoire | Code d'erreur, voir la description du Code d'erreur |
| message | String | Obligatoire | Détails de l'erreur |
{
"error":{
"code": 3002,
"message": "Push.template field must be set correctly when type is template"
}
}
Retours d'appel
Code de statut HTTP
Document de référence : HTTP-Status-Code
Code d'erreur
| Code | Description | Explication détaillée | Code de statut HTTP |
|---|---|---|---|
| 20101 | Paramètres de push invalides | L'ID d'enregistrement est invalide ou n'appartient pas à l'appkey actuel | 400 |
| 21001 | Seule la méthode HTTP Post est prise en charge | La méthode Get n'est pas prise en charge | 405 |
| 21002 | Paramètre obligatoire manquant | Doit être corrigé | 400 |
| 21003 | Valeur de paramètre invalide | Doit être corrigé | 400 |
| 21004 | Vérification échouée | Doit être corrigé, voir : Vérification d'appel | 401 |
| 21005 | Corps du message trop volumineux | Doit être corrigé, limite de longueur Notification/Message est 4000 octets | 400 |
| 21008 | Paramètre app_key invalide | Doit être corrigé, vérifier l'appkey transmis avec les informations de l'application | 400 |
| 21009 | Erreur système interne | Veuillez contacter l'équipe de support | 400 |
| 21011 | Aucune cible de push appropriée trouvée | Vérifier le champ 'to' | 400 |
| 21015 | Validation des paramètres de requête échouée | Paramètres inattendus présents | 400 |
| 21016 | Validation des paramètres de requête échouée | Erreur de type de paramètre, ou longueur de paramètre dépasse la limite | 400 |
| 21030 | Délai d'attente du service interne | Réessayer plus tard | 503 |
| 21050 | Paramètre event live_activity incorrect | Le paramètre event doit être "start", "update" ou "end" | 400 |
| 21051 | Paramètre audience live_activity incorrect | Lors de la création d'une activité en direct, la cible push ne peut être que broadcast ou basée sur l'enregistrement | 400 |
| 21052 | Paramètre attributes-type live_activity incorrect | Lorsque event=start, attributes-type ne peut pas être vide | 400 |
| 21053 | Paramètre content-state live_activity incorrect | Content-state ne peut pas être vide | 400 |
| 21054 | Erreur de paramètre live_activity, notification et message personnalisé non autorisés simultanément | voip, message, notification, live_activity ne peuvent pas coexister | 400 |
| 21055 | live_activity ios certificat non-p8 | L'activité en direct ne prend en charge que le certificat p8 | 400 |
| 21056 | live_activity ne prend en charge que la plateforme ios | Le paramètre platform doit être ios | 400 |
| 21057 | Le message voip ne peut pas coexister avec d'autres types de messages | voip, message, notification, live_activity ne peuvent pas coexister | 400 |
| 21058 | voip ne prend en charge que la plateforme ios | Le paramètre platform doit être ios | 400 |
| 23006 | Erreur de paramètre | big_push_duration du push à débit fixe dépasse la valeur maximale de 1440 | 400 |
| 23008 | Interface limitée en débit | QPS de l'interface push d'une seule application atteint la limite (500 qps) | 400 |
| 23009 | Erreur de permission de push | L'adresse IP de push actuelle n'est pas dans la liste blanche IP de l'application | 400 |
| 27000 | Erreur mémoire interne | Veuillez réessayer | 500 |
| 27001 | Erreur de paramètre | Les informations de vérification sont vides | 401 |
| 27008 | Erreur de paramètre | Distribution dans third_party_channel n'est pas vide, mais le contenu alert de la notification est vide | 401 |
| 27009 | Erreur de paramètre | Format invalide ou vide pour distribution dans third_party_channel | 401 |
| 21038 | Erreur de permission de push | VIP expiré ou non activé | 401 |
| 21306 | Erreur de paramètre | Les messages de notification et les messages personnalisés ne peuvent pas être poussés simultanément | 401 |
| 21059 | Erreur de paramètre | Ce type de message ne prend pas en charge big_push_duration | 401 |
Limitations de push
| Canal fabricant | Longueur du titre | Longueur du contenu | Mots sensibles | Autres remarques |
|---|---|---|---|---|
| Canal Engagelab | Pas de limite, mais la taille totale du message est limitée | Pas de limite, mais la taille totale du message est limitée | Mots configurés selon la fonctionnalité de mots sensibles | La longueur Notification/Message dans MTPush est limitée à 4000 octets. |
| Canal Huawei | Pas de limite, mais taille totale du message < 4096 octets, titre recommandé ≤ 40 caractères | Pas de limite, mais taille totale du message < 4096 octets, contenu recommandé ≤ 1024 caractères | Interdit de porter du contenu lié au gouvernement, noms de dirigeants, indépendance de Taïwan, etc. | L'autorisation par défaut pour [Notification marketing] est une notification silencieuse, sans son ni vibration. |
| Canal Honor | Pas de limite, mais taille totale du message < 4096 octets | Pas de limite, mais taille totale du message < 4096 octets | Interdit de porter du contenu lié au gouvernement, noms de dirigeants, indépendance de Taïwan, etc. | - |
| Canal Meizu | ≤ 32 caractères | ≤ 100 caractères | Les caractères spéciaux comme # sont interdits | |
| Canal Xiaomi | ≤ 50 caractères | ≤ 128 caractères | Les caractères spéciaux comme #, >> sont interdits | |
| Canal OPPO | ≤ 50 caractères | La longueur du contenu est limitée par le style de notification : 1) Style standard (style=1) : longueur ≤ 50 ; 2) Style texte long (style=2) : longueur ≤ 128 ; 3) Style grande image (style=3) : longueur ≤ 50. | Mots configurés selon la fonctionnalité de mots sensibles | Calcul de la longueur : caractères chinois, anglais et symboles spéciaux (ex. emojis) comptent tous comme 1 caractère. |
| Canal vivo | ≤ 40 caractères | ≤ 100 caractères | ||
| Canal APNS | ≤ 20 caractères (40 caractères anglais), les parties excédentaires afficheront des points de suspension. | Mots configurés selon la fonctionnalité de mots sensibles | La taille du corps du message est limitée à 4 Ko (4096 octets). La taille maximale pour les notifications VoIP est 5 Ko (5120 octets). | |
| Canal FCM | Pas de limite, mais la taille totale du message est limitée | Pas de limite, mais la taille totale du message est limitée | Mots configurés selon la fonctionnalité de mots sensibles | La longueur Notification/Message dans MTPush est limitée à 4000 octets. |
| Canal Harmony | Pas de limite, mais la taille totale du message est limitée | Pas de limite, mais la taille totale du message est limitée | Mots configurés selon la fonctionnalité de mots sensibles | La taille du corps du message ne peut pas dépasser 4096 octets (hors Push Token). |
Code multi-langue
| Langue | Code |
|---|---|
| Anglais | en |
| Arabe | ar |
| Chinois (Simplifié) | zh-Hans |
| Chinois (Traditionnel) | zh-Hant |
| Tchèque | cs |
| Danois | da |
| Néerlandais | nl |
| Français | fr |
| Allemand | de |
| Hindi | hi |
| Italien | it |
| Japonais | ja |
| Coréen | ko |
| Malais | ms |
| Russe | ru |
| Espagnol | es |
| Thaï | th |
| Vietnamien | vi |
| Indonésien | id |
| Norvégien | no |
| Suédois | sv |
| Polonais | pl |
| Turc | tr |
| Hébreu | he |
| Portugais | pt |
| Roumain | ro |
| Hongrois | hu |
| Finnois | fi |
| Grec | el |
| Ukrainien | uk |
| Lao | lo |
| Portugais (Portugal) | pt_PT |
| Portugais (Brésil) | pt_BR |
| Espagnol (Argentine) | es_AR |
| Espagnol (Espagne) | es_ES |
| Espagnol (Amérique latine) | es_419 |










