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 de mensaje. Consulta los detalles en el 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", // requerido. Código de aplicación de Pushwoosh. "auth": "yxoPUlwqm…………pIyEX4H", // requerido. Token de acceso a la API desde el Panel de Control de Pushwoosh. "notifications": [{ "send_date": "now", // opcional. AAAA-MM-DD HH:mm O 'now' "content": { // opcional. objeto O cadena. "en": "English", // Usa "wns_content" en su lugar para Windows. "fr": "French" }, "title": { // opcional. objeto O cadena. "en": "Title", // Se ignora si se especifican títulos específicos de la plataforma "fr": "Titre" // 'ios_title', 'android_header', etc. }, // consulta los ejemplos de parámetros específicos de la plataforma a continuación. "subtitle":{ // opcional. objeto O cadena. "en": "Subtitle", // Se ignora si se especifican títulos específicos de la plataforma "fr": "Sous-titre" // 'ios_subtitle', etc. }, // consulta los ejemplos de parámetros específicos de la plataforma a continuación. "ignore_user_timezone": true, // opcional. "timezone": "America/New_York", // opcional. Si se ignora, UTC-0 es el predeterminado para "send_date". // Consulta https://php.net/manual/timezones.php para // las zonas horarias compatibles. "campaign": "CAMPAIGN_CODE", // opcional. Código de campaña al que deseas // asignar este mensaje push. "geozone": { // opcional. Enviar a Geozona "lat": 22.22, "lng": 33.33, "range": 110 }, "rich_media": "XXXXX-XXXXX", // opcional. Copia el código de Rich Media de la barra de URL de // la página del editor de Rich Media en el Panel de Control de Pushwoosh. "link": "https://google.com", // opcional. Para enlaces profundos (deeplinks) añade "minimize_link": 0 "minimize_link": 0, // opcional. 0 — no minimizar, 2 — bitly. Predeterminado = 2. // Ten en cuenta que los acortadores tienen restricciones // en el número de llamadas. "data": { // opcional. Cadena JSON u objeto JSON, se pasará como "key": "value" // parámetro "u" en el payload (convertido a cadena JSON). }, "transactionId": "unique UUID", // opcional. Identificador de mensaje único para evitar duplicados // en caso de problemas de red. Se almacena en el lado de // Pushwoosh durante 5 minutos. "platforms": [ // opcional. 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", // opcional. Código de Preset de Push desde tu Panel de Control. // Si se envían parámetros específicos en la solicitud, // estos anulan los parámetros del preset. "send_rate": 100, // opcional. Throttling. Los valores válidos van de 100 a 1000 pushes/segundo. "send_rate_avoid": true, // opcional. Si se establece en true, el límite de throttling no se aplicará a // esta notificación push específica. // Relacionado con plantillas, por favor, consulta la guía del Motor de Plantillas para obtener más información "template_bindings": { // opcional. "TemplatePlaceholder": "Value" }, "dynamic_content_placeholders": { // opcional. Marcadores de posición para contenido dinámico en lugar de etiquetas de dispositivo. "firstname": "John", "lastname": "Doe" },
// Parámetros de limitación de frecuencia. Asegúrate de que la limitación de frecuencia global esté configurada en el Panel de Control. "capping_days": 30, // opcional. Cantidad de días para la limitación de frecuencia (máx. 30 días) "capping_count": 10, // opcional. El número máximo de pushes que se pueden enviar desde una // aplicación específica a un dispositivo particular dentro de un período de 'capping_days'. // En caso de que el mensaje creado exceda el // límite de 'capping_count' para un dispositivo, no // se enviará a ese dispositivo. "capping_exclude": true, // opcional. Si se establece en true, esta notificación push no // se contará para la limitación de futuros pushes. "capping_avoid": true, // opcional. Si se establece en true, la limitación no se aplicará a // esta notificación push específica.
// Para guardar el mensaje en la Bandeja de entrada a través de la API, usa "inbox_date" o "inbox_image". // El mensaje se guarda cuando se utiliza al menos uno de estos parámetros. "inbox_date": "2017-02-02", // opcional. Especifica cuándo eliminar un mensaje de la Bandeja de entrada. // El mensaje se eliminará de la Bandeja de entrada a las 00:00:01 UTC // de la fecha especificada, por lo que el día anterior es el // último día que un usuario puede ver el mensaje en su Bandeja de entrada. // Si no se especifica, la fecha de eliminación predeterminada es el // día siguiente a la fecha de envío. "inbox_image": "Inbox image URL", // opcional. La imagen que se mostrará junto al mensaje. "inbox_days": 5, // opcional. Especifica cuándo eliminar un mensaje de la // Bandeja de entrada (vida útil de un mensaje de bandeja de entrada en días). // Se puede usar en lugar del parámetro "inbox_date". // Hasta 30 días.
"devices": [ // opcional. Especifica tokens o hwids para enviar pushes dirigidos. "hwid_XXXX" // No más de 1000 tokens/hwids en ], // un array. Si se establece, el mensaje solo se enviará a // los dispositivos de la lista. No se permite el Grupo de Aplicaciones para la lista de dispositivos. // Los tokens push de iOS solo pueden estar en minúsculas.
// Notificaciones push centradas en el usuario "users": [ // opcional. Si se establece, el mensaje solo se entregará a los "user_XXXX" // ID de usuario especificados (establecidos a través de la llamada /registerUser). ], // Si se especifica junto con el parámetro de dispositivos, // este último será ignorado. No más de 1000 ID de usuario // en un array. No se permite el Grupo de Aplicaciones para la lista de usuarios.
// Filtros y condiciones "filter": "FILTER_NAME", // opcional. "conditions": [ // opcional. Consulta la nota a continuación. ["Country", "EQ", "fr"], ["Language", "EQ", "en"] ], "conditions_operator": "AND" // opcional. Operador lógico para los arrays de condiciones. // Valores posibles: AND | OR. AND es el predeterminado. }] }}Ejemplo de solicitud de notificación VoIP
Anchor link toPushwoosh admite notificaciones de llamada estilo VoIP para iOS y Android.
A continuación puedes encontrar ejemplos de solicitudes API createMessage para cada plataforma.
{ "request": { "application": "XXXXX-XXXXX", // requerido. Código de aplicación de Pushwoosh. "auth": "yxoPUlwqm…………pIyEX4H", // requerido. Token de acceso a la API desde el Panel de Control de Pushwoosh. "notifications": [ { "voip_push": true, // requerido. Se requiere el parámetro para enviar una notificación push VoIP. "ios_root_params": { "aps": { "mutable-content": 1 // requerido para adjuntos de medios en iOS10+. }, "callerName": "CallerName", // opcional. Nombre del llamante. Si no se especifica, se muestra "llamante desconocido". "video": true, // opcional. Indica si se admiten videollamadas. "supportsHolding": true, // opcional. Indica si se admite la funcionalidad de llamada en espera. "supportsDTMF": false, // opcional. Controla el soporte de la señal de multifrecuencia de doble tono. "callId": "42", // opcional. El identificador único de la llamada a cancelar. "cancelCall": true // opcional. Establece en "true" para cancelar la llamada con el "callId" especificado. } } ] }}Android
Anchor link to{ "request": { "application": "XXXXX-XXXXX", // requerido. Código de aplicación de Pushwoosh. "auth": "yxoPUlwqm…………pIyEX4H", // requerido. Token de acceso a la API desde el Panel de Control de Pushwoosh. "notifications": [ { "voip_push": true, // requerido. Se requiere el parámetro para enviar una notificación push VoIP. "android_root_params": { "callerName": "callerName", // opcional. Nombre del llamante. Si no se especifica, se muestra "llamante desconocido". "video": true, // opcional. Indica si se admiten videollamadas. "callId": 42, // opcional. El identificador único de la llamada a cancelar. "cancelCall": true // opcional. Establece en "true" para cancelar la llamada con el "callId" especificado. } } ] }}Parámetros específicos de la plataforma
Anchor link toParámetros de iOS
Anchor link to{ "request": { "application": "12345-67891", // requerido. Código de aplicación de Pushwoosh "auth": "yxoPUlwqm…………pIyEX4H", // requerido. Token de acceso a la API desde el Panel de Control de Pushwoosh "notifications": [{ "ios_title": { // opcional. Objeto O cadena. Añade un título específico de iOS para la notificación push. "en": "title" }, "ios_subtitle": { // opcional. Objeto O cadena. Añade un subtítulo específico de iOS para la notificación push. "en": "subtitle" }, "ios_content": { // opcional. Objeto O cadena. Añade contenido específico de iOS para la notificación push. "en": "content" }, "ios_badges": 5, // opcional. Número de insignia de la aplicación de iOS. // Usa "+n" o "-n" para incrementar/decrementar el valor de la insignia en n. "ios_sound": "sound file.wav", // opcional. Nombre del archivo de sonido en el paquete principal de la aplicación. // Si se deja vacío, el dispositivo producirá un sonido de sistema predeterminado. "ios_sound_off": true, // opcional. Activar/desactivar el sonido establecido por el campo "ios_sound". "ios_ttl": 3600, // opcional. Parámetro de tiempo de vida: vida útil máxima del mensaje en segundos. "ios_silent": 1, // opcional. Habilita notificaciones silenciosas (ignora "sound" y "content"). "ios_category_id": "1", // opcional. ID de categoría de iOS8 de Pushwoosh. "ios_root_params": { // opcional. Parámetros de nivel raíz para el diccionario aps. "aps": { "content-available": "0", // opcional. Establece "1" para enviar un push silencioso y "0" para un push regular. "mutable-content": 1 // requerido para adjuntos de medios en iOS10+. }, "callerName": "CallerName", // opcional parámetro VoIP. Nombre del llamante. Si no se especifica, se muestra "llamante desconocido". "video": true, // opcional parámetro VoIP. Indica si se admiten videollamadas. "supportsHolding": true, // opcional parámetro VoIP. Indica si se admite la funcionalidad de llamada en espera. "supportsDTMF": false, // opcional parámetro VoIP. Controla el soporte de la señal de multifrecuencia de doble tono. "data": {} // opcional Datos proporcionados por el usuario, máximo de 4KB }, "ios_attachment": "URL", // opcional. Inserta contenido multimedia en la notificación. "ios_thread_id": "some thread id", // opcional. Identificador para agrupar notificaciones relacionadas. // Los mensajes con el mismo ID de hilo se agruparán // en la pantalla de bloqueo y en el Centro de Notificaciones. "ios_critical": true, // opcional. Marca la notificación de iOS como una alerta crítica // reproduciendo sonido incluso si el dispositivo está silenciado o // el modo No Molestar está activado. "ios_category_custom": "category", // opcional. Categoría APNS personalizada. "ios_interruption_level": "active", // opcional. Uno de "passive", "active", "time-sensitive", // "critical". Indica la importancia y // el tiempo de entrega de una notificación. Consulta la // guía de push único para más detalles. "apns_trim_content": 1 // opcional. (0|1) Recorta las cadenas de contenido excedentes con puntos suspensivos. }] }}Parámetros de Android
Anchor link to{ "request": { "application": "12345-67891", // requerido. Código de aplicación de Pushwoosh "auth": "yxoPUlwqm…………pIyEX4H", // requerido. Token de acceso a la API desde el Panel de Control de Pushwoosh "notifications": [{ "android_header": { // opcional. Encabezado de la notificación de Android. "en": "header" }, "android_content": { // opcional. Contenido de la notificación de Android. "en": "content" }, "android_root_params": { // opcional. Objeto clave-valor personalizado. "key": "value", // Parámetros de nivel raíz para los destinatarios del payload de Android. "CancelID": 12345678, // opcional. Cancela la notificación push con el "voip": true, // requerido parámetro VoIP. Se requiere el parámetro para enviar notificaciones push VoIP. "callerName": "callerName", // opcional parámetro VoIP. Nombre del llamante. Si no se especifica, se muestra "llamante desconocido". "video": true, // opcional parámetro VoIP. Indica si se admiten videollamadas. }, // ID de Mensaje especificado (obtén el ID del Historial de Mensajes) "android_sound": "soundfile", // opcional. Sin extensión de archivo. Si se deja vacío, // el dispositivo producirá un sonido de sistema predeterminado. "android_sound_off": true, // opcional. Activar/desactivar el sonido establecido por el campo "android_sound" "android_icon": "icon.png", // opcional. "android_custom_icon": "URL.png", // opcional. URL completa al archivo de imagen. "android_banner": "URL.png", // opcional. URL completa al archivo de imagen. "android_badges": 5, // opcional. Número de insignia del icono de la aplicación de Android. // Usa "+n" o "-n" para incrementar/decrementar el valor de la insignia en n. "android_gcm_ttl": 3600, // opcional. Parámetro de tiempo de vida — vida útil máxima del mensaje en segundos. "android_vibration": 0, // opcional. Forzar vibración en Android para pushes de alta prioridad. "android_led": "#rrggbb", // opcional. Color LED hexadecimal, el dispositivo hará su mejor aproximación. "android_priority": -1, // opcional. Establece el parámetro "importance" para dispositivos con // Android 8.0 y superior, así como el parámetro "priority" // para dispositivos con Android 7.1 e inferior. Establece el // nivel de interrupción de un canal de notificación o una notificación // particular. Los valores válidos son -2, -1, 0, 1, 2. "android_delivery_priority": "normal", // opcional. "normal" o "high". // Permite la entrega de la notificación cuando el // dispositivo está en modo de ahorro de energía. "android_ibc": "#RRGGBB", // opcional. color de fondo del icono en Lollipop, #RRGGBB, // #AARRGGBB, "red", "black", "yellow", etc. "android_silent": 1, // opcional. 0 o 1. Habilita la notificación silenciosa. // Ignora el sonido y el contenido "android_group_id": "123" // opcional. Identificador para agrupar notificaciones relacionadas. Los mensajes con // el mismo ID de hilo se agruparán en // el Centro de Notificaciones. }] }}Parámetros de Huawei
{ "request": { "application": "12345-67891", // requerido. Código de aplicación de Pushwoosh "auth": "yxoPUlwqm…………pIyEX4H", // requerido. Token de acceso a la API desde el Panel de Control de Pushwoosh "notifications": [{ "huawei_android_header": { // opcional. Objeto O cadena. Título de la notificación "en": "header" }, "huawei_android_content": { // opcional. Objeto O cadena. Contenido de la notificación "en": "content" }, "huawei_android_badges": true, // opcional. "huawei_android_silent": 0, // opcional. 0 o 1. Habilita la notificación silenciosa. // Ignora el sonido y el contenido "huawei_android_icon": "URL.png", // opcional. "huawei_android_led": "#FF0011", // opcional. Color LED hexadecimal, el dispositivo hará su mejor aproximación "huawei_android_vibration": 1, // opcional. Forzar vibración en Huawei para pushes de alta prioridad "huawei_android_sound": "sound.wav", // opcional. Si se deja vacío, el dispositivo producirá // un sonido de sistema predeterminado "huawei_android_sound_off": true, // opcional. Activar/desactivar el sonido establecido por // el campo "huawei_android_sound" "huawei_android_custom_icon": "URL.png", // opcional "huawei_android_gcm_ttl": 2400, // opcional. Parámetro de tiempo de vida - máximo // vida útil del mensaje en segundos "huawei_android_banner": "URL.png", // opcional. URL de ruta completa al archivo de imagen "huawei_android_root_params": { // opcional. Objeto clave-valor personalizado. "key": "value" // Parámetros de nivel raíz para los destinatarios del payload de Huawei. }, "huawei_android_priority": 0, // opcional. Valores válidos: -2, -1, 0, 1, 2 "huawei_android_ibc": "#0011AA", // opcional. Color de fondo del icono en Lollipop "huawei_android_lockscreen": 1, // opcional "huawei_android_delivery_priority": "normal", // opcional. "normal" o "high". Permite la entrega de notificaciones // en modo de ahorro de energía "huawei_android_group_id": "group_id" // opcional. Identificador para agrupar notificaciones relacionadas }] }}Parámetros de Safari
Anchor link to{ "request": { "application": "12345-67891", // requerido. Código de aplicación de Pushwoosh "auth": "yxoPUlwqm…………pIyEX4H", // requerido. Token de acceso a la API desde el Panel de Control de Pushwoosh "notifications": [{ "safari_url_args": [ // requerido, pero el valor puede estar vacío "firstArgument", "secondArgument" ], "safari_title": { // opcional. Objeto O cadena. Título de la notificación. "en": "content" }, "safari_content": { // opcional. Objeto O cadena. Contenido de la notificación. "en": "content" }, "safari_action": "Click here", // opcional. "safari_ttl": 3600 // opcional. Parámetro de tiempo de vida — el máximo // vida útil de un mensaje en segundos. }] }}Parámetros de Chrome
Anchor link to{ "request": { "application": "12345-67891", // requerido. Código de aplicación de Pushwoosh "auth": "yxoPUlwqm…………pIyEX4H", // requerido. Token de acceso a la API desde el Panel de Control de Pushwoosh "notifications": [{ "chrome_title": { // opcional. Objeto O cadena. Puedes especificar el encabezado "en": "title" // del mensaje en este parámetro. }, "chrome_content": { // opcional. Objeto O cadena. Puedes especificar el contenido "en": "content" // del mensaje en este parámetro. }, "chrome_icon": "URL.png", // opcional. URL completa al icono o ruta del archivo de recursos de la extensión "chrome_gcm_ttl": 3600, // opcional. Parámetro de tiempo de vida – vida útil máxima del mensaje en segundos. "chrome_duration": 20, // opcional. máx. 50 segundos. Cambia el tiempo de visualización del push de Chrome. // Establece en 0 para mostrar el push hasta que el usuario interactúe con él. "chrome_image": "image_URL", // opcional. URL a una imagen grande. "chrome_root_params": { // opcional. Establece parámetros específicos para los mensajes enviados a Chrome. "key": "value" }, "chrome_button_text1": "text1", // opcional "chrome_button_url1": "button1_URL", // opcional. Se ignora si chrome_button_text1 no está establecido. "chrome_button_text2": "text2", // opcional "chrome_button_url2": "button2_url" // opcional. Se ignora si chrome_button_text2 no está establecido. }] }}Parámetros de Firefox
Anchor link to{ "request": { "application": "12345-67891", // requerido. Código de aplicación de Pushwoosh "auth": "yxoPUlwqm…………pIyEX4H", // requerido. Token de acceso a la API desde el Panel de Control de Pushwoosh "notifications": [{ "firefox_title": { // opcional. Objeto O cadena. Puedes especificar el encabezado del mensaje aquí. "en": "title" }, "firefox_content": { // opcional. Objeto O cadena. Puedes especificar el contenido del mensaje aquí. "en": "content" }, "firefox_icon": "URL.png", // opcional. URL de ruta completa al icono o ruta al // archivo en los recursos de la extensión. "firefox_root_params": { // opcional. Establece parámetros específicos para los mensajes enviados a Firefox. "key": "value" } }] }}Parámetros de Amazon
Anchor link to{ "request": { "application": "12345-67891", // requerido. Código de aplicación de Pushwoosh "auth": "yxoPUlwqm…………pIyEX4H", // requerido. Token de acceso a la API desde el Panel de Control de Pushwoosh "notifications": [{ "adm_header": { // opcional. Objeto O cadena. Puedes especificar el encabezado del mensaje aquí. "en": "header" }, "adm_content": { // opcional. Objeto O cadena. Puedes especificar el contenido del mensaje aquí. "en": "content" }, "adm_root_params": { // opcional. Objeto clave-valor personalizado "key": "value" }, "adm_sound": "push.mp3", // opcional. "adm_sound_off": true, // opcional. Activar/desactivar el sonido establecido por el campo "adm_sound" "adm_icon": "icon.png", // opcional. URL completa al icono. "adm_custom_icon": "URL.png", // opcional. "adm_banner": "URL.png", // opcional. "adm_ttl": 3600, // opcional. Parámetro de tiempo de vida — el máximo de vida útil del mensaje // en segundos. "adm_priority": -1 // opcional. Prioridad del push en el cajón de pushes de Amazon, // los valores válidos son -2, -1, 0, 1 y 2. }] }}Parámetros de Mac OS X
Anchor link to{ "request": { "application": "12345-67891", // requerido. Código de aplicación de Pushwoosh "auth": "yxoPUlwqm…………pIyEX4H", // requerido. Token de acceso a la API desde el Panel de Control de Pushwoosh "notifications": [{ "mac_title": { // opcional. Objeto O cadena. Añade Título para la notificación push. "en": "title" }, "mac_subtitle": { // opcional. Añade subtítulo para la notificación push. "en": "subtitle" }, "mac_content": { // opcional. Añade contenido para la notificación push. "en": "content" }, "mac_badges": 3, // opcional. "mac_sound": "sound.caf", // opcional. "mac_sound_off": true, // opcional. Activar/desactivar el sonido establecido por el campo "mac_sound" "mac_root_params": { // opcional. "content-available": 1 }, "mac_ttl": 3600 // opcional. Parámetro de tiempo de vida — vida útil máxima del mensaje en segundos. }] }}Parámetros de Windows
Anchor link to{ "request": { "application": "12345-67891", // requerido. Código de aplicación de Pushwoosh "auth": "yxoPUlwqm…………pIyEX4H", // requerido. Token de acceso a la API desde el Panel de Control de Pushwoosh "notifications": [{ "wns_content": { // requerido. Contenido (XML o raw) de la notificación codificado en base64 de MIME // en forma de Objeto O Cadena "en": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9ImF2YWlsYWJsZSIvPg==", "de": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9Im5ld01lc3NhZ2UiLz4=" }, "wns_type": "Badge", // opcional. 'Tile' | 'Toast' | 'Badge' | 'Raw' "wns_tag": "myTag", // opcional. Usado en la política de reemplazo de Tile. // Una cadena alfanumérica de no más de 16 caracteres. "wns_cache": 1, // opcional. (1|0) Se traduce en el valor de X-WNS-Cache-Policy. "wns_ttl": 600 // opcional. Tiempo de expiración de la notificación en segundos. }] }}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 de la 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 de la API. Activar esta opción ON te permite anular este límite durante 1 hora y guardar dichos pushes en el Historial de Mensajes. El rastreo de mensajería de la API se desactiva OFF automáticamente después de 1 hora.
El rastreo de mensajería de la API se puede activar en la página de Historial de Mensajes haciendo clic en Iniciar rastreo de mensajería de la API en la esquina superior derecha.
Condiciones de etiquetas (Tags)
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:
"AAAA-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"].
Fragmentos de /createMessage
Anchor link toEjemplos de solicitudes /createMessage:
#!/bin/bash
#Usoif [ ! -n "$1" ] || [ ! -n "$2" ]then echo "`basename $0` uso: api_token appid message"; exit 1;fi;MESSAGE="$3";if [ -z "$3" ]thenMESSAGE='¡Un push para gobernarlos a todos!'fi;
echo -e "Respuesta:"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
#- Documentación de la API de PushWoosh https://www.pushwoosh.com/programming-push-notification/pushwoosh-push-notification-remote-api/ #- Dos métodos aquí: # - PushNotification.new.notify_all(message) Notifica a todos con la misma opción # - PushNotification.new.notify_devices(notification_options = {}) Notifica a dispositivos específicos con opciones personalizadas
include HTTParty #Asegúrate de tener la gema HTTParty declarada en tu gemfile https://github.com/jnunemaker/httparty default_params :output => 'json' format :json
def initialize #- Cambia a tu configuración @auth = {:application => "00000-00000",:auth => "auth_token"} end
# PushNotification.new.notify_all("Esta es una notificación de prueba para todos los dispositivos") 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 = {}) #- Opciones predeterminadas, descomenta :data o :devices si es necesario default_notification_options = { # AAAA-MM-DD HH:mm O 'now' :send_date => "now", # Objeto( idioma1: 'contenido1', idioma2: 'contenido2' ) O cadena :content => { :fr => "Test", :en => "Test" }, # Cadena JSON u objeto JSON "custom": "json data" #:data => { # :custom_data => value #}, # omite este campo (la notificación push se entregará a todos los dispositivos de la aplicación), o proporciona la lista de ID de dispositivos #:devices => {} }
#- Fusionando con opciones específicas final_notification_options = default_notification_options.merge(notification_options)
#- Construyendo la llamada final options = @auth.merge({:notifications => [final_notification_options]}) options = {:request => options} #- Ejecutando la llamada a la API POST con HTTPARTY - :body => options.to_json nos permite enviar el json como un objeto en lugar de una cadena response = self.class.post("https://api.pushwoosh.com/json/1.3/createMessage", :body => options.to_json,:headers => { 'Content-Type' => 'application/json' }) endend// Usa clases JSON de 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: # Para Python 3.0 y posteriores from urllib.request import urlopen from urllib.request import Requestexcept ImportError: # Volver a urllib2 de Python 2 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", // requerido. Token de acceso a la API desde el Panel de Control de Pushwoosh "message": "xxxx-xxxxxxx-xxxxxx" // requerido. Código de mensaje obtenido en /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// ver https://gomoob.github.io/php-pushwoosh/delete-message.htmluse Gomoob\Pushwoosh\Model\Request\DeleteMessageRequest;
// crea una instancia de solicitud$request = DeleteMessageRequest::create()->setMessage('MESSAGE_CODE');
// llama al servicio web '/deleteMessage'$response = $pushwoosh->deleteMessage($request);
if($response->isOk()) { print '¡Genial, mi mensaje ha sido eliminado!';} else { print '¡Vaya, la eliminación falló :-('; print 'Código de estado: ' . $response->getStatusCode(); print 'Mensaje de estado: ' . $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", // requerido. Token de acceso a la API desde el Panel de Control de Pushwoosh "message": "xxxx-xxxxxxx-xxxxxx" // requerido. código de mensaje o ID de mensaje }}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 nota a continuación. |
| send_date* | string | AAAA-MM-DD HH:mm o ‘now’. |
| ignore_user_timezone | boolean | Si se ignora, UTC-0 es el predeterminado para “send_date”. |
| timezone | string | Si se ignora, UTC-0 es el 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 preset. |
| 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" }}La solicitud no se puede cumplir debido a una sintaxis incorrecta.Más ejemplos de respuesta:
{ "status_code": 210, "status_message": "Se produjeron errores al compilar el filtro", "response": { "errors": [{ "message": "Especificación de conjunto de etiquetas no válida. Se esperaba \")\".", "type": "syntax" }] }}{ "status_code": 210, "status_message": "Se produjeron errores al compilar el filtro", "response": { "errors": [{ "message": "Aplicación \"11111-11111\" no encontrada", "type": "semantic", "near": "\"11111-11111\"" }] }}{ "status_code": 210, "status_message": "Se produjeron errores al compilar el filtro", "response": { "errors": [{ "message": "Carácter no válido \"/\" en 1:19", "type": "lexical" }] }}{ "request": { "auth": "yxoPUlwqm…………pIyEX4H", // requerido. Token de acceso a la API desde el Panel de Control de Pushwoosh "devices_filter": "A(\"XXXXX-XXXXX\") * T(\"City\", EQ, \"Name\")", // requerido. Sintaxis explicada a continuación "send_date": "now", // opcional. AAAA-MM-DD HH:mm O 'now' "ignore_user_timezone": true, // opcional. "timezone": "America/New_York", // opcional. Si se ignora, UTC-0 es el predeterminado para "send_date". // Más información en https://php.net/manual/timezones.php. "campaign": "CAMPAIGN_CODE", // opcional. Código de campaña al que deseas asignar este mensaje push. "content": { // opcional. Objeto O cadena. Usa "wns_content" en su lugar para Windows. "en": "English", "de": "Deutsch" }, "transactionId": "unique UUID", // opcional. 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. "rich_media": "XXXXX-XXXXX", // opcional. Copia el código de Rich Media de la barra de URL de la // página del editor de Rich Media en el Panel de Control de Pushwoosh. "link": "https://google.com", // opcional. Para enlaces profundos (deeplinks) añade "minimize_link": 0 "minimize_link": 0, // opcional. 0 — no minimizar, 2 — bitly. Predeterminado = 2. // El acortador de URL de Google está deshabilitado desde el 30 de marzo de 2019. // Ten en cuenta que los acortadores tienen restricciones // en el número de llamadas. "data": { // opcional. Cadena JSON u objeto JSON. "key": "value" // Se pasará como parámetro "u" en el payload }, // (convertido a cadena JSON). "preset": "XXXXX-XXXXX", // opcional. Código de Preset de Push desde tu Panel de Control. "send_rate": 100, // opcional. Throttling. Los valores válidos van de 100 a 1000 pushes/segundo. "dynamic_content_placeholders": { // opcional. Marcadores de posición para contenido dinámico en lugar de etiquetas de dispositivo. "firstname": "John", "lastname": "Doe" },
// Para guardar el mensaje en la Bandeja de entrada a través de la API, usa "inbox_date" o "inbox_image". // El mensaje se guarda cuando se utiliza al menos uno de estos parámetros. "inbox_image": "Inbox image URL", // opcional. La imagen que se mostrará junto al mensaje. "inbox_date": "2017-02-02" // opcional. Especifica cuándo eliminar un mensaje de la Bandeja de entrada. // El mensaje se eliminará de la Bandeja de entrada a las 00:00:01 UTC de // la fecha especificada, por lo que el día anterior es el último // día que un usuario puede ver el mensaje en su Bandeja de entrada. // Si no se especifica, la fecha de eliminación predeterminada es el siguiente // día después de la fecha de envío. }}{ "request": { "auth": "yxoPUlwqm…………pIyEX4H", // requerido. Token de acceso a la API desde el Panel de Control de Pushwoosh "devices_filter": "FILTER CONDITION", "send_date": "now", // opcional. AAAA-MM-DD HH:mm O 'now' "content": { // opcional. Objeto O cadena. "en": "English", // Usa "wns_content" en su lugar para Windows. "de": "Deutsch" }, "ignore_user_timezone": true, // opcional. "timezone": "America/New_York", // opcional. Si se ignora, UTC-0 es el predeterminado para "send_date". // Más información en https://php.net/manual/timezones.php. "campaign": "CAMPAIGN_CODE", // opcional. Código de campaña al que deseas asignar este mensaje push.
// Parámetros relacionados con iOS "ios_badges": 5, // opcional. Número de insignia de la aplicación de iOS. // Usa "+n" o "-n" para incrementar/decrementar el valor de la insignia en n. "ios_sound": "sound file.wav", // opcional. Nombre del archivo de sonido en el paquete principal de la aplicación. // Si se deja vacío, el dispositivo no producirá sonido // al recibir un push. "ios_sound_off": true, // opcional. Activar/desactivar el sonido establecido por el campo "ios_sound". "ios_ttl": 3600, // opcional. Parámetro de tiempo de vida — vida útil máxima del mensaje en segundos. "ios_silent": 1, // opcional. Habilita notificaciones silenciosas (ignora "sound" y "content"). "ios_category_id": "1", // opcional. ID de categoría de iOS8 de Pushwoosh. "ios_category_custom": "category", // opcional. Categoría APNS personalizada. "ios_root_params": { // opcional. Parámetros de nivel raíz para el diccionario aps. "aps": { "content-available": "0", // opcional. Establece "1" para enviar un push silencioso y "0" para un push regular. "mutable-content": 1 // requerido para adjuntos de medios en iOS10+. }, "attachment": "YOUR_ATTACHMENT_URL", // URL de adjunto de medios de iOS10+. "data": {} // opcional. Datos proporcionados por el usuario, máximo de 4KB }, "apns_trim_content": 1, // opcional. (0|1) Recorta las cadenas de contenido excedentes con puntos suspensivos. "ios_title": { // opcional. Añade título para la notificación push de iOS. "en": "title" }, "ios_subtitle": { // opcional. Añade subtítulo para la notificación push de iOS. "en": "subTitle" }, "ios_content": { // opcional. Añade contenido para la notificación push de iOS. "en": "content" },
// Parámetros relacionados con Android "android_root_params": { // opcional. Objeto clave-valor personalizado. "key": "value" // Parámetros de nivel raíz para los destinatarios del payload de Android. }, "android_sound": "soundfile", // opcional. Sin extensión de archivo. Si se deja vacío, el dispositivo // no producirá sonido al recibir un push. "android_sound_off": true, // opcional. Activar/desactivar el sonido establecido por el campo "android_sound" "android_header": { // opcional. Objeto O cadena. Encabezado de la notificación de Android. "en": "header" }, "android_content": { // opcional. Objeto O cadena. Contenido de la notificación de Android. "en": "content" }, "android_icon": "icon.png", "android_custom_icon": "URL.png", // opcional. URL de ruta completa al archivo de imagen. "android_banner": "URL.png", // opcional. URL de ruta completa al archivo de imagen. "android_badges": 5, // opcional. entero. Número de insignia del icono de la aplicación de Android. // Usa "+n" o "-n" para incrementar/decrementar el valor de la insignia en n. "android_gcm_ttl": 3600, // opcional. Parámetro de tiempo de vida — vida útil máxima del mensaje en segundos. "android_vibration": 0, // opcional. Forzar vibración en Android para pushes de alta prioridad. "android_led": "#rrggbb", // opcional. Color LED hexadecimal, el dispositivo hará su mejor aproximación. "android_priority": -1, // opcional. Establece el parámetro "importance" para dispositivos con Android 8.0 // y superior, así como el parámetro "priority" para dispositivos // con Android 7.1 e inferior. Establece el nivel de interrupción // de un canal de notificación o una notificación particular. // Los valores válidos son -2, -1, 0, 1, 2. "android_delivery_priority": "normal", // opcional. "normal" o "high". Permite la entrega de la notificación // cuando el dispositivo está en modo de ahorro de energía. "android_ibc": "#RRGGBB", // opcional. color de fondo del icono en Lollipop, #RRGGBB, // #AARRGGBB, "red", "black", "yellow", etc. "android_silent": 1, // opcional. 0 o 1. Habilita la notificación silenciosa. // Ignora el sonido y el contenido
// Parámetros relacionados con Amazon "adm_root_params": { // opcional. Objeto clave-valor personalizado "key": "value" }, "adm_sound": "push.mp3", "adm_sound_off": true, // opcional. Activar/desactivar el sonido establecido por el campo "adm_sound" "adm_header": { "en": "Header" }, "adm_content": { "en": "content" }, "adm_icon": "icon.png", "adm_custom_icon": "URL.png", "adm_banner": "URL.png", "adm_ttl": 3600, // opcional. Parámetro de tiempo de vida — la máxima vida útil del mensaje // en segundos. "adm_priority": -1, // opcional. Prioridad del push en el cajón de pushes de Amazon, // los valores válidos son -2, -1, 0, 1 y 2.
// Parámetros relacionados con Mac OS X "mac_badges": 3, "mac_sound": "sound.caf", "mac_sound_off": true, "mac_root_params": { "content-available": 1 }, "mac_ttl": 3600, // opcional. Parámetro de tiempo de vida — vida útil máxima del mensaje en segundos. "mac_title": { // opcional. Añade Título para la notificación push. "en": "title" }, "mac_subtitle": { // opcional. Añade subtítulo para la notificación push de MacOS. "en": "subtitle" }, "mac_content": { // opcional. Añade contenido para la notificación push de MacOS. "en": "content" },
// Parámetros relacionados con Windows "wns_content": { // requerido. Contenido (XML o raw) de la notificación codificado // en base64 de MIME en forma de Objeto O Cadena "en": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9ImF2YWlsYWJsZSIvPg==", "de": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9Im5ld01lc3NhZ2UiLz4=" }, "wns_type": "Badge", // 'Tile' | 'Toast' | 'Badge' | 'Raw' "wns_tag": "myTag", // opcional. Usado en la política de reemplazo de Tile. // Una cadena alfanumérica de no más de 16 caracteres. "wns_cache": 1, // opcional. (1|0) Se traduce en el valor de X-WNS-Cache-Policy. "wns_ttl": 600, // opcional. Tiempo de expiración de la notificación en segundos.
// Parámetros relacionados con Safari "safari_title": { // opcional. Objeto O cadena. Título de la notificación. "en": "title" }, "safari_content": { // opcional. Objeto O cadena. Contenido de la notificación. "en": "content" }, "safari_action": "Click here", // opcional. "safari_url_args": [ // requerido. pero el valor puede estar vacío "firstArgument", "secondArgument" ], "safari_ttl": 3600, // opcional. Parámetro de tiempo de vida — la máxima // vida útil de un mensaje en segundos.
// Parámetros relacionados con Chrome "chrome_title": { // opcional. Puedes especificar el encabezado del mensaje en este parámetro. "en": "title" }, "chrome_content": { // opcional. Puedes especificar el contenido del mensaje en este parámetro. "en": "content" }, "chrome_icon": "icon_URL", // opcional. URL de ruta completa al icono o ruta del archivo de recursos de la extensión "chrome_gcm_ttl": 3600, // opcional. Parámetro de tiempo de vida – vida útil máxima del mensaje en segundos. "chrome_duration": 20, // opcional. Cambia el tiempo de visualización del push de Chrome. Establece en 0 para mostrar el push // hasta que el usuario interactúe con él. "chrome_image": "image_URL", // opcional. URL a una imagen grande "chrome_root_params": { // opcional. Establece parámetros específicos para los mensajes enviados a Chrome. "key": "value" }, "chrome_button_text1": "text1", // opcional. "chrome_button_url1": "button1_URL", // opcional. Se ignora si chrome_button_text1 no está establecido. "chrome_button_text2": "text2", // opcional. "chrome_button_url2": "button2_url", // opcional. Se ignora si chrome_button_text2 no está establecido.
// Parámetros relacionados con Firefox "firefox_title": { // opcional. Objeto O cadena. Puedes especificar el encabezado del mensaje aquí. "en": "title" }, "firefox_content": { // opcional. Objeto O cadena. Puedes especificar el contenido del mensaje aquí. "en": "content" }, "firefox_icon": "icon_URL", // opcional. URL de ruta completa al icono o ruta // al archivo en los recursos de la extensión. "firefox_root_params": { // opcional. Establece parámetros específicos para los mensajes enviados a Firefox. "key": "value" } }}Los conceptos básicos son muy simples: todos los filtros se realizan sobre los 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 objetivo. 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 – ningún valor especificado asignado 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, "hace 90 días")
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 pushes. 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 | Usado para 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", // requerido. Token de acceso a la API desde el Panel de Control de Pushwoosh "source": null, // opcional. Los valores posibles son nulo, "CP", "API", "GeoZone", // "RSS", "AutoPush", "A/B Test" "searchBy": "applicationCode", // opcional. Los valores posibles son "", "notificationID", // "notificationCode", "applicationCode", "campaignCode" "value": "C8717-703F2", // opcional. Valor de búsqueda establecido según el campo "searchBy". "lastNotificationID": 0, // opcional. Usado para paginación. Último messageId de la // llamada /getPushHistory anterior. Consulta los detalles a continuación. "limitMessages": 1000 // opcional. Valor posible de 10 a 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 (fecha: %Y-%m-%d %H:%M:%S)sendDate -- string (fecha: %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 (obsoleto) -- list (JSON) | nulldata -- dict (JSON) | nullopen -- dict [dict [string: int]] | "" Ejemplo: 'open': {'AAAAA-BBBBB': {'IOS': 1, 'ANDROID': 1}}sent -- dict [dict [string: int]] | "" Ejemplo: 'sent': {'AAAAA-BBBBB': {'IOS': 10, 'ANDROID': 10}}ctr -- dict [string: int] | "" Ejemplo: {'AAAAA-BBBBB': 1}errors -- dict [string: int] | "" Ejemplo: {'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", // requerido. Token de acceso a la API desde el Panel de Control de Pushwoosh "message": "xxxx-xxxxxxx-xxxxxx" // requerido. El código de mensaje obtenido en la respuesta de /createMessage }}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 |