Skip to content

Variables locales de Contenido conectado

Esta página ofrece un resumen de las variables locales de Contenido conectado y cómo usarlas y almacenarlas.

Braze realiza una solicitud GET estándar en el momento del envío al punto de conexión especificado dentro de la etiqueta connected_content. Si el punto de conexión devuelve JSON, se analiza automáticamente y se almacena en una variable llamada connected. Si el punto de conexión devuelve texto, se insertará directamente en el mensaje en lugar de la etiqueta connected_content.

Si quieres guardar tu respuesta en una variable, se recomienda devolver objetos JSON. Y si quieres que la respuesta de Contenido conectado reemplace la etiqueta con el texto, asegúrate de que la respuesta no sea JSON válido (según la definición de json.org).

También puedes especificar :save your_variable_name después de la URL para guardar los datos con otro nombre. Por ejemplo, la siguiente etiqueta connected_content almacenará la respuesta en una variable local llamada localweather (puedes guardar múltiples variables JSON de connected_content):

1
{% connected_content https://www.metaweather.com/api/location/2459115/ :save localweather %}

Metaweather es una API meteorológica gratuita que utiliza un “Where-on-Earth ID” para devolver el clima de una zona. Usa este código solo con fines de prueba y aprendizaje.

Solo se puede acceder a la variable almacenada dentro del campo que contiene la solicitud connected_content. Por ejemplo, si quisieras usar la variable localweather tanto en el campo del mensaje como en el del título, deberías hacer la solicitud connected_content en ambos campos. Si la solicitud es idéntica, Braze usará los resultados almacenados en caché en lugar de hacer una segunda solicitud al servidor de destino. Sin embargo, las llamadas de Contenido conectado realizadas a través de HTTP POST no se almacenan en caché de forma predeterminada y harán una segunda solicitud al servidor de destino. Si deseas añadir almacenamiento en caché a las llamadas POST, consulta la opción cache_max_age.

Análisis de JSON

Contenido conectado interpretará cualquier resultado con formato JSON como una variable local cuando especifiques :save. Por ejemplo, un punto de conexión de Contenido conectado relacionado con el clima devuelve el siguiente objeto JSON, que almacenas en una variable local localweather especificando :save localweather.

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
{
  "consolidated_weather": [
    {
      "id": 5.8143475362693e+15,
      "weather_state_name": "Clear",
      "weather_state_abbr": "c",
      "wind_direction_compass": "WSW",
      "created": "2017-06-12T14:14:46.268110Z",
      "applicable_date": "2017-06-12",
      "min_temp": 22.511666666667,
      "max_temp": 31.963333333333,
      "the_temp": 27.803333333333,
      "wind_speed": 6.8884690250312,
      "wind_direction": 251.62921994166,
      "air_pressure": 1021.335,
      "humidity": 50,
      "visibility": 14.945530601288,
      "predictability": 68
    },
    .
    .
    .
    "title": "New York",
    "location_type": "City",
    "woeid": 2459115,
    "latt_long": "40.71455,-74.007118",
    "timezone": "US\/Eastern"
  }

Puedes comprobar si está lloviendo o no haciendo referencia a {{localweather.consolidated_weather[0].weather_state_name}}, que si se usa con este objeto devolvería Clear. Si también quieres personalizar con el nombre de la ubicación resultante, {{localweather.title}} devuelve New York.

La siguiente imagen ilustra el tipo de resaltado de sintaxis que deberías ver en el dashboard si estás configurando las cosas correctamente. También muestra cómo podrías aprovechar la solicitud de ejemplo de connected_content.

1
2
3
4
5
6
7
8
9
10
{% connected_content https://www.metaweather.com/api/location/search/?query={{custom_attribute.${customCity}}} :save locationjson %}
{% connected_content https://www.metaweather.com/api/location/{{locationjson[0].woeid}}/ :save localweather %}

{% if {{localweather.consolidated_weather[0].weather_state_name}} == 'Rain' %}
It's raining! Grab an umbrella!
{% elsif {{localweather.consolidated_weather[0].weather_state_name}} == 'Clouds' %}
No sunscreen needed :)
{% else %}
Enjoy the weather!
{% endif %}

Si la API respondiera con {{localweather.consolidated_weather[0].weather_state_name}} devolviendo Rain, el usuario recibiría entonces esta notificación push.

Notificación push con el mensaje "It's raining! Grab an umbrella!"

De manera predeterminada, el contenido conectado establecerá un encabezado Content-Type en una solicitud GET HTTP que haga a application/json con Accept: */*. Si necesita otro tipo de contenido, especifíquelo explícitamente añadiendo :content_type your/content-type a la etiqueta. A continuación, Braze establecerá tanto el encabezado Content-Type como Accept en el tipo que especifique.

1
{% connected_content http://numbersapi.com/random/trivia :content_type application/json %}

HTTP POST

De manera predeterminada, el Contenido conectado realiza una solicitud HTTP GET a la URL especificada. Para realizar una solicitud POST en su lugar, especifique :method post.

Opcionalmente, puede proporcionar un cuerpo POST especificando :body seguido de una cadena de consulta con el formato key1=value1&key2=value2&... o una referencia a los valores capturados. Content-Type predeterminado a application/x-www-form-urlencoded. Si especifica :content_type application/json y proporciona un cuerpo con codificación URL de formulario como key1=value1&key2=value2, Braze codificará automáticamente el cuerpo en JSON antes de enviarlo.

El contenido conectado tampoco almacena en caché las llamadas POST de forma predeterminada. Puedes actualizar este comportamiento añadiendo:cache_max_age a la llamada POST de contenido conectado.

1
{% connected_content https://example.com/api/endpoint :method post :body key1=value1&key2=value2 %}
1
{% connected_content https://example.com/api/endpoint :method post :body key1=value1&key2=value2 :content_type application/json %}

Proporcionar un cuerpo JSON

Si quieres proporcionar tu propio cuerpo JSON, puedes escribirlo en línea si no hay espacios. Si tu cuerpo tiene espacios, deberías usar una sentencia assign o capture. Es decir, cualquiera de estas tres opciones es aceptable:

En línea: no se permiten espacios
1
{% connected_content https://example.com/api/endpoint :method post :body {"foo":"bar","baz":"{{1|plus:1}}"} :content_type application/json %}
Cuerpo en una sentencia capture: se permiten espacios
1
2
3
4
{% capture postbody %}
{"foo": "bar", "baz": "{{ 1 | plus: 1 }}"}
{% endcapture %}
{% connected_content https://example.com/api/endpoint :method post :body {{postbody}} :content_type application/json %}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{% capture postbody %}
{
"ids":[ca_57832,ca_75869],"include":{"attributes":{"withKey":["daily_deals"]}}
}
{% endcapture %}

{% connected_content
    https://example.com/api/endpoint
    :method post
    :headers {
      "Content-Type": "application/json"
  }
  :body {{postbody}}
  :save result
%}
Cuerpo en una sentencia assign: se permiten espacios
1
2
{% assign postbody = '{"foo":"bar", "baz": "2"}' %}
{% connected_content https://example.com/api/endpoint :method post :body {{postbody}} :content_type application/json %}

Códigos de estado HTTP

Puedes utilizar el estado HTTP de una llamada de Contenido conectado guardándolo primero como una variable local y luego usando la clave __http_status_code__. Por ejemplo:

1
2
3
4
{% connected_content https://example.com/api/endpoint :save result %}
{% if result.__http_status_code__ != 200 %}
  {% abort_message('Connected Content returned a non-200 status code') %}
{% endif %}
New Stuff!