Перейти к содержанию

API Пресетов

Пресет push-уведомлений — это многоразовый шаблон push-уведомлений, тот же объект, который вы создаете в редакторе push-уведомлений в Панели управления. Этот API управляет только пресетами push-уведомлений; пресеты для SMS, WhatsApp, Kakao, LINE и Viber имеют свои собственные специализированные сервисы, которые здесь не рассматриваются.

Используйте code пресета, чтобы отправить его через Notify (полезная нагрузка preset) или через точку Send push в Customer Journey.

Базовый URL

Anchor link to
https://rpc-api.svc-nue.pushwoosh.com

Все эндпоинты обслуживаются по HTTPS. Запросы и ответы используют application/json, если не указано иное.

Аутентификация

Anchor link to

Каждый запрос должен включать заголовок Authorization с вашим токеном Server API:

Authorization: Api YOUR_API_TOKEN

Соглашения

Anchor link to
  • Именование полей: тела запросов и параметры query/path принимают lowerCamelCase (например, sendType, localizedProperties, searchByName) — сервер разбирает любой регистр. Ответы всегда маршалируются с использованием имен полей proto, в snake_case (localized_properties, platform_properties, per_page и так далее). В примерах ответов и в справочнике по объекту Preset ниже используется этот регистр.
  • code: каждый ответ с пресетом содержит его собственный код, сгенерированный при Create. Передавайте этот код в Get, Update, UpdatePartial, Delete, Clone, а также в вышеупомянутые API для сообщений/journey.
  • Ключи платформ: карты platforms и open_actions используют в качестве ключей числовой код типа устройства (1 для iOS, 3 для Android и так далее). platform_properties использует в качестве ключа имя enum платформы (IOS, ANDROID, HUAWEI_ANDROID, OSX — единственные четыре платформы, которые он охватывает).
  • Незаполненные поля: ответы Get, Create и Clone включают все поля объекта Preset, даже если они пустые или имеют нулевое значение. List возвращает сокращенный набор полей — см. Список ниже. Update и UpdatePartial вообще не возвращают поля пресета — см. предупреждение в их разделах.

Ответы об ошибках

Anchor link to
HTTP-статусЗначение
400 Bad RequestНеверный аргумент — обязательное поле отсутствует или имеет неверный формат, или не выполнено предварительное условие (например, клонирование без name).
401 UnauthorizedОтсутствует или недействителен заголовок Authorization.
403 ForbiddenПриложение или пресет не принадлежат аккаунту вызывающей стороны.
404 Not FoundПресет или приложение не найдены.
500 Internal Server ErrorНеожиданный сбой на стороне сервера.

Delete для пресета, который все еще используется точкой Send push в запущенном или приостановленном journey, также вернет 400 Bad Request (FailedPrecondition на уровне протокола) — а не 409. Сначала удалите пресет из journey.

Create, Update и UpdatePartial также возвращают 400 Bad Request для неразрешимого токена персонализации — см. ниже.

Токены персонализации

Anchor link to

Create, Update и UpdatePartial проверяют каждый токен персонализации ({name|modifier|default}) в localizedTitle, localizedSubtitle и localizedContent (для каждого языка в запросе), а также в полях с rich-контентом для каждой платформы, в которые отправитель подставляет значения (title, content, banner, icon, URL, параметры deep-link и т.д., для каждой платформы). Поля вне этого набора, такие как richmedia, campaignCode, deeplink или filterCode, сохраняют токен в точности как он написан — Pushwoosh не анализирует синтаксис персонализации в них.

Токен должен иметь модификатор, который Pushwoosh распознает, потому что немодифицированный или написанный с ошибкой токен не может быть отформатирован и в противном случае дойдет до пользователей в виде фигурных скобок. Токен с отсутствующим или неизвестным модификатором ({Tag|}, {Tag|typo}) приведет к сбою вызова с InvalidArgument:

{
"code": 3,
"message": "токен персонализации {Tag|} не имеет известного модификатора, поэтому он будет доставлен как текст; ожидался один из [capitalizefirst capitalizeallfirst uppercase lowercase regular base64 cent dollar comma euro jpy lira M-d-y m-d-y M d y M d Y l M d H:i m-d-y H:i]"
}

Допустимые модификаторы

Anchor link to

