Saltar al contenido principal

Cómo funciona la personalización

Puedes agregar datos personalizados a mensajes, plantillas, Webhooks de Journey y Event Streams usando sintaxis Liquid. Los datos pueden provenir de:

Consideraciones clave

La personalización ayuda a los usuarios a conectarse más profundamente con tu aplicación, potencialmente aumentando la participación y los ingresos. Los ejemplos comunes son poner el nombre de la persona o información específica (como artículos de carrito abandonado) en un mensaje, pero los casos de uso son infinitos. ¿Cuál es el objetivo? ¿Qué deseas enviar en el mensaje? Ejemplos:
  • Agregar una propiedad de usuario como nombre o ID
  • Mostrar factura o OTP
  • Enviar contenido dinámico desde un CSV
¿Dónde están ubicados los datos?
  • ¿Los datos están almacenados en OneSignal como una propiedad o una etiqueta?
  • ¿Los datos están almacenados en tu propia base de datos?
  • ¿Necesitas pasar datos desde tu backend a OneSignal?
¿Cómo deseas enviar el mensaje?
  • Mensajes únicos: ¿Enviar el mensaje desde tu servidor o a través del panel de OneSignal?
  • Mensajes recurrentes: ¿Usando Journeys u otros flujos de trabajo automatizados?
Ejemplo:
  • Objetivo: Enviar una contraseña de un solo uso para ayudar a un usuario a iniciar sesión.
  • Datos:
    • OTP almacenado en tu backend.
    • Nombre de usuario almacenado en OneSignal como una etiqueta.
    • ID externo almacenado en OneSignal como una propiedad.
  • Envío:
    • Desde tu servidor usando nuestra API REST.
    • Desde un flujo de trabajo automatizado usando Journeys.
Un tutorial detallado de este ejemplo está disponible en el tutorial de ejemplo de verificación, Magic Link y OTP.Consulta más ejemplos de tutoriales a continuación.

Fuentes de datos

Opciones disponibles para personalización.

Contenido dinámico

Esta guía actual sobre personalización explica cómo agregar contenido dinámico a tus mensajes, plantillas, Journeys y Event Streams. OneSignal también proporciona una forma de cargar un CSV de datos para personalizar los mensajes basados en datos de tu propia base de datos. Consulta Contenido dinámico para más detalles.

Feeds de datos

Los Feeds de datos son una forma de extraer datos en tiempo real desde tus APIs directamente a los mensajes en el momento del envío. Solo conecta una plantilla a tu fuente de datos y extraeremos los datos de tu servidor e inyectarlos en el mensaje.

Eventos personalizados

Haz referencia a Eventos personalizados dentro de las plantillas utilizadas en Journeys. Dependiendo de la configuración del Journey, puede almacenar uno o más eventos personalizados en nombre del usuario. Puedes usar sintaxis Liquid para mostrar propiedades de estos eventos almacenados, o para mostrar condicionalmente partes de tu mensaje basándose en los eventos.
  • Propiedades de eventos personalizados
  • Ejemplo de estructura de evento personalizado
  • Usando eventos en plantillas
journey.first_event
Para Journeys activados por eventos, este siempre será el evento que causó que el usuario entrara al Journey.Si la regla de entrada del Journey no está activada por eventos, entonces este será el primer evento que coincida con una condición Wait Until.
{% assign event = journey.first_event %}
journey.last_event
El evento personalizado más reciente almacenado. Si solo hay un evento personalizado almacenado, entonces first_event y last_event devolverán lo mismo.
{% assign event = journey.last_event %}
journey.event.most_recent_event_name
El evento más reciente con un nombre dado (reemplaza most_recent_event_name con el nombre del evento que deseas referenciar). Si el mismo evento se usa varias veces, esto devolverá la instancia más reciente. Ejemplo: purchase.
{% assign event = journey.event.purchase %}
Para caracteres especiales (ej. espacios), usa notación hash si el nombre del evento contiene caracteres no alfanuméricos. Por ejemplo, si el nombre del evento es “order status”, puedes referenciarlo con journey.event["order status"].
{% assign event = journey.event["order status"] %}
journey.all_events
Proporciona un array de todos los eventos almacenados para este Journey para el usuario, en el orden en que se recibieron. Puedes usar bucles for para iterar sobre ellos.
{% for event in journey.all_events %}
  {{ event.name }}
{% endfor %}
first_event y last_event son abreviaciones de all_events[0] y all_events[-1], respectivamente.

Propiedades

Campos predefinidos guardados en OneSignal.
Las propiedades no están disponibles para sustituir dentro de mensajes dentro de la aplicación o Live Activities.

Propiedades de usuario y suscripción

Sigue los pasos proporcionados según dónde necesites acceder a los datos.
  • Propiedades disponibles en mensajes y plantillas
  • Propiedades disponibles en Webhooks de Journey y Event Streams
Usa el objeto subscription para acceder a propiedades en el nivel de suscripción en mensajes y plantillas. Las etiquetas también se pueden acceder directamente a través del nombre de la clave. Por ejemplo:
¡Hola {{ first_name | default: "amigo" }}!
¡Felicidades por alcanzar el nivel {{ level | default: "1" }}!
Si tienes etiquetas first_name: Jon y level: 5 para el usuario A y first_name: Jeff y level: 100 para el usuario B, cada uno verá su nombre y nivel en el mensaje. De lo contrario, verán los valores predeterminados.
subscription.external_id
El ID externo asociado con la suscripción.
Tu ID de usuario es {{ subscription.external_id }}.
subscription.email
La dirección de correo electrónico de la suscripción de correo electrónico a la que se envía el mensaje.
Gracias por suscribirte con el correo electrónico {{ subscription.email }}.
subscription.phone_number
El número de teléfono de la suscripción de SMS a la que se envía el mensaje.
Gracias por suscribirte con el número de teléfono {{ subscription.phone_number }}.
subscription.language
El código de idioma del usuario.
Idioma preferido: {{ subscription.language }}
subscription.unsubscribe_token
El token utilizado con la API de cancelar suscripción de correo electrónico con token.
liquid
Cancelar suscripción: https://your-domain.com/unsubscribe?token={{ subscription.unsubscribe_token }}

Propiedades de Journey

El objeto journey es útil para rastrear el nombre del Journey o referenciar eventos personalizados dentro de las plantillas utilizadas en Journeys.
journey.name
El nombre del Journey.
JSON
{
  "journey.name": "{{ journey.name }}"
}

Propiedades de mensaje

El objeto message es útil para acceder a custom_data enviado desde tu backend o para rastrear propiedades del mensaje con Event Streams.
message.id
El ID del mensaje de OneSignal.
JSON
{
  "message.id": "{{ message.id }}"
}
message.name
El nombre del mensaje.
JSON
{
  "message.name": "{{ message.name }}"
}
message.template_id
El ID de plantilla de OneSignal.
JSON
{
  "message.template_id": "{{ message.template_id }}"
}

Propiedades de plantilla

El objeto template es útil para acceder a detalles sobre la plantilla utilizada para enviar el mensaje.
template.id
El ID de plantilla de OneSignal.
JSON
{
  "template.id": "{{ template.id }}"
}
template.name
El nombre de la plantilla.
JSON
{
  "template.name": "{{ template.name }}"
}

Propiedades de OneSignal

Los objetos app y org son útiles para acceder a detalles sobre la aplicación y organización que envió el mensaje.
app.id
El ID de aplicación de OneSignal.
JSON
{
  "app.id": "{{ app.id }}"
}
app.name
El nombre de la aplicación de OneSignal.
JSON
{
  "app.name": "{{ app.name }}"
}
org.id
El ID de organización de OneSignal.
JSON
{
  "org.id": "{{ org.id }}"
}
org.name
El nombre de la organización de OneSignal.
JSON
{
  "org.name": "{{ org.name }}"
}

API custom_data

Agrega personalización directamente desde tu backend usando custom_data y nuestra API de Create message. Pasos:
  1. Crea una plantilla
  2. Usa sintaxis Liquid con el formato {{ message.custom_data.key }}
  3. Envía una solicitud API con el objeto custom_data y template_id

Ejemplo: JSON plano

Template
Tu factura para {{message.custom_data.product_name}} está lista.
URL: https://your-domain.com/invoice={{message.custom_data.invoice_id}}
API Request
{
  "app_id": "YOUR_APP_ID",
  "template_id": "YOUR_TEMPLATE_ID",
  "include_email_tokens": ["THE_USER_EMAIL"],
  "custom_data": {
    "invoice_id": "463246732",
    "product_name": "Widget"
  }
}
El cliente ve:
  • “Tu factura para Widget está lista.”
  • La URL final: https://your-domain.com/invoice=463246732

Ejemplo: Datos de array

Template
¡Tu {{message.custom_data.cart_items[0].item_name}} te está esperando!
Imagen: {{message.custom_data.cart_items[0].image_url}}
API Request
{
  "app_id": "YOUR_APP_ID",
  "template_id": "YOUR_TEMPLATE_ID",
  "include_email_tokens": ["THE_USER_EMAIL"],
  "custom_data": {
    "cart_items": [
      {
        "item_name": "sweater",
        "img_url": "https://.../sweater.png"
      },{
        "item_name": "socks",
        "img_url": "https://.../socks.png"
      }
    ]
  }
}
El cliente ve:
  • “¡Tu sweater te está esperando!”
  • La imagen: https://.../sweater.png

Ejemplo: Personalización masiva

Para personalizar un solo mensaje para muchos usuarios en una solicitud:
Template
{% assign eid = message.custom_data.users[subscription.external_id] %}
Hola {{ eid.first_name }}, tienes {{ eid.points }} puntos. Tu nivel es {{ eid.level }}.
API Request
{
  "app_id": "YOUR_APP_ID",
  "template_id": "YOUR_TEMPLATE_ID",
  "include_aliases": {
    "external_id": ["user123", "user456"]
  },
  "custom_data": {
    "users": {
      "user123": { "first_name": "John", "points": "150", "level": "Gold" },
      "user456": { "first_name": "Sarah", "points": "200", "level": "Platinum" }
    }
  }
}
El cliente ve:
  • “Hola John, tienes 150 puntos. Tu nivel es Gold.”
  • “Hola Sarah, tienes 200 puntos. Tu nivel es Platinum.”

Tutoriales