Olo
Olo es una plataforma SaaS abierta líder para restaurantes que habilita la hostelería en cada punto de intervención.
Al integrar Olo y Braze, puedes:
- Actualizar los perfiles de usuario en Braze para mantenerlos coherentes con los perfiles de usuario de Olo
- Enviar el siguiente mejor mensaje desde Braze basándote en eventos de Olo
Requisitos previos
| Requisito | Descripción |
|---|---|
| Cuenta Olo | Se requiere una cuenta de Olo con acceso a webhooks para aprovechar esta asociación. Configura suscripciones a webhooks a través de la herramienta de webhooks de autoservicio dentro del dashboard de Olo. |
| Transformación de datos de Braze | Se necesita una URL de Transformación de datos para recibir datos de Olo. |
Un webhook es una forma en que Olo envía información basada en eventos a Braze sobre los usuarios y sus acciones, incluidos eventos como Order Placed, Guest Opt In, Order Picked Up y más. El webhook de Olo entrega el evento a Braze generalmente a los pocos segundos de realizarse la acción.
Descargo de responsabilidad
En Olo, estás limitado a un webhook por entorno para cada marca aprobada, todos enviados a la misma URL de destino. Las distintas marcas pueden tener URL diferentes, pero los eventos de una misma marca deben compartir una URL. En Braze, esto significa que solo puedes crear una transformación para usar con Olo.
Para manejar múltiples eventos de Olo dentro de esta única transformación, busca el encabezado X-Olo-Event-Type en cada webhook. Este encabezado te permite procesar condicionalmente diferentes eventos de Olo.
Integración
Paso 1: Configurar la Transformación de datos de Braze para aceptar el evento de prueba de Olo
En el panel de Braze, ve a Configuración de Datos > Transformación de Datos.
Selecciona Crear transformación para darle un nombre a tu transformación y, a continuación, elige tu experiencia de edición.

Selecciona Utilizar una plantilla para examinar una biblioteca de plantillas, incluidos los casos de uso de Transformación de datos. O bien, selecciona Empezar de cero para cargar una plantilla de código predeterminada.
Si empiezas de cero, elige un destino para tu transformación. Todavía puedes insertar una plantilla de código de la biblioteca de plantillas.
More on destinations
- POST: Seguimiento de usuarios: Transforma los webhooks de una plataforma de origen en actualizaciones del perfil de usuario, como atributos, eventos o compras.
- PUT: Actualiza varios elementos del catálogo: Transforma los webhooks de una plataforma de origen en actualizaciones de elementos del catálogo.
- DELETE: Eliminar varios elementos del catálogo: Transforma los webhooks de una plataforma de origen en eliminaciones de elementos del catálogo.
- PATCH: Edita varios elementos del catálogo: Transforma los webhooks de una plataforma de origen en ediciones de elementos del catálogo.
- POST: Envía mensajes inmediatamente solo a través de la API: Transforma webhooks de una plataforma de origen para enviar mensajes inmediatos a usuarios designados.

¿Quieres solicitar plantillas o destinos adicionales? Considera la posibilidad de dejar una opinión sobre el producto.
Después de crear tu transformación, verás la vista detallada de la transformación. Aquí, puedes ver el webhook más reciente recibido para esta transformación en Detalles del webhook y un espacio para escribir tu código de transformación en Código de transformación.
Captura la URL de tu webhook para utilizarla en el siguiente paso.
Paso 2: Configurar los webhooks de Olo
Utiliza la herramienta de webhooks de autoservicio del dashboard de Olo para configurar webhooks y enviarlos a tu Transformación de datos.
- Elige qué eventos deben enviarse a Braze
- Configura la URL de destino. Esta será la URL de Transformación de datos creada en el paso 1.