Выборщик персонализации в Панели управления уже предлагает все нижеперечисленные модификаторы для тегов INTEGER/PRICE (включая форматы дат) и для строковых тегов, за исключением base64 — этот доступен только через API. gitlab.corp.pushwoosh.com/channels/sdk/pkg/dynamiccontent является источником истины, по которому проверяют и Панель управления, и этот API.

МодификаторТип тегаПримечания
capitalizefirststringБез учета регистра
capitalizeallfirststringБез учета регистра
uppercasestringБез учета регистра
lowercasestringБез учета регистра
regularstring или integerБез учета регистра, форматирование не применяется
base64stringБез учета регистра, только через API — не предлагается в CP
cent / dollar / comma / euro / jpy / liraintegerБез учета регистра
M-d-y, m-d-y, M d y, M d Y, l, M d, H:i, m-d-y H:iintegerМодификаторы формата даты, сопоставляются в точности как написаны, с учетом регистра

Эндпоинты

Anchor link to
МетодПутьОписание
POST/api/presetsСоздать новый пресет push-уведомлений
GET/api/presetsПолучить список пресетов push-уведомлений приложения
GET/api/presets/{code}Получить один пресет push-уведомлений
PUT/api/presets/{code}Обновить пресет push-уведомлений (полная перезапись)
PUT/api/presets/{code}:partialОбновить пресет push-уведомлений (частично)
POST/api/presets/{code}:cloneКлонировать пресет push-уведомлений
DELETE/api/presets/{code}Удалить пресет push-уведомлений

Создать

Anchor link to

Создает новый пресет push-уведомлений в приложении и возвращает его со сгенерированным кодом.

POST /api/presets

Тело запроса

Anchor link to
ПараметрТипОбязательныйОписание
applicationstringДаКод приложения, в котором создается пресет.
namestringДаНазвание пресета.
sendTypestringНетКанал пресета (например, push).
isV2booleanНетУстанавливает флаг происхождения пресета. Опустите, чтобы по умолчанию было true (v2); установите false только при воспроизведении устаревшего пресета v1.

Все остальные поля — локализованный контент, платформы, deep link, inbox, категории и т.д. — совпадают с Update и документированы один раз в справочнике по объекту Preset ниже.

Пример запроса
Anchor link to
{
"application": "XXXXX-XXXXX",
"name": "20% discount",
"platforms": { "1": true, "3": true },
"localizedContent": {
"default": "Get your 20% discount right now",
"es": "Consigue tu 20% de descuento ahora mismo"
},
"localizedTitle": { "default": "Hi there" },
"openAction": { "link": { "url": "https://example.com" } },
"categories": ["promo"]
}

Ответ

Anchor link to

Возвращает { "preset": { ... } }, созданный объект Preset.

Список

Anchor link to

Возвращает список пресетов push-уведомлений приложения — сокращенный набор полей, а не полный объект — с пагинацией, сортировкой и фильтрацией по названию или категории.

GET /api/presets

Параметры запроса

Anchor link to
ПараметрТипОбязательныйОписание
applicationstringДаКод приложения, для которого нужно получить список пресетов.
orderBystringНетNAME (по умолчанию), CREATED или UPDATED.
orderDirectionstringНетASC (по умолчанию) или DESC.
pageintegerНетИндекс страницы, начиная с нуля.
perPageintegerНетРазмер страницы. По умолчанию 100, если опущено или 0.
searchByNamestringНетПоиск подстроки без учета регистра в названии или коде пресета (ILIKE %value%).
searchByCategoryarray of stringsНетПовторите параметр для фильтрации по нескольким категориям, например, ?searchByCategory=promo&searchByCategory=lifecycle.
showHiddenbooleanНетВключить пресеты, помеченные как hidden.

Ответ

Anchor link to

Каждый элемент содержит только: name, code, platforms, localized_content (простой текст для каждого языка — не localized_properties), localized_title, localized_subtitle, banner, icon, categories, journey_uuid, custom_data, is_v2, created, updated. Все остальные поля объекта Presetlocalized_properties, platform_properties, deeplink, richmedia, url и т.д. — опускаются, даже если они установлены в пресете.

