Conjunto de objetos
Esta página explica cómo utilizar una matriz de objetos para agrupar atributos relacionados. Por ejemplo, puedes tener un grupo de objetos mascota, objetos canción y objetos cuenta que pertenezcan todos a un usuario. Estas matrices de objetos pueden utilizarse para personalizar tus mensajes con Liquid, o crear segmentos de audiencia si algún elemento de un objeto coincide con los criterios.
Tipos de datos admitidos
Se admiten los siguientes tipos de datos:
| Tipo de datos | Descripción |
|---|---|
| Número | Un valor numérico, como 1 o 5.5. |
| Cadena | Un valor de texto, como "Hello" o "The Hobbit". |
| Booleano | Un valor que se evalúa como true o false. |
| Matriz | Una lista de valores, como ["red", "blue", "green"]. |
| Tiempo |
Un valor de marca de tiempo utilizado para comparaciones de fecha y hora. Al filtrar un atributo personalizado anidado de tiempo, puedes elegir:
|
| Objeto | Un valor estructurado con pares clave-valor, como por ejemplo {"author": "Tolkien"}. |
| Conjunto de objetos |
Una lista de objetos, como [{"title": "The Hobbit"}, {"title": "Dune"}].
Para más información, consulta
Matrices de objetos.
|
Limitaciones
- Las matrices de objetos están pensadas para atributos personalizados enviados a través de la API. No es posible cargar archivos CSV. Esto se debe a que las comas en el archivo CSV se interpretarán como un separador de columna, y las comas en los valores causarán errores de análisis.
- Las matrices de objetos no tienen límite en el número de elementos, pero sí un tamaño máximo de 100 KB.
- No todos los socios de Braze admiten matrices de objetos. Consulta la documentación del socio para confirmar si la integración admite esta característica.
Actualizar o eliminar elementos de una matriz requiere identificar el elemento por clave y valor, así que considera incluir un identificador único para cada elemento de la matriz. La unicidad se aplica solo a la matriz y es útil si deseas actualizar y eliminar objetos específicos de tu matriz. Braze no lo aplica de forma obligatoria.
Cuando un atributo personalizado anidado en tu solicitud contiene valores no válidos (como formatos de hora no válidos o valores null), Braze descarta todas las actualizaciones de atributos personalizados anidados en la solicitud del procesamiento. Esto se aplica a todas las estructuras anidadas dentro de ese atributo específico. Comprueba que todos los valores de los atributos personalizados anidados sean válidos antes de enviarlos. Para obtener más información, consulta Crear y actualizar usuarios.
Para más información sobre el uso de matrices de objetos para objetos de atributos de usuario, consulta Objeto de atributos de usuario.
Ejemplo de API
A continuación se muestra un ejemplo de /users/track con una matriz pets. Para capturar las propiedades de las mascotas, envía una solicitud de API que enumere pets como una matriz de objetos. Ten en cuenta que a cada objeto se le ha asignado un id único al que se puede hacer referencia posteriormente al realizar actualizaciones.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"attributes": [
{
"external_id": "user_id",
"pets": [
{
"id": 1,
"type": "dog",
"breed": "beagle",
"name": "Gus"
},
{
"id": 2,
"type": "cat",
"breed": "calico",
"name": "Gerald"
}
]
}
]
}
Actualiza los valores de objetos específicos dentro de una matriz utilizando el parámetro _merge_objects y el operador $update. De forma similar a las actualizaciones de objetos de atributos personalizados anidados simples, esto realiza una fusión profunda.
Ten en cuenta que $update no puede utilizarse para eliminar una propiedad anidada de un objeto dentro de una matriz. Para ello, tendrás que eliminar todo el elemento de la matriz y luego añadir el objeto sin esa clave específica (utilizando una combinación de $remove y $add).
El siguiente ejemplo muestra la actualización de la propiedad breed a goldfish para el objeto con un id de 4. Este ejemplo de solicitud también actualiza el objeto con id igual a 5 con un nuevo name de Annette. Dado que el parámetro _merge_objects se establece en true, todos los demás campos de estos dos objetos siguen siendo los mismos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"attributes": [
{
"external_id": "user_id",
"_merge_objects": true,
"pets": {
"$update": [
{
"$identifier_key": "id",
"$identifier_value": 4,
"$new_object": {
"breed": "goldfish"
}
},
{
"$identifier_key": "id",
"$identifier_value": 5,
"$new_object": {
"name": "Annette"
}
}
]
}
}
]
}
Debes establecer _merge_objects como true, o tus objetos se sobrescribirán. _merge_objects es false por defecto.
Elimina objetos de una matriz utilizando el operador $remove en combinación con una clave ($identifier_key) y un valor ($identifier_value) coincidentes.
El siguiente ejemplo muestra la eliminación de cualquier objeto de la matriz pets que tenga un id con un valor de 1, un id con un valor de 2, y un type con un valor de dog. Si hay varios objetos con el valor type de dog, se eliminarán todos los objetos coincidentes.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
"attributes": [
{
"external_id": "user_id",
"pets": {
"$remove": [
// Remove by ID
{
"$identifier_key": "id",
"$identifier_value": 1
},
{
"$identifier_key": "id",
"$identifier_value": 2
},
// Remove any dog
{
"$identifier_key": "type",
"$identifier_value": "dog"
}
]
}
}
]
}
Orden de procesamiento
Cuando una sola solicitud /users/track incluye operaciones $add, $remove y $update para el mismo atributo de matriz, Braze las procesa en este orden:
$add$remove$update
Dado que $add se ejecuta antes que $remove, no puedes utilizar un $remove seguido de $add como mecanismo de upsert dentro de una sola solicitud. Primero se procesa el $add y, a continuación, el $remove elimina el elemento. Para realizar un upsert, envía el $remove en una solicitud separada antes del $add.
Marcas de tiempo
Cuando incluyas campos como marcas de tiempo en una matriz de objetos, utiliza el formato $time en lugar de cadenas simples o enteros de época unix.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"attributes": [
{
"external_id": "user123",
"purchases": [
{
"item_name": "T-shirt",
"price": 19.99,
"purchase_time": {
"$time": "2020-05-28"
}
}
]
}
]
}
Para obtener más información, consulta Atributos personalizados anidados.
Ejemplo de SDK
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
val json = JSONArray()
.put(JSONObject()
.put("id", 1)
.put("type", "dog")
.put("breed", "beagle")
.put("name", "Gus"))
.put(JSONObject()
.put("id", 2)
.put("type", "cat")
.put("breed", "calico")
.put("name", "Gerald")
)
braze.getCurrentUser { user ->
user.setCustomUserAttribute("pets", json)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
val json = JSONObject()
.put("\$add", JSONArray()
.put(JSONObject()
.put("id", 3)
.put("type", "dog")
.put("breed", "corgi")
.put("name", "Doug"))
.put(JSONObject()
.put("id", 4)
.put("type", "fish")
.put("breed", "salmon")
.put("name", "Larry"))
.put(JSONObject()
.put("id", 5)
.put("type", "bird")
.put("breed", "parakeet")
.put("name", "Mary")
)
)
braze.getCurrentUser { user ->
user.setCustomUserAttribute("pets", json, true)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
val json = JSONObject()
.put("\$update", JSONArray()
.put(JSONObject()
.put("\$identifier_key", "id")
.put("\$identifier_value", 4)
.put("\$new_object", JSONObject()
.put("breed", "goldfish")
)
)
.put(JSONObject()
.put("\$identifier_key", "id")
.put("\$identifier_value", 5)
.put("\$new_object", JSONObject()
.put("name", "Annette")
)
)
)
braze.getCurrentUser { user ->
user.setCustomUserAttribute("pets", json, true)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
val json = JSONObject()
.put("\$remove", JSONArray()
.put(JSONObject()
.put("\$identifier_key", "id")
.put("\$identifier_value", 1)
)
.put(JSONObject()
.put("\$identifier_key", "id")
.put("\$identifier_value", 2)
)
.put(JSONObject()
.put("\$identifier_key", "type")
.put("\$identifier_value", "dog")
)
)
braze.getCurrentUser { user ->
user.setCustomUserAttribute("pets", json, true)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
let json: [[String: Any?]] = [
[
"id": 1,
"type": "dog",
"breed": "beagle",
"name": "Gus"
],
[
"id": 2,
"type": "cat",
"breed": "calico",
"name": "Gerald"
]
]
braze.user.setCustomAttribute(key: "pets", array: json)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
let json: [String: Any?] = [
"$add": [
[
"id": 3,
"type": "dog",
"breed": "corgi",
"name": "Doug"
],
[
"id": 4,
"type": "fish",
"breed": "salmon",
"name": "Larry"
],
[
"id": 5,
"type": "bird",
"breed": "parakeet",
"name": "Mary"
]
]
]
braze.user.setCustomAttribute(key: "pets", dictionary: json, merge: true)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
let json: [String: Any?] = [
"$update": [
[
"$identifier_key": "id",
"$identifier_value": 4,
"$new_object": [
"breed": "goldfish"
]
],
[
"$identifier_key": "id",
"$identifier_value": 5,
"$new_object": [
"name": "Annette"
]
]
]
]
braze.user.setCustomAttribute(key: "pets", dictionary: json, merge: true)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
let json: [String: Any?] = [
"$remove": [
[
"$identifier_key": "id",
"$identifier_value": 1,
],
[
"$identifier_key": "id",
"$identifier_value": 2,
],
[
"$identifier_key": "type",
"$identifier_value": "dog",
]
]
]
braze.user.setCustomAttribute(key: "pets", dictionary: json, merge: true)
Los atributos personalizados anidados no son compatibles con AppboyKit.
1
2
3
4
5
6
7
8
9
10
11
12
13
import * as braze from "@braze/web-sdk";
const json = [{
"id": 1,
"type": "dog",
"breed": "beagle",
"name": "Gus"
}, {
"id": 2,
"type": "cat",
"breed": "calico",
"name": "Gerald"
}];
braze.getUser().setCustomUserAttribute("pets", json);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import * as braze from "@braze/web-sdk";
const json = {
"$add": [{
"id": 3,
"type": "dog",
"breed": "corgi",
"name": "Doug",
}, {
"id": 4,
"type": "fish",
"breed": "salmon",
"name": "Larry",
}, {
"id": 5,
"type": "bird",
"breed": "parakeet",
"name": "Mary",
}]
};
braze.getUser().setCustomUserAttribute("pets", json, true);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import * as braze from "@braze/web-sdk";
const json = {
"$update": [
{
"$identifier_key": "id",
"$identifier_value": 4,
"$new_object": {
"breed": "goldfish"
}
},
{
"$identifier_key": "id",
"$identifier_value": 5,
"$new_object": {
"name": "Annette"
}
}
]
};
braze.getUser().setCustomUserAttribute("pets", json, true);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import * as braze from "@braze/web-sdk";
const json = {
"$remove": [
{
"$identifier_key": "id",
"$identifier_value": 1,
},
{
"$identifier_key": "id",
"$identifier_value": 2,
},
{
"$identifier_key": "type",
"$identifier_value": "dog",
}
]
};
braze.getUser().setCustomUserAttribute("pets", json, true);
Plantillas Liquid
Puedes utilizar esta matriz pets para personalizar un mensaje. El siguiente ejemplo de plantilla Liquid muestra cómo hacer referencia a las propiedades del objeto de atributo personalizado guardadas de la solicitud de API anterior y utilizarlas en tu mensajería.
1
2
3
4
5
{% assign pets = {{custom_attribute.${pets}}} %}
{% for pet in pets %}
I have a {{pet.type}} named {{pet.name}}! They are a {{pet.breed}}.
{% endfor %}
En este caso, puedes utilizar Liquid para recorrer la matriz pets e imprimir una declaración para cada mascota. Asigna una variable al atributo personalizado pets y utiliza la notación de puntos para acceder a las propiedades de un objeto. Especifica el nombre del objeto, seguido de un punto ., seguido del nombre de la propiedad.
Segmentación
Cuando segmentas usuarios basándote en matrices de objetos, un usuario cumplirá los requisitos del segmento si cualquier objeto de la matriz coincide con los criterios.
Crea un nuevo segmento y selecciona Atributo personalizado anidado como filtro. A continuación, busca y selecciona el nombre de tu matriz de objetos.

Utiliza la notación de puntos para especificar qué campo de la matriz de objetos deseas utilizar. Inicia el campo de texto con un conjunto vacío de corchetes [] para indicar a Braze que estás buscando dentro de una matriz de objetos. Después, añade un punto ., seguido del nombre del campo que quieras utilizar.
Por ejemplo, si deseas filtrar una matriz de objetos top_3_movies basándote en el campo type, introduce [].type y elige las películas por las que deseas filtrar, como Fantasy Movie.
Niveles de anidamiento
Puedes crear un segmento con un máximo de un nivel de anidamiento de matrices (matriz dentro de otra matriz). Por ejemplo, dados los siguientes atributos, puedes crear un segmento donde pets[].name contenga Gus, pero no puedes crear un segmento donde pets[].nicknames[] contenga Gugu.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
"attributes": [
{
"external_id": "user_id",
"pets": [
{
"id": 1,
"type": "dog",
"breed": "beagle",
"name": "Gus",
"nicknames": [
"Gugu",
"Gusto"
]
},
{
"id": 2,
"type": "cat",
"breed": "calico",
"name": "Gerald",
"nicknames": [
"GeGe",
"Gerry"
]
}
]
}
]
}
Puntos de datos
Los puntos de datos se registran de forma diferente dependiendo de si creas, actualizas o eliminas una propiedad.
Al crear una nueva matriz, se registra un punto de datos por cada atributo de un objeto. Este ejemplo cuesta ocho puntos de datos: cada objeto mascota tiene cuatro atributos y hay dos objetos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"attributes": [
{
"external_id": "user_id",
"pets": [
{
"id": 1,
"type": "dog",
"breed": "beagle",
"name": "Gus"
},
{
"id": 2,
"type": "cat",
"breed": "calico",
"name": "Gerald"
}
]
}
]
}
Al actualizar una matriz existente, se registra un punto de datos por cada propiedad añadida. Este ejemplo cuesta dos puntos de datos, ya que solo actualiza una propiedad en cada uno de los dos objetos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"attributes": [
{
"external_id": "user_id",
"_merge_objects": true,
"pets": {
"$update": [
{
"$identifier_key": "id",
"$identifier_value": 4,
"$new_object": {
"breed": "goldfish"
}
},
{
"$identifier_key": "id",
"$identifier_value": 5,
"$new_object": {
"name": "Annette"
}
}
]
}
}
]
}
Al eliminar un objeto de una matriz, se registra un punto de datos por cada criterio de eliminación que envíes. Este ejemplo cuesta tres puntos de datos, aunque puedes estar eliminando varios perros con esta instrucción.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
"attributes": [
{
"external_id": "user_id",
"pets": {
"$remove": [
// Remove by ID
{
"$identifier_key": "id",
"$identifier_value": 1
},
{
"$identifier_key": "id",
"$identifier_value": 2
},
// Remove any dog
{
"$identifier_key": "type",
"$identifier_value": "dog"
}
]
}
}
]
}
Editar esta página en GitHub