Passer au contenu

Notifier

POST https://api.pushwoosh.com/messaging/v2/notify

Crée et planifie un message unique.

Structure de la requête

Anchor link to

Le corps de la requête est un NotifyRequest avec exactement l’un des deux types :

  • segment : ciblez un segment d’audience par code de segment, une expression seglang ou une expression de filtre structurée.
  • transactional : envoyez à une liste explicite de HWID, d’ID utilisateur, de jetons push ou d’appareils de test.
Shape
{
"segment": { ... }, // OU
"transactional": { ... },
"transaction_id": "unique-uuid"
}
ChampTypeDescription
transaction_idstringOptionnel. Clé d’idempotence pour la requête — fonctionne avec segment et transactional. Un appel répété avec le même transaction_id dans les 5 minutes renvoie le message_code original au lieu d’envoyer un message en double. Utilisez un UUID ou une autre valeur unique par envoi logique.

NotifySegment

Anchor link to

Cible les utilisateurs qui correspondent à un segment d’audience ou à une expression de filtre.

ChampTypeDescription
scheduleScheduleQuand et comment envoyer. Requis.
applicationstringCode d’application.
platformsarray of PlatformPlateformes ciblées par le message.
codestringCode de segment. Mutuellement exclusif avec expression et filter_expression.
expressionstringExpression Seglang.
filter_expressionFilterExpressionExpression de filtre structurée (avancé).
payloadPayloadCharge utile Push / SMS / Telegram / Kakao / LINE / WhatsApp / Viber. Mutuellement exclusif avec email_payload.
email_payloadEmailPayloadCharge utile d’e-mail.
campaignstringCode de campagne auquel attribuer ce message.
frequency_cappingFrequencyCappingLimites de fréquence par utilisateur.
send_rateSendRateLimitation de la vitesse d’envoi.
message_typeMessageTypeMESSAGE_TYPE_MARKETING (par défaut) ou MESSAGE_TYPE_TRANSACTIONAL. Contrôle le filtrage du groupe de contrôle.
dynamic_content_placeholdersmap<string, string>Remplace les espaces réservés dans le contenu.
meta_dataobjectMétadonnées de forme libre transmises aux analyses en aval.

Exemple : Envoyer à un segment

Anchor link to
Terminal window
curl -X POST https://api.pushwoosh.com/messaging/v2/notify \
-H "Authorization: Token YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"segment": {
"application": "XXXXX-XXXXX",
"platforms": ["IOS", "ANDROID"],
"code": "active_users",
"payload": {
"content": {
"localized_content": {
"en": {
"ios": { "body": "Hello!" },
"android": { "body": "Hello!" }
}
}
}
},
"schedule": { "at": "2026-05-01T12:00:00Z" },
"message_type": "MESSAGE_TYPE_MARKETING"
}
}'

NotifyTransactional

Anchor link to

Envoie à une liste explicite de destinataires.

ChampTypeDescription
scheduleScheduleRequis.
applicationstringCode d’application.
platformsarray of PlatformPlateformes ciblées par le message.
test_devicesboolSi vrai, envoyer uniquement aux appareils de test de l’application.
hwids{ "list": [string, ...] }Envoyer uniquement à ces HWID.
users{ "list": [string, ...] }Envoyer uniquement à ces ID utilisateur.
push_tokens{ "list": [string, ...] }Envoyer uniquement à ces jetons push.
payloadPayloadCharge utile Push / SMS / Telegram / Kakao / LINE / WhatsApp / Viber.
email_payloadEmailPayloadCharge utile d’e-mail.
return_unknown_identifiersboolSi vrai, la réponse unknown_identifiers liste les identifiants qui n’ont pas été trouvés.
use_latest_user_deviceboolS’applique uniquement lorsque vous ciblez des users. Si vrai, le message est livré à l’appareil le plus récemment actif de chaque utilisateur — celui avec la dernière ouverture d’application — au lieu de tous les appareils liés à cet ID utilisateur. La valeur par défaut est false (envoyer à chaque appareil).
campaign, frequency_capping, send_rate, message_type, dynamic_content_placeholders, meta_dataVoir NotifySegment ci-dessus.

test_devices, hwids, users et push_tokens sont mutuellement exclusifs. Un seul doit être défini.

