/createMessage method supports content templates. To learn more, please refer to the Liquid Templates guide.
Request example
Example
{"request": {"application":"XXXXX-XXXXX",// required. Pushwoosh application code"applications_group":"GROUP_CODE",// optional. Can be used instead of "application"."auth":"yxoPUlwqm…………pIyEX4H",// required. API access token from Pushwoosh Control Panel"notifications": [ {// Content settings "send_date":"now",// required. YYYY-MM-DD HH:mm OR 'now'"ignore_user_timezone":true,// or false, required "timezone": "America/New_York", // optional. If ignored UTC-0 is default for "send_date". See http://php.net/manual/timezones.php for supported timezones.
"campaign":"CAMPAIGN_CODE",// optional. Campaign code to which you want to assign this push message."geozone": { // optional, send to Geozone"lat":22.22,"lng":33.33,"range":110 }, "content": { // required, object( language1: 'content1', language2: 'content2' ) OR string. Ignored for Windows 8, use "wns_content" instead. (Use \n for multiline text. Ex: "hello\nfriend")
"en":"English","fr":"French" }, "title": { // optional, object( language1: 'title1', language2: 'title2' ) OR string. Ignored if platform-specific titles are specified (e.g., 'ios_title', 'android-header', etc.; see the platform-specific parameters examples below).
"en": "Title","fr": "Titre" }, "subtitle":{ // optional, object( language1: 'subtitle1', language2: 'subtitle1' ) OR string. Ignored if platform-specific titles are specified (e.g., 'ios_subtitle'; see the platform-specific parameters examples below).
"en": "Subtitle","fr": "Sous-titre" }, "rich_media": "XXXXX-XXXXX", // optional, string. Copy the Rich Media code from the URL bar of the Rich Media editor page in Pushwoosh Control Panel.
"link": "http://google.com",// optional, string. For deeplinks add "minimize_link":0 "minimize_link": 0, // optional. 0 — do not minimize, 2 — bitly. Default = 2. Google URL shortener is disabled since March 30, 2019. Please note that shorteners have restrictions on a number of calls.
"data": { "key": "value" // optional, JSON string or JSON object, will be passed as "u" parameter in the payload (converted to JSON string).
}, "transactionId": "6e22a9af-84e4-46e6-af16-e457a4a6e7e5", // optional, string. Unique message identifier to prevent duplicating in case of network problems. Stored on the side of Pushwoosh for 5 minutes.
"platforms": [1,3,5,7,8,9,10,11,12,13,17],// optional. 1 — iOS; 3 — Android; 7 — OS X; 8 — Windows 8; 9 — Amazon; 10 — Safari; 11 — Chrome; 12 — Firefox; 13 - IE11; 17 - Huawei; ignored if "devices" < 10
"preset": "XXXXX-XXXXX", // optional. Push Preset Code from your Control Panel. If specific params are sent in the request, they override preset's params.
"send_rate": 100,// optional. Throttling. Valid values are from 100 to 1000 pushes/second.// Templating related, please refer to the Template Engine guide to learn more"template_bindings" : { // optional"TemplatePlaceholder":"Value" },// Frequency capping params"capping_days": 30,// , optional. Amount of days for frequency capping (max 30 days) "capping_count": 10, // , optional. The max number of pushes that can be sent from a specific app to a particular device within a 'capping_days' period. In case the message created exceeds the 'capping_count' limit for a device, it won't be sent to that device.
// To save the message to the Inbox via API, use "inbox_date" or "inbox_image". The message is saved when at least one of these parameters is used.
"inbox_date": "2017-02-02", // optional. Specify when to remove a message from the Inbox. Message will be removed from Inbox at 00:00:01 UTC of the date specified, so the previous date is the last day a user can see the message in their Inbox. If not specified, the default removal date is the next day after the send date.
"inbox_image": "Inbox image URL",// optional. The image to be shown near the message. "devices": [ // optional. Specify tokens or hwids to send targeted push notifications. Not more than 1000 tokens/hwids in an array. If set, the message will only be sent to the devices on the list. Application Group for devices list is not allowed. iOS push tokens can only be lower case.
"dec301908b9ba8df85e57a58e40f96f523f4c2068674f5fe2ba25cdc250a2a41" ],// user-centric push notifications "users": [ // optional. If set, message will only be delivered to the specified user ID's (set via /registerUser call). If specified together with devices parameter, the latter will be ignored. Not more than 1000 user ID's in an array. Application Group for users list is not allowed.
"user_3078a" ],//filters and conditions"filter":"FILTER_NAME",// optional"dynamic_content_placeholders": { // optional. Placeholders for dynamic content instead of device tags."firstname":"John","lastname":"Doe" },"conditions": [TAG_CONDITION1,TAG_CONDITION2,...,TAG_CONDITIONN],// optional. See the remark below. "conditions_operator": "AND" // optional, logical operator for conditions arrays. Possible values: AND | OR. AND is default.
} ] }}
Platform-specific parameters
iOS
Example
{"request": {"application":"12345-67891",// required. Pushwoosh application code"auth":"yxoPUlwqm…………pIyEX4H",// required. API access token from Pushwoosh Control Panel"notifications": [{// Content settings"send_date":"now",// required. YYYY-MM-DD HH:mm OR 'now' "content": { // required, object( language1: 'content1', language2: 'content2' ) OR string. Ignored for Windows 8, use "wns_content" instead. (Use \n for multiline text. Ex: "hello\nfriend")
"en":"English","de":"Deutsch" }, "ios_badges": 5, // optional, integer. iOS application badge number. Use "+n" or "-n" to increment/decrement the badge value by n.
"ios_sound": "sound file.wav", // optional. Sound file name in the main bundle of application. If left empty, the device will produce a default system sound.
"ios_ttl": 3600,// optional. Time to live parameter - maximum message lifespan in seconds."ios_silent": 1,// optional. Enables silent notifications (ignore "sound" and "content")."ios_category_id": "1",// optional, string. iOS8 category ID from Pushwoosh."ios_root_params": { // optional. Root level parameters to the aps dictionary."aps": {"content-available":"1","mutable-content":1// required for iOS 10 Media attachments. },"data":<<User supplied data, max of 4KB>> },"apns_trim_content": 1,// optional. (0|1) Trims the exceeding content strings with ellipsis."ios_trim_content": 1,// Deprecated, use "apns_trim_content" instead."ios_attachment" : "YOUR_ATTACHMENT_MEDIA_URL",// optional. Insert media content in notification. "ios_title": "Title",// optional. Adds Title for push notification."ios_subtitle": "SubTitle",// optional. Adds sub-title for push notification. "ios_thread_id": "some thread id", // optional, string. Identifier to group related notifications. Messages with the same thread ID will be grouped on the lock screen and in the Notification Center.
"ios_critical": true, // optional. Marks iOS notification as a critical alert playing sound even if a device is muted or Do Not Disturb mode is on.
"ios_interruption_level": "active" // optional. One of "passive", "active", "time-sensitive", "critical". Indicates the importance and delivery timing of a notification. Refer to the One-time push guide for details.
}] }}
Android
Example
{"request": {"application":"12345-67891",// required. Pushwoosh application code"auth":"yxoPUlwqm…………pIyEX4H",// required. API access token from Pushwoosh Control Panel"notifications": [{// Content settings"send_date":"now",// required. YYYY-MM-DD HH:mm OR 'now' "content": { // required, object( language1: 'content1', language2: 'content2' ) OR string. Ignored for Windows 8, use "wns_content" instead. (Use \n for multiline text. Ex: "hello\nfriend")
"en":"English","de":"Deutsch" }, "android_root_params": { // optional. Custom key-value object. Root level parameters for the android payload recipients.
"key": "value", "CancelID" : MESSAGE_ID // cancels the push notification with the specified ID (get the ID from the Message History)
}, "android_sound": "soundfile", // optional. No file extension. If left empty, the device will produce a default system sound upon receiving a push.
"android_header": "header",// optional. Android notification header."android_icon": "icon.png",// optional"android_custom_icon": "http://example.com/image.png",// optional. Full path URL to the image file."android_banner": "http://example.com/banner.png",// optional. Full path URL to the image file. "android_badges": 5, // optional, integer. Android application icon badge number. Use "+n" or "-n" to increment/decrement the badge value by n.
"android_gcm_ttl": 3600,// optional. Time to live parameter — maximum message lifespan in seconds."android_vibration": 0,// optional, boolean. Android force-vibration for high-priority pushes."android_led": "#rrggbb",// optional. LED hex color, device will do its best approximation. "android_priority": -1, // optional. Sets the “importance” parameter for devices with Android 8.0 and higher, as well as the “priority” parameter for devices with Android 7.1 and lower. Establishes the interruption level of a notification channel or a particular notification. Valid values are -2, -1, 0, 1, 2.
"android_delivery_priority": "normal", // or "high", optional. Enables notification’s delivery when the device is in the power saving mode.
"android_ibc": "#RRGGBB", // optional, icon background color on Lollipop, #RRGGBB, #AARRGGBB, "red", "black", "yellow", etc.
"android_silent": 1// optional. 0 or 1, enable silent notificaiton (ignore sound and content). }] }}
Huawei parameters
{"request": {"application":"12345-67891",// required. Pushwoosh application code"auth":"yxoPUlwqm…………pIyEX4H",// required. API access token from Pushwoosh Control Panel"notifications": [{// Content settings"send_date":"now",// required. YYYY-MM-DD HH:mm OR 'now' "content": { // required, object( language1: 'content1', language2: 'content2' ) OR string. Ignored for Windows 8, use "wns_content" instead. (Use \n for multiline text. Ex: "hello\nfriend")
"en":"English","de":"Deutsch" },"huawei_android_badges": true,// optional, boolean"huawei_android_silent": 0,// 0 or 1, enable silent notificaiton (ignore sound and content)."huawei_android_icon": "http://example.com/icon.png",// optional"huawei_android_led": "#FF0011",// optional. LED hex color, device will do its best approximation."huawei_android_vibration": 1,// boolean. Huawei force-vibration for high-priority pushes. "huawei_android_sound": "sound.wav", // optional. No file extension. If left empty, the device will produce a default system sound upon receiving a push.
"huawei_android_sound_off": true,"huawei_android_custom_icon": "http://example.com/custom_icon.png","huawei_android_header": "Huawei Header",// string. Notification title. "huawei_android_gcm_ttl": 2400,// integer. Time to live parameter - maximum message lifespan in seconds."huawei_android_banner": "http://example.com/banner.png",// Full path URL to the image file. "huawei_android_root_params": { // Custom key-value object. Root level parameters for the Huawei payload recipients.
"key": "value" }, "huawei_android_priority": 0, // Sets the “importance” parameter for devices with Android 8.0 and higher, as well as the “priority” parameter for devices with Android 7.1 and lower. Establishes the interruption level of a notification channel or a particular notification. Valid values are -2, -1, 0, 1, 2.
"huawei_android_ibc": "#0011AA", // icon background color on Lollipop, #RRGGBB, #AARRGGBB, "red", "black", "yellow", etc.
"huawei_android_lockscreen": 1, "huawei_android_delivery_priority": "normal" // or "high", optional. Enables notification’s delivery when the device is in the power saving mode.
}] }}
Safari
Safari
{"request": {"application":"12345-67891",// required. Pushwoosh application code"auth":"yxoPUlwqm…………pIyEX4H",// required. API access token from Pushwoosh Control Panel"notifications": [{// Content settings"send_date":"now",// required. YYYY-MM-DD HH:mm OR 'now' "content": { // required, object( language1: 'content1', language2: 'content2' ) OR string. Ignored for Windows 8, use "wns_content" instead. (Use \n for multiline text. Ex: "hello\nfriend")
"en":"English","de":"Deutsch" },"safari_title": "Title",// required. Title of the notification. "safari_action": "Click here",// optional"safari_url_args": ["firstArgument","secondArgument"],// required, but the value may be empty"safari_ttl": 3600// optional. Time to live parameter — the maximum lifespan of a message in seconds. }] }}
Chrome parameters
Chrome
{"request": {"application":"12345-67891",// required. Pushwoosh application code"auth":"yxoPUlwqm…………pIyEX4H",// required. API access token from Pushwoosh Control Panel"notifications": [{// Content settings"send_date":"now",// required. YYYY-MM-DD HH:mm OR 'now' "content": { // required, object( language1: 'content1', language2: 'content2' ) OR string. Ignored for Windows 8, use "wns_content" instead. (Use \n for multiline text. Ex: "hello\nfriend")
"en":"English","de":"Deutsch" },"chrome_title": "Title",// optional. You can specify the header of the message in this parameter."chrome_icon": "icon_URL",// full path URL to the icon or extension resources file path"chrome_gcm_ttl": 3600,// optional. Time to live parameter – maximum message lifespan in seconds. "chrome_duration": 20, // optional. max. 50 seconds. Changes chrome push display time. Set to 0 to display push until user interacts with it.
"chrome_image": "image_URL",// optional. URL to large image. "chrome_root_params": { // optional. Set parameters specific to messages sent to Chrome."key":"value" },"chrome_button_text1": "1",// optional"chrome_button_url1": "button1_URL",// optional. Ignored if chrome_button_text1 is not set."chrome_button_text2": "2",// optional"chrome_button_url2": "button2_url"// optional. Ignored if chrome_button_text2 is not set. }] }}
Firefox parameters
Firefox
{"request": {"application":"12345-67891",// required. Pushwoosh application code"auth":"yxoPUlwqm…………pIyEX4H",// required. API access token from Pushwoosh Control Panel"notifications": [{// Content settings"send_date":"now",// required. YYYY-MM-DD HH:mm OR 'now' "content": { // required, object( language1: 'content1', language2: 'content2' ) OR string. Ignored for Windows 8, use "wns_content" instead. (Use \n for multiline text. Ex: "hello\nfriend")
"en":"English","de":"Deutsch" },"firefox_title": "Title",// optional. You can specify message header here."firefox_icon": "icon_URL",// full path URL to the icon or path to the file in extension resources. "firefox_root_params": { // optional. Set parameters specific to messages sent to Firefox."key":"value" } }] }}
Amazon parameters
Amazon
{"request": {"application":"12345-67891",// required. Pushwoosh application code"auth":"yxoPUlwqm…………pIyEX4H",// required. API access token from Pushwoosh Control Panel"notifications": [{// Content settings"send_date":"now",// required. YYYY-MM-DD HH:mm OR 'now' "content": { // required, object( language1: 'content1', language2: 'content2' ) OR string. Ignored for Windows 8, use "wns_content" instead. (Use \n for multiline text. Ex: "hello\nfriend")
"en":"English","de":"Deutsch" },"adm_root_params": { // optional, custom key-value object"key":"value" },"adm_sound": "push.mp3",// optional"adm_header": "Header",// optional"adm_icon": "icon",// optional"adm_custom_icon": "http://example.com/image.png",// optional"adm_banner": "http://example.com/banner.png",// optional"adm_ttl": 3600,// optional. Time to live parameter — the maximum message lifespan in seconds."adm_priority": -1// optional, priority of the push in Amazon push drawer, valid values are -2, -1, 0, 1 and 2. }] }}
Mac OS X parameters
Mac OS X
{"request": {"application":"12345-67891",// required. Pushwoosh application code"auth":"yxoPUlwqm…………pIyEX4H",// required. API access token from Pushwoosh Control Panel"notifications": [{// Content settings"send_date":"now",// required. YYYY-MM-DD HH:mm OR 'now' "content": { // required, object( language1: 'content1', language2: 'content2' ) OR string. Ignored for Windows 8, use "wns_content" instead. (Use \n for multiline text. Ex: "hello\nfriend")
"en":"English","de":"Deutsch" },"mac_badges": 3,// optional"mac_sound": "sound.caf",// optional"mac_root_params": { // optional"content-available":1 },"mac_ttl": 3600// optional. Time to live parameter — maximum message lifespan in seconds. }] }}
Windows parameters
Windows
{"request": {"application":"12345-67891",// required. Pushwoosh application code"auth":"yxoPUlwqm…………pIyEX4H",// required. API access token from Pushwoosh Control Panel"notifications": [{// Content settings"send_date":"now",// required. YYYY-MM-DD HH:mm OR 'now' "content": { // required, object( language1: 'content1', language2: 'content2' ) OR string. Ignored for Windows 8, use "wns_content" instead. (Use \n for multiline text. Ex: "hello\nfriend")
"en":"English","de":"Deutsch" }, "wns_content": { // Content (XML or raw) of notification encoded in MIME's base64 in form of Object( language1: 'content1', language2: 'content2' ) OR String
"en": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9ImF2YWlsYWJsZSIvPg==","de": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9Im5ld01lc3NhZ2UiLz4=" },"wns_type": "Badge",// 'Tile' | 'Toast' | 'Badge' | 'Raw' "wns_tag": "myTag", // optional. Used in Tile replacement policy. An alphanumeric string of no more than 16 characters.
"wns_cache": 1,// optional. (1|0) Translates into X-WNS-Cache-Policy value."wns_ttl": 600// optional. Expiration time for notification in seconds. }] }}
Parameters for sending SMS
SMS
{"request": {"application":"12345-67891",// required. Pushwoosh application code"auth":"yxoPUlwqm…………pIyEX4H",// required. API access token from Pushwoosh Control Panel"notifications": [{// Content settings"send_date":"now",// required. YYYY-MM-DD HH:mm OR 'now'"content":"Hello!",// required. SMS text (string) "devices":["+1234567890"], // required. Customer phone number (must be associated with a UserId using /registerDevice and specified in the "hwid" parameter). Only one number can be specified here
"platforms":[18] // optional. Platform number }] }}
Quick start! Check out these cool third-party libraries!
Keep in mind that non-enterprise accounts cannot send more than 600 /createMessageand/or /createTargetedMessage requests per minute.
However, if you send pushes via the devices parameter to 10 devices or less, there are no restrictions for any account type as long as API messaging tracing is disabled.
Note that we always save scheduled pushes to the Message History, even if you are sending them to less than 10 devices via devices parameter. Therefore, such pushes are also throttled.
Response:
An error in an array of notifications
If the createMessage request has several messages in the notifications array, they will be processed and sent one by one. If one of the messages cannot be parsed, our API will return "status_code":210 with the codes of successfully sent messages, i.e. those preceding the faulty message in the request.
API messaging tracing
For load balancing purposes, we do not store messages sent through API with the “devices” parameter that contains less than 10 devices in an array. Due to this, such messages will not be displayed in your Message History.
To see push reports during the testing phase, use API messaging tracing. Turning this option ON allows you to override this limit for 1 hour and save such pushes in the Message History. API messaging tracing turns OFF automatically after 1 hour.
API messaging tracing can be activated on the Message History page by clicking Start API messaging tracing in the upper right corner.
Tag conditions
Each tag condition is an array like [tagName, operator, operand] where
Valid operators: IN, NOTIN, NOTSET, ANY
Valid operands: operand must be an array of strings like ["value 1", "value 2", "value N"].
Remember that “filter” and “conditions” parameters should not be used together.
Also, both of them will be ignored, if the "devices" parameter is used in the same request.
Country and Language tags
Language tag value is a lowercase two-letter code according to ISO-639-1
Country tag value is an UPPERCASE two-letter code according to ISO_3166-2
For example, to send push a notification to Portuguese-speaking subscribers in Brazil, you will need to specify the following condition: "conditions": [["Country", "EQ", "BR"],["Language", "EQ", "pt"]]
/createMessage snippets
Important!
Please be careful when using the snippets. Limit the number of recipients by specifying “users”, “devices”, “filter”, or “conditions” parameter. If none of these parameters is specified, the message will be sent to every device subscribed to push notifications from the application.
classPushNotification #- PushWoosh API Documentation http://www.pushwoosh.com/programming-push-notification/pushwoosh-push-notification-remote-api/
#- Two methods here:# - PushNotification.new.notify_all(message) Notifies all with the same option# - PushNotification.new.notify_devices(notification_options = {}) Notifies specific devices with custom optionsincludeHTTParty#Make sure to have the HTTParty gem declared in your gemfile https://github.com/jnunemaker/httparty default_params :output =>'json'format :jsondefinitialize#- Change to your settings @auth = {:application =>"00000-00000",:auth =>"auth_token"}end# PushNotification.new.notify_all("This is a test notification to all devices")defnotify_all(message) notify_devices({:content => message})end# PushNotification.new.notify_device({# :content => "TEST",# :data => {:custom_data => value},# :devices => array_of_tokens#})defnotify_devices(notification_options= {})#- Default options, uncomment :data or :devices if needed default_notification_options = {# YYYY-MM-DD HH:mm OR 'now' :send_date =>"now",# Object( language1: 'content1', language2: 'content2' ) OR string :content => { :fr =>"Test", :en =>"Test" },# JSON string or JSON object "custom": "json data"#:data => {# :custom_data => value#}, # omit this field (push notification will be delivered to all the devices for the application), or provide the list of devices IDs
#:devices => {} }#- Merging with specific options final_notification_options = default_notification_options.merge(notification_options)#- Constructing the final call options = @auth.merge({:notifications => [final_notification_options]}) options = {:request => options}
#- Executing the POST API Call with HTTPARTY - :body => options.to_json allows us to send the json as an object instead of a string
response = self.class.post("https://api.pushwoosh.com/json/1.3/createMessage", :body => options.to_json,:headers => { 'Content-Type' => 'application/json' })
endend
{"request":{"auth":"yxoPUlwqm…………pIyEX4H",// required, API access token from Pushwoosh Control Panel"message":"xxxx-xxxxxxx-xxxxxx"// required, message code obtained in /createMessage }}
You can't delete messages that have already been sent out.
Status codes:
<?php// see http://gomoob.github.io/php-pushwoosh/delete-message.htmluseGomoob\Pushwoosh\Model\Request\DeleteMessageRequest;// creates request instance$request =DeleteMessageRequest::create()->setMessage('MESSAGE_CODE');// call '/deleteMessage' Web Service$response = $pushwoosh->deleteMessage($request);if($response->isOk()) {print'Great, my message has been deleted !';} else {print'Oups, the deletion failed :-('; print'Status code : '. $response->getStatusCode();print'Status message : '. $response->getStatusMessage();}
{"status_code": 200,"status_message": "OK","response": {"message": {"id":2068991743,"created":"2016-09-14 17:19:42","send_date":"2016-09-14 17:19:41","status":"done","content": {"en":"Hello {Name|CapitalizeFirst|friend}! 🚀" },"platforms":"[1]","ignore_user_timezone":"1","code":"XXXX-92B4C3C5-A7F5EF70","data": {"key":"value"} // custom data from push payload } }}
Example
{"request":{"auth":"yxoPUlwqm…………pIyEX4H",// required, API access token from Pushwoosh Control Panel"message":"xxxx-xxxxxxx-xxxxxx"// required, message code or message ID }}
The method is intended for advanced targeting of your messages, and can be used for sending messages across several or all of your apps. If you do not include Application Code in your device filters, the message will be sent to any device registered in your account, that fits the Tag conditions.
Please make sure that you target proper applications in order to avoid sending test pushes to the production application when it's not intended.
Example
{"request": {"auth":"yxoPUlwqm…………pIyEX4H",// required, API access token from Pushwoosh Control Panel "devices_filter": "A(\"00000-00000\") * T(\"Language\", EQ, \"en\") * (AT(\"00000-00000\", \"CustomTag\", EQ, \"FirstValue\") + AT(\"00000-00000\", \"Application Version\", IN, [\"1.0.0\", \"1.0.5\"]))", // required, syntax explained below
"send_date":"now",// required, YYYY-MM-DD HH:mm OR 'now'"ignore_user_timezone":true,// or false, optional "timezone": "America/New_York", // optional. If ignored UTC-0 is default for "send_date". See http://php.net/manual/timezones.php for supported timezones.
"campaign":"CAMPAIGN_CODE",// optional. Campaign code to which you want to assign this push message. "content": { // required, object( language1: 'content1', language2: 'content2' ) OR string. Ignored for Windows 8, use "wns_content" instead. (Use \n for multiline text. Ex: "hello\nfriend")
"en":"English","de":"Deutsch" }, "transactionId": "6e22a9af-84e4-46e6-af16-e457a4a6e7e5", // optional, string. Unique message identifier to prevent duplicating messages in case of network problems. Stored on the side of Pushwoosh for 1 day.
"rich_media": "XXXXX-XXXXX", // optional, string. Copy the Rich Media code from the URL bar of the Rich Media editor page in Pushwoosh Control Panel.
"link": "http://google.com",// optional, string. For deeplinks add "minimize_link":0 "minimize_link": 0, // optional. 0 — do not minimize, 2 — bitly. Default = 2. Google URL shortener is disabled since March 30, 2019. Please note that shorteners have restrictions on a number of calls.
"data": { "key": "value" // optional, JSON string or JSON object, will be passed as "u" parameter in the payload (converted to JSON string).
},"preset": "XXXXX-XXXXX",// optional. Push Preset Code from your Control Panel."send_rate": 100,// optional, throttling. Valid values are from 100 to 1000 pushes/second. // To save the message to the Inbox via API, use "inbox_date" or "inbox_image". The message is saved when at least one of these parameters is used.
"inbox_date": "2017-02-02", // optional. Specify when to remove a message from the Inbox. Message will be removed from Inbox at 00:00:01 UTC of the date specified, so the previous date is the last day a user can see the message in their Inbox. If not specified, the default removal date is the next day after the send date.
"inbox_image": "Inbox image URL",// optional. The image to be shown near the message."dynamic_content_placeholders": { // optional. Placeholders for dynamic content instead of device tags."firstname":"John","lastname":"Doe" } }}
Platform-specific params
{"request": {"auth":"yxoPUlwqm…………pIyEX4H",// API access token from Pushwoosh Control Panel"devices_filter":"FILTER CONDITION","send_date":"now",// YYYY-MM-DD HH:mm OR 'now'"ignore_user_timezone":true,// or false "timezone": "America/New_York", // optional. If ignored UTC-0 is default for "send_date". See http://php.net/manual/timezones.php for supported timezones.
"campaign":"CAMPAIGN_CODE",// optional. Campaign code to which you want to assign this push message. "content": { // object( language1: 'content1', language2: 'content2' ) OR string. Ignored for Windows 8, use "wns_content" instead. (Use \n for multiline text. Ex: "hello\nfriend")
"en":"English","ru":"Русский","de":"Deutsch" },// iOS related "ios_badges": 5, // optional, integer. iOS application badge number. Use "+n" or "-n" to increment/decrement the badge value by n.
"ios_sound": "sound file.wav", // optional. Sound file name in the main bundle of application. If left empty, the device will produce no sound upon receiving a push.
"ios_ttl": 3600,// optional. Time to live parameter — maximum message lifespan in seconds."ios_silent": 1,// optional. Enables silent notifications (ignore "sound" and "content")."ios_category_id": "1",// optional, integer. iOS8 category ID from Pushwoosh."ios_root_params": { // optional. Root level parameters to the aps dictionary."aps": {"content-available":"1","mutable-content":1// required for iOS 10 Media attachments. },"attachment":"YOUR_ATTACHMENT_URL",// iOS 10 media attachment URL."data":<< User supplied data, max of 4KB>> },"apns_trim_content": 1,// optional. (0|1) Trims the exceeding content strings with ellipsis."ios_trim_content": 1,// Deprecated, use "apns_trim_content" instead."ios_title": "Title",// optional. Adds Title for push notification."ios_subtitle": "SubTitle",// optional. Adds sub-title for push notification.// Android related "android_root_params": { // optional. Custom key-value object. Root level parameters for the android payload recipients.
"key": "value" }, "android_sound": "soundfile", // optional. No file extension. If left empty, the device will produce no sound upon receiving a push.
"android_header": "header",// optional. Android notification header."android_icon": "icon","android_custom_icon": "http://example.com/image.png",// optional. Full path URL to the image file."android_banner": "http://example.com/banner.png",// optional. Full path URL to the image file. "android_badges": 5, // optional, integer. Android application icon badge number. Use "+n" or "-n" to increment/decrement the badge value by n.
"android_gcm_ttl": 3600,// optional. Time to live parameter — maximum message lifespan in seconds."android_vibration": 0,// boolean. Android force-vibration for high-priority pushes."android_led": "#rrggbb",// LED hex color, device will do its best approximation. "android_priority": -1, // Sets the “importance” parameter for devices with Android 8.0 and higher, as well as the “priority” parameter for devices with Android 7.1 and lower. Establishes the interruption level of a notification channel or a particular notification. Valid values are -2, -1, 0, 1, 2.
"android_delivery_priority": "normal", // or "high", optional. Enables notification’s delivery when the device is in the power saving mode.
"android_ibc": "#RRGGBB",// icon background color on Lollipop, #RRGGBB, #AARRGGBB, "red", "black", "yellow", etc."android_silent": 1,// optional. 0 or 1, enable silent notificaiton (ignore sound and content).// Amazon related"adm_root_params": { // custom key-value object"key":"value" },"adm_sound": "push.mp3","adm_header": "Header","adm_icon": "icon","adm_custom_icon": "http://example.com/image.png","adm_banner": "http://example.com/banner.png","adm_ttl": 3600,// optional. Time to live parameter — the maximum message lifespan in seconds."adm_priority": -1,// priority of the push in Amazon push drawer, valid values are -2, -1, 0, 1 and 2.// Windows Phone related. "wp_type": "Tile", // Windows Phone notification type. 'Tile' or 'Toast'. Raw notifications are not supported. 'Tile' is default.
"wp_background": "/Resources/Red.jpg",// tile image"wp_backbackground": "/Resources/Green.jpg",// back tile image"wp_backtitle": "back title",// back tile title"wp_backcontent": "back content",// back tile content"wp_count": 3,// optional, integer. Badge for Windows Phone notification.// BlackBerry related"blackberry_header": "header",// BlackBerry header, applicable to BB10 Series devices.// Mac OS X related"mac_badges": 3,"mac_sound": "sound.caf","mac_root_params": {"content-available":1 },"mac_ttl": 3600,// optional. Time to live parameter — maximum message lifespan in seconds.// WNS related "wns_content": { // Content (XML or raw) of notification encoded in MIME's base64 in form of Object( language1: 'content1', language2: 'content2' ) OR String
"en": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9ImF2YWlsYWJsZSIvPg==","de": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9Im5ld01lc3NhZ2UiLz4=" },"wns_type": "Badge",// 'Tile' | 'Toast' | 'Badge' | 'Raw' "wns_tag": "myTag", // optional. Used in Tile replacement policy. An alphanumeric string of no more than 16 characters.
"wns_cache": 1,// optional. (1|0) Translates into X-WNS-Cache-Policy value."wns_ttl": 600,// optional. Expiration time for notification in seconds.// Safari related"safari_title": "Title",// obligatory. Title of the notification."safari_action": "Click here",// optional"safari_url_args": [ // obligatory, but the value may be empty"firstArgument","secondArgument" ],"safari_ttl": 3600,// optional. Time to live parameter — the maximum lifespan of a message in seconds.// Chrome related "chrome_title": "Title",// optional. You can specify the header of the message in this parameter."chrome_icon": "icon_URL",// full path URL to the icon or extension resources file path"chrome_gcm_ttl": 3600,// optional. Time to live parameter – maximum message lifespan in seconds. "chrome_duration": 20, // optional. Changes chrome push display time. Set to 0 to display push until user interacts with it.
"chrome_image": "image_URL",// optional. URL to large image"chrome_root_params": { // optional. Set parameters specific to messages sent to Chrome."key":"value" },"chrome_button_text1": "1",// optional"chrome_button_url1": "button1_URL",// optional. Ignored if chrome_button_text1 is not set."chrome_button_text2": "2",// optional"chrome_button_url2": "button2_url",// optional. Ignored if chrome_button_text2 is not set.// Firefox-related "firefox_title": "Title",// optional. You can specify message header here."firefox_icon": "icon_URL",// full path URL to the icon or path to the file in extension resources."firefox_root_params": { // optional. Set parameters specific to messages sent to Firefox."key":"value" } }}
The basics are very simple – all filters are performed on the sets of entities.
Sets
Sets are defined as:
1. Devices subscribed to the particular app (A);
2. Devices that match the specified tag values (T) or app-specific tag value (AT);
3. Devices subscribed to one app of the app group (G).
Syntax
Let’s try with some samples according to the list above.
Targeting app subscribers
The "A" filter defines a set of devices subscribed to a particular app:
["iOS", "Android", ...] – array of targeted platforms. If omitted, the message will be sent to all platforms available for this app.
Filtering by tag values
The "T" filter defines a set of devices that have specified tag values assigned.
T(\"Age\", IN, [17,20])
Defines the set of the devices that have the “age” tag set to one of the values: 17, 18, 19, 20.
For app-specific tags, the "AT" filter is applied. Make sure to specify a corresponding Application Code as the first value in an AT set:
AT(“XXXXX-XXXXX”, “TagName”, EQ, “VALUE”)
Filtering by app groups
The "G" set targets devices subscribed to any of the apps in a specified app group.
G(\"11111-11111\", [\"iOS\",\"Android\"])
where
"11111-11111" – Pushwoosh App Group Code
["iOS", "Android", ...] – array of targeted platforms. If omitted, the message will be sent to all platforms available for this app.
Tags types and operators
The very important thing to understand is that tags are shared between the apps, and it presents a very powerful instrument for segmenting and filtering your target users without binding yourself to a particular app.
The tag could be one of the three different types: String, Integer, List. The tag type defines what operators you can use for a particular tag.
String tags
Applicable operators:
EQ – targets devices with a specified tag value
IN – targets devices with any of the specified tag values
NOTIN – targets devices with no specified tag values
NOTEQ – targets devices with a tag value not equal to a specified one
NOTSET – targets devices with no value for a specified tag
ANY – targets devices with any value set for a specified tag
Examples:
T (\"Age\", EQ, 30) – filters users in the age of 30
T (\"favorite_color\", IN, [\"red\",\"green\",\"blue\"]) – filters users who have chosen red, green, or blue as their favorite color.
T (\"Name", NOTSET, \"\") – target devices with no value for the Name tag.
You can use numeric values with the string tags, but such values will be converted to a string.
Integer tags
Applicable operators:
GTE – greater than or equal to a specified value
LTE– less than or equal to a specified value
EQ – equal to a specified value
BETWEEN –between the min and max specified values
IN – any of specified values
NOTIN –no specified values assigned to a device
NOTEQ – devices with a tag value not equal to a specified one
NOTSET – devices with no value for a specified tag
ANY – devices with any value set for a specified tag
Examples:
T (\"Level\", EQ, 14) – filters users on the 14 level only.
T (\"Level\", BETWEEN, [1,5) – filters users on 1, 2, 3, 4, and 5 levels.
T (\"Level", GTE, 29) – targets users who have reached at least 29 level.
List tags
Applicable operators:
IN – devices with any of the specified tag values
Example: T("Category", IN, ["breaking_news","business","politics"])
Date tags
Applicable operators:
GTE – greater than or equal to a specified value
LTE– less than or equal to a specified value
EQ – equal to a specified value
BETWEEN –between the min and max specified values
NOTEQ – devices with a tag value not equal to a specified one
NOTSET – devices with no value for a specified tag
ANY – devices with any value set for a specified tag
AT("7777D-322A7","Last Application Open", GTE, "90 days ago")
Operations
“+” – joins two sets (equals OR)
“*” – intersects two sets (equals AND)
“\” – subtracts one set from another (equals NOT)
All the operations are left-associative. “+” and “*” have the same priority. “\” has greater priority. You can use brackets to define the priorities of the calculations.
Note that “\” operation is not commutative. A("12345-12345") \ A("67890-67890") is not the same as A("67890-67890") \ A("12345-12345").
Examples
Easy:
A(\"00000-00000\", [\"iOS\"]) – all iOS devices subscribed to the app 00000-00000.
A(\"00000-00000\") * T(\"Gender\",EQ,\"F\") – all devices subscribed to the app 00000-00000, which have the gender tag set to “female”.
A(\"00000-00000\") + G(\"11111-11111\") – all devices subscribed to the app 00000-00000 or any of the 11111-11111 app group.
Hard:
( A(\"00000-00000\") + A(\"11111-11111\") ) \ A(\"12345-12345\") – all devices subscribed to the app 00000-00000 or 11111-11111, which don’t have the app 12345-12345 installed.
Hardcore:
( A(\"00000-00000\") * T(\"gender\", EQ, \"M\") ) + ( A(\"12345-12345\") * T(\"gender\", EQ, \"F\") ) – targets all men with the app 00000-00000 and all girls with the app 12345-12345
Note
You cannot use any of the following targeting-related parameters in the /createTargetedMessage request:
"application"
"applications_group"
"platforms"
"devices"
"filter"
"conditions"
All the other parameters listed in /createMessage are supported.
There is a known issue with the /createTargetedMessage method: if you don’t specify any applications in “devices_filter” section, Pushwoosh doesn’t display any applications in push details.
getPushHistory
We recommend using /messages:list to get more detailed data.
For Custom Plan subscriptions only. For more details, please contact our Sales team.
Example
{"request":{"auth":"yxoPUlwqm…………pIyEX4H",// required, API access token from Pushwoosh Control Panel "source": null, // optional. Possible values are null, "CP", "API","GeoZone", "Beacon", "RSS", "AutoPush","Twitter", "A/B Test"
"searchBy": "applicationCode", // optional. Possible values are "", "notificationID", "notificationCode", "applicationCode", "campaignCode"
"value":"C8717-703F2",// optional. Search value set according to the "searchBy" field. "lastNotificationID": 0, // optional. Used for pagination. Last messageId from the previous /getPushHistory call. See details below.
"limitMessages":1000// optional. Possible value from 10 to 1000. }}
This method will return 1000 messages from the account sorted by message Id. To get the second page, specify the last message Id of previous response in the lastNotificationId parameter.
The method is only allowed for messages that are in the status of pending, waiting or processing.
Example
{"request":{"auth":"yxoPUlwqm…………pIyEX4H",// required, API access token from Pushwoosh Control Panel"message":"xxxx-xxxxxxx-xxxxxx"// required, the message code obtained in /createMessage response }}
Status codes:
Name
Type
Description
Name
Type
Description
Name
Type
Description
Name
Type
Description
Name
Type
Description
auth*
string
API access token from Pushwoosh Control Panel.
application*
string
Pushwoosh application code.
notifications*
array
JSON array of message parameters. See details in a request example below.
HTTP Status code
status_code
Description
200
200
Message successfully created
200
210
Argument error. See status_message for more info
400
N/A
Malformed request string
500
500
Internal error
auth*
string
API access token from Pushwoosh Control Panel.
message*
string
Message code obtained in /createMessage request.
HTTP Status code
status_code
Description
200
200
Message successfully deleted
200
210
Argument error. See status_message for more info
400
N/A
Malformed request string
500
500
Internal error
auth*
string
API access token from Pushwoosh Control Panel.
message*
string
Message code or message ID.
auth*
string
API access token from Pushwoosh Control Panel.
devices_filter*
string
See remark below.
send_date*
string
YYYY-MM-DD HH:mm or 'now'.
ignore_user_timezone
boolean
If ignored, UTC-0 is default for "send_date".
timezone
string
If ignored, UTC-0 is default for "send_date".
campaign
string
Code of a campaign to which you want to assign this push message.
content*
string
Notification content. See the request example for details.
transactionId
string
Unique message identifier to prevent duplicating messages in case of network problems. Stored on the side of Pushwoosh for 1 day.
page_id
string
HTML page ID to be attached to the push message.
rich_page_id
string
Rich Media code to be attached to the push message.
link
string
Link to be opened once a user opens a push message.
minimize_link
integer
0 - do not minimize, 2 - bit.ly. Default = 2.
data
object
JSON string or JSON object. Will be passed as "u" parameter in the payload (converted to JSON string).
preset
string
Preset code.
send_rate
integer
Throttling. Valid values are from 100 to 1000 pushes per second.
inbox_date
string
Specify when to remove a message from the Inbox.
inbox_image
string
URL of the image to be shown near the message in the Inbox.
auth*
string
API Access token from Pushwoosh Control Panel.
limitMessages
integer
Limits the number of messages in a response. Possible values from 10 to 1000.
source
string
Push history source. Can be null or: "CP", "API", "GeoZone", "Beacon", "RSS", "AutoPush", "Twitter", "A/B Test".
searchBy
string
Possible values to search by. Can be null or: "notificationID", "notificationCode", "applicationCode", "campaignCode".
value
string
Search value set according to the "searchBy" field.
lastNotificationID
string
Used for pagination. Last messageId from the previous /getPushHistory call. See details below.
auth*
string
API access token from Pushwoosh Control Panel.
message*
string
The message code obtained in /createMessage response.