Passer au contenu

Notify

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 : cibler un segment d’audience par code de segment, une expression seglang ou une expression de filtre structurée.
  • transactional : envoyer à une liste explicite de hwids, d’ID utilisateur, de jetons push ou d’appareils de test.
Forme
{
"segment": { ... }, // OU
"transactional": { ... },
"transaction_id": "unique-uuid"
}
ChampTypeDescription
transaction_idstringFacultatif. 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 pour l’envoi.
message_typeMessageTypeMESSAGE_TYPE_MARKETING (par défaut) ou MESSAGE_TYPE_TRANSACTIONAL. Contrôle le filtrage par groupe de contrôle.
dynamic_content_placeholdersmap<string, string>Remplace les placeholders dans le contenu.
meta_dataobjectMétadonnées de forme libre transmises aux analyses en aval.
use_latest_user_deviceboolLorsque true, livre le message à l’appareil le plus récemment actif de chaque utilisateur (celui avec la dernière ouverture d’application) au lieu de chaque appareil correspondant au segment. Limité à platforms : seuls les appareils sur ces plateformes sont pris en compte, et si aucun n’a de données de dernière ouverture d’application, le premier appareil correspondant est utilisé au lieu d’annuler l’envoi. La valeur par défaut est false (envoyer à chaque appareil).

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 true, envoyer uniquement aux appareils de test de l’application.
hwids{ "list": [string, ...] }Envoyer uniquement à ces hwids.
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_identifiersboolLorsque true, 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. Même comportement que dans NotifySegment ci-dessus — livre un message par utilisateur au lieu d’un par appareil, limité à platforms. La valeur par défaut est false.
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_timezoneboolLorsque true, 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. N’a de sens que 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 complètement 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 temps. 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 strictement 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 l’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, 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 par groupe de contrôle et à la limitation de fréquence.
  • MESSAGE_TYPE_TRANSACTIONAL : ignore le filtrage par 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