API de Mensajes
createMessage
Anchor link toPOST https://api.pushwoosh.com/json/1.3/createMessage
Crea una nueva notificación push.
Cuerpo de la solicitud
Anchor link to| Nombre | Tipo | Descripción |
|---|---|---|
| auth* | string | Token de acceso a la API desde el Panel de Control de Pushwoosh. |
| application* | string | Código de aplicación de Pushwoosh |
| notifications* | array | Array JSON de parámetros del mensaje. Consulta los detalles en un ejemplo de solicitud a continuación. |
{ "status_code": 200, "status_message": "OK", "response": { "Messages": [ "C3F8-C3863ED4-334AD4F1" ] }}Ejemplo de solicitud
Anchor link to{ "request": { "application": "XXXXX-XXXXX", // required. Pushwoosh application code. "auth": "yxoPUlwqm…………pIyEX4H", // required. API access token from Pushwoosh Control Panel. "notifications": [{ "send_date": "now", // optional. YYYY-MM-DD HH:mm OR 'now' "content": { // optional. object OR string. "en": "English", // Use "wns_content" instead for Windows. "fr": "French" }, "title": { // optional. object OR string. "en": "Title", // Ignored if platform-specific titles are specified "fr": "Titre" // 'ios_title', 'android_header', etc. }, // see the platform-specific parameters examples below. "subtitle":{ // optional. object OR string. "en": "Subtitle", // Ignored if platform-specific titles are specified "fr": "Sous-titre" // 'ios_subtitle', etc. }, // see the platform-specific parameters examples below. "ignore_user_timezone": true, // optional. "timezone": "America/New_York", // optional. If ignored UTC-0 is default for "send_date". // See https://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 }, "rich_media": "XXXXX-XXXXX", // optional. Copy the Rich Media code from the URL bar of // the Rich Media editor page in Pushwoosh Control Panel. "link": "https://google.com", // optional. For deeplinks add "minimize_link": 0 "minimize_link": 0, // optional. 0 — do not minimize, 2 — bitly. Default = 2. // Please note that shorteners have restrictions // on a number of calls. "data": { // optional. JSON string or JSON object, will be passed as "key": "value" // "u" parameter in the payload (converted to JSON string). }, "transactionId": "unique UUID", // optional. Unique message identifier to prevent duplicating // in case of network problems. Stored on the side of // Pushwoosh for 5 minutes. "platforms": [ // optional. 1 — iOS; 3 — Android; 7 — Mac OS X; 8 — Windows; 1, 3, 7, 8, 9, 10, // 9 — Amazon; 10 — Safari; 11 — Chrome; 11, 12, 17 // 12 — Firefox; 17 — Huawei ], "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. "send_rate_avoid": true, // optional. If set to true, throttling limit will not be applied to // this specific push notification. // Templating related, please refer to the Template Engine guide to learn more "template_bindings": { // optional. "TemplatePlaceholder": "Value" }, "dynamic_content_placeholders": { // optional. Placeholders for dynamic content instead of device tags. "firstname": "John", "lastname": "Doe" },
// Frequency capping params. Ensure that Global frequency capping is configured in the Control Panel. "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. "capping_exclude": true, // optional. If set to true, this push notification will not // be counted towards the capping for future pushes. "capping_avoid": true, // optional. If set to true, capping will not be applied to // this specific push notification.
// 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. "inbox_days": 5, // optional. Specify when to remove a message from the // Inbox(lifetime of an inbox message in days). // Can be used instead of the "inbox_date" parameter. // Up to 30 days.
"devices": [ // optional. Specify tokens or hwids to send targeted push "hwid_XXXX" // 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. "to": [ // optional. For email, SMS, and similar channels. List of recipients "email_1", "email_2" // (e.g. email addresses, phone numbers). Max 1000 items. ], // For push, use "devices" instead. // User-centric push notifications "users": [ // optional. If set, message will only be delivered to the "user_XXXX" // specified user ID's (set via /registerUser call). ], // If specified together with devices or to, // the latter will be ignored. Not more than 1000 user // ID's in an array. Application Group for users list // is not allowed.
// Filters and conditions "filter": "FILTER_NAME", // optional. "conditions": [ // optional. See the remark below. ["Country", "EQ", "fr"], ["Language", "EQ", "en"] ], "conditions_operator": "AND" // optional. Logical operator for conditions arrays. // Possible values: AND | OR. AND is default. }] }}Ejemplo de solicitud de notificación VoIP
Anchor link toPushwoosh admite notificaciones de llamadas de tipo VoIP para iOS y Android.
A continuación, puedes encontrar ejemplos de solicitudes API createMessage para cada plataforma.
{ "request": { "application": "XXXXX-XXXXX", // required. Pushwoosh application code. "auth": "yxoPUlwqm…………pIyEX4H", // required. API access token from Pushwoosh Control Panel. "notifications": [ { "voip_push": true, // required. Parameter is required to send out a VoIP push notification. "ios_root_params": { "aps": { "mutable-content": 1 // required for iOS10+ Media attachments. }, "callerName": "CallerName", // optional. Caller name. If not specified, "unknown caller" is shown. "video": true, // optional. Indicates whether video calls are supported. "supportsHolding": true, // optional. Indicates whether call holding functionality is supported. "supportsDTMF": false, // optional. Controls Dual-Tone Multi-Frequency signal support. "callId": "42", // optional. The unique identifier of the call to cancel. "cancelCall": true // optional. Set to "true" to cancel the call with the specified "callId". } } ] }}Android
Anchor link to{ "request": { "application": "XXXXX-XXXXX", // required. Pushwoosh application code. "auth": "yxoPUlwqm…………pIyEX4H", // required. API access token from Pushwoosh Control Panel. "notifications": [ { "voip_push": true, // required. Parameter is required to send out a VoIP push notification. "android_root_params": { "callerName": "callerName", // optional. Caller name. If not specified, "unknown caller" is shown. "video": true, // optional. Indicates whether video calls are supported. "callId": 42, // optional. The unique identifier of the call to cancel. "cancelCall": true // optional. Set to "true" to cancel the call with the specified "callId". } } ] }}Parámetros específicos de la plataforma
Anchor link toParámetros de iOS
Anchor link to{ "request": { "application": "12345-67891", // required. Pushwoosh application code "auth": "yxoPUlwqm…………pIyEX4H", // required. API access token from Pushwoosh Control Panel "notifications": [{ "ios_title": { // optional. Object OR string. Adds iOS specific title for push notification. "en": "title" }, "ios_subtitle": { // optional. Object OR string. Adds iOS specific subtitle for push notification. "en": "subtitle" }, "ios_content": { // optional. Object OR string. Adds iOS specific content for push notification. "en": "content" }, "ios_badges": 5, // optional. 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_sound_off": true, // optional. Enable/disable sound set by "ios_sound" field. "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. iOS8 category ID from Pushwoosh. "ios_root_params": { // optional. Root level parameters to the aps dictionary. "aps": { "content-available": "0", // optional. Set "1" to send a silent push and "0" for regular push. "mutable-content": 1 // required for iOS10+ Media attachments. }, "callerName": "CallerName", // optional VoIP parameter. Caller name. If not specified, "unknown caller" is shown. "video": true, // optional VoIP parameter. Indicates whether video calls are supported. "supportsHolding": true, // optional VoIP parameter. Indicates whether call holding functionality is supported. "supportsDTMF": false, // optional VoIP parameter. Controls Dual-Tone Multi-Frequency signal support. "data": {} // optional User supplied data, max of 4KB }, "ios_attachment": "URL", // optional. Insert media content in notification. "ios_thread_id": "some thread id", // optional. 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_category_custom": "category", // optional. Custom APNS category. "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. "apns_trim_content": 1 // optional. (0|1) Trims the exceeding content strings with ellipsis. }] }}Parámetros de Android
Anchor link to{ "request": { "application": "12345-67891", // required. Pushwoosh application code "auth": "yxoPUlwqm…………pIyEX4H", // required. API access token from Pushwoosh Control Panel "notifications": [{ "android_header": { // optional. Android notification header. "en": "header" }, "android_content": { // optional. Android notification content. "en": "content" }, "android_root_params": { // optional. Custom key-value object. "key": "value", // Root level parameters for the android payload recipients. "CancelID": 12345678, // optional. Cancels the push notification with the "voip": true, // required VoIP parameter. Parameter is required to send out VoIP push notifications. "callerName": "callerName", // optional VoIP parameter. Caller name. If not specified, "unknown caller" is shown. "video": true, // optional VoIP parameter. Indicates whether video calls are supported. }, // specified Message 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. "android_sound_off": true, // optional. Enable/disable sound set by "android_sound" field "android_icon": "icon.png", // optional. "android_custom_icon": "URL.png", // optional. Full URL to the image file. "android_banner": "URL.png", // optional. Full URL to the image file. "android_badges": 5, // optional. 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. 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", // optional. "normal" or "high". // 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 notification. // Ignore sound and content "android_group_id": "123" // optional. Identifier to group related notifications. Messages with // the same thread ID will be grouped in // the Notification Center. }] }}Parámetros de Huawei
{ "request": { "application": "12345-67891", // required. Pushwoosh application code "auth": "yxoPUlwqm…………pIyEX4H", // required. API access token from Pushwoosh Control Panel "notifications": [{ "huawei_android_header": { // optional. Object OR string. Notification title "en": "header" }, "huawei_android_content": { // optional. Object OR string. Notification content "en": "content" }, "huawei_android_badges": true, // optional. "huawei_android_silent": 0, // optional. 0 or 1. Enable silent notification. // Ignore sound and content "huawei_android_icon": "URL.png", // optional. "huawei_android_led": "#FF0011", // optional. LED hex color, device will do its best approximation "huawei_android_vibration": 1, // optional. Huawei force-vibration for high-priority pushes "huawei_android_sound": "sound.wav", // optional. If left empty, the device will produce // a default system sound "huawei_android_sound_off": true, // optional. Enable/disable sound set by // "huawei_android_sound" field "huawei_android_custom_icon": "URL.png", // optional "huawei_android_gcm_ttl": 2400, // optional. Time to live parameter - maximum // message lifespan in seconds "huawei_android_banner": "URL.png", // optional. Full path URL to the image file "huawei_android_root_params": { // optional. Custom key-value object. "key": "value" // Root-level parameters for Huawei payload recipients. }, "huawei_android_priority": 0, // optional. Valid values: -2, -1, 0, 1, 2 "huawei_android_ibc": "#0011AA", // optional. Icon background color on Lollipop "huawei_android_lockscreen": 1, // optional "huawei_android_delivery_priority": "normal", // optional. "normal" or "high". Enables notification // delivery in power saving mode "huawei_android_group_id": "group_id" // optional. Identifier to group related notifications }] }}Parámetros de Safari
Anchor link to{ "request": { "application": "12345-67891", // required. Pushwoosh application code "auth": "yxoPUlwqm…………pIyEX4H", // required. API access token from Pushwoosh Control Panel "notifications": [{ "safari_url_args": [ // required, but the value may be empty "firstArgument", "secondArgument" ], "safari_title": { // optional. Object OR string. Title of the notification. "en": "content" }, "safari_content": { // optional. Object OR string. Content of the notification. "en": "content" }, "safari_action": "Click here", // optional. "safari_ttl": 3600 // optional. Time to live parameter — the maximum // lifespan of a message in seconds. }] }}Parámetros de Chrome
Anchor link to{ "request": { "application": "12345-67891", // required. Pushwoosh application code "auth": "yxoPUlwqm…………pIyEX4H", // required. API access token from Pushwoosh Control Panel "notifications": [{ "chrome_title": { // optional. Object OR string. You can specify the header "en": "title" // of the message in this parameter. }, "chrome_content": { // optional. Object OR string. You can specify the content "en": "content" // of the message in this parameter. }, "chrome_icon": "URL.png", // optional. Full 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": "text1", // optional "chrome_button_url1": "button1_URL", // optional. Ignored if chrome_button_text1 is not set. "chrome_button_text2": "text2", // optional "chrome_button_url2": "button2_url" // optional. Ignored if chrome_button_text2 is not set. }] }}Parámetros de Firefox
Anchor link to{ "request": { "application": "12345-67891", // required. Pushwoosh application code "auth": "yxoPUlwqm…………pIyEX4H", // required. API access token from Pushwoosh Control Panel "notifications": [{ "firefox_title": { // optional. Object OR string. You can specify message header here. "en": "title" }, "firefox_content": { // optional. Object OR string. You can specify message content here. "en": "content" }, "firefox_icon": "URL.png", // optional. 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" } }] }}Parámetros de Amazon
Anchor link to{ "request": { "application": "12345-67891", // required. Pushwoosh application code "auth": "yxoPUlwqm…………pIyEX4H", // required. API access token from Pushwoosh Control Panel "notifications": [{ "adm_header": { // optional. Object OR string. You can specify message header here. "en": "header" }, "adm_content": { // optional. Object OR string. You can specify message content here. "en": "content" }, "adm_root_params": { // optional. Custom key-value object "key": "value" }, "adm_sound": "push.mp3", // optional. "adm_sound_off": true, // optional. Enable/disable sound set by "adm_sound" field "adm_icon": "icon.png", // optional. Full URL to the icon. "adm_custom_icon": "URL.png", // optional. "adm_banner": "URL.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. }] }}Parámetros de Mac OS X
Anchor link to{ "request": { "application": "12345-67891", // required. Pushwoosh application code "auth": "yxoPUlwqm…………pIyEX4H", // required. API access token from Pushwoosh Control Panel "notifications": [{ "mac_title": { // optional. Object OR string. Adds Title for push notification. "en": "title" }, "mac_subtitle": { // optional. Adds subtitle for push notification. "en": "subtitle" }, "mac_content": { // optional. Adds content for push notification. "en": "content" }, "mac_badges": 3, // optional. "mac_sound": "sound.caf", // optional. "mac_sound_off": true, // optional. Enable/disable sound set by "mac_sound" field "mac_root_params": { // optional. "content-available": 1 }, "mac_ttl": 3600 // optional. Time to live parameter — maximum message lifespan in seconds. }] }}Parámetros de Windows
Anchor link to{ "request": { "application": "12345-67891", // required. Pushwoosh application code "auth": "yxoPUlwqm…………pIyEX4H", // required. API access token from Pushwoosh Control Panel "notifications": [{ "wns_content": { // required. Content (XML or raw) of notification encoded in MIME's base64 // in form of Object OR String "en": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9ImF2YWlsYWJsZSIvPg==", "de": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9Im5ld01lc3NhZ2UiLz4=" }, "wns_type": "Badge", // optional. '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. }] }}Respuesta:
| Código de estado HTTP | status_code | Descripción |
|---|---|---|
| 200 | 200 | Mensaje creado con éxito |
| 200 | 210 | Error de argumento. Consulta status_message para más información |
| 400 | N/A | Cadena de solicitud mal formada |
| 500 | 500 | Error interno |
Rastreo de mensajería API
Anchor link toPor motivos de balanceo de carga, no almacenamos los mensajes enviados a través de la API con el parámetro “devices” que contiene menos de 10 dispositivos en un array. Debido a esto, dichos mensajes no se mostrarán en tu Historial de Mensajes.
Para ver los informes de push durante la fase de prueba, utiliza el rastreo de mensajería API. Activar esta opción te permite superar este límite durante 1 hora y guardar dichos pushes en el Historial de Mensajes. El rastreo de mensajería API se desactiva automáticamente después de 1 hora.
El rastreo de mensajería API se puede activar en la página de Historial de Mensajes haciendo clic en Iniciar rastreo de mensajería API en la esquina superior derecha.
Condiciones de etiqueta
Anchor link toCada condición de etiqueta es un array como [tagName, operator, operand] donde
- tagName: nombre de una etiqueta
- operator: “EQ” | “IN” | “NOTEQ” | “NOTIN” | “LTE” | “GTE” | “BETWEEN” | “NOTSET” | “ANY”
- operand: string | integer | array | date
Descripción del operador
Anchor link to- EQ: el valor de la etiqueta es igual al operando;
- IN: el valor de la etiqueta se cruza con el operando (el operando siempre debe ser un array);
- NOTEQ: el valor de la etiqueta no es igual a un operando;
- NOTIN: el valor de la etiqueta no se cruza con el operando (el operando siempre debe ser un array);
- GTE: el valor de la etiqueta es mayor o igual que el operando;
- LTE: el valor de la etiqueta es menor o igual que el operando;
- BETWEEN: el valor de la etiqueta es mayor o igual que el valor mínimo del operando pero menor o igual que el valor máximo del operando (el operando siempre debe ser un array);
- NOTSET: etiqueta no establecida. El operando no se considera;
- ANY: la etiqueta tiene cualquier valor. El operando no se considera.
Etiquetas de cadena
Anchor link toOperadores válidos: EQ, IN, NOTEQ, NOTIN, NOTSET, ANY
Operandos válidos:
- EQ, NOTEQ: el operando debe ser una cadena;
- IN, NOTIN: el operando debe ser un array de cadenas como
["valor 1", "valor 2", "valor N"]; - NOTSET: etiqueta no establecida. El operando no se considera;
- ANY: la etiqueta tiene cualquier valor. El operando no se considera.
Etiquetas de entero
Anchor link toOperadores válidos: EQ, IN, NOTEQ, NOTIN, BETWEEN, GTE, LTE, NOTSET, ANY
Operandos válidos:
- EQ, NOTEQ, GTE, LTE: el operando debe ser un entero;
- IN, NOTIN: el operando debe ser un array de enteros como
[valor 1, valor 2, valor N]; - BETWEEN: el operando debe ser un array de enteros como
[valor_min, valor_max]; - NOTSET: etiqueta no establecida. El operando no se considera;
- ANY: la etiqueta tiene cualquier valor. El operando no se considera.
Etiquetas de fecha
Anchor link toOperadores válidos: EQ, IN, NOTEQ, NOTIN, BETWEEN, GTE, LTE, NOTSET, ANY
Operandos válidos:
"YYYY-MM-DD 00:00"(cadena)- marca de tiempo unix
1234567890(entero) "hace N días"(cadena) para los operadores EQ, BETWEEN, GTE, LTE
Etiquetas booleanas
Anchor link toOperadores válidos: EQ, NOTSET, ANY
Operandos válidos: 0, 1, true, false
Etiquetas de lista
Anchor link toOperadores válidos: IN, NOTIN, NOTSET, ANY
Operandos válidos: el operando debe ser un array de cadenas como ["valor 1", "valor 2", "valor N"].
Snippets de /createMessage
Anchor link toEjemplos de solicitudes /createMessage:
#!/bin/bash
#Usageif [ ! -n "$1" ] || [ ! -n "$2" ]then echo "`basename $0` usage: api_token appid message"; exit 1;fi;MESSAGE="$3";if [ -z "$3" ]thenMESSAGE='One push to rule them all!'fi;
echo -e "Response:"curl --data-binary "{\"request\": {\"application\":\"$2\", \"auth\":\"$1\", \"notifications\": [{ \"send_date\": \"now\", \"content\": \"$MESSAGE\" }] }}" \-H "Content-type: application/json" \"https://api.pushwoosh.com/json/1.3/createMessage"echo "";exit 0;<?phpdefine('PW_AUTH', 'API TOKEN');define('PW_APPLICATION', 'APPLICATION CODE');define('PW_DEBUG', true);
function pwCall($method, $data) { $url = 'https://api.pushwoosh.com/json/1.3/' . $method; $request = json_encode(['request' => $data]);
$ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate'); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
$response = curl_exec($ch); $info = curl_getinfo($ch); curl_close($ch);
if (defined('PW_DEBUG') && PW_DEBUG) { print "[PW] request: $request"; print "[PW] response: $response"; print '[PW] info: ' . print_r($info, true); }}
pwCall('createMessage', array( 'application' => PW_APPLICATION, 'auth' => PW_AUTH, 'notifications' => array( array( 'send_date' => 'now', 'content' => 'test', 'data' => array('custom' => 'json data'), 'link' => 'https://pushwoosh.com/' ) ) ));-module(pushwoosh).-export([run/0, stop/0, sendMessage/1]).%% sendMessage argument: message text %%
%% Authentication & App_id %%-define(PW_AUTH, "YOUR_AUTH_TOKEN").-define(PW_APPLICATION, "YOUR_PUSHWOOSH_APP_CODE").
%% KickStart %%run() -> application:start(unicode), application:start(crypto), application:start(public_key), application:start(ssl), application:start(inets), %% HTTP Client verbosity options flase, verbose, debug httpc:set_options([{verbose, false}]).stop() -> application:stop(ssl), application:stop(public_key), application:stop(crypto), application:stop(inets).%% JSON Wars !encode(S) -> encode(S, [$"]).encode([], Acc) -> lists:reverse([$" | Acc]);encode([C | Cs], Acc) -> Hex = lists:flatten(io_lib:format("~4.16.0b", [C])), encode(Cs, lists:reverse(Hex) ++ "u\" ++ Acc).
sendMessage(Message_text) -> %% URL to JSON API 1.3 Url = "https://api.pushwoosh.com/json/1.3/createMessage", EncodedMessage = encode(Message_text), {ok, Response} = httpc:request( %%Method post, %%Request {Url, [{"User-Agent", "Erlang exemple"}], "application/json; charset=UTF-8", "{\"request\":{ \"application\": \""?PW_APPLICATION"\", \"auth\": \""?PW_AUTH"\", \"notifications\": [{ \"send_date\": \"now\", \"content\": "++EncodedMessage++" }]}}"}, %%HTTP options [{ssl,[{verify, verify_none}]}, {version, "HTTP/1.0"}], %%Options []), io:format("And received ~p", [Response]).class PushNotification
#- PushWoosh API Documentation https://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 options
include HTTParty #Make sure to have the HTTParty gem declared in your gemfile https://github.com/jnunemaker/httparty default_params :output => 'json' format :json
def initialize #- Change to your settings @auth = {:application => "00000-00000",:auth => "auth_token"} end
# PushNotification.new.notify_all("This is a test notification to all devices") def notify_all(message) notify_devices({:content => message}) end
# PushNotification.new.notify_device({ # :content => "TEST", # :data => {:custom_data => value}, # :devices => array_of_tokens #}) def notify_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// Uses JSON classes from https://json.org/java/
package com.arellomobile;
import org.json.*;import java.io.*;import java.net.*;
public class SendPushNotificationSample{ public static final String PUSHWOOSH_SERVICE_BASE_URL = "https://api.pushwoosh.com/json/1.3/"; private static final String AUTH_TOKEN = "YOUR_AUTH_TOKEN"; private static final String APPLICATION_CODE = "PW_APPLICATION_CODE";
public static void main(String[] args) throws JSONException, MalformedURLException { String method = "createMessage"; URL url = new URL(PUSHWOOSH_SERVICE_BASE_URL + method);
JSONArray notificationsArray = new JSONArray() .put(new JSONObject().put("send_date", "now") .put("content", "test") .put("link", "https://pushwoosh.com/"));
JSONObject requestObject = new JSONObject() .put("application", APPLICATION_CODE) .put("auth", AUTH_TOKEN) .put("notifications", notificationsArray);
JSONObject mainRequest = new JSONObject().put("request", requestObject); JSONObject response = SendServerRequest.sendJSONRequest(url, mainRequest.toString());
System.out.println("Response is: " + response); }}
class SendServerRequest{ static JSONObject sendJSONRequest(URL url, String request) { HttpURLConnection connection = null; try { connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/json"); connection.setDoInput(true); connection.setDoOutput(true);
DataOutputStream writer = new DataOutputStream(connection.getOutputStream()); writer.write(request.getBytes("UTF-8")); writer.flush(); writer.close();
return parseResponse(connection); } catch (Exception e) { System.out.println("An error occurred: " + e.getMessage()); return null; } finally { if (connection != null) { connection.disconnect(); } } }
static JSONObject parseResponse(HttpURLConnection connection) throws IOException, JSONException { String line; BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); StringBuilder response = new StringBuilder();
while ((line = reader.readLine()) != null) { response.append(line).append(''); } reader.close();
return new JSONObject(response.toString()); }}import json
PW_AUTH = 'API TOKEN'PW_APPLICATION_CODE = 'APPLICATION CODE'
try: # For Python 3.0 and later from urllib.request import urlopen from urllib.request import Requestexcept ImportError: # Fall back to Python 2's urllib2 from urllib2 import urlopen from urllib2 import Request
def pw_call(method, data): url = 'https://api.pushwoosh.com/json/1.3/' + method data = json.dumps({'request': data}) req = Request(url, data.encode('UTF-8'), {'Content-Type': 'application/json'}) try: f = urlopen(req) response = f.read() f.close() print('Pushwoosh response: ' + str(response)) except Exception as e: print ('Request error: ' + str(e))
if __name__ == '__main__': pw_call('createMessage', { 'auth': PW_AUTH, 'application': PW_APPLICATION_CODE, 'notifications': [ { 'send_date': 'now', 'content': 'test', 'data': {"custom": "json data"}, 'link': 'https://pushwoosh.com' } ] } )using System;using System.IO;using System.Net;using Newtonsoft.Json.Linq;
namespace WebApplication1{ public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string pwAuth = "YOUR_AUTH_TOKEN"; string pwApplication = "PW_APPLICATION_CODE"; JObject json = new JObject( new JProperty("application", pwApplication), new JProperty("auth", pwAuth), new JProperty("notifications", new JArray( new JObject( new JProperty("send_date", "now"), new JProperty("content", "test"), new JProperty("wp_type", "Toast"), new JProperty("wp_count", 3), new JProperty("data", new JObject( new JProperty("custom", "json data"))), new JProperty("link", "https://pushwoosh.com/"), new JProperty("conditions", new JArray( (object)new JArray("Color", "EQ", "black"))))))); PWCall("createMessage", json); } private void PWCall(string action, JObject data) { Uri url = new Uri("https://api.pushwoosh.com/json/1.3/" + action); JObject json = new JObject(new JProperty("request", data)); DoPostRequest(url, json); } private void DoPostRequest(Uri url, JObject data) { HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url); req.ContentType = "text/json"; req.Method = "POST"; using (var streamWriter = new StreamWriter(req.GetRequestStream())) { streamWriter.Write(data.ToString()); } HttpWebResponse httpResponse; try { httpResponse = (HttpWebResponse)req.GetResponse(); } catch (Exception exc) { throw new Exception(string.Format("Problem with {0}, {1}", url, exc.Message)); } using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var responseText = streamReader.ReadToEnd(); Page.Response.Write(responseText); } } }}package main
import( "fmt" "encoding/json" "net/http" "bytes" "io/ioutil")
const ( PW_APPLICATION = "APPLICATION CODE" PW_AUTH = "API TOKEN" PW_ENDPOINT = "https://api.pushwoosh.com/json/1.3/")
func pwCall(method string, data []byte) (bool) { url := PW_ENDPOINT + method request, err := http.NewRequest("POST", url, bytes.NewBuffer(data)) request.Header.Set("Content-Type", "application/json")
client := http.Client{} response, err := client.Do(request) if err != nil { fmt.Println("Error occur: " + err.Error()) return false } defer response.Body.Close()
fmt.Println("Response Status: ", response.Status) if (response.StatusCode == 200) { body, _ := ioutil.ReadAll(response.Body) fmt.Println("Response Body: ", string(body)) return true } return false}
func main() { requestData := map[string]interface{}{ "request": map[string]interface{} { "auth": PW_AUTH, "application": PW_APPLICATION, "notifications": []interface{}{ map[string]interface{} { "send_date": "now", "content": "test", "link": "https://pushwoosh.com", }, }, }, } jsonRequest, _ := json.Marshal(requestData) requestString := string(jsonRequest) fmt.Println("Request body: " + requestString)
pwCall("createMessage", jsonRequest)}$.ajax({ type: "POST", url: "https://api.pushwoosh.com/json/1.3/createMessage", data: JSON.stringify({ "request": { "application": "APPLICATION CODE", "auth": "API TOKEN", "notifications": [{ "send_date": "now", "ignore_user_timezone": true, "content": "Hello world!" }] } }), dataType: "json"}).done(function(data) { console.log(data);});deleteMessage
Anchor link toPOST https://api.pushwoosh.com/json/1.3/deleteMessage
Elimina un mensaje programado.
Cuerpo de la solicitud
Anchor link to| Nombre | Tipo | Descripción |
|---|---|---|
| auth* | string | Token de acceso a la API desde el Panel de Control de Pushwoosh. |
| message* | string | Código de mensaje obtenido en la solicitud /createMessage. |
{ "status_code": 200, "status_message": "OK"}{ "request":{ "auth": "yxoPUlwqm…………pIyEX4H", // required. API access token from Pushwoosh Control Panel "message": "xxxx-xxxxxxx-xxxxxx" // required. Message code obtained in /createMessage }}Códigos de estado:
| Código de estado HTTP | status_code | Descripción |
|---|---|---|
| 200 | 200 | Mensaje eliminado con éxito |
| 200 | 210 | Error de argumento. Consulta status_message para más información |
| 400 | N/A | Cadena de solicitud mal formada |
| 500 | 500 | Error interno |
<?php// see https://gomoob.github.io/php-pushwoosh/delete-message.htmluse Gomoob\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();}getMessageDetails
Anchor link toPOST https://api.pushwoosh.com/json/1.3/getMessageDetails
Recupera los detalles del mensaje.
Cuerpo de la solicitud
Anchor link to| Nombre | Tipo | Descripción |
|---|---|---|
| auth* | string | Token de acceso a la API desde el Panel de Control de Pushwoosh. |
| message* | string | Código de mensaje o ID de mensaje. |
{ "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" } } }}{ "request":{ "auth": "yxoPUlwqm…………pIyEX4H", // required. API access token from Pushwoosh Control Panel "message": "xxxx-xxxxxxx-xxxxxx" // required. message code or message ID }}createTargetedMessage
Anchor link toPOST https://api.pushwoosh.com/json/1.3/createTargetedMessage
Crea una nueva notificación push dirigida.
Cuerpo de la solicitud
Anchor link to| Nombre | Tipo | Descripción |
|---|---|---|
| auth* | string | Token de acceso a la API desde el Panel de Control de Pushwoosh. |
| devices_filter* | string | Consulta la observación a continuación. |
| send_date* | string | YYYY-MM-DD HH:mm o ‘now’. |
| ignore_user_timezone | boolean | Si se ignora, UTC-0 es el valor predeterminado para “send_date”. |
| timezone | string | Si se ignora, UTC-0 es el valor predeterminado para “send_date”. |
| campaign | string | Código de una campaña a la que deseas asignar este mensaje push. |
| content* | string | Contenido de la notificación. Consulta el ejemplo de solicitud para más detalles. |
| transactionId | string | Identificador de mensaje único para evitar la duplicación de mensajes en caso de problemas de red. Se almacena en el lado de Pushwoosh durante 5 minutos. |
| link | string | Enlace que se abrirá una vez que un usuario abra un mensaje push. |
| minimize_link | integer | 0 - no minimizar, 2 - bit.ly. Predeterminado = 2. |
| data | object | Cadena JSON u objeto JSON. Se pasará como parámetro “u” en el payload (convertido a cadena JSON). |
| preset | string | Código de preajuste. |
| send_rate | integer | Throttling. Los valores válidos van de 100 a 1000 pushes por segundo. |
| inbox_date | string | Especifica cuándo eliminar un mensaje de la Bandeja de entrada. |
| inbox_image | string | URL de la imagen que se mostrará junto al mensaje en la Bandeja de entrada. |
{ "status_code": 200, "status_message": "OK", "response": { "messageCode": "97B0-C7473871-2FBDFDC6" }}The request cannot be fulfilled due to bad syntax.Más ejemplos de respuesta:
{ "status_code": 210, "status_message": "Errors occurred while compiling filter", "response": { "errors": [{ "message": "Invalid tag set specification. \")\" expected.", "type": "syntax" }] }}{ "status_code": 210, "status_message": "Errors occurred while compiling filter", "response": { "errors": [{ "message": "Application \"11111-11111\" not found", "type": "semantic", "near": "\"11111-11111\"" }] }}{ "status_code": 210, "status_message": "Errors occurred while compiling filter", "response": { "errors": [{ "message": "Invalid character \"/\" at 1:19", "type": "lexical" }] }}{ "request": { "auth": "yxoPUlwqm…………pIyEX4H", // required. API access token from Pushwoosh Control Panel "devices_filter": "A(\"XXXXX-XXXXX\") * T(\"City\", EQ, \"Name\")", // required. Syntax explained below "send_date": "now", // optional. YYYY-MM-DD HH:mm OR 'now' "ignore_user_timezone": true, // optional. "timezone": "America/New_York", // optional. If ignored UTC-0 is default for "send_date". // More info https://php.net/manual/timezones.php. "campaign": "CAMPAIGN_CODE", // optional. Campaign code to which you want to assign this push message. "content": { // optional. Object OR string. Use "wns_content" instead for Windows. "en": "English", "de": "Deutsch" }, "transactionId": "unique UUID", // optional. Unique message identifier to prevent duplicating messages // in case of network problems. Stored on the side of // Pushwoosh for 5 minutes. "rich_media": "XXXXX-XXXXX", // optional. Copy the Rich Media code from the URL bar of the // Rich Media editor page in Pushwoosh Control Panel. "link": "https://google.com", // optional. 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": { // optional. JSON string or JSON object. "key": "value" // 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. "dynamic_content_placeholders": { // optional. Placeholders for dynamic content instead of device tags. "firstname": "John", "lastname": "Doe" },
// 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_image": "Inbox image URL", // optional. The image to be shown near the message. "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. }}{ "request": { "auth": "yxoPUlwqm…………pIyEX4H", // required. API access token from Pushwoosh Control Panel "devices_filter": "FILTER CONDITION", "send_date": "now", // optional. YYYY-MM-DD HH:mm OR 'now' "content": { // optional. Object OR string. "en": "English", // Use "wns_content" instead for Windows. "de": "Deutsch" }, "ignore_user_timezone": true, // optional. "timezone": "America/New_York", // optional. If ignored UTC-0 is default for "send_date". // More info https://php.net/manual/timezones.php. "campaign": "CAMPAIGN_CODE", // optional. Campaign code to which you want to assign this push message.
// iOS related parameters "ios_badges": 5, // optional. 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_sound_off": true, // optional. Enable/disable sound set by "ios_sound" field. "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. iOS8 category ID from Pushwoosh. "ios_category_custom": "category", // optional. Custom APNS category. "ios_root_params": { // optional. Root level parameters to the aps dictionary. "aps": { "content-available": "0", // optional. Set "1" to send a silent push and "0" for regular push. "mutable-content": 1 // required for iOS10+ Media attachments. }, "attachment": "YOUR_ATTACHMENT_URL", // iOS10+ media attachment URL. "data": {} // optional. User supplied data, max of 4KB }, "apns_trim_content": 1, // optional. (0|1) Trims the exceeding content strings with ellipsis. "ios_title": { // optional. Adds title for iOS push notification. "en": "title" }, "ios_subtitle": { // optional. Adds subtitle for iOS push notification. "en": "subTitle" }, "ios_content": { // optional. Adds content for iOS push notification. "en": "content" },
// Android related parameters "android_root_params": { // optional. Custom key-value object. "key": "value" // Root level parameters for the android payload recipients. }, "android_sound": "soundfile", // optional. No file extension. If left empty, the device // will produce no sound upon receiving a push. "android_sound_off": true, // optional. Enable/disable sound set by "android_sound" field "android_header": { // optional. Object OR string. Android notification header. "en": "header" }, "android_content": { // optional. Object OR string. Android notification content. "en": "content" }, "android_icon": "icon.png", "android_custom_icon": "URL.png", // optional. Full path URL to the image file. "android_banner": "URL.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. 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", // optional. "normal" or "high". 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
// Amazon related parameters "adm_root_params": { // optional. Custom key-value object "key": "value" }, "adm_sound": "push.mp3", "adm_sound_off": true, // optional. Enable/disable sound set by "adm_sound" field "adm_header": { "en": "Header" }, "adm_content": { "en": "content" }, "adm_icon": "icon.png", "adm_custom_icon": "URL.png", "adm_banner": "URL.png", "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 related parameters "mac_badges": 3, "mac_sound": "sound.caf", "mac_sound_off": true, "mac_root_params": { "content-available": 1 }, "mac_ttl": 3600, // optional. Time to live parameter — maximum message lifespan in seconds. "mac_title": { // optional. Adds Title for push notification. "en": "title" }, "mac_subtitle": { // optional. Adds subtitle for MacOS push notification. "en": "subtitle" }, "mac_content": { // optional. Adds content for MacOS push notification. "en": "content" },
// Windows related parameters "wns_content": { // required. Content (XML or raw) of notification encoded // in MIME's base64 in form of Object 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 parameters "safari_title": { // optional. Object OR string. Title of the notification. "en": "title" }, "safari_content": { // optional. Object OR string. Content of the notification. "en": "content" }, "safari_action": "Click here", // optional. "safari_url_args": [ // required. 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 parameters "chrome_title": { // optional. You can specify the header of the message in this parameter. "en": "title" }, "chrome_content": { // optional. You can specify the content of the message in this parameter. "en": "content" }, "chrome_icon": "icon_URL", // optional. 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": "text1", // optional. "chrome_button_url1": "button1_URL", // optional. Ignored if chrome_button_text1 is not set. "chrome_button_text2": "text2", // optional. "chrome_button_url2": "button2_url", // optional. Ignored if chrome_button_text2 is not set.
// Firefox related parameters "firefox_title": { // optional. Object OR string. You can specify message header here. "en": "title" }, "firefox_content": { // optional. Object OR string. You can specify message content here. "en": "content" }, "firefox_icon": "icon_URL", // optional. 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" } }}Los conceptos básicos son muy simples: todos los filtros se realizan sobre conjuntos de entidades.
Conjuntos
Anchor link toLos conjuntos se definen como:
1. Dispositivos suscritos a la aplicación particular (A);
2. Dispositivos que coinciden con los valores de etiqueta especificados (T) o el valor de etiqueta específico de la aplicación (AT);\
Sintaxis
Anchor link toProbemos con algunos ejemplos según la lista anterior.
Dirigirse a los suscriptores de la aplicación
Anchor link toEl filtro “A” define un conjunto de dispositivos suscritos a una aplicación particular:
A("XXXXX-XXXXX", ["iOS", "Android", "OsX", "Windows", "Amazon", "Safari", "Chrome", "Firefox"])
donde
- “XXXXX-XXXXX” – Código de aplicación de Pushwoosh
- [“iOS”, “Android”, …] – array de plataformas de destino. Si se omite, el mensaje se enviará a todas las plataformas disponibles para esta aplicación.
Filtrar por valores de etiqueta
Anchor link toEl filtro “T” define un conjunto de dispositivos que tienen asignados los valores de etiqueta especificados.
T(\"Age\", IN, [17,20])
Define el conjunto de dispositivos que tienen la etiqueta “age” establecida en uno de los valores: 17, 18, 19, 20.
Tipos de etiquetas y operadores
Anchor link toLo más importante a entender es que las etiquetas se comparten entre las aplicaciones, y esto presenta un instrumento muy poderoso para segmentar y filtrar a tus usuarios objetivo sin vincularte a una aplicación en particular.
La etiqueta puede ser de tres tipos diferentes: Cadena, Entero, Lista. El tipo de etiqueta define qué operadores puedes usar para una etiqueta en particular.
Etiquetas de cadena
Anchor link toOperadores aplicables:
- EQ – se dirige a dispositivos con un valor de etiqueta especificado
- IN – se dirige a dispositivos con cualquiera de los valores de etiqueta especificados
- NOTIN – se dirige a dispositivos sin valores de etiqueta especificados
- NOTEQ – se dirige a dispositivos con un valor de etiqueta no igual a uno especificado
- NOTSET – se dirige a dispositivos sin valor para una etiqueta especificada
- ANY – se dirige a dispositivos con cualquier valor establecido para una etiqueta especificada
Ejemplos:
T (\"Age\", EQ, 30) – filtra usuarios de 30 años
T (\"favorite_color\", IN, [\"red\",\"green\",\"blue\"]) – filtra usuarios que han elegido rojo, verde o azul como su color favorito.
T (\"Name", NOTSET, \"\") – se dirige a dispositivos sin valor para la etiqueta Name.
Puedes usar valores numéricos con las etiquetas de cadena, pero dichos valores se convertirán a una cadena.
Etiquetas de entero
Anchor link toOperadores aplicables:
- GTE – mayor o igual que un valor especificado
- LTE– menor o igual que un valor especificado
- EQ – igual a un valor especificado
- BETWEEN – entre los valores mínimo y máximo especificados
- IN – cualquiera de los valores especificados
- NOTIN – no hay valores especificados asignados a un dispositivo
- NOTEQ – dispositivos con un valor de etiqueta no igual a uno especificado
- NOTSET – dispositivos sin valor para una etiqueta especificada
- ANY – dispositivos con cualquier valor establecido para una etiqueta especificada
Ejemplos:
T (\"Level\", EQ, 14) – filtra solo a los usuarios en el nivel 14.
T (\"Level\", BETWEEN, [1,5) – filtra usuarios en los niveles 1, 2, 3, 4 y 5.
T (\"Level", GTE, 29) – se dirige a usuarios que han alcanzado al menos el nivel 29.
Etiquetas de lista
Anchor link toOperadores aplicables:
- IN – dispositivos con cualquiera de los valores de etiqueta especificados
Ejemplo: T("Category", IN, ["breaking_news","business","politics"])
Etiquetas de fecha
Anchor link toOperadores aplicables:
- GTE – mayor o igual que un valor especificado
- LTE– menor o igual que un valor especificado
- EQ – igual a un valor especificado
- BETWEEN – entre los valores mínimo y máximo especificados
- NOTEQ – dispositivos con un valor de etiqueta no igual a uno especificado
- NOTSET – dispositivos sin valor para una etiqueta especificada
- ANY – dispositivos con cualquier valor establecido para una etiqueta especificada
Ejemplos:
AT("7777D-322A7","Last Application Open", BETWEEN, ["2022-02-28", "2022-03-02"])
AT("7777D-322A7","Last Application Open", GTE, "90 days ago")
Operaciones
Anchor link to- “+” – une dos conjuntos (equivale a OR)
- “*” – intersecta dos conjuntos (equivale a AND)
- “\” – resta un conjunto de otro (equivale a NOT)
Todas las operaciones son asociativas a la izquierda. ”+” y ”*” tienen la misma prioridad. "" tiene mayor prioridad. Puedes usar paréntesis para definir las prioridades de los cálculos.
Ten en cuenta que la operación “\” no es conmutativa. A("12345-12345") \ A("67890-67890") no es lo mismo que A("67890-67890") \ A("12345-12345").
getPushHistory
Anchor link toPOST https://api.pushwoosh.com/json/1.3/getPushHistory
Obtiene el historial de mensajes con detalles de los pushes.
Cuerpo de la solicitud
Anchor link to| Nombre | Tipo | Descripción |
|---|---|---|
| auth* | string | Token de acceso a la API desde el Panel de Control de Pushwoosh. |
| limitMessages | integer | Limita el número de mensajes en una respuesta. Valores posibles de 10 a 1000. |
| source | string | Origen del historial de push. Puede ser nulo o: “CP”, “API”, “GeoZone”, “RSS”, “AutoPush”, “A/B Test”. |
| searchBy | string | Valores posibles para buscar. Puede ser nulo o: “notificationID”, “notificationCode”, “applicationCode”, “campaignCode”. |
| value | string | Valor de búsqueda establecido según el campo “searchBy”. |
| lastNotificationID | string | Se utiliza para la paginación. Último messageId de la llamada /getPushHistory anterior. Consulta los detalles a continuación. |
{ "status_code": 200, "status_message": "OK", "response": { "rows": [{ "id": 10191611434, "code": "8071-07AD1171-77238AD1", "createDate": "2020-09-14 12:26:21", "sendDate": "2020-09-14 12:26:21", "content": { "en": "Hello!" }, "url": null, "ios_title": null, "ios_subtitle": null, "ios_root_params": null, "android_header": null, "android_root_params": null, "conditions": null, "conditions_operator": "AND", "filter_code": "E3A64-A5F3C", "filter_conditions": "#In-app Purchase(≠0)", "filter_name": "Purchased something", "geozone": null, "campaignId": "", "campaignName": "", "subscription_segments": null, "open": { "C90C0-0E786": { "IOS": 0 } }, "sent": { "C90C0-0E786": { "IOS": 1 } }, "ctr": { "C90C0-0E786": 0 } }, { "id": 10191609202, "code": "41CA-83F8E0D7-7A63822B", "createDate": "2020-09-14 12:25:55", "sendDate": "2020-09-14 12:25:55", "content": { "en": "Hi!" }, "url": null, "ios_title": null, "ios_subtitle": null, "ios_root_params": null, "android_header": null, "android_root_params": null, "conditions": null, "conditions_operator": "AND", "filter_code": null, "filter_conditions": null, "filter_name": null, "geozone": null, "campaignId": "", "campaignName": "", "subscription_segments": { "2D732-BB981": "News" }, "open": { "C90C0-0E786": { "CHROME": 0, "IOS": 0 } }, "sent": { "C90C0-0E786": { "CHROME": 1, "IOS": 2 } }, "ctr": { "C90C0-0E786": 0 } }] }}{ "request":{ "auth": "yxoPUlwqm…………pIyEX4H", // required. API access token from Pushwoosh Control Panel "source": null, // optional. Possible values are null, "CP", "API", "GeoZone", // "RSS", "AutoPush", "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. }}Este método devolverá 1000 mensajes de la cuenta ordenados por ID de mensaje. Para obtener la segunda página, especifica el último ID de mensaje de la respuesta anterior en el parámetro lastNotificationId.
Tipos de datos de respuesta
Anchor link toid -- int | 0code -- stringcreateDate -- string (date: %Y-%m-%d %H:%M:%S)sendDate -- string (date: %Y-%m-%d %H:%M:%S)content -- array ( dict {lang: value} | list [])title -- array ( dict {lang: value} | list [])subtitle -- array ( dict {lang: value} | list [])url -- stringios_title -- string | array ( dict {lang: value} ) | nullios_subtitle -- string | array ( dict {lang: value} ) | nullios_root_params -- dict (JSON) | nullandroid_header -- string | array ( dict {lang: value} ) | nullandroid_root_params -- dict (JSON) | nullconditions -- list (JSON) | nullconditions_operator -- string | nullfilter_code -- string | nullfilter_name -- string | nullfilter_conditions -- string | nullgeozone -- string | nullcampaignId -- string | ""campaignName -- string | ""subscription_segments (obsolete) -- list (JSON) | nulldata -- dict (JSON) | nullopen -- dict [dict [string: int]] | "" Example: 'open': {'AAAAA-BBBBB': {'IOS': 1, 'ANDROID': 1}}sent -- dict [dict [string: int]] | "" Example: 'sent': {'AAAAA-BBBBB': {'IOS': 10, 'ANDROID': 10}}ctr -- dict [string: int] | "" Example: {'AAAAA-BBBBB': 1}errors -- dict [string: int] | "" Example: {'ANDROID': 1, 'IOS': 1}cancelMessage
Anchor link toPOST https://api.pushwoosh.com/json/1.3/cancelMessage
Elimina un mensaje programado.
Cuerpo de la solicitud
Anchor link to| Nombre | Tipo | Descripción |
|---|---|---|
| auth* | string | Token de acceso a la API desde el Panel de Control de Pushwoosh. |
| message* | string | El Código de mensaje obtenido en la respuesta de /createMessage. |
{ "status_code":200, "status_message":"OK"}{ "request":{ "auth": "yxoPUlwqm…………pIyEX4H", // required. API access token from Pushwoosh Control Panel "message": "xxxx-xxxxxxx-xxxxxx" // required. The message code obtained in /createMessage response }}Códigos de estado:
| Código de estado HTTP | status_code | Descripción |
|---|---|---|
| 200 | 200 | Mensaje cancelado con éxito |
| 200 | 210 | Error de argumento. Consulta status_message para más información. |
| 400 | N/A | Cadena de solicitud mal formada |
| 500 | 500 | Error interno |