Exemple : Transactionnel par ID utilisateur

Anchor link to
Terminal window
curl -X POST https://api.pushwoosh.com/messaging/v2/notify \
-H "Authorization: Token YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"transactional": {
"application": "XXXXX-XXXXX",
"platforms": ["IOS", "ANDROID"],
"users": { "list": ["user-123", "user-456"] },
"payload": {
"content": {
"localized_content": {
"en": { "ios": { "body": "Your order has shipped." } }
}
}
},
"schedule": { "at": "2026-05-01T12:00:00Z" },
"message_type": "MESSAGE_TYPE_TRANSACTIONAL",
"return_unknown_identifiers": true,
"use_latest_user_device": true
}
}'
{
"result": {
"message_code": "XXXXX-XXXXX-XXXXX",
"unknown_identifiers": []
}
}
ChampTypeDescription
message_codestringCode de message unique. Utilisez-le avec /getMessageDetails et les points de terminaison des statistiques de message.
unknown_identifiersarray of stringIdentifiants non trouvés sur le compte. Rempli uniquement lorsque return_unknown_identifiers: true a été défini sur le type transactional.

Types partagés

Anchor link to

Planification

Anchor link to
{
"at": "2026-05-01T12:00:00Z",
"follow_user_timezone": true,
"past_timezones_behaviour": "PAST_TIMEZONES_BEHAVIOUR_SEND_IMMEDIATELY"
}
ChampTypeDescription
attimestampHeure d’envoi absolue (RFC 3339). Si dans le passé, le message est envoyé immédiatement. Maximum 14 jours dans le futur.
afterdurationAlternative à at. Envoyer après ce décalage par rapport à “maintenant” (par ex. "3600s").
follow_user_timezoneboolSi vrai, chaque appareil reçoit le message à at dans son fuseau horaire local.
past_timezones_behaviourenumPAST_TIMEZONES_BEHAVIOUR_SEND_IMMEDIATELY (par défaut), PAST_TIMEZONES_BEHAVIOUR_DO_NOT_SEND, ou PAST_TIMEZONES_BEHAVIOUR_NEXT_DAY. Pertinent uniquement si follow_user_timezone est true.

FrequencyCapping

Anchor link to

Limites de fréquence par utilisateur pour les envois marketing. Pour désactiver la limitation, omettez entièrement frequency_capping, ou envoyez days: 0 avec count: 0.

{ "days": 7, "count": 3, "exclude": false, "avoid": true }
  • days (int, 1–30, ou 0 pour désactiver la limitation) : fenêtre de rétrospection. Doit être envoyé avec count — si l’un est 0, l’autre doit aussi être 0 ; envoyer l’un à 0 alors que l’autre est non nul renvoie 400.
  • count (int, 1 ou plus, ou 0 pour désactiver la limitation) : nombre maximum de messages autorisés dans days. Même règle de couplage que days ci-dessus.
  • exclude (bool) : exclure de manière stricte les utilisateurs qui ont déjà atteint la limite.
  • avoid (bool) : éviter de manière souple les utilisateurs qui ont déjà atteint la limite (ils comptent toujours pour les analyses).
{ "value": 500, "bucket": "1s", "avoid": false }

Limite la vitesse d’envoi. value est le nombre de messages par bucket ; un bucket typique est "1s".

Énumération Platform

Anchor link to

IOS, ANDROID, OSX, WINDOWS, AMAZON, SAFARI, CHROME, FIREFOX, IE, EMAIL, BAIDU_ANDROID, HUAWEI_ANDROID, SMS, WEB, KAKAO, TELEGRAM, LINE, WHATS_APP, VIBER.

Énumération MessageType

Anchor link to
  • MESSAGE_TYPE_UNSPECIFIED : équivalent à MESSAGE_TYPE_MARKETING.
  • MESSAGE_TYPE_MARKETING : soumis au filtrage du groupe de contrôle et à la limitation de fréquence.
  • MESSAGE_TYPE_TRANSACTIONAL : ignore le filtrage du groupe de contrôle et la limitation de fréquence. À utiliser pour les confirmations de commande, les OTP et les flux critiques similaires.

Sujets connexes

Anchor link to