Referencia de payload
Referencia para el mensaje Payload utilizado por Notify al enviar a través de cualquier canal que no sea correo electrónico (push, SMS, Telegram, Kakao, LINE, Viber, WhatsApp, Facebook Messenger).
Payload
Anchor link topreset(string): código del preset de push (formatoXXXXX-XXXXX) para aplicar a este mensaje.sms_preset(string): código (formatoXXXXX-XXXXX) de un preset de SMS guardado. Su texto por configuración regional se resuelve en elsms.bodyde cada configuración regional. Unsms.bodyen línea para una configuración regional dada anula el preset para esa configuración regional. El preset debe pertenecer a la misma aplicación que el mensaje.content(LocalizedContent): contenido del mensaje. Mutuamente exclusivo consilent.silent(bool): enviar un push silencioso (solo datos) a todas las plataformas. Mutuamente exclusivo concontent. Para que solo algunas plataformas sean silenciosas, establezcasilentdentro decontentpara iOS o Android en su lugar.custom_data(object): JSON de formato libre reenviado al SDK del cliente como el parámetrou. Los enteros muy grandes pueden perder precisión; consulte Enteros grandes en datos personalizados.custom_data_raw(string): una cadena que contiene un objeto JSON, reenviada al SDK del cliente como el parámetrou. Los números que contiene conservan su valor exacto. Mutuamente exclusivo con uncustom_datano vacío. Un valor no válido devuelve400.open_action(OpenAction): acción que se activa cuando el usuario abre la notificación.open_actions(map<Platform,OpenAction>): anulación por plataforma deopen_action. La clave es un valor numérico del enumPlatform.voip_push(bool): notificación VoIP de iOS.
{ "payload": { "preset": "XXXXX-XXXXX", "content": { "localized_content": { "default": { "ios": { "title": "Hello", "body": "Tap to view" } } } }, "custom_data": { "order_id": "42" }, "open_action": { "link": { "url": "https://example.com/promo" } } }}Enteros grandes en datos personalizados
Anchor link toLos enteros mayores que 9007199254740992 pierden precisión en custom_data. Use custom_data_raw para conservarlos exactos.
custom_data es un google.protobuf.Struct (un objeto genérico similar a JSON). Almacena cada número como double, un número de punto flotante de 64 bits que solo es exacto para enteros de hasta 9007199254740992. Los enteros mayores se redondean: 5190090000030465245 llega al dispositivo como 5190090000030465000. Las cadenas no se ven afectadas.
Para conservar exactos esos enteros, envíe en custom_data_raw una cadena que contenga el objeto JSON:
{ "payload": { "silent": true, "custom_data_raw": "{\"pushUID\": 5190090000030465245}" } }Reglas de custom_data_raw:
- La cadena debe contener un objeto JSON. Un array, una cadena,
nullo un JSON no válido devuelven400(INVALID_ARGUMENT) con una infracción de campo enpayload.custom_data_raw. - Si
custom_datatiene alguna clave y se establececustom_data_raw, la solicitud devuelve400. Un objetocustom_datavacío se ignora. - Al igual que
custom_data, reemplaza los datos personalizados guardados en elpresetde push. - El objeto se vuelve a convertir en texto JSON antes de la entrega. No se conserva el orden de las claves y se eliminan los espacios en blanco. Los números conservan su valor exacto, pero el texto original no se conserva byte a byte.
- En
/messaging/v2/notify/batch, uncustom_data_rawno válido solo hace fallar su propio elemento. Los demás elementos se envían.
Cómo se envía la solicitud:
- REST: no se necesitan cambios para
/messaging/v2/notifyni/messaging/v2/notify/batch. Sicustom_datacontiene un entero que un double no puede representar con exactitud, la API lo conserva sin pérdida automáticamente. Aun así, puede establecercustom_data_rawexplícitamente. - gRPC: el cliente construye el
Structpor sí mismo, por lo que la precisión se pierde antes de enviar la solicitud. Rellenecustom_data_rawen lugar decustom_data.
Dónde se entrega la notificación:
- Android: el SDK pasa
ua la aplicación como una cadena a través dePushMessage.getCustomData(), por lo que se conservan todos los dígitos. - Web push: el Web SDK analiza
uconJSON.parse, y todo número de JavaScript es un double. Los enteros grandes se redondean en el navegador independientemente de la API, así que páselos como cadenas. - Windows: la notificación toast recibe los mismos datos
uque las demás plataformas, y los enteros enviados a través decustom_data_rawllegan exactos.
LocalizedContent
Anchor link toMapea el código de la configuración regional → contenido por plataforma. Las claves son códigos de dos letras ISO 639-1 (por ejemplo, "en", "es") más la clave especial "default" para una traducción general. Las excepciones a ISO 639-1 son "zh-Hant" y "zh-Hans" para chino tradicional y simplificado.
{ "localized_content": { "default": { "ios": { "title": "Hello", "body": "Tap to view" }, "android": { "title": "Hello", "body": "Tap to view" } }, "es": { "ios": { "title": "Hola", "body": "Toca para ver" }, "android": { "title": "Hola", "body": "Toca para ver" } } }}Selección de la configuración regional para un dispositivo
Anchor link toEl contenido entregado a un dispositivo se elige en este orden:
- Coincidencia exacta con el idioma del dispositivo.
- Clave
"default". - Clave
"en". - Cualquier otra configuración regional presente en el mapa.
Proporciona al menos uno de "default" o "en" para que cada dispositivo tenga una alternativa determinista. Si no esperas variantes por configuración regional, envía solo "default".
Cada entrada de configuración regional es un objeto Content con bloques opcionales por plataforma. Solo rellena las plataformas a las que te diriges.
| Bloque de plataforma | Canal |
|---|---|
ios | Push de iOS |
android | Push de Android (FCM) |
huawei_android | Push de Huawei Android |
mac_os | Push de macOS |
amazon | Push de Amazon (ADM) |
safari | Push web de Safari |
chrome | Push web de Chrome |
firefox | Push web de Firefox |
ie | Push web de Internet Explorer |
windows | Push de Windows (tile / toast / badge) |
telegram | Mensaje de Telegram |
kakao | Mensaje de Kakao |
line | Mensaje de LINE |
viber | Mensaje de Viber |
whatsapp | Mensaje de WhatsApp |
fb_messenger | Mensaje de Facebook Messenger |
sms | Mensaje SMS |
Botones
Anchor link toCada entrada de idioma también puede incluir buttons, hasta 3 botones de acción que se muestran debajo del push en iOS, Android y Huawei. Las demás plataformas los ignoran. Los botones requieren iOS SDK 7.2.10 o posterior con una Notification Service Extension, y Android SDK 6.17.0 o posterior.
Cada PushButton tiene estos campos:
id(string): el ID del botón que su aplicación recibe al tocarlo. Hasta 64 caracteres, sin espacios, único dentro del push. Obligatorio paraACTION_OPENyACTION_CUSTOM. Si lo omite para otras acciones, Pushwoosh asignabtn_1,btn_2, etc.label(string): el texto del botón, de 1 a 64 caracteres.action(enum):ACTION_OPENabre la aplicación,ACTION_URLabreurl,ACTION_DEEPLINKabre un deep link,ACTION_CUSTOMpasaida su aplicación, y su aplicación lo gestiona.url(string): una direcciónhttpohttpsabsoluta paraACTION_URL, o un deep link con esquema paraACTION_DEEPLINK.platform_urls(map): un deep link por plataforma paraACTION_DEEPLINK, con el código de plataforma como clave:1iOS,3Android,17Huawei.style(enum):STYLE_DEFAULToSTYLE_DESTRUCTIVE. El estilo destructivo muestra el botón en rojo en iOS.
{ "localized_content": { "default": { "ios": { "title": "Your order is on its way", "body": "Arrives tomorrow" }, "android": { "title": "Your order is on its way", "body": "Arrives tomorrow" }, "buttons": [ { "id": "track", "label": "Track order", "action": "ACTION_DEEPLINK", "url": "myapp://orders/42" }, { "id": "cancel", "label": "Cancel order", "action": "ACTION_CUSTOM", "style": "STYLE_DESTRUCTIVE" } ] } }}Campos comunes de push
Anchor link toEstos campos son compartidos por los bloques ios, android, huawei_android, mac_os, amazon, safari, chrome y firefox (el soporte varía. Los campos no utilizados son ignorados por la plataforma correspondiente).
title(string): título de la notificación.body(string): cuerpo de la notificación.time_to_live(duration, p. ej."3600s"): cuánto tiempo el servidor de push debe retener la notificación para un dispositivo sin conexión.sound(string): nombre del archivo de sonido.sound_enabled(bool): activar o suprimir el sonido.badges(string): conteo de la insignia (iOS) o análogo.root_params(object): anulaciones de payload crudas específicas de la plataforma.inbox(Inbox): entrada en el Buzón de Mensajes.
{ "android": { "title": "Hello", "body": "Tap to view", "time_to_live": "3600s", "sound": "default", "sound_enabled": true, "badges": "+1" }}iOS (ios)
Anchor link tosubtitle(string): subtítulo de la notificación de iOS.is_critical(bool): alerta crítica (requiere autorización).attachment(string): URL de un archivo adjunto multimedia.thread_id(string): identificador de hilo para notificaciones agrupadas.trim_content(bool): recortar el contenido para que quepa.category_id(string): identificadorUNNotificationCategorypara acciones interactivas.interruption_level(string):passive,active,time-sensitiveocritical.collapse_id(string): identificador de colapso de APNs. Las notificaciones con el mismocollapse_idse reemplazan entre sí en el dispositivo.silent(bool): enviar el push de iOS como silencioso (solo datos), mientras que las demás plataformas del mismo mensaje reciben una notificación normal. Se establece dentro decontent, por lo que funciona junto con él. Para que todas las plataformas sean silenciosas, use en su lugar elsilentde nivel superior, que reemplaza acontent. Establézcalo en cualquier configuración regional para aplicarlo a todas las configuraciones regionales.
{ "ios": { "title": "Hello", "body": "Tap to view", "subtitle": "New update", "attachment": "https://cdn.example.com/image.png", "interruption_level": "active", "thread_id": "promo" }}Android (android, huawei_android)
Anchor link toicon(string): icono pequeño de la notificación.banner(string): URL de imagen grande.delivery_priority(NORMAL|HIGH): prioridad de entrega de FCM.vibration(bool): vibración al recibir.led_color(string, hex): color del LED de notificación.icon_background_color(string, hex): color de fondo del icono.show_on_lockscreen(bool): mostrar en la pantalla de bloqueo.custom_icon(string): URL de un icono personalizado.priority(NotificationPriority): prioridad en la bandeja.group_id(string): clave del grupo de notificaciones.collapse_key(string): clave de colapso de FCM. Las notificaciones con la mismacollapse_keyse reemplazan entre sí mientras el dispositivo está sin conexión.silent(bool): enviar el push a esta plataforma como silencioso (solo datos), mientras que las demás plataformas del mismo mensaje reciben una notificación normal. Se establece dentro decontent, por lo que funciona junto con él. Para que todas las plataformas sean silenciosas, use en su lugar elsilentde nivel superior, que reemplaza acontent. Establézcalo en cualquier configuración regional para aplicarlo a todas las configuraciones regionales. El bloquebaidu_androidtambién aceptasilent, con el mismo comportamiento.
{ "android": { "title": "Hello", "body": "Tap to view", "icon": "ic_notification", "banner": "https://cdn.example.com/banner.png", "led_color": "#FF0000", "priority": "PRIORITY_HIGH", "delivery_priority": "HIGH" }}macOS (mac_os)
Anchor link toUsa los campos comunes de push más subtitle y action (URL que se abre cuando el usuario hace clic en la notificación).
{ "mac_os": { "title": "Hello", "body": "Tap to view", "subtitle": "New update", "action": "https://example.com/promo" }}Amazon (amazon)
Anchor link toUsa los campos comunes de push más custom_icon y priority (NotificationPriority).
{ "amazon": { "title": "Hello", "body": "Tap to view", "custom_icon": "https://cdn.example.com/icon.png", "priority": "PRIORITY_HIGH" }}Safari (safari)
Anchor link toaction(string): URL que se abre cuando el usuario hace clic en la notificación.url_arguments(array of string): argumentos de URL de Safari sustituidos en la plantilla de URL de Web Push.
{ "safari": { "title": "Hello", "body": "Tap to view", "action": "https://example.com/promo", "url_arguments": ["promo", "2026"] }}Chrome (chrome)
Anchor link toicon,image(string): URLs de icono pequeño e imagen grande.duration(duration): temporizador de cierre automático.button_text1/button_url1,button_text2/button_url2: hasta dos botones de acción.
{ "chrome": { "title": "Hello", "body": "Tap to view", "icon": "https://cdn.example.com/icon.png", "image": "https://cdn.example.com/banner.png", "duration": "20s", "button_text1": "Open", "button_url1": "https://example.com/promo" }}Firefox (firefox)
Anchor link toUsa solo title, body, icon, root_params e inbox.
{ "firefox": { "title": "Hello", "body": "Tap to view", "icon": "https://cdn.example.com/icon.png" }}Windows (windows)
Anchor link toWindows usa una forma diferente:
{ "windows": { "type": "TOAST", "template": { "title": "Hello", "body": "Tap to view" }, "tag": "promo", "cache": true, "time_to_live": "3600s" }}typeesTILE,TOASToBADGE.template(estructurado) oraw({ "content": "<raw xml>" }) — exactamente uno.
Telegram (telegram)
Anchor link tobody(string): texto del mensaje.content_variables(string): variables en formato de cadena JSON para la plantilla del lado del bot.
{ "telegram": { "body": "Hello from Pushwoosh", "content_variables": "{\"name\":\"John\"}" }}Kakao (kakao)
Anchor link tocontent(string): contenido del mensaje.template(string): código de plantilla aprobado.content_variables(string): vinculaciones de variables de plantilla en formato de cadena JSON.
{ "kakao": { "content": "Hello from Pushwoosh", "template": "welcome_v1", "content_variables": "{\"name\":\"John\"}" }}LINE (line)
Anchor link tocontent(string): cuerpo de texto sin formato.template(string): código de una plantilla de LINE configurada en el Panel de Control de Pushwoosh (utilizada para enviar mensajes de imagen, carrusel o flexibles). Para contenido enriquecido, preconfigura la plantilla en el Panel de Control y haz referencia a ella aquí.
Se debe establecer al menos uno de content o template.
{ "line": { "content": "Hello from Pushwoosh", "template": "promo_carousel" }}Viber (viber)
Anchor link toUn mensaje de Viber es un cuerpo de texto libre, opcionalmente con una imagen y un botón o con un carrusel, o una plantilla transaccional preaprobada (Omni Messaging / MStat) a la que se hace referencia por id e idioma.
body(string): mensaje de texto sin formato. Requerido cuando no se establecetemplate_id, a menos que se establezcaimage. Requerido con un botón o un carrusel.image(string): URL pública de la imagen. Se ignora cuando se establecetemplate_id.button_caption(string): texto del botón, hasta 30 caracteres. Se establece junto conbutton_action. Requierebody. Se ignora cuando se establecetemplate_id.button_action(string): enlace del botón: una URLhttp://ohttps://, un deep linkviber://o un token de Omni como{lp-100}(un marcador de posición de enlace de seguimiento que Omni Messaging resuelve en el momento del envío). Se establece junto conbutton_caption.carousel(object): de 2 a 5 tarjetas deslizables que se muestran debajo debody. No se puede combinar conimage,button_caption,button_actionnitemplate_id. Consulte Carrusel.template_id(string): id de una plantilla transaccional preaprobada. Cuando se establece, tiene prioridad sobrebody.template_lang(string): configuración regional de la plantilla. Requerido cuando se establecetemplate_id.template_params(map<string, string>): vinculaciones de clave/valor sustituidas en la plantilla, p. ej.{ "name": "John", "code": "123456" }.all_devices(bool):false(predeterminado) entrega solo al dispositivo principal del usuario;trueentrega a todos los dispositivos del usuario.
Se debe establecer al menos uno de body, image o template_id. Cuando se establece template_id, se requiere template_lang.
Dirige a los destinatarios de Viber como hwids en el formato viber:<teléfono> (E.164), por ejemplo viber:+1234567890.
Texto sin formato:
{ "viber": { "body": "Hello from Pushwoosh" }}Plantilla transaccional:
{ "viber": { "template_id": "e3dec4a0-c063-4b0f-96d5-cf9d629a7abe", "template_lang": "en", "template_params": { "name": "John", "code": "123456", "expires_in": "5 minutes" }, "all_devices": false }}Carrusel
Anchor link tocarousel.items contiene de 2 a 5 tarjetas. Para configurar un carrusel en un journey, consulte Enviar un carrusel. Cada tarjeta tiene estos campos:
title(string): título de la tarjeta, de 2 a 38 caracteres. Requerido.image(string): URL pública de la imagenhttp://ohttps://. Requerido.primary_button(object): botón principal. Requerido.secondary_button(object): segundo botón. Opcional.
Cada botón tiene dos campos, y ambos son obligatorios cuando el botón está presente:
caption(string): texto del botón, hasta 10 caracteres paraprimary_buttony hasta 12 parasecondary_button.action(string): enlace del botón: una URL con esquema (http://,https://,viber://) o un token de Omni como{lp-100}, los mismos valores quebutton_action.
Una solicitud que incumple cualquiera de estas reglas se rechaza con INVALID_ARGUMENT. El detalle google.rpc.BadRequest indica el campo, por ejemplo viber.carousel.items[0].title.
Ejemplo:
{ "viber": { "body": "New arrivals are in. Swipe to see them.", "carousel": { "items": [ { "title": "Running shoes", "image": "https://example.com/img/shoes.jpg", "primary_button": { "caption": "Buy now", "action": "https://example.com/shoes" }, "secondary_button": { "caption": "Details", "action": "{lp-100}" } }, { "title": "Sports backpack", "image": "https://example.com/img/backpack.jpg", "primary_button": { "caption": "Buy now", "action": "https://example.com/backpack" } } ] } }}WhatsApp (whatsapp)
Anchor link toLos mensajes de WhatsApp pasan por Meta y están sujetos a las reglas de mensajería de Meta. La división clave es entre el texto de formato libre (solo se entrega dentro de la ventana de servicio al cliente de 24 horas abierta por un mensaje entrante del usuario) y las plantillas aprobadas (requeridas para la iniciación saliente y para cualquier mensaje fuera de la ventana de 24 horas).
content(string): texto del mensaje de formato libre. Entregado por Meta solo dentro de la ventana de 24 horas.content_id(string): nombre de una plantilla de Meta preaprobada (p. ej."hello_world"). Requerido para la iniciación saliente o cualquier mensaje fuera de la ventana de 24 horas.language(string): configuración regional de la plantilla que debe coincidir exactamente con la configuración regional aprobada en Meta (p. ej."en_US","en_GB"). Solo tiene sentido junto concontent_id. Esto es independiente de la clave externaLocalizedContent. La clave externa selecciona el contenido para un dispositivo, ylanguageselecciona la configuración regional de la plantilla de Meta para ese contenido.content_variables(string): objeto JSON que mapea los marcadores de posición del cuerpo, p. ej."{\"1\":\"John\"}".button_url_variables(string): objeto JSON que mapea los marcadores de posición de la URL del botón con clave por índice de botón, p. ej."{\"0\":\"https://...\"}".header_variables(string): objeto JSON que mapea los marcadores de posición del encabezado con clave por tipo, p. ej."{\"image\":\"https://...\"}".
Se debe establecer al menos uno de content o content_id.
{ "whatsapp": { "content_id": "hello_world", "language": "en_US", "content_variables": "{\"1\":\"John\"}" }}Facebook Messenger (fb_messenger)
Anchor link toLos mensajes de Facebook Messenger pasan por Meta y están sujetos a las reglas de mensajería de Meta: el contenido de formato libre solo se entrega dentro de la ventana de servicio al cliente de 24 horas abierta por un mensaje entrante del usuario. Fuera de esa ventana, establece message_tag en uno de los casos de uso aprobados por Meta, o Meta rechazará el envío.
body(string): mensaje de texto sin formato. Requerido a menos que se establezcamessage.message(string): un objetomessagecompleto de la Meta Send API como cadena JSON, con texto, archivos adjuntos, plantillas o respuestas rápidas. Cuando se establece, Pushwoosh lo envía en lugar debody.message_tag(string): requerido fuera de la ventana de 24 horas. Uno deCONFIRMED_EVENT_UPDATE,POST_PURCHASE_UPDATE,ACCOUNT_UPDATE,HUMAN_AGENT.
{ "fb_messenger": { "body": "Hello from Pushwoosh", "message_tag": "ACCOUNT_UPDATE" }}Para este canal no hay un identificador de dispositivo separado: hwid, push_token y user_id se resuelven todos al mismo valor, el ID de Alcance de Página (PSID) de Meta del destinatario. Dirígete a una conversación específica con cualquiera de ellos en NotifyTransactional.
curl -X POST https://api.pushwoosh.com/messaging/v2/notify \ -H "Authorization: Token YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "transactional": { "application": "XXXXX-XXXXX", "platforms": ["FB_MESSENGER"], "hwids": { "list": ["<recipient-psid>"] }, "payload": { "content": { "localized_content": { "default": { "fb_messenger": { "body": "Hello from Pushwoosh" } } } } }, "schedule": { "at": "2026-05-01T12:00:00Z" } } }'SMS (sms)
Anchor link toSMS tiene su propio bloque de plataforma dentro del Content de cada configuración regional, junto con ios, android y los otros canales de mensajería.
body(string): texto del SMS para la configuración regional. Requerido cuando el bloquesmsestá presente.
Hay dos maneras de proporcionar el texto:
- En línea — establece
sms.bodypor configuración regional enlocalized_content. - Desde un preset — establece el
sms_preseta nivel de payload al código (formatoXXXXX-XXXXX) de un preset de SMS guardado. Su contenido por configuración regional se resuelve ensms.bodypara cada configuración regional que el preset define. Unsms.bodyen línea para una configuración regional anula el preset para esa configuración regional, por lo que puedes reutilizar un preset y aun así ajustar idiomas individuales.
{ "payload": { "sms_preset": "XXXXX-XXXXX", "content": { "localized_content": { "default": { "sms": { "body": "Your order has shipped." } }, "es": { "sms": { "body": "Tu pedido ha sido enviado." } } } } }}Añadir subject y file_urls a un bloque sms convierte el mensaje en un MMS. Solo AbleMobile tiene un punto final de MMS — otros proveedores de SMS ignoran ambos campos y entregan solo el body de texto sin formato.
subject(string): asunto del MMS. Requiere al menos una entrada enfile_urls— un asunto sin archivos adjuntos es rechazado. Hasta 40 caracteres ASCII, o 13 caracteres si el asunto contiene caracteres no ASCII.file_urls(array of string): hasta 3 URLs de archivos adjuntos. Cada una debe ser una URLhttpsabsoluta que termine en.jpgo.gif—.jpegy.pngson rechazados por la validación, incluso para un archivo JPEG o PNG genuino, porque el proveedor no puede decodificarlos. Cada archivo también debe ser de 200 KB o menos; AbleMobile rechaza todo el envío si algún archivo adjunto es más pesado.message_at(int): índice enfile_urls(base 0) después del cual se muestra el texto del cuerpo del SMS.
subject y file_urls admiten la personalización Liquid, al igual que body.
{ "sms": { "body": "Your order has shipped.", "subject": "Order update", "file_urls": [ "https://cdn.example.com/shipping-label.jpg", "https://cdn.example.com/tracking-map.gif" ], "message_at": 1 }}Añadir rcs a un bloque sms envía una plantilla de contenido de Twilio por RCS (Rich Communication Services) en lugar de body. Twilio entrega la plantilla como un mensaje RCS y, como alternativa, envía un SMS creado a partir del tipo twilio/text de la plantilla, no a partir de body. Una plantilla sin el tipo twilio/text solo llega a los teléfonos compatibles con RCS.
rcs.content_sid(string): SID de la plantilla de contenido de Twilio,HXseguido de 32 caracteres hexadecimales. Obténgalo conListRcsTemplateso en la Twilio Console.rcs.content_variables(string): objeto JSON con las variables de la plantilla, serializado como cadena, por ejemplo"{\"1\": \"{FirstName|CapitalizeFirst|there}\"}". Los valores admiten etiquetas y personalización Liquid. Una variable que omita toma el valor predeterminado de la plantilla.
body sigue siendo obligatorio en un bloque sms con rcs.
La solicitud se rechaza a menos que la aplicación envíe SMS a través de Twilio con su propio Account SID, Auth token y Messaging Service SID configurados en la configuración de la plataforma SMS. Una aplicación que usa credenciales de Twilio proporcionadas por Pushwoosh no puede enviar RCS.
Un preset de SMS puede incluir una plantilla por configuración regional. Con sms_preset en el payload, la plantilla del preset se usa para cada configuración regional en la que la solicitud no aporta su propio rcs.content_sid.
{ "sms": { "body": "Your order has shipped.", "rcs": { "content_sid": "HXb5b62575e6e4ff6129ad7c8efe1f983e", "content_variables": "{\"1\": \"{FirstName|CapitalizeFirst|there}\", \"2\": \"A-1042\"}" } }}Listar plantillas RCS
Anchor link toListRcsTemplates devuelve las plantillas de contenido de Twilio de la aplicación que se pueden enviar por RCS, leídas con las propias credenciales de Twilio de la aplicación.
GET https://rpc-api.svc-nue.pushwoosh.com/api/sms_presets:rcs_templates?application=XXXXX-XXXXXAuthorization: Api YOUR_API_TOKENapplication(string, query): código de la aplicación, formatoXXXXX-XXXXX.
La respuesta contiene un array templates. Solo se incluyen las plantillas con al menos un tipo de contenido RCS: twilio/card, twilio/carousel, twilio/quick-reply, twilio/call-to-action o twilio/media.
| Campo | Tipo | Descripción |
|---|---|---|
content_sid | string | SID de la plantilla, el valor para rcs.content_sid. |
friendly_name | string | Nombre de la plantilla en Twilio. |
language | string | Código de idioma de la plantilla. |
types | array of string | Tipos de contenido de Twilio que define la plantilla, por ejemplo twilio/card y twilio/text. |
variables | object | Variables de la plantilla con sus valores predeterminados. |
has_sms_fallback | boolean | true cuando la plantilla tiene un tipo twilio/text, el SMS que recibe un teléfono sin RCS. |
{ "templates": [ { "content_sid": "HXb5b62575e6e4ff6129ad7c8efe1f983e", "friendly_name": "order_shipped_card", "language": "en", "types": ["twilio/card", "twilio/text"], "variables": { "1": "there", "2": "your order" }, "has_sms_fallback": true } ]}ListRcsTemplates devuelve estos errores:
| Estado HTTP | Causa |
|---|---|
400 Bad Request | La aplicación no tiene su propio Account SID ni Auth token de Twilio (FailedPrecondition). |
401 Unauthorized | Twilio rechazó las credenciales de la aplicación (Unauthenticated). |
503 Service Unavailable | La Twilio Content API devolvió otro error (Unavailable). |
OpenAction
Anchor link toDefine la acción que se realiza cuando el usuario abre el mensaje.
Exactamente uno de:
rich_media(RichMedia): abrir una página de Rich Media.deep_link: abrir un deep link:{ "code": "flow-code", "params": { "key": "value" } }.link(Link): abrir una URL.
{ "open_action": { "deep_link": { "code": "flow-code", "params": { "promo": "summer" } } }}La URL del deeplink y los valores de params admiten la sintaxis de personalización Liquid — las expresiones se resuelven antes de que se abra el deep link.
RichMedia
Anchor link to{ "code": "XXXXX-XXXXX" } // por código de Rich Media{ "url": "https://..." } // por URL remotaLink
Anchor link to{ "url": "https://example.com/promo", "shortener": "BITLY"}shortener es NONE (predeterminado) o BITLY.
Inbox
Anchor link toConfigura cómo aparece el mensaje en el Buzón de Mensajes.
{ "image_url": "https://cdn.example.com/inbox.png", "expiration_date": "2026-05-15T00:00:00Z"}image_url(string): imagen que se muestra en la entrada del buzón.expiration_date(timestamp): cuándo se elimina la entrada del buzón.expires_in(duration, p. ej."604800s"): cuánto tiempo permanece la entrada en el buzón, contado desde la fecha de envío (elsend_dateprogramado o el momento de la solicitud en los envíos inmediatos). Debe ser positivo. Se ignora si se estableceexpiration_date.
Para establecer una vida útil relativa en lugar de una fecha fija, envíe solo expires_in:
{ "image_url": "https://cdn.example.com/inbox.png", "expires_in": "604800s"}Si su cuenta tiene una vida útil máxima en el buzón, se rechaza un expiration_date o expires_in que la supere.
Enum NotificationPriority
Anchor link toControla la prioridad de la notificación en el dispositivo de destino, desde PRIORITY_MIN (la más baja) hasta PRIORITY_MAX (la más alta).
PRIORITY_UNSPECIFIEDPRIORITY_MINPRIORITY_LOWPRIORITY_DEFAULTPRIORITY_HIGHPRIORITY_MAX
Ejemplo: Enviar un push a un segmento
Anchor link tocurl -X POST https://api.pushwoosh.com/messaging/v2/notify \ -H "Authorization: Token YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "segment": { "application": "XXXXX-XXXXX", "platforms": ["IOS", "ANDROID"], "code": "active_users", "payload": { "content": { "localized_content": { "en": { "ios": { "title": "Hello", "body": "Hello, world!" }, "android": { "title": "Hello", "body": "Hello, world!" } }, "es": { "ios": { "title": "¡Hola!", "body": "¡Hola, mundo!" }, "android": { "title": "¡Hola!", "body": "¡Hola, mundo!" } } } }, "open_action": { "link": { "url": "https://example.com/promo" } } }, "schedule": { "at": "2026-05-01T12:00:00Z" }, "message_type": "MESSAGE_TYPE_MARKETING" } }'Ejemplo: Push transaccional por ID de usuario
Anchor link tocurl -X POST https://api.pushwoosh.com/messaging/v2/notify \ -H "Authorization: Token YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "transactional": { "application": "XXXXX-XXXXX", "platforms": ["IOS", "ANDROID"], "users": { "list": ["customer-42"] }, "payload": { "content": { "localized_content": { "default": { "ios": { "title": "Your order", "body": "Order #42 has shipped." }, "android": { "title": "Your order", "body": "Order #42 has shipped." } } } }, "custom_data": { "order_id": "42" } }, "schedule": { "at": "2026-05-01T12:00:00Z" }, "message_type": "MESSAGE_TYPE_TRANSACTIONAL" } }'