Skip to content

Olo

Olo es una plataforma SaaS abierta líder para restaurantes que habilita la hostelería en cada punto de intervención.

Integrando Olo y Braze, puedes:

  • Actualizar los perfiles de usuario en Braze para que sean coherentes con los perfiles de usuario de Olo.
  • Envía la mejor mensajería de Braze basada en eventos de Olo

Requisitos previos

Un webhook es una forma de que Olo envíe información basada en eventos a Braze sobre los usuarios y sus acciones, incluidos eventos como Pedido realizado, Invitado optado, Pedido recogido 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 sólo puedes hacer una transformación para usar con Olo.

Para manejar múltiples eventos Olo dentro de esta única transformación, busca la cabecera X-Olo-Event-Type en cada webhook. Esta cabecera te permite procesar condicionalmente diferentes eventos de Olo.

Integración

Paso 1: Configurar la transformación de datos 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.

Detalles de la transformación con la opción de elegir "Usar una plantilla" o "Empezar de cero" para 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.

Más sobre destinos
  • 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.

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 panel de control de Olo para configurar webhooks y enviarlos a tu transformación de datos.

  1. Elija qué eventos deben enviarse a Braze
  2. Configure la URL de destino. Esta será la URL de Transformación de Datos creada en el paso 1.

3. Verifique que el webhook está configurado correctamente enviando un Evento de Prueba a su Transformación de Datos. Sólo los usuarios de Olo Dashboard con el permiso de Herramientas para Desarrolladores pueden enviar Eventos de Prueba.

Olo requiere una respuesta exitosa del webhook 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 Olo elegidos

En este paso, transformará la carga útil del webhook que se enviará desde la plataforma de origen en un valor de retorno de objeto JavaScript.

  1. Envía una solicitud a tu URL de Transformación de Datos con una muestra de la carga útil de un evento Olo que pretendas soportar. Consulta el formato del cuerpo de la solicitud para obtener ayuda sobre el formato de tu solicitud.
  2. Actualice su Transformación de Datos y asegúrese de que puede ver la carga útil del evento de muestra en los Detalles del Webhook.
  3. Actualiza tu código de transformación de datos para que sea compatible con los eventos Olo elegidos.
  4. Haga clic en Validar para obtener una vista previa de la salida de su código y comprobar si se trata de una solicitud aceptable de /users/track.
  5. 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 de Braze /users/track:

  • 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 petición 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 final /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 Olo

Esta sección contiene plantillas de ejemplo que pueden utilizarse como punto de partida. Siéntase libre de empezar desde cero, o de eliminar componentes específicos como mejor le parezca.

En cada plantilla, el código define una variable, brazecall, para construir una solicitud /users/track.

Después de asignar la petición /users/track a brazecall, devolverás explícitamente brazecall para crear una salida.

Transformación de un solo evento

Si sólo quieres admitir un único evento 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;

Registro de 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 de la cabecera X-Olo-Event-Type de cada webhook. Para admitir varios eventos de webhook de Olo en una única transformación, utilice 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 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 Olo

Después de haber activado su transformación de datos en Braze, utilice la herramienta de webhooks de autoservicio en el panel de control de Olo para publicar su webhook. Cuando el webhook es publicado, la Transformación de Datos comenzará a recibir mensajes de eventos webhook de Olo.

Lo que hay que saber

Reintentos

Olo reintentará las llamadas de webhook que resulten en un código de estado de respuesta HTTP de 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.

Al menos una entrega

Si una llamada webhook resulta en un código de estado de respuesta HTTP de 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 período de 24 horas antes de rendirse.

Por lo tanto, un suscriptor puede recibir los webhooks varias veces. Depende del suscriptor ignorar los duplicados comprobando la cabecera X-Olo-Message-Id.

¿QUÉ TAN ÚTIL FUE ESTA PÁGINA?
New Stuff!