ПолеТипОписание
presetsarray of objectsТекущая страница пресетов в сокращенном виде, описанном выше.
pageintegerВозвращенный индекс страницы.
per_pageintegerРазмер страницы, использованный для этого ответа.
totalintegerОбщее количество пресетов, соответствующих фильтрам, на всех страницах.
Пример ответа
Anchor link to
{
"presets": [
{ "name": "20% discount", "code": "AAAAA-BBBBB", "platforms": { "1": true, "3": true }, "categories": ["promo"] }
],
"page": 0,
"per_page": 100,
"total": 1
}

Получить

Anchor link to

Возвращает один пресет push-уведомлений по его коду со всеми заполненными полями объекта Preset.

GET /api/presets/{code}

Параметры пути

Anchor link to
ПараметрТипОписание
codestringКод пресета.

Ответ

Anchor link to

Возвращает { "preset": { ... } }, полный объект Preset.

Обновить

Anchor link to

Перезаписывает существующий пресет push-уведомлений по коду предоставленными полями.

PUT /api/presets/{code}

Параметры пути

Anchor link to
ПараметрТипОписание
codestringКод пресета для перезаписи.

Тело запроса

Anchor link to

Те же поля, что и в Create (минус application), плюс остальные поля объекта Preset. sendType принимается, но игнорируется — канал пресета нельзя изменить после создания.

Ответ

Anchor link to

Пустой объект в случае успеха: {}.

Частичное обновление

Anchor link to

Обновляет только предоставленные поля существующего пресета push-уведомлений по коду, оставляя неустановленные поля без изменений.

PUT /api/presets/{code}:partial

Параметры пути

Anchor link to
ПараметрТипОписание
codestringКод пресета для частичного обновления.

Тело запроса

Anchor link to

Те же поля, что и в Update, минус application. В отличие от Update, здесь каждое поле — включая localizedProperties, platformProperties, categories и остальные поля группы свойств контента, перечисленные в предупреждении Update — остается без изменений, если опущено, и затрагивается только при отправке (поле типа map/array, которое вы отправляете, все равно полностью заменяет существующее значение для этого поля, но не влияет на то, что вы не включили). sendType также принимается, но игнорируется.

Пример запроса
Anchor link to
{
"sendRate": 500,
"cappingCount": 3,
"cappingDays": 7
}

Ответ

Anchor link to

Также пустой объект — см. предупреждение выше.

Клонировать

Anchor link to

Дублирует существующий пресет push-уведомлений под новым именем в то же приложение.

POST /api/presets/{code}:clone

Тело запроса

Anchor link to
ПараметрТипОбязательныйОписание
codestringДаКод исходного пресета для дублирования.
namestringДаНазвание для нового пресета.
Пример запроса
Anchor link to
{ "code": "AAAAA-BBBBB", "name": "20% discount (copy)" }

Ответ

Anchor link to

Возвращает { "preset": { ... } }, новый объект Preset.

Удалить

Anchor link to

Безвозвратно удаляет пресет push-уведомлений по коду.

DELETE /api/presets/{code}

Параметры пути

Anchor link to
ПараметрТипОписание
codestringКод пресета для удаления.

Ответ

Anchor link to

Пустой объект в случае успеха: {}.

Справочник по объектам

Anchor link to

Имена полей ниже соответствуют тому, что фактически возвращают Get, Create, Update и Clone — имена полей proto в snake_case (см. Соглашения). Форма lowerCamelCase, используемая в примерах запросов выше, работает так же на входе.

Объект Preset

Anchor link to

Идентификация

Anchor link to
ПолеТипОписание
codestringГенерируется при Create. Идентифицирует этот пресет во всем остальном API.
namestringНазвание пресета.
send_typestringКанал пресета (например, push).
is_v2booleantrue для пресетов, созданных или перенесенных на модель контента v2.
systembooleanПомечает пресет как системный/внутренний.
hiddenbooleanСкрывает пресет из результатов List (отправьте showHidden: true, чтобы включить его).
createdstring (RFC 3339)Временная метка создания.
updatedstring (RFC 3339)Временная метка последнего обновления.

Таргетинг и контент

