Messages API
createMessage
Section titled “createMessage”POST https://api.wavesend.ru/json/1.3/createMessage
Создает новое push-уведомление.
Тело запроса
Section titled “Тело запроса”| Имя | Тип | Описание |
|---|---|---|
| auth* | string | API access token из Wavesend Control Panel. |
| application* | string | Application code Wavesend. |
| notifications* | array | Массив JSON с параметрами сообщения. Подробности смотрите в примере запроса ниже. |
{ "status_code": 200, "status_message": "OK", "response": { "Messages": [ "C3F8-C3863ED4-334AD4F1" ] }}Пример запроса
Section titled “Пример запроса”{ "request": { "application": "XXXXX-XXXXX", // обязательный. Application code Wavesend. "auth": "yxoPUlwqm…………pIyEX4H", // обязательный. API access token из Wavesend Control Panel. "notifications": [{ "send_date": "now", // опционально. YYYY-MM-DD HH:mm ИЛИ 'now' "content": { // опционально. объект ИЛИ строка. "en": "English", // Для Windows используйте "wns_content". "fr": "French" }, "title": { // опционально. объект ИЛИ строка. "en": "Title", // Игнорируется, если указаны заголовки для конкретных платформ "fr": "Titre" // 'ios_title', 'android_header' и т. д. }, // см. примеры параметров для конкретных платформ ниже. "subtitle":{ // опционально. объект ИЛИ строка. "en": "Subtitle", // Игнорируется, если указаны заголовки для конкретных платформ "fr": "Sous-titre" // 'ios_subtitle' и т. д. }, // см. примеры параметров для конкретных платформ ниже. "ignore_user_timezone": true, // опционально. "timezone": "America/New_York", // опционально. Если не указано, для "send_date" по умолчанию используется UTC-0. // Список поддерживаемых часовых поясов см. на // https://php.net/manual/timezones.php. "campaign": "CAMPAIGN_CODE", // опционально. Код кампании, к которой вы хотите // привязать это push-сообщение. "geozone": { // опционально. Отправить в Geozone "lat": 22.22, "lng": 33.33, "range": 110 }, "rich_media": "XXXXX-XXXXX", // опционально. Скопируйте код Rich Media из адресной строки // на странице редактора Rich Media в Wavesend Control Panel. "link": "https://google.com", // опционально. Для deeplinks добавьте "minimize_link": 0 "minimize_link": 0, // опционально. 0 — не сокращать, 2 — bitly. По умолчанию = 2. // Обратите внимание, что у сервисов сокращения ссылок есть ограничения // на количество вызовов. "data": { // опционально. Строка JSON или объект JSON, будет передан как "key": "value" // параметр "u" в полезной нагрузке (преобразованный в строку JSON). }, "transactionId": "unique UUID", // опционально. Уникальный идентификатор сообщения для предотвращения дублирования // в случае проблем с сетью. Хранится на стороне // Wavesend в течение 5 минут. "platforms": [ // опционально. 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", // опционально. Код Push Preset из вашей Control Panel. // Если в запросе передаются конкретные параметры, // они переопределяют параметры пресета. "send_rate": 100, // опционально. Регулирование скорости. Допустимые значения от 100 до 1000 push-уведомлений в секунду. "send_rate_avoid": true, // опционально. Если установлено значение true — на это конкретное push-уведомление // не будет распространяться лимит по скорости отправки.
// Связано с шаблонами, для получения дополнительной информации обратитесь к руководству по шаблонизатору "template_bindings": { // опционально. "TemplatePlaceholder": "Value" }, "dynamic_content_placeholders": { // опционально. Плейсхолдеры для динамического контента вместо тегов устройства. "firstname": "John", "lastname": "Doe" },
// Параметры Frequency capping. Убедитесь, что глобальный Frequency capping настроен в Control Panel. "capping_days": 30, // опционально. Количество дней для Frequency capping (максимум 30 дней) "capping_count": 10, // опционально. Максимальное количество push-уведомлений, которое может быть отправлено из // определенного приложения на конкретное устройство в течение периода // 'capping_days'. Если созданное сообщение превышает лимит // 'capping_count' для устройства, оно не // будет отправлено на это устройство. "capping_exclude": true, // опционально. Если установлено значение true, это push-уведомление не будет // учитываться при подсчете для будущих push-уведомлений. "capping_avoid": true, // опционально. Если установлено значение true, Frequency capping не будет применяться к // этому конкретному push-уведомлению.
// Чтобы сохранить сообщение в Inbox через API, используйте "inbox_date" или "inbox_image". // Сообщение сохраняется, если используется хотя бы один из этих параметров. "inbox_date": "2017-02-02", // опционально. Укажите, когда удалить сообщение из Inbox. // Сообщение будет удалено из Inbox в 00:00:01 UTC // указанной даты, поэтому предыдущая дата — это // последний день, когда пользователь может видеть сообщение в своем Inbox. // Если не указано, по умолчанию сообщение удаляется на // следующий день после даты отправки. "inbox_image": "Inbox image URL", // опционально. Изображение, которое будет показано рядом с сообщением. "inbox_days": 5, // опционально. Укажите, когда удалить сообщение из // Inbox (срок жизни сообщения в Inbox в днях). // Может использоваться вместо параметра "inbox_date". // До 30 дней.
"devices": [ // опционально. Укажите токены или HWID для отправки целевых "hwid_XXXX" // push-уведомлений. Не более 1000 токенов/HWID в ], // массиве. Если установлено, сообщение будет отправлено только // устройствам из списка. Application Group для списка устройств // не допускается. Push-токены iOS могут быть только в нижнем регистре.
// Push-уведомления, ориентированные на пользователя "users": [ // опционально. Если установлено, сообщение будет доставлено только "user_XXXX" // указанным User ID (устанавливается через вызов /registerUser). ], // Если указано вместе с параметром devices, // последний будет проигнорирован. Не более 1000 // User ID в массиве. Application Group для списка пользователей // не допускается.
// Фильтры и условия "filter": "FILTER_NAME", // опционально. "conditions": [ // опционально. См. примечание ниже. "Country", "EQ", "France", "Language", "EQ", "en" ], "conditions_operator": "AND" // опционально. Логический оператор для массивов условий. // Возможные значения: AND | OR. По умолчанию AND. }] }}Параметры для конкретных платформ
Section titled “Параметры для конкретных платформ”Параметры iOS
Section titled “Параметры iOS”{ "request": { "application": "12345-67891", // обязательный. Application code Wavesend "auth": "yxoPUlwqm…………pIyEX4H", // обязательный. API access token из Wavesend Control Panel "notifications": [{ "ios_title": { // опционально. Объект ИЛИ строка. Добавляет заголовок для push-уведомления на iOS. "en": "title" }, "ios_subtitle": { // опционально. Объект ИЛИ строка. Добавляет подзаголовок для push-уведомления на iOS. "en": "subtitle" }, "ios_content": { // опционально. Объект ИЛИ строка. Добавляет контент для push-уведомления на iOS. "en": "content" }, "ios_badges": 5, // опционально. Число на иконке приложения iOS. // Используйте "+n" или "-n" для увеличения/уменьшения значения на n. "ios_sound": "sound file.wav", // опционально. Имя звукового файла в основном бандле приложения. // Если оставить пустым, устройство воспроизведет стандартный системный звук. "ios_sound_off": true, // опционально. Включает/выключает звук, установленный полем "ios_sound". "ios_ttl": 3600, // опционально. Параметр времени жизни — максимальное время жизни сообщения в секундах. "ios_silent": 1, // опционально. Включает тихие уведомления (игнорирует "sound" и "content"). "ios_category_id": "1", // опционально. ID категории iOS 8 из Wavesend. "ios_root_params": { // опционально. Параметры корневого уровня для словаря aps. "aps": { "content-available": "0", // опционально. Установите "1" для отправки тихого push-уведомления и "0" для обычного. "mutable-content": 1 // обязательно для медиа-вложений в iOS 10+. }, "data": {} // опционально. Данные, предоставленные пользователем, макс. 4 КБ. }, "ios_attachment": "URL", // опционально. Вставить медиа-контент в уведомление. "ios_thread_id": "some thread id", // опционально. Идентификатор для группировки связанных уведомлений. // Сообщения с одинаковым ID потока будут сгруппированы // на экране блокировки и в Центре уведомлений. "ios_critical": true, // опционально. Помечает уведомление iOS как критическое оповещение, // которое воспроизводит звук, даже если на устройстве отключен звук или // включен режим "Не беспокоить". "ios_category_custom": "category", // опционально. Пользовательская категория APNS. "ios_interruption_level": "active", // опционально. Одно из "passive", "active", "time-sensitive", // "critical". Указывает на важность и // время доставки уведомления. Подробности см. в // руководстве по однократным push-уведомлениям. "apns_trim_content": 1 // опционально. (0|1) Обрезает слишком длинные строки контента многоточием. }] }}Параметры Android
Section titled “Параметры Android”{ "request": { "application": "12345-67891", // обязательный. Application code Wavesend "auth": "yxoPUlwqm…………pIyEX4H", // обязательный. API access token из Wavesend Control Panel "notifications": [{ "android_header": { // опционально. Заголовок уведомления Android. "en": "header" }, "android_content": { // опционально. Контент уведомления Android. "en": "content" }, "android_root_params": { // опционально. Пользовательский объект ключ-значение. "key": "value", // Параметры корневого уровня для получателей полезной нагрузки Android. "CancelID": 12345678 // опционально. Отменяет push-уведомление с }, // указанным ID сообщения (получите ID из Message History) "android_sound": "soundfile", // опционально. Без расширения файла. Если оставить пустым, // устройство воспроизведет стандартный системный звук. "android_sound_off": true, // опционально. Включает/выключает звук, установленный полем "android_sound". "android_icon": "icon.png", // опционально. "android_custom_icon": "URL.png", // опционально. Полный URL к файлу изображения. "android_banner": "URL.png", // опционально. Полный URL к файлу изображения. "android_badges": 5, // опционально. Число на иконке приложения Android. // Используйте "+n" или "-n" для увеличения/уменьшения значения на n. "android_gcm_ttl": 3600, // опционально. Параметр времени жизни — максимальное время жизни сообщения в секундах. "android_vibration": 0, // опционально. Принудительная вибрация Android для высокоприоритетных push-уведомлений. "android_led": "#rrggbb", // опционально. Шестнадцатеричный код цвета светодиода, устройство постарается максимально точно его воспроизвести. "android_priority": -1, // опционально. Устанавливает параметр "importance" для устройств с // Android 8.0 и выше, а также параметр "priority" // для устройств с Android 7.1 и ниже. Устанавливает // уровень прерывания канала уведомлений или конкретного // уведомления. Допустимые значения: -2, -1, 0, 1, 2. "android_delivery_priority": "normal", // опционально. "normal" или "high". // Включает доставку уведомлений, когда // устройство находится в режиме энергосбережения. "android_ibc": "#RRGGBB", // опционально. цвет фона иконки на Lollipop, #RRGGBB, // #AARRGGBB, "red", "black", "yellow" и т. д. "android_silent": 1, // опционально. 0 или 1. Включить тихое уведомление. // Игнорирует звук и контент "android_group_id": "123" // опционально. Идентификатор для группировки связанных уведомлений. Сообщения с // одинаковым ID потока будут сгруппированы // в Центре уведомлений. }] }}Параметры Huawei
{ "request": { "application": "12345-67891", // обязательный. Application code Wavesend "auth": "yxoPUlwqm…………pIyEX4H", // обязательный. API access token из Wavesend Control Panel "notifications": [{ "huawei_android_header": { // опционально. Объект ИЛИ строка. Заголовок уведомления "en": "header" }, "huawei_android_content": { // опционально. Объект ИЛИ строка. Контент уведомления "en": "content" }, "huawei_android_badges": true, // опционально. "huawei_android_silent": 0, // опционально. 0 или 1. Включить тихое уведомление. // Игнорирует звук и контент "huawei_android_icon": "URL.png", // опционально. "huawei_android_led": "#FF0011", // опционально. Шестнадцатеричный код цвета светодиода, устройство постарается максимально точно его воспроизвести "huawei_android_vibration": 1, // опционально. Принудительная вибрация Huawei для высокоприоритетных push-уведомлений "huawei_android_sound": "sound.wav", // опционально. Если оставить пустым, устройство воспроизведет // стандартный системный звук "huawei_android_sound_off": true, // опционально. Включает/выключает звук, установленный // полем "huawei_android_sound" "huawei_android_custom_icon": "URL.png", // опционально "huawei_android_gcm_ttl": 2400, // опционально. Параметр времени жизни - максимальное // время жизни сообщения в секундах "huawei_android_banner": "URL.png", // опционально. Полный URL-путь к файлу изображения "huawei_android_root_params": { // опционально. Пользовательский объект ключ-значение. "key": "value" // Параметры корневого уровня для получателей полезной нагрузки Huawei. }, "huawei_android_priority": 0, // опционально. Допустимые значения: -2, -1, 0, 1, 2 "huawei_android_ibc": "#0011AA", // опционально. Цвет фона иконки на Lollipop "huawei_android_lockscreen": 1, // опционально "huawei_android_delivery_priority": "normal", // опционально. "normal" или "high". Включает доставку // уведомлений в режиме энергосбережения "huawei_android_group_id": "group_id" // опционально. Идентификатор для группировки связанных уведомлений }] }}Параметры Safari
Section titled “Параметры Safari”{ "request": { "application": "12345-67891", // обязательный. Application code Wavesend "auth": "yxoPUlwqm…………pIyEX4H", // обязательный. API access token из Wavesend Control Panel "notifications": [{ "safari_url_args": [ // обязательно, но значение может быть пустым "firstArgument", "secondArgument" ], "safari_title": { // опционально. Объект ИЛИ строка. Заголовок уведомления. "en": "content" }, "safari_content": { // опционально. Объект ИЛИ строка. Контент уведомления. "en": "content" }, "safari_action": "Click here", // опционально. "safari_ttl": 3600 // опционально. Параметр времени жизни — максимальное // время жизни сообщения в секундах. }] }}Параметры Chrome
Section titled “Параметры Chrome”{ "request": { "application": "12345-67891", // обязательный. Application code Wavesend "auth": "yxoPUlwqm…………pIyEX4H", // обязательный. API access token из Wavesend Control Panel "notifications": [{ "chrome_title": { // опционально. Объект ИЛИ строка. Вы можете указать заголовок "en": "title" // сообщения в этом параметре. }, "chrome_content": { // опционально. Объект ИЛИ строка. Вы можете указать контент "en": "content" // сообщения в этом параметре. }, "chrome_icon": "URL.png", // опционально. Полный URL к иконке или путь к файлу в ресурсах расширения "chrome_gcm_ttl": 3600, // опционально. Параметр времени жизни – максимальное время жизни сообщения в секундах. "chrome_duration": 20, // опционально. макс 50 секунд. Изменяет время отображения push-уведомления в Chrome. // Установите 0 для отображения push-уведомления до тех пор, пока пользователь не взаимодействует с ним. "chrome_image": "image_URL", // опционально. URL к большому изображению. "chrome_root_params": { // опционально. Установите параметры, специфичные для сообщений, отправляемых в Chrome. "key": "value" }, "chrome_button_text1": "text1", // опционально "chrome_button_url1": "button1_URL", // опционально. Игнорируется, если chrome_button_text1 не установлен. "chrome_button_text2": "text2", // опционально "chrome_button_url2": "button2_url" // опционально. Игнорируется, если chrome_button_text2 не установлен. }] }}Параметры Firefox
Section titled “Параметры Firefox”{ "request": { "application": "12345-67891", // обязательный. Application code Wavesend "auth": "yxoPUlwqm…………pIyEX4H", // обязательный. API access token из Wavesend Control Panel "notifications": [{ "firefox_title": { // опционально. Объект ИЛИ строка. Здесь вы можете указать заголовок сообщения. "en": "title" }, "firefox_content": { // опционально. Объект ИЛИ строка. Здесь вы можете указать контент сообщения. "en": "content" }, "firefox_icon": "URL.png", // опционально. Полный URL-путь к иконке или путь к // файлу в ресурсах расширения. "firefox_root_params": { // опционально. Установите параметры, специфичные для сообщений, отправляемых в Firefox. "key": "value" } }] }}Параметры Amazon
Section titled “Параметры Amazon”{ "request": { "application": "12345-67891", // обязательный. Application code Wavesend "auth": "yxoPUlwqm…………pIyEX4H", // обязательный. API access token из Wavesend Control Panel "notifications": [{ "adm_header": { // опционально. Объект ИЛИ строка. Здесь вы можете указать заголовок сообщения. "en": "header" }, "adm_content": { // опционально. Объект ИЛИ строка. Здесь вы можете указать контент сообщения. "en": "content" }, "adm_root_params": { // опционально. Пользовательский объект ключ-значение "key": "value" }, "adm_sound": "push.mp3", // опционально. "adm_sound_off": true, // опционально. Включает/выключает звук, установленный полем "adm_sound". "adm_icon": "icon.png", // опционально. Полный URL к иконке. "adm_custom_icon": "URL.png", // опционально. "adm_banner": "URL.png", // опционально. "adm_ttl": 3600, // опционально. Параметр времени жизни — максимальное // время жизни сообщения в секундах. "adm_priority": -1 // опционально. Приоритет push-уведомления в панели push-уведомлений Amazon, // допустимые значения: -2, -1, 0, 1 и 2. }] }}Параметры Mac OS X
Section titled “Параметры Mac OS X”{ "request": { "application": "12345-67891", // обязательный. Application code Wavesend "auth": "yxoPUlwqm…………pIyEX4H", // обязательный. API access token из Wavesend Control Panel "notifications": [{ "mac_title": { // опционально. Объект ИЛИ строка. Добавляет заголовок для push-уведомления. "en": "title" }, "mac_subtitle": { // опционально. Добавляет подзаголовок для push-уведомления. "en": "subtitle" }, "mac_content": { // опционально. Добавляет контент для push-уведомления. "en": "content" }, "mac_badges": 3, // опционально. "mac_sound": "sound.caf", // опционально. "mac_sound_off": true, // опционально. Включает/выключает звук, установленный полем "mac_sound". "mac_root_params": { // опционально. "content-available": 1 }, "mac_ttl": 3600 // опционально. Параметр времени жизни — максимальное время жизни сообщения в секундах. }] }}Параметры Windows
Section titled “Параметры Windows”{ "request": { "application": "12345-67891", // обязательный. Application code Wavesend "auth": "yxoPUlwqm…………pIyEX4H", // обязательный. API access token из Wavesend Control Panel "notifications": [{ "wns_content": { // обязательно. Контент (XML или raw) уведомления, закодированный в base64 MIME // в виде объекта ИЛИ строки "en": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9ImF2YWlsYWJsZSIvPg==", "de": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9Im5ld01lc3NhZ2UiLz4=" }, "wns_type": "Badge", // опционально. 'Tile' | 'Toast' | 'Badge' | 'Raw' "wns_tag": "myTag", // опционально. Используется в политике замены Tile. // Буквенно-цифровая строка не более 16 символов. "wns_cache": 1, // опционально. (1|0) Преобразуется в значение X-WNS-Cache-Policy. "wns_ttl": 600 // опционально. Время истечения срока действия уведомления в секундах. }] }}Ответ:
| Код состояния HTTP | status_code | Описание |
|---|---|---|
| 200 | 200 | Сообщение успешно создано |
| 200 | 210 | Ошибка аргумента. См. status_message для получения дополнительной информации |
| 400 | N/A | Неверно сформированная строка запроса |
| 500 | 500 | Внутренняя ошибка |
Трассировка сообщений API
Section titled “Трассировка сообщений API”В целях балансировки нагрузки мы не храним сообщения, отправленные через API с параметром “devices”, который содержит менее 10 устройств в массиве. Из-за этого такие сообщения не будут отображаться в вашей Message History.
Чтобы просматривать отчеты о push-уведомлениях на этапе тестирования, используйте трассировку сообщений API. Включение этой опции ON позволяет преодолеть это ограничение на 1 час и сохранять такие push-уведомления в Message History. Трассировка сообщений API автоматически отключается через 1 час.
Трассировку сообщений API можно активировать на странице Message History, нажав Start API messaging tracing в правом верхнем углу.
Условия по тегам
Section titled “Условия по тегам”Каждое условие тега представляет собой массив вида [tagName, operator, operand], где
- tagName: имя тега
- operator: “EQ” | “IN” | “NOTEQ” | “NOTIN” | “LTE” | “GTE” | “BETWEEN” | “NOTSET” | “ANY”
- operand: строка | целое число | массив | дата
Описание операторов
Section titled “Описание операторов”- EQ: значение тега равно операнду;
- IN: значение тега пересекается с операндом (операнд всегда должен быть массивом);
- NOTEQ: значение тега не равно операнду;
- NOTIN: значение тега не пересекается с операндом (операнд всегда должен быть массивом);
- GTE: значение тега больше или равно операнду;
- LTE: значение тега меньше или равно операнду;
- BETWEEN: значение тега больше или равно минимальному значению операнда, но меньше или равно максимальному значению операнда (операнд всегда должен быть массивом);
- NOTSET: тег не установлен. Операнд не учитывается;
- ANY: тег имеет любое значение. Операнд не учитывается.
Строковые теги
Section titled “Строковые теги”Допустимые операторы: EQ, IN, NOTEQ, NOTIN, NOTSET, ANY Допустимые операнды:
- EQ, NOTEQ: операнд должен быть строкой;
- IN, NOTIN: операнд должен быть массивом строк, например
["value 1", "value 2", "value N"]; - NOTSET: тег не установлен. Операнд не учитывается;
- ANY: тег имеет любое значение. Операнд не учитывается.
Целочисленные теги
Section titled “Целочисленные теги”Допустимые операторы: EQ, IN, NOTEQ, NOTIN, BETWEEN, GTE, LTE, NOTSET, ANY Допустимые операнды:
- EQ, NOTEQ, GTE, LTE: операнд должен быть целым числом;
- IN, NOTIN: операнд должен быть массивом целых чисел, например
[value 1, value 2, value N]; - BETWEEN: операнд должен быть массивом целых чисел, например
[min_value, max_value]; - NOTSET: тег не установлен. Операнд не учитывается;
- ANY: тег имеет любое значение. Операнд не учитывается.
Теги даты
Section titled “Теги даты”Допустимые операторы: EQ, IN, NOTEQ, NOTIN, BETWEEN, GTE, LTE, NOTSET, ANY Допустимые операнды:
"YYYY-MM-DD 00:00"(строка)- временная метка unix
1234567890(целое число) "N days ago"(строка) для операторов EQ, BETWEEN, GTE, LTE
Логические теги
Section titled “Логические теги”Допустимые операторы: EQ, NOTSET, ANY
Допустимые операнды: 0, 1, true, false
Теги-списки
Section titled “Теги-списки”Допустимые операторы: IN, NOTIN, NOTSET, ANY
Допустимые операнды: операнд должен быть массивом строк, например ["value 1", "value 2", "value N"].
Сниппеты /createMessage
Section titled “Сниппеты /createMessage”Примеры запросов /createMessage:
#!/bin/bash
#Использованиеif [ ! -n "$1" ] || [ ! -n "$2" ]then echo "`basename $0` использование: api_token appid message"; exit 1;fi;MESSAGE="$3";if [ -z "$3" ]thenMESSAGE='Один push, чтобы править всеми!'fi;
echo -e "Ответ:"curl --data-binary "{\"request\": {\"application\":\"$2\", \"auth\":\"$1\", \"notifications\": [{ \"send_date\": \"now\", \"content\": \"$MESSAGE\" }] }}" \-H "Content-type: application/json" \"https://api.wavesend.ru/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.wavesend.ru/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://wavesend.ru/' ) ) ));-module(pushwoosh).-export([run/0, stop/0, sendMessage/1]).%% Аргумент sendMessage: текст сообщения %%
%% Аутентификация и App_id %%-define(PW_AUTH, "YOUR_AUTH_TOKEN").-define(PW_APPLICATION, "YOUR_PUSHWOOSH_APP_CODE").
%% Запуск %%run() -> application:start(unicode), application:start(crypto), application:start(public_key), application:start(ssl), application:start(inets), %% Опции детализации HTTP-клиента: flase, verbose, debug httpc:set_options([{verbose, false}]).stop() -> application:stop(ssl), application:stop(public_key), application:stop(crypto), application:stop(inets).%% Войны JSON !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.wavesend.ru/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
#- Документация по Wavesend API https://www.wavesend.ru/programming-push-notification/pushwoosh-push-notification-remote-api/ #- Здесь два метода: # - PushNotification.new.notify_all(message) Уведомляет всех с одинаковыми параметрами # - PushNotification.new.notify_devices(notification_options = {}) Уведомляет определенные устройства с настраиваемыми параметрами
include HTTParty #Убедитесь, что гем HTTParty объявлен в вашем Gemfile https://github.com/jnunemaker/httparty default_params :output => 'json' format :json
def initialize #- Измените на ваши настройки @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 = {}) #- Параметры по умолчанию, раскомментируйте :data или :devices, если необходимо default_notification_options = { # YYYY-MM-DD HH:mm ИЛИ 'now' :send_date => "now", # Объект( language1: 'content1', language2: 'content2' ) ИЛИ строка :content => { :fr => "Test", :en => "Test" }, # Строка JSON или объект JSON "custom": "json data" #:data => { # :custom_data => value #}, # опустите это поле (push-уведомление будет доставлено на все устройства для приложения), или предоставьте список ID устройств #:devices => {} }
#- Слияние со специфическими параметрами final_notification_options = default_notification_options.merge(notification_options)
#- Формирование финального вызова options = @auth.merge({:notifications => [final_notification_options]}) options = {:request => options} #- Выполнение вызова POST API с помощью HTTPARTY - :body => options.to_json позволяет нам отправить json как объект, а не как строку response = self.class.post("https://api.wavesend.ru/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.wavesend.ru/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://wavesend.ru/"));
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: # Для Python 3.0 и новее from urllib.request import urlopen from urllib.request import Requestexcept ImportError: # Возврат к urllib2 в Python 2 from urllib2 import urlopen from urllib2 import Request
def pw_call(method, data): url = 'https://api.wavesend.ru/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('Wavesend 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://wavesend.ru' } ] } )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://wavesend.ru/"), 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.wavesend.ru/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.wavesend.ru/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://wavesend.ru", }, }, }, } jsonRequest, _ := json.Marshal(requestData) requestString := string(jsonRequest) fmt.Println("Request body: " + requestString)
pwCall("createMessage", jsonRequest)}$.ajax({ type: "POST", url: "https://api.wavesend.ru/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
Section titled “deleteMessage”POST https://api.wavesend.ru/json/1.3/deleteMessage
Удаляет запланированное сообщение.
Тело запроса
Section titled “Тело запроса”| Имя | Тип | Описание |
|---|---|---|
| auth* | string | API access token из Wavesend Control Panel. |
| message* | string | Код сообщения, полученный в запросе /createMessage. |
{ "status_code": 200, "status_message": "OK"}{ "request":{ "auth": "yxoPUlwqm…………pIyEX4H", // обязательный. API access token из Wavesend Control Panel "message": "xxxx-xxxxxxx-xxxxxx" // обязательный. Код сообщения, полученный в /createMessage }}Коды статусов:
| Код состояния HTTP | status_code | Описание |
|---|---|---|
| 200 | 200 | Сообщение успешно удалено |
| 200 | 210 | Ошибка аргумента. См. status_message для получения дополнительной информации |
| 400 | N/A | Неверно сформированная строка запроса |
| 500 | 500 | Внутренняя ошибка |
<?php// see https://gomoob.github.io/php-pushwoosh/delete-message.htmluse Gomoob\Pushwoosh\Model\Request\DeleteMessageRequest;
// создает экземпляр запроса$request = DeleteMessageRequest::create()->setMessage('MESSAGE_CODE');
// вызов веб-сервиса '/deleteMessage'$response = $pushwoosh->deleteMessage($request);
if($response->isOk()) { print 'Отлично, мое сообщение удалено!';} else { print 'Упс, удаление не удалось :-('; print 'Код статуса: ' . $response->getStatusCode(); print 'Сообщение статуса: ' . $response->getStatusMessage();}getMessageDetails
Section titled “getMessageDetails”POST https://api.wavesend.ru/json/1.3/getMessageDetails
Получает детали сообщения.
Тело запроса
Section titled “Тело запроса”| Имя | Тип | Описание |
|---|---|---|
| auth* | string | API access token из Wavesend Control Panel. |
| message* | string | Код сообщения или ID сообщения. |
{ "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", // обязательный. API access token из Wavesend Control Panel "message": "xxxx-xxxxxxx-xxxxxx" // обязательный. код сообщения или ID сообщения }}createTargetedMessage
Section titled “createTargetedMessage”POST https://api.wavesend.ru/json/1.3/createTargetedMessage
Создает новое целевое push-уведомление.
Тело запроса
Section titled “Тело запроса”| Имя | Тип | Описание |
|---|---|---|
| auth* | string | API access token из Wavesend Control Panel. |
| devices_filter* | string | См. примечание ниже. |
| send_date* | string | YYYY-MM-DD HH:mm или ‘now’. |
| ignore_user_timezone | boolean | Если не указано, для “send_date” по умолчанию используется UTC-0. |
| timezone | string | Если не указано, для “send_date” по умолчанию используется UTC-0. |
| campaign | string | Код кампании, к которой вы хотите привязать это push-сообщение. |
| content* | string | Содержимое уведомления. Подробности см. в примере запроса. |
| transactionId | string | Уникальный идентификатор сообщения для предотвращения дублирования сообщений в случае проблем с сетью. Хранится на стороне Wavesend в течение 5 минут. |
| link | string | Ссылка, которая будет открыта после того, как пользователь откроет push-сообщение. |
| minimize_link | integer | 0 — не сокращать, 2 — bit.ly. По умолчанию = 2. |
| data | object | Строка JSON или объект JSON. Будет передан как параметр “u” в полезной нагрузке (преобразованный в строку JSON). |
| preset | string | Код Preset. |
| send_rate | integer | Регулирование скорости. Допустимые значения от 100 до 1000 push-уведомлений в секунду. |
| inbox_date | string | Укажите, когда удалить сообщение из Inbox. |
| inbox_image | string | URL изображения, которое будет показано рядом с сообщением в Inbox. |
{ "status_code": 200, "status_message": "OK", "response": { "messageCode": "97B0-C7473871-2FBDFDC6" }}Запрос не может быть выполнен из-за синтаксической ошибки.Больше примеров ответов:
{ "status_code": 210, "status_message": "Произошли ошибки при компиляции фильтра", "response": { "errors": [{ "message": "Неверная спецификация набора тегов. Ожидалось \")\".", "type": "syntax" }] }}{ "status_code": 210, "status_message": "Произошли ошибки при компиляции фильтра", "response": { "errors": [{ "message": "Приложение \"11111-11111\" не найдено", "type": "semantic", "near": "\"11111-11111\"" }] }}{ "status_code": 210, "status_message": "Произошли ошибки при компиляции фильтра", "response": { "errors": [{ "message": "Недопустимый символ \"/\" в позиции 1:19", "type": "lexical" }] }}{ "request": { "auth": "yxoPUlwqm…………pIyEX4H", // обязательный. API access token из Wavesend Control Panel "devices_filter": "A(\"XXXXX-XXXXX\") * T(\"City\", EQ, \"Name\")", // обязательный. Синтаксис объяснен ниже "send_date": "now", // опционально. YYYY-MM-DD HH:mm ИЛИ 'now' "ignore_user_timezone": true, // опционально. "timezone": "America/New_York", // опционально. Если не указано, для "send_date" по умолчанию используется UTC-0. // Подробнее: https://php.net/manual/timezones.php. "campaign": "CAMPAIGN_CODE", // опционально. Код кампании, к которой вы хотите привязать это push-сообщение. "content": { // опционально. Объект ИЛИ строка. Для Windows используйте "wns_content". "en": "English", "de": "Deutsch" }, "transactionId": "unique UUID", // опционально. Уникальный идентификатор сообщения для предотвращения дублирования сообщений // в случае проблем с сетью. Хранится на стороне // Wavesend в течение 5 минут. "rich_media": "XXXXX-XXXXX", // опционально. Скопируйте код Rich Media из адресной строки // на странице редактора Rich Media в Wavesend Control Panel. "link": "https://google.com", // опционально. Для deeplinks добавьте "minimize_link": 0 "minimize_link": 0, // опционально. 0 — не сокращать, 2 — bitly. По умолчанию = 2. // Сервис сокращения URL-адресов Google отключен с 30 марта 2019 года. // Обратите внимание, что у сервисов сокращения ссылок есть ограничения // на количество вызовов. "data": { // опционально. Строка JSON или объект JSON. "key": "value" // Будет передан как параметр "u" в полезной нагрузке }, // (преобразованный в строку JSON). "preset": "XXXXX-XXXXX", // опционально. Код Push Preset из вашей Control Panel. "send_rate": 100, // опционально. Регулирование скорости. Допустимые значения от 100 до 1000 push-уведомлений в секунду. "dynamic_content_placeholders": { // опционально. Плейсхолдеры для динамического контента вместо тегов устройства. "firstname": "John", "lastname": "Doe" },
// Чтобы сохранить сообщение в Inbox через API, используйте "inbox_date" или "inbox_image". // Сообщение сохраняется, если используется хотя бы один из этих параметров. "inbox_image": "Inbox image URL", // опционально. Изображение, которое будет показано рядом с сообщением. "inbox_date": "2017-02-02" // опционально. Укажите, когда удалить сообщение из Inbox. // Сообщение будет удалено из Inbox в 00:00:01 UTC // указанной даты, поэтому предыдущая дата — это последний // день, когда пользователь может видеть сообщение в своем Inbox. // Если не указано, по умолчанию сообщение удаляется на следующий // день после даты отправки. }}{ "request": { "auth": "yxoPUlwqm…………pIyEX4H", // обязательный. API access token из Wavesend Control Panel "devices_filter": "FILTER CONDITION", "send_date": "now", // опционально. YYYY-MM-DD HH:mm ИЛИ 'now' "content": { // опционально. Объект ИЛИ строка. "en": "English", // Для Windows используйте "wns_content". "de": "Deutsch" }, "ignore_user_timezone": true, // опционально. "timezone": "America/New_York", // опционально. Если не указано, для "send_date" по умолчанию используется UTC-0. // Подробнее: https://php.net/manual/timezones.php. "campaign": "CAMPAIGN_CODE", // опционально. Код кампании, к которой вы хотите привязать это push-сообщение.
// Параметры, связанные с iOS "ios_badges": 5, // опционально. Число на иконке приложения iOS. // Используйте "+n" или "-n" для увеличения/уменьшения значения на n. "ios_sound": "sound file.wav", // опционально. Имя звукового файла в основном бандле приложения. // Если оставить пустым, устройство не будет издавать звук // при получении push-уведомления. "ios_sound_off": true, // опционально. Включает/выключает звук, установленный полем "ios_sound". "ios_ttl": 3600, // опционально. Параметр времени жизни — максимальное время жизни сообщения в секундах. "ios_silent": 1, // опционально. Включает тихие уведомления (игнорирует "sound" и "content"). "ios_category_id": "1", // опционально. ID категории iOS 8 из Wavesend. "ios_category_custom": "category", // опционально. Пользовательская категория APNS. "ios_root_params": { // опционально. Параметры корневого уровня для словаря aps. "aps": { "content-available": "0", // опционально. Установите "1" для отправки тихого push-уведомления и "0" для обычного. "mutable-content": 1 // обязательно для медиа-вложений в iOS 10+. }, "attachment": "YOUR_ATTACHMENT_URL", // URL медиа-вложения для iOS 10+. "data": {} // опционально. Данные, предоставленные пользователем, макс. 4 КБ. }, "apns_trim_content": 1, // опционально. (0|1) Обрезает слишком длинные строки контента многоточием. "ios_title": { // опционально. Добавляет заголовок для push-уведомления на iOS. "en": "title" }, "ios_subtitle": { // опционально. Добавляет подзаголовок для push-уведомления на iOS. "en": "subTitle" }, "ios_content": { // опционально. Добавляет контент для push-уведомления на iOS. "en": "content" },
// Параметры, связанные с Android "android_root_params": { // опционально. Пользовательский объект ключ-значение. "key": "value" // Параметры корневого уровня для получателей полезной нагрузки Android. }, "android_sound": "soundfile", // опционально. Без расширения файла. Если оставить пустым, устройство // не будет издавать звук при получении push-уведомления. "android_sound_off": true, // опционально. Включает/выключает звук, установленный полем "android_sound". "android_header": { // опционально. Объект ИЛИ строка. Заголовок уведомления Android. "en": "header" }, "android_content": { // опционально. Объект ИЛИ строка. Контент уведомления Android. "en": "content" }, "android_icon": "icon.png", "android_custom_icon": "URL.png", // опционально. Полный URL-путь к файлу изображения. "android_banner": "URL.png", // опционально. Полный URL-путь к файлу изображения. "android_badges": 5, // опционально. integer. Число на иконке приложения Android. // Используйте "+n" или "-n" для увеличения/уменьшения значения на n. "android_gcm_ttl": 3600, // опционально. Параметр времени жизни — максимальное время жизни сообщения в секундах. "android_vibration": 0, // опционально. Принудительная вибрация Android для высокоприоритетных push-уведомлений. "android_led": "#rrggbb", // опционально. Шестнадцатеричный код цвета светодиода, устройство постарается максимально точно его воспроизвести. "android_priority": -1, // опционально. Устанавливает параметр "importance" для устройств с Android 8.0 // и выше, а также параметр "priority" для устройств // с Android 7.1 и ниже. Устанавливает уровень прерывания // канала уведомлений или конкретного уведомления. // Допустимые значения: -2, -1, 0, 1, 2. "android_delivery_priority": "normal", // опционально. "normal" или "high". Включает доставку уведомлений, // когда устройство находится в режиме энергосбережения. "android_ibc": "#RRGGBB", // опционально. цвет фона иконки на Lollipop, #RRGGBB, // #AARRGGBB, "red", "black", "yellow" и т. д. "android_silent": 1, // опционально. 0 или 1. Включить тихое уведомление. // Игнорирует звук и контент
// Параметры, связанные с Amazon "adm_root_params": { // опционально. Пользовательский объект ключ-значение "key": "value" }, "adm_sound": "push.mp3", "adm_sound_off": true, // опционально. Включает/выключает звук, установленный полем "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, // опционально. Параметр времени жизни — максимальное // время жизни сообщения в секундах. "adm_priority": -1, // опционально. Приоритет push-уведомления в панели push-уведомлений Amazon, // допустимые значения: -2, -1, 0, 1 и 2.
// Параметры, связанные с Mac OS X "mac_badges": 3, "mac_sound": "sound.caf", "mac_sound_off": true, "mac_root_params": { "content-available": 1 }, "mac_ttl": 3600, // опционально. Параметр времени жизни — максимальное время жизни сообщения в секундах. "mac_title": { // опционально. Добавляет заголовок для push-уведомления. "en": "title" }, "mac_subtitle": { // опционально. Добавляет подзаголовок для push-уведомления MacOS. "en": "subtitle" }, "mac_content": { // опционально. Добавляет контент для push-уведомления MacOS. "en": "content" },
// Параметры, связанные с Windows "wns_content": { // обязательно. Контент (XML или raw) уведомления, закодированный // в base64 MIME в виде объекта ИЛИ строки "en": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9ImF2YWlsYWJsZSIvPg==", "de": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9Im5ld01lc3NhZ2UiLz4=" }, "wns_type": "Badge", // 'Tile' | 'Toast' | 'Badge' | 'Raw' "wns_tag": "myTag", // опционально. Используется в политике замены Tile. // Буквенно-цифровая строка не более 16 символов. "wns_cache": 1, // опционально. (1|0) Преобразуется в значение X-WNS-Cache-Policy. "wns_ttl": 600, // опционально. Время истечения срока действия уведомления в секундах.
// Параметры, связанные с Safari "safari_title": { // опционально. Объект ИЛИ строка. Заголовок уведомления. "en": "title" }, "safari_content": { // опционально. Объект ИЛИ строка. Контент уведомления. "en": "content" }, "safari_action": "Click here", // опционально. "safari_url_args": [ // обязательно, но значение может быть пустым "firstArgument", "secondArgument" ], "safari_ttl": 3600, // опционально. Параметр времени жизни — максимальное // время жизни сообщения в секундах.
// Параметры, связанные с Chrome "chrome_title": { // опционально. Вы можете указать заголовок сообщения в этом параметре. "en": "title" }, "chrome_content": { // опционально. Вы можете указать контент сообщения в этом параметре. "en": "content" }, "chrome_icon": "icon_URL", // опционально. Полный URL-путь к иконке или путь к файлу в ресурсах расширения "chrome_gcm_ttl": 3600, // опционально. Параметр времени жизни – максимальное время жизни сообщения в секундах. "chrome_duration": 20, // опционально. Изменяет время отображения push-уведомления в Chrome. Установите 0 для отображения push-уведомления // до тех пор, пока пользователь не взаимодействует с ним. "chrome_image": "image_URL", // опционально. URL к большому изображению "chrome_root_params": { // опционально. Установите параметры, специфичные для сообщений, отправляемых в Chrome. "key": "value" }, "chrome_button_text1": "text1", // опционально. "chrome_button_url1": "button1_URL", // опционально. Игнорируется, если chrome_button_text1 не установлен. "chrome_button_text2": "text2", // опционально. "chrome_button_url2": "button2_url", // опционально. Игнорируется, если chrome_button_text2 не установлен.
// Параметры, связанные с Firefox "firefox_title": { // опционально. Объект ИЛИ строка. Здесь вы можете указать заголовок сообщения. "en": "title" }, "firefox_content": { // опционально. Объект ИЛИ строка. Здесь вы можете указать контент сообщения. "en": "content" }, "firefox_icon": "icon_URL", // опционально. Полный URL-путь к иконке или путь // к файлу в ресурсах расширения. "firefox_root_params": { // опционально. Установите параметры, специфичные для сообщений, отправляемых в Firefox. "key": "value" } }}Основы очень просты — все фильтры выполняются над наборами сущностей.
Наборы
Section titled “Наборы”Наборы определяются как:
1. Устройства, подписанные на определенное приложение (A); 2. Устройства, соответствующие указанным значениям тегов (T) или значению тега, специфичного для приложения (AT);
Синтаксис
Section titled “Синтаксис”Давайте попробуем на нескольких примерах в соответствии с приведенным выше списком.
Таргетинг на подписчиков приложения
Section titled “Таргетинг на подписчиков приложения”Фильтр “A” определяет набор устройств, подписанных на определенное приложение:
A("XXXXX-XXXXX", ["iOS", "Android", "OsX", "Windows", "Amazon", "Safari", "Chrome", "Firefox"])
где
- “XXXXX-XXXXX” – Application Code Wavesend
- [“iOS”, “Android”, …] – массив целевых платформ. Если опущен, сообщение будет отправлено на все платформы, доступные для этого приложения.
Фильтрация по значениям тегов
Section titled “Фильтрация по значениям тегов”Фильтр “T” определяет набор устройств, которым присвоены указанные значения тегов.
T(\"Age\", IN, [17,20])
Определяет набор устройств, для которых тег “age” имеет одно из значений: 17, 18, 19, 20.
Типы тегов и операторы
Section titled “Типы тегов и операторы”Очень важно понимать, что теги являются общими для всех приложений, и это представляет собой очень мощный инструмент для сегментации и фильтрации ваших целевых пользователей без привязки к конкретному приложению.
Тег может быть одного из трех типов: String, Integer, List. Тип тега определяет, какие операторы можно использовать для конкретного тега.
Строковые теги
Section titled “Строковые теги”Применимые операторы:
- EQ – нацеливается на устройства с указанным значением тега
- IN – нацеливается на устройства с любым из указанных значений тегов
- NOTIN – нацеливается на устройства без указанных значений тегов
- NOTEQ – нацеливается на устройства со значением тега, не равным указанному
- NOTSET – нацеливается на устройства без значения для указанного тега
- ANY – нацеливается на устройства с любым значением для указанного тега
Примеры:
T (\"Age\", EQ, 30) – фильтрует пользователей в возрасте 30 лет
T (\"favorite_color\", IN, [\"red\",\"green\",\"blue\"]) – фильтрует пользователей, которые выбрали красный, зеленый или синий в качестве своего любимого цвета.
T (\"Name", NOTSET, \"\") – нацеливается на устройства без значения для тега Name.
Вы можете использовать числовые значения со строковыми тегами, но такие значения будут преобразованы в строку.
Целочисленные теги
Section titled “Целочисленные теги”Применимые операторы:
- GTE – больше или равно указанному значению
- LTE – меньше или равно указанному значению
- EQ – равно указанному значению
- BETWEEN – между минимальным и максимальным указанными значениями
- IN – любое из указанных значений
- NOTIN – нет указанных значений, присвоенных устройству
- NOTEQ – устройства со значением тега, не равным указанному
- NOTSET – устройства без значения для указанного тега
- ANY – устройства с любым значением для указанного тега
Примеры:
T (\"Level\", EQ, 14) – фильтрует пользователей только 14-го уровня.
T (\"Level\", BETWEEN, [1,5) – фильтрует пользователей на 1, 2, 3, 4 и 5 уровнях.
T (\"Level", GTE, 29) – нацеливается на пользователей, достигших как минимум 29-го уровня.
Теги-списки
Section titled “Теги-списки”Применимые операторы:
- IN – устройства с любым из указанных значений тегов
Пример: T("Category", IN, ["breaking_news","business","politics"])
Теги даты
Section titled “Теги даты”Применимые операторы:
- GTE – больше или равно указанному значению
- LTE – меньше или равно указанному значению
- EQ – равно указанному значению
- BETWEEN – между минимальным и максимальным указанными значениями
- NOTEQ – устройства со значением тега, не равным указанному
- NOTSET – устройства без значения для указанного тега
- ANY – устройства с любым значением для указанного тега
Примеры:
AT("7777D-322A7","Last Application Open", BETWEEN, ["2022-02-28", "2022-03-02"])
AT("7777D-322A7","Last Application Open", GTE, "90 days ago")
Операции
Section titled “Операции”- «+» – объединяет два набора (эквивалентно OR)
- «*» – пересекает два набора (эквивалентно AND)
- «\» – вычитает один набор из другого (эквивалентно NOT)
Все операции левоассоциативны. «+» и «*» имеют одинаковый приоритет. «\» имеет более высокий приоритет. Вы можете использовать скобки для определения приоритетов вычислений.
Обратите внимание, что операция «\» не является коммутативной. A("12345-12345") \ A("67890-67890") — это не то же самое, что A("67890-67890") \ A("12345-12345").
getPushHistory
Section titled “getPushHistory”POST https://api.wavesend.ru/json/1.3/getPushHistory
Получает историю сообщений с деталями push-уведомлений.
Тело запроса
Section titled “Тело запроса”| Имя | Тип | Описание |
|---|---|---|
| auth* | string | API access token из Wavesend Control Panel. |
| limitMessages | integer | Ограничивает количество сообщений в ответе. Возможные значения от 10 до 1000. |
| source | string | Источник истории push-уведомлений. Может быть null или: “CP”, “API”, “GeoZone”, “RSS”, “AutoPush”, “A/B Test”. |
| searchBy | string | Возможные значения для поиска. Может быть null или: “notificationID”, “notificationCode”, “applicationCode”, “campaignCode”. |
| value | string | Значение для поиска, установленное в соответствии с полем “searchBy”. |
| lastNotificationID | string | Используется для пагинации. Последний messageId из предыдущего вызова /getPushHistory. См. подробности ниже. |
{ "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", // обязательный. API access token из Wavesend Control Panel "source": null, // опционально. Возможные значения: null, "CP", "API", "GeoZone", // "RSS", "AutoPush", "A/B Test" "searchBy": "applicationCode", // опционально. Возможные значения: "", "notificationID", // "notificationCode", "applicationCode", "campaignCode" "value": "C8717-703F2", // опционально. Значение для поиска, установленное в соответствии с полем "searchBy". "lastNotificationID": 0, // опционально. Используется для пагинации. Последний messageId из // предыдущего вызова /getPushHistory. См. подробности ниже. "limitMessages": 1000 // опционально. Возможные значения от 10 до 1000. }}Этот метод вернет 1000 сообщений из аккаунта, отсортированных по Id сообщения. Чтобы получить вторую страницу, укажите последний Id сообщения из предыдущего ответа в параметре lastNotificationId.
Типы данных ответа
Section titled “Типы данных ответа”id -- int | 0code -- stringcreateDate -- string (дата: %Y-%m-%d %H:%M:%S)sendDate -- string (дата: %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 (устарело) -- list (JSON) | nulldata -- dict (JSON) | nullopen -- dict [dict [string: int]] | "" Пример: 'open': {'AAAAA-BBBBB': {'IOS': 1, 'ANDROID': 1}}sent -- dict [dict [string: int]] | "" Пример: 'sent': {'AAAAA-BBBBB': {'IOS': 10, 'ANDROID': 10}}ctr -- dict [string: int] | "" Пример: {'AAAAA-BBBBB': 1}errors -- dict [string: int] | "" Пример: {'ANDROID': 1, 'IOS': 1}cancelMessage
Section titled “cancelMessage”POST https://api.wavesend.ru/json/1.3/cancelMessage
Удаляет запланированное сообщение.
Тело запроса
Section titled “Тело запроса”| Имя | Тип | Описание |
|---|---|---|
| auth* | string | API access token из Wavesend Control Panel. |
| message* | string | Код сообщения, полученный в ответе /createMessage. |
{ "status_code":200, "status_message":"OK"}{ "request":{ "auth": "yxoPUlwqm…………pIyEX4H", // обязательный. API access token из Wavesend Control Panel "message": "xxxx-xxxxxxx-xxxxxx" // обязательный. Код сообщения, полученный в ответе /createMessage }}Коды статусов:
| Код состояния HTTP | status_code | Описание |
|---|---|---|
| 200 | 200 | Сообщение успешно отменено |
| 200 | 210 | Ошибка аргумента. См. status_message для получения дополнительной информации. |
| 400 | N/A | Неверно сформированная строка запроса |
| 500 | 500 | Внутренняя ошибка |