custom_data en la API Create Message para enviar datos dinámicos desde tu backend y renderizarlos dentro de plantillas usando sintaxis Liquid.
custom_data:
- Es específico del mensaje
- No se almacena
- Existe solo durante la solicitud de la API
- Debe usarse con un
template_id
Liquid
Cuándo usar custom_data
Usa custom_data cuando necesites:
- Datos que cambian por mensaje (totales de pedidos, artículos del carrito, saldos)
- Necesites arrays (listas de productos, líneas de artículos, recomendaciones)
- Los datos no deben persistir (códigos de un solo uso, URLs temporales)
- Envías mensajes activados desde el backend
- Quieres personalización masiva en una sola solicitud de API
Cómo funciona la personalización con custom_data
Agregar custom_data a los mensajes requiere algunos pasos:
Crear una plantilla
Crea una plantilla de Push, Email o SMS en Templates desde el panel o a través de la API Create Template.
Enviar custom_data en tu solicitud de API
Llama a la API Create Message con:
template_id- El ID de la plantillacustom_data- El objeto de datos- Segmentación de audiencia (
include_player_ids,include_aliaseso segmentos)
Patrones de datos
Ejemplos comunes de patrones de datos que puedes usar concustom_data.
Ejemplo de JSON plano
Usa pares clave-valor simples para personalización básica como nombres, IDs, URLs o cualquier dato de valor único. Caso de uso: Mensajes transaccionales (facturas, recibos, confirmaciones) donde cada campo contiene un solo valor. Plantilla:Liquid
JSON
Text
Ejemplo de datos con arrays
Pasa arrays de objetos para trabajar con múltiples elementos como productos del carrito, líneas de artículos de un pedido o recomendaciones. Los arrays permiten tanto el acceso directo (indexación) como la iteración (bucles). Caso de uso: Mostrar listas de productos, tablas de clasificación, resúmenes de pedidos o cualquier dato con múltiples elementos. Plantilla con indexación (accediendo al primer elemento):Liquid
Liquid
Text
{{message.custom_data.cart_items.size}}— Número de elementos en el array (devuelve2en este ejemplo){{message.custom_data.cart_items.first.item_name}}— Nombre del primer elemento (equivalente a[0]){{message.custom_data.cart_items.last.item_name}}— Nombre del último elemento
Ejemplo de personalización masiva
Envía una sola solicitud de API a múltiples usuarios donde cada destinatario ve contenido personalizado basado en suexternal_id.
Cómo funciona:
- Estructura
custom_datacomo un objeto donde las claves son external_ids y los valores son datos específicos del usuario - En la plantilla, usa
subscription.external_idpara buscar los datos del destinatario actual - OneSignal renderiza la plantilla una vez por destinatario con sus datos específicos
subscription.external_idcontiene el external_id del destinatario actual (por ejemplo, “user123”)message.custom_data.users[subscription.external_id]busca los datos de ese usuario en el objeto custom_datauserse convierte en una variable abreviada para los datos de ese usuario- Cada destinatario solo ve su propio contenido personalizado
- John (user123): “Hi John, you have 150 points. Your level is Gold.”
- Sarah (user456): “Hi Sarah, you have 200 points. Your level is Platinum.”
Requisitos para la personalización masiva:
- Todos los destinatarios deben tener un
external_idconfigurado en OneSignal - Cada
external_ideninclude_aliasesdebe tener una clave correspondiente encustom_data.users - Si el external_id de un destinatario no está presente en
custom_data, su mensaje tendrá campos vacíos
Ejemplo: Carrito abandonado con custom_data
Cómo crear mensajes de carrito abandonado tanto para email como para push usandocustom_data.
Cuándo usar este enfoque:
- Tu servidor detecta el abandono del carrito (por ejemplo, 1 hora después de la última actividad)
- Los datos del carrito en tiempo real están en tu base de datos
- Quieres mostrar múltiples productos con imágenes, nombres y precios
- Cada usuario puede tener diferentes artículos y cantidades
- Quieres orquestar el mensaje desde tu backend
Ejemplo de payload custom_data
Esta es la solicitud de la API Create Message para este ejemplo.
JSON
| Campo | Tipo | Propósito |
|---|---|---|
cart_url | string | Enlace único del carrito del cliente (para botones/URLs de lanzamiento) |
cart | array | Lista de productos: admite conteo, bucles y visualización de detalles |
product_image | string | Imagen del producto (por elemento en el array) |
product_name | string | Nombre del producto (por elemento) |
product_quantity | string | Cantidad (por elemento) |
product_price | string | Precio con formato (por elemento) |
Puedes nombrar los campos como quieras, solo asegúrate de que la sintaxis Liquid de tu plantilla coincida.
Plantilla de email
Este ejemplo muestra cómo construir una plantilla de email que muestra:- El conteo de artículos del carrito
- Cada producto con imagen, nombre, cantidad y precio usando un bucle for
- Un botón que enlaza a la URL única del carrito del cliente

Crear la plantilla de email
Navega a Messages > Templates > New Email Template y abre el Editor de Arrastrar y Soltar.
Agregar la estructura del diseño
Crea cinco filas:
- Filas 1, 2 y 4: una columna con un bloque de Párrafo
- Fila 3: cuatro columnas con HTML | Párrafo | Párrafo | Párrafo
- Fila 5: una columna con un bloque de Botón

Mostrar el conteo de artículos
En la fila 1, agrega:Para mejor gramática, podrías usar un condicional para decir “1 item” vs “2 items”, pero para emails de carrito abandonado, el plural generalmente es aceptable.
Liquid
Liquid
Iniciar el bucle
Usa un bucle for para repetir la fila de visualización del producto por cada artículo en el carrito.En la fila 2 (inicio del bucle), agrega esto al bloque de texto:Qué hace esto:
Text
- Comienza un bucle que itera sobre cada objeto en el array
cart - Crea una variable temporal llamada
productque representa el elemento actual - Todo lo que está entre
{% for %}y{% endfor %}se repite una vez por cada artículo del carrito - Puedes nombrar
productcomo quieras (por ejemplo,item,cartItem), solo mantén la consistencia
Mostrar los detalles del producto
Esta fila de 4 columnas muestra la imagen, nombre, cantidad y precio. Como está dentro del bucle, se repite para cada artículo del carrito.En la fila 3 (detalles del producto), configura:Columna 1 - Bloque HTML (imagen del producto):Columnas 2–4 - Bloques de texto (nombre del producto, cantidad, precio):
HTML
- Columna 2:
{{product.product_name}} - Columna 3:
{{product.product_quantity}} - Columna 4:
{{product.product_price}}
- En la primera iteración,
product= primer objeto en el array del carrito {{product.product_image}}obtiene la URL de la imagen del primer artículo- En la segunda iteración,
product= segundo objeto - La fila se repite automáticamente para todos los artículos del carrito
Finalizar el bucle
Cierra el bucle para marcar dónde se detiene la repetición.En la fila 4 (fin del bucle), agrega:
Liquid
Cada
{% for %} debe tener un {% endfor %} correspondiente. Si falta, se romperá el renderizado del email.Agregar un botón de enlace al carrito
En el bloque de Botón de la fila 5, establece la URL de acción a:
Text

Probar la plantilla
- Configura tu solicitud de API usando el Ejemplo de payload
custom_data - Envíate el email a ti mismo.
- Verifica que los datos se muestren correctamente.
¡Éxito! Ahora puedes aplicar tus propios estilos a la plantilla. Consulta Diseñar emails con arrastrar y soltar.
Plantilla de push
Las notificaciones push tienen límites de caracteres y restricciones del sistema operativo, por lo que en lugar de mostrar todos los artículos, muestra el primer producto e indica el conteo total con gramática correcta. Aquí tienes un ejemplo de notificación push que construiremos:
Liquid
Consulta Uso de sintaxis Liquid para más información.
Liquid
Consulta Imágenes de notificaciones y rich media para más información.
Liquid
Guarda la plantilla y usa su
template_id en tu solicitud de la API Create message con la propiedad custom_data para probar.Solución de problemas y mejores prácticas
- Mantenlo simple: Solo incluye datos que realmente usarás en la plantilla
- Mantente por debajo de 2KB: Monitorea el tamaño de tu payload, especialmente con arrays
- Usa nombres consistentes: Mantén
snake_caseocamelCaseen todo el contenido - Valida antes de enviar: Verifica valores nulos, arrays vacíos y campos requeridos
- Siempre usa filtros default para campos opcionales:
Liquid
- Verifica el tamaño del array antes de iterar:
Liquid
- Prueba con casos límite: arrays vacíos, campos faltantes, conteos máximos de elementos
- Registra las respuestas de la API en el servidor para detectar errores de validación
- Monitorea las tasas de entrega de mensajes: caídas repentinas pueden indicar errores de Liquid
- Mantén plantillas de respaldo listas para mensajes transaccionales críticos
- Pre-formatea datos complejos en tu backend en lugar de usar lógica Liquid compleja
- Almacena plantillas en caché y reutilízalas en múltiples llamadas de API
- Considera separar los mensajes transaccionales de alto volumen de las campañas de marketing
El mensaje se envía pero el contenido está en blanco
El mensaje se envía pero el contenido está en blanco
Causa: Errores de sintaxis Liquid o nombres de campos que no coincidenSoluciones:
- Verifica que los nombres de campos coincidan exactamente entre
custom_datay la plantilla (distingue mayúsculas y minúsculas) - Busca errores tipográficos:
{{message.custom_data.name}}no{{message.custm_data.name}} - Usa filtros default para capturar campos faltantes
- Prueba las plantillas con la estructura real de
custom_dataantes de producción
Error de API: El cuerpo de la solicitud es demasiado grande
Error de API: El cuerpo de la solicitud es demasiado grande
Causa:
custom_data excede el límite de 2KBSoluciones:- Elimina campos innecesarios de tu payload
- Acorta nombres de campos y valores donde sea posible
- Limita los arrays a los primeros 3-5 elementos
- Mueve el contenido estático grande (como HTML completo) a tu plantilla en su lugar
Páginas relacionadas
Personalización de mensajes
Descripción general de todas las opciones de personalización en OneSignal, incluyendo Data Tags, atributos de usuario y segmentación.
API Create Message
Referencia completa de la API para enviar mensajes con custom_data, opciones de segmentación y todos los campos disponibles.
Uso de sintaxis Liquid
Referencia completa de sintaxis Liquid incluyendo filtros, condicionales, bucles y manipulación de cadenas.
Templates
Crea y gestiona plantillas de mensajes reutilizables para canales de Push, Email, SMS e In-App.
¿Necesita ayuda?Chatee con nuestro equipo de Soporte o envíe un correo electrónico a
support@onesignal.comPor favor incluya:- Detalles del problema que está experimentando y pasos para reproducir si están disponibles
- Su ID de aplicación de OneSignal
- El ID externo o ID de suscripción si corresponde
- La URL del mensaje que probó en el panel de OneSignal si corresponde
- Cualquier registro o mensaje de error relevante