Anchor link to
ПолеТипОписание
platformsmap<string, boolean>На какие платформы нацелен пресет, ключи — код типа устройства (например, "1" для iOS).
localized_propertiesmap<string, object>Локаль → rich-контент для каждой платформы. Та же структура, что и у LocalizedContent в полезной нагрузке Notify — одна запись на блок платформы (ios, android и т.д.). Это основной способ установки контента push-уведомлений для конкретной платформы.
localized_title / localized_subtitle / localized_contentmap<string, string>Локаль → простой текст. Более простая альтернатива localized_properties для заголовка, подзаголовка и тела, когда вам не нужны переопределения для каждой платформы.
platform_propertiesmap<string, object>Устаревшие переопределения для каждой платформы, ключи — имя enum платформы (IOS, ANDROID, HUAWEI_ANDROID, OSX). См. объект PlatformProperties ниже.
open_actionOpenActionДействие, срабатывающее, когда пользователь открывает уведомление, применяется ко всем платформам. Взаимоисключаемо с open_actions — ответ устанавливает ровно одно из них.
open_actionsmap<string, OpenAction>Переопределение open_action для каждой платформы, ключи — код типа устройства.
deeplinkstringКод Deep Link.
deeplink_paramsmap<string, string>Параметры, передаваемые в deep link.
richmediastringКод Rich Media, открываемого уведомлением.
urlstringURL, открываемый уведомлением, если не используется deep link или Rich Media.

Входящие

Anchor link to
ПолеТипОписание
inbox_imagestringURL изображения, отображаемого в записи Message Inbox.
inbox_iconstringURL иконки, отображаемой в записи Message Inbox.
inbox_daysintegerКоличество дней, в течение которых запись остается в Message Inbox.
inbox_datestring (RFC 3339)Явная дата истечения срока действия для записи в Message Inbox, как альтернатива inbox_days.

Организация и метаданные

Anchor link to
ПолеТипОписание
categoriesarray of stringsНазвания категорий, которыми помечен пресет.
campaign_codestringКод кампании, к которой относится этот пресет.
filter_codestringКод сегмента / фильтра, на который по умолчанию нацелен этот пресет.
geo_zonesstringТаргетинг по геозонам, если пресет запускается по геолокации.
journey_uuidstringUUID Customer Journey, которому принадлежит этот пресет, если он был создан из точки Send push в journey.
custom_dataobjectПроизвольный JSON, пересылаемый в SDK клиента как параметр u.
bannerstringURL большого изображения / вложения.
iconstringURL пользовательской иконки уведомления.

Ограничения доставки

Anchor link to
ПолеТипОписание
send_rateintegerОграничение скорости для отправок с использованием этого пресета, в сообщениях/секунду — эквивалент SendRate из Notify на уровне пресета.
capping_count / capping_daysintegerОграничение частоты на пользователя для этого пресета — эквивалент count / days из FrequencyCapping из Notify на уровне пресета.

Веб-хуки

Anchor link to
ПолеТипОписание
notification_sent_urlstringURL обратного вызова, запрашиваемый при отправке уведомления с использованием этого пресета.
notification_delivered_urlstringURL обратного вызова, запрашиваемый при доставке уведомления с использованием этого пресета.
notification_click_urlstringURL обратного вызова, запрашиваемый при клике на уведомление с использованием этого пресета.

Устаревшие поля

Anchor link to

Эти поля перенесены из модели пресетов v1. Они заполняются для совместимости с Панелью управления, а не для новых интеграций.

ПолеТипОписание
remote_pagestringУстаревшая ссылка на удаленную страницу.
wns_contentstringУстаревший JSON шаблона всплывающего уведомления Windows, как он принимался методами v1 createPreset/getPreset.
original_urlstringЗначение url до сокращения, когда url был заменен сокращенной ссылкой.
ios_silent / android_silent / huawei_android_silentbooleanФлаги тихого (только с данными) push-уведомления для каждой платформы.

Объект PlatformProperties

Anchor link to

Поля, доступные в каждой записи platform_properties (IOS, ANDROID, HUAWEI_ANDROID, OSX):

ПолеТипОписание
badgestringПереопределение количества на значке.
soundstringИмя звукового файла.
sound_offbooleanОтключить звук уведомления.
prioritystringПриоритет в трее (только для Android/Huawei).
delivery_prioritystringПриоритет доставки NORMAL или HIGH (только для Android/Huawei).
ios_interruption_levelstringpassive, active, time-sensitive или critical (только для iOS).

Связанные материалы

Anchor link to