Saltar al contenido

API de Presets

Un preset de push es una plantilla de notificación push reutilizable — el mismo objeto que construyes en el editor de push del Panel de Control. Esta API gestiona solo los presets de push; los presets de SMS, WhatsApp, Kakao, LINE y Viber tienen cada uno su propio servicio de presets dedicado, no cubierto aquí.

Usa el código de un preset para enviarlo a través de Notify (payload preset) o un punto de envío de push de Customer Journey.

https://rpc-api.svc-nue.pushwoosh.com

Todos los endpoints se sirven sobre HTTPS. Las solicitudes y respuestas usan application/json a menos que se indique lo contrario.

Autenticación

Anchor link to

Cada solicitud debe incluir un encabezado Authorization con tu token de API del servidor:

Authorization: Api YOUR_API_TOKEN

Convenciones

Anchor link to
  • Nomenclatura de campos: los cuerpos de las solicitudes y los parámetros de consulta/ruta aceptan lowerCamelCase (por ejemplo, sendType, localizedProperties, searchByName) — el servidor deserializa cualquiera de las dos formas. Las respuestas siempre se serializan usando los nombres de campo de proto, en snake_case (localized_properties, platform_properties, per_page, y así sucesivamente). Los ejemplos de respuesta y la referencia del Objeto Preset a continuación usan esa forma.
  • code: cada respuesta de preset lleva su propio código, generado en Create. Pasa este código a Get, Update, UpdatePartial, Delete, Clone, y a las APIs de mensajería/journey mencionadas anteriormente.
  • Claves de plataforma: los mapas platforms y open_actions tienen como clave el código de tipo de dispositivo numérico (1 para iOS, 3 para Android, etc.). platform_properties tiene como clave el nombre del enum de la plataforma en su lugar (IOS, ANDROID, HUAWEI_ANDROID, OSX — las únicas cuatro plataformas que cubre).
  • Campos no poblados: las respuestas de Get, Create y Clone incluyen cada campo del Objeto Preset, incluso cuando están vacíos o con valor cero. List devuelve un conjunto de campos reducido — ver Listar a continuación. Update y UpdatePartial no devuelven ningún campo de preset en absoluto — ver la precaución en sus secciones.

Respuestas de error

Anchor link to
Estado HTTPSignificado
400 Bad RequestArgumento inválido — falta un campo requerido o está mal formado, o una precondición falló (por ejemplo, clonar sin un name).
401 UnauthorizedEncabezado Authorization faltante o inválido.
403 ForbiddenLa aplicación o el preset no pertenecen a la cuenta del solicitante.
404 Not FoundEl preset o la aplicación no se encontraron.
500 Internal Server ErrorFalla inesperada del lado del servidor.

Delete en un preset que todavía está siendo utilizado por un punto de envío de push de un journey en ejecución o pausado también devuelve 400 Bad Request (un FailedPrecondition en la comunicación) — no 409. Elimina primero el preset del journey.

Create, Update y UpdatePartial también devuelven 400 Bad Request por un token de personalización no resoluble — ver a continuación.

Tokens de personalización

Anchor link to

Create, Update y UpdatePartial validan cada token de personalización ({name|modifier|default}) en localizedTitle, localizedSubtitle y localizedContent (para cada idioma en la solicitud), y en los campos de contenido enriquecido por plataforma en los que el remitente sustituye (título, contenido, banner, icono, URL, parámetros de deep-link, etc., para cada plataforma). Los campos fuera de ese conjunto, como richmedia, campaignCode, deeplink o filterCode, mantienen un token exactamente como está escrito — Pushwoosh no analiza la sintaxis de personalización allí.

Un token necesita un modificador que Pushwoosh reconozca, porque uno sin modificar o mal escrito no se puede formatear y, de lo contrario, llegaría a los usuarios como llaves literales. Un token con un modificador faltante o desconocido ({Tag|}, {Tag|typo}) falla la llamada con InvalidArgument:

{
"code": 3,
"message": "personalization token {Tag|} has no known modifier, so it would be delivered as text; expected one of [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]"
}

Modificadores aceptados

Anchor link to

El selector de personalización del Panel de Control ya ofrece todos los modificadores a continuación para los tags INTEGER/PRICE (incluidos los formatos de fecha) y para los tags de cadena, excepto base64 — ese solo es accesible a través de la API. gitlab.corp.pushwoosh.com/channels/sdk/pkg/dynamiccontent es la fuente de verdad contra la que validan tanto el Panel de Control como esta API.

ModificadorTipo de TagNotas
capitalizefirstcadenaNo distingue mayúsculas de minúsculas
capitalizeallfirstcadenaNo distingue mayúsculas de minúsculas
uppercasecadenaNo distingue mayúsculas de minúsculas
lowercasecadenaNo distingue mayúsculas de minúsculas
regularcadena o enteroNo distingue mayúsculas de minúsculas, no se aplica formato
base64cadenaNo distingue mayúsculas de minúsculas, solo API — no ofrecido por el selector del CP
cent / dollar / comma / euro / jpy / liraenteroNo distingue mayúsculas de minúsculas
M-d-y, m-d-y, M d y, M d Y, l, M d, H:i, m-d-y H:ienteroModificadores de formato de fecha, se comparan exactamente como están escritos, incluyendo mayúsculas y minúsculas
MétodoRutaDescripción
POST/api/presetsCrear un nuevo preset de push
GET/api/presetsListar los presets de push de una aplicación
GET/api/presets/{code}Obtener un único preset de push
PUT/api/presets/{code}Actualizar un preset de push (sobrescritura completa)
PUT/api/presets/{code}:partialActualizar un preset de push (parcial)
POST/api/presets/{code}:cloneClonar un preset de push
DELETE/api/presets/{code}Eliminar un preset de push

Crea un nuevo preset de push en una aplicación y lo devuelve con su código generado.

POST /api/presets

Cuerpo de la solicitud

Anchor link to
ParámetroTipoRequeridoDescripción
applicationcadenaEl código de aplicación en el que crear el preset.
namecadenaNombre del preset.
sendTypecadenaNoCanal del preset (por ejemplo, push).
isV2booleanoNoFija la bandera de origen del preset. Omitir para que por defecto sea true (v2); establecer en false solo al reproducir un preset v1 heredado.

Todos los demás campos — contenido localizado, plataformas, deep link, inbox, categorías, etc. — se comparten con Update y se documentan una vez en la referencia del Objeto Preset a continuación.

Ejemplo de solicitud
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"]
}

Devuelve { "preset": { ... } }, el Objeto Preset creado.

Lista los presets de push de una aplicación — un conjunto de campos reducido, no el objeto completo — con paginación, ordenamiento y filtrado por nombre o categoría.

GET /api/presets

Parámetros de consulta

Anchor link to
ParámetroTipoRequeridoDescripción
applicationcadenaEl código de la aplicación para la cual listar los presets.
orderBycadenaNoNAME (predeterminado), CREATED o UPDATED.
orderDirectioncadenaNoASC (predeterminado) o DESC.
pageenteroNoÍndice de página basado en cero.
perPageenteroNoTamaño de la página. Por defecto es 100 cuando se omite o es 0.
searchByNamecadenaNoCoincidencia de subcadena sin distinción de mayúsculas y minúsculas en el nombre o código del preset (ILIKE %value%).
searchByCategoryarray de cadenasNoRepite el parámetro para filtrar por cualquiera de varias categorías, ej. ?searchByCategory=promo&searchByCategory=lifecycle.
showHiddenbooleanoNoIncluir presets marcados como hidden.

Cada elemento contiene solo: name, code, platforms, localized_content (texto plano por localización — no localized_properties), localized_title, localized_subtitle, banner, icon, categories, journey_uuid, custom_data, is_v2, created, updated. Todos los demás campos del Objeto Presetlocalized_properties, platform_properties, deeplink, richmedia, url, etc. — se omiten, incluso si están establecidos en el preset.

CampoTipoDescripción
presetsarray de objetosLa página actual de presets, en la forma reducida descrita anteriormente.
pageenteroEl índice de página devuelto.
per_pageenteroEl tamaño de página utilizado para esta respuesta.
totalenteroNúmero total de presets que coinciden con los filtros, en todas las páginas.
Ejemplo de respuesta
Anchor link to
{
"presets": [
{ "name": "20% discount", "code": "AAAAA-BBBBB", "platforms": { "1": true, "3": true }, "categories": ["promo"] }
],
"page": 0,
"per_page": 100,
"total": 1
}

Devuelve un único preset de push por su código, con todos los campos del Objeto Preset poblados.

GET /api/presets/{code}

Parámetros de ruta

Anchor link to
ParámetroTipoDescripción
codecadenaEl código del preset.

Devuelve { "preset": { ... } }, el Objeto Preset completo.

Actualizar

Anchor link to

Sobrescribe un preset de push existente por código con los campos proporcionados.

PUT /api/presets/{code}

Parámetros de ruta

Anchor link to
ParámetroTipoDescripción
codecadenaEl código del preset a sobrescribir.

Cuerpo de la solicitud

Anchor link to

Mismos campos que Crear (menos application), más el resto de los campos del Objeto Preset. sendType se acepta pero se ignora — el canal de un preset no se puede cambiar después de la creación.

Un objeto vacío en caso de éxito: {}.

UpdatePartial

Anchor link to

Actualiza solo los campos proporcionados de un preset de push existente por código, dejando los campos no establecidos sin cambios.

PUT /api/presets/{code}:partial

Parámetros de ruta

Anchor link to
ParámetroTipoDescripción
codecadenaEl código del preset a parchear.

Cuerpo de la solicitud

Anchor link to

Mismos campos que Actualizar, menos application. A diferencia de Update, cada campo aquí — incluyendo localizedProperties, platformProperties, categories, y el resto del grupo de propiedades de contenido listado en la precaución de Actualizar — se deja sin cambios cuando se omite, y solo se modifica cuando lo envías (un campo de mapa/array que envíes todavía reemplaza completamente el valor existente para ese campo, simplemente no afecta a nada que no hayas incluido). sendType también se acepta pero se ignora.

Ejemplo de solicitud
Anchor link to
{
"sendRate": 500,
"cappingCount": 3,
"cappingDays": 7
}

También un objeto vacío — ver la precaución anterior.

Duplica un preset de push existente, con un nuevo nombre, en la misma aplicación.

POST /api/presets/{code}:clone

Cuerpo de la solicitud

Anchor link to
ParámetroTipoRequeridoDescripción
codecadenaCódigo del preset de origen a duplicar.
namecadenaNombre para el nuevo preset.
Ejemplo de solicitud
Anchor link to
{ "code": "AAAAA-BBBBB", "name": "20% discount (copy)" }

Devuelve { "preset": { ... } }, el nuevo Objeto Preset.

Elimina permanentemente un preset de push por código.

DELETE /api/presets/{code}

Parámetros de ruta

Anchor link to
ParámetroTipoDescripción
codecadenaEl código del preset a eliminar.

Un objeto vacío en caso de éxito: {}.

Referencia de objetos

Anchor link to

Los nombres de los campos a continuación coinciden con lo que Get, Create, Update y Clone realmente devuelven — nombres de campo de proto en snake_case (ver Convenciones). La forma lowerCamelCase utilizada en los ejemplos de solicitud anteriores funciona de la misma manera en la entrada.

Objeto Preset

Anchor link to
CampoTipoDescripción
codecadenaGenerado en Create. Identifica este preset en cualquier otro lugar de la API.
namecadenaNombre del preset.
send_typecadenaCanal del preset (por ejemplo, push).
is_v2booleanotrue para presets creados o migrados al modelo de contenido v2.
systembooleanoMarca el preset como un preset de sistema/interno.
hiddenbooleanoOculta el preset de los resultados de List (envía showHidden: true para incluirlo).
createdcadena (RFC 3339)Marca de tiempo de creación.
updatedcadena (RFC 3339)Marca de tiempo de la última actualización.

Segmentación y contenido

Anchor link to
CampoTipoDescripción
platformsmap<string, boolean>A qué plataformas se dirige el preset, con clave por código de tipo de dispositivo (p. ej., "1" para iOS).
localized_propertiesmap<string, object>Localización → contenido enriquecido por plataforma. Misma forma que LocalizedContent en el payload de Notify — una entrada por bloque de plataforma (ios, android, etc.). Esta es la forma principal de establecer contenido de push específico de la plataforma.
localized_title / localized_subtitle / localized_contentmap<string, string>Localización → texto plano. Una alternativa más simple a localized_properties para el título, subtítulo y cuerpo cuando no necesitas sobrescrituras por plataforma.
platform_propertiesmap<string, object>Sobrescrituras heredadas por plataforma, con clave por nombre de enum de la plataforma (IOS, ANDROID, HUAWEI_ANDROID, OSX). Ver Objeto PlatformProperties a continuación.
open_actionOpenActionAcción que se activa cuando el usuario abre la notificación, aplicada a todas las plataformas. Mutuamente excluyente con open_actions — la respuesta establece exactamente una.
open_actionsmap<string, OpenAction>Sobrescritura por plataforma de open_action, con clave por código de tipo de dispositivo.
deeplinkcadenaCódigo de Deep Link.
deeplink_paramsmap<string, string>Parámetros pasados al deep link.
richmediacadenaCódigo de Rich Media abierto por la notificación.
urlcadenaURL abierta por la notificación, si no se utiliza un deep link o Rich Media.
CampoTipoDescripción
inbox_imagecadenaURL de la imagen que se muestra en la entrada de Message Inbox.
inbox_iconcadenaURL del icono que se muestra en la entrada de Message Inbox.
inbox_daysenteroDías que la entrada permanece en el Message Inbox.
inbox_datecadena (RFC 3339)Fecha de vencimiento explícita para la entrada de Message Inbox, como alternativa a inbox_days.

Organización y metadatos

Anchor link to
CampoTipoDescripción
categoriesarray de cadenasNombres de las categorías con las que está etiquetado el preset.
campaign_codecadenaCódigo de campaña al que se atribuye este preset.
filter_codecadenaCódigo de Segmento / Filtro al que se dirige este preset por defecto.
geo_zonescadenaSegmentación por Geozona, si el preset se activa geográficamente.
journey_uuidcadenaUUID del Customer Journey propietario de este preset, si fue creado desde un punto de envío de push de un journey.
custom_dataobjetoJSON de formato libre reenviado al SDK del cliente como el parámetro u.
bannercadenaURL de la imagen de gran tamaño / adjunto.
iconcadenaURL del icono de notificación personalizado.

Límites de entrega

Anchor link to
CampoTipoDescripción
send_rateenteroLimitación para los envíos que utilizan este preset, en mensajes/segundo — el equivalente a nivel de preset de SendRate de Notify.
capping_count / capping_daysenteroLímite de frecuencia por usuario para este preset — el equivalente a nivel de preset de count / days de FrequencyCapping de Notify.
CampoTipoDescripción
notification_sent_urlcadenaURL de callback solicitada cuando se envía una notificación que utiliza este preset.
notification_delivered_urlcadenaURL de callback solicitada cuando se entrega una notificación que utiliza este preset.
notification_click_urlcadenaURL de callback solicitada cuando se hace clic en una notificación que utiliza este preset.

Campos heredados

Anchor link to

Estos se arrastran del modelo de preset v1. Se pueblan para compatibilidad con el Panel de Control en lugar de para nuevas integraciones.

CampoTipoDescripción
remote_pagecadenaReferencia a página remota heredada.
wns_contentcadenaJSON de plantilla de notificación de Windows heredado, como lo aceptan los métodos v1 createPreset/getPreset.
original_urlcadenaEl valor de url antes de acortar, cuando url fue reemplazado por un enlace acortado.
ios_silent / android_silent / huawei_android_silentbooleanoBanderas de push silencioso (solo datos) por plataforma.

Objeto PlatformProperties

Anchor link to

Campos disponibles en cada entrada de platform_properties (IOS, ANDROID, HUAWEI_ANDROID, OSX):

CampoTipoDescripción
badgecadenaSobrescritura del contador de notificaciones.
soundcadenaNombre del archivo de sonido.
sound_offbooleanoSilenciar el sonido de la notificación.
prioritycadenaPrioridad en la bandeja de entrada (solo Android/Huawei).
delivery_prioritycadenaPrioridad de entrega NORMAL o HIGH (solo Android/Huawei).
ios_interruption_levelcadenapassive, active, time-sensitive, o critical (solo iOS).

Relacionado

Anchor link to