OAuth y el secreto compartido del encabezado X-Olo-Signature no son necesarios para la transformación.
- Verifica que el webhook está configurado correctamente enviando un evento de prueba a tu Transformación de datos. Solo los usuarios del dashboard de Olo con el permiso de herramientas para desarrolladores pueden enviar eventos de prueba.
Olo requiere una respuesta exitosa del webhook de evento de prueba antes de que puedas completar el proceso de configuración del webhook de Olo.
Paso 3: Escribir código de transformación para aceptar los eventos de Olo elegidos
En este paso, transformarás la carga útil del webhook que se enviará desde la plataforma de origen en un valor de retorno de objeto JavaScript.
- Envía una solicitud a tu URL de Transformación de datos con una carga útil de ejemplo de un evento de Olo que pretendas admitir. Consulta el formato del cuerpo de la solicitud para obtener ayuda sobre el formato de tu solicitud.
- Actualiza tu Transformación de datos y asegúrate de que puedes ver la carga útil del evento de ejemplo en los Detalles del webhook.
- Actualiza tu código de Transformación de datos para que sea compatible con los eventos de Olo elegidos.
- Haz clic en Validate para obtener una vista previa de la salida de tu código y comprobar si se trata de una solicitud
/users/trackaceptable. - Guarda y activa tu Transformación de datos.
Formato del cuerpo de la solicitud
Este valor de retorno debe ajustarse al formato del cuerpo de la solicitud /users/track de Braze:
- El código de transformación se acepta en el lenguaje de programación JavaScript. Se admite cualquier flujo de control estándar de JavaScript, como la lógica if/else.
- El código de transformación accede al cuerpo de la solicitud del webhook a través de la variable payload. Esta variable es un objeto poblado por el análisis del cuerpo de la solicitud JSON.
- Se admite cualquier característica de nuestro punto de conexión
/users/track, incluidos:- Objetos de atributos de usuario, objetos de evento y objetos de compra
- Atributos anidados y propiedades anidadas de eventos personalizados
- Actualizaciones de grupos de suscripción
- Dirección de correo electrónico como identificador
Ejemplo de Transformaciones de datos para webhooks de Olo
Esta sección contiene plantillas de ejemplo que pueden utilizarse como punto de partida. Siéntete libre de empezar desde cero o de eliminar componentes específicos como mejor te parezca.
En cada plantilla, el código define una variable, brazecall, para construir una solicitud /users/track.
Después de asignar la solicitud /users/track a brazecall, devolverás explícitamente brazecall para crear una salida.
Transformación de un solo evento
Si solo quieres admitir un único evento de Olo, no necesitarás utilizar el encabezado X-Olo-Event-Type para crear condicionalmente la carga útil de solicitud /users/track. Por ejemplo, registrar un evento de compra o un evento personalizado en el perfil del usuario cuando se envía un webhook de Olo Order Placed a Braze.
Registrar cada producto como una compra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// iterate through the items included within the order
const purchases = payload.items.map((item) => {
return {
external_id: payload.customer.customerId.toString(),
product_id: item.productId.toString(),
currency: 'USD',
price: item.sellingPrice,
time: new Date().toISOString(),
quantity: item.quantity,
properties: {
customValues: item.customValues
}
};
});
// log a purchase per item in the order
let brazecall = {
"purchases": purchases
};
return brazecall;
Registrar un evento personalizado
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// log an event “Order Placed” to the profile that includes all items in the order as event properties.
let brazecall = {
"events": [
{
"external_id": payload.customer.customerId.toString(),
"_update_existing_only": false,
"name": "Order Placed",
"time": new Date().toISOString(),
"properties": {
"Delivery Method": payload.deliveryMethod,
"Items": payload.items,
"Total": payload.totals.total,
"Location": payload.location.name
}
}
]
};
return brazecall;
Transformación multievento
Olo envía el tipo de evento dentro del encabezado X-Olo-Event-Type de cada webhook. Para admitir varios eventos de webhook de Olo en una única transformación, utiliza lógica condicional para transformar la carga útil del webhook en función del valor de este tipo de encabezado.
En el siguiente ejemplo de transformación, nuestro JavaScript crea una carga útil particular para los eventos de UserSignedUp y OrderPlaced. Además, una condición else gestiona una carga útil para cualquier evento de Olo enviado a Braze sin el encabezado X-Olo-Event-Type de UserSignedUp y OrderPlaced.
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// captures the value within the X-Olo-Event-Type header for use in the conditional logic
let event_type = headers["X-Olo-Event-Type"];
// defines a variable 'brazecall' that will hold the request payload for the /users/track request
let brazecall;
// if the X-Olo-Event-Type header is 'UserSignedUp', define a variable for the different subscription statuses that could be included within the Olo event payload
if (event_type == "UserSignedUp") {
let emailSubscribe;
let emailSubscriptionGroup;
let smsSubscriptionGroup;
// determine if the user has opted into marketing emails
if (payload.allowEmail) {
emailSubscribe = "opted_in";
emailSubscriptionGroup = "subscribed";
} else {
emailSubscribe = "unsubscribed";
emailSubscriptionGroup = "unsubscribed";
}
// determine if the user has opted into SMS
if (payload.allowMarketingSms) {
smsSubscriptionGroup = "subscribed";
} else {
smsSubscriptionGroup = "unsubscribed";
}
// build the /users/track request and pass in the appropriate subscription statuses
brazecall = {
"attributes": [{
"external_id": payload.id.toString(),
"_update_existing_only": false,
"email": payload.emailAddress,
"first_name": payload.firstName,
"last_name": payload.lastName,
"email_subscribe": emailSubscribe,
"phone": payload.contactNumber,
"subscription_groups": [{
"subscription_group_id": "57e5307f-9084-490d-9d6d-8244dc919a48",
"subscription_state": emailSubscriptionGroup
},
{
"subscription_group_id": "6440ba26-86ea-47db-a935-6647941dc78b",
"subscription_state": smsSubscriptionGroup
}
]
}]
}; // if the X-Olo-Event-Type header is 'OrderPlaced', build the /users/track request to log an event to the user profile
} else if (event_type == "OrderPlaced") {
brazecall = {
"events": [{
"external_id": payload.customer.customerId.toString(),
"_update_existing_only": false,
"name": "Order Placed",
"time": new Date().toISOString(),
"properties": {
"Delivery Method": payload.deliveryMethod,
"Items": payload.items,
"Total": payload.totals.total,
"Location": payload.location.name
}
}]
};
} else { // if the X-Olo-Event-Type header is anything else, build the /users/track request to log an event to the user profile
brazecall = {
"events": [{
"external_id": payload.customer.customerId.toString(),
"_update_existing_only": true,
"name": "Another Event",
"time": new Date().toISOString()
}]
};
}
// return `brazecall` to create an output.
return brazecall;
Paso 4: Publica tu webhook de Olo
Después de haber activado tu Transformación de datos en Braze, utiliza la herramienta de webhooks de autoservicio en el dashboard de Olo para publicar tu webhook. Cuando el webhook se publique, la Transformación de datos comenzará a recibir mensajes de eventos de webhook de Olo.
Lo que debes saber
Reintentos
Olo reintentará las llamadas de webhook que resulten en un código de estado de respuesta HTTP 429 - Too Many Requests o en el rango 5xx (por ejemplo, debido a un tiempo de espera de la puerta de enlace o a un error del servidor), hasta 50 veces en un periodo de 24 horas antes de abandonar la solicitud.
Entrega de al menos una vez
Si una llamada de webhook resulta en un código de estado de respuesta HTTP 429 - Too Many Requests o en el rango 5xx (por ejemplo, debido a un tiempo de espera de la puerta de enlace o a un error del servidor), Olo reintentará el mensaje hasta 50 veces en un periodo de 24 horas antes de desistir.
Por lo tanto, un suscriptor puede recibir los webhooks varias veces. Depende del suscriptor ignorar los duplicados comprobando el encabezado X-Olo-Message-Id.