Skip to content

Olo

A Olo é uma plataforma SaaS aberta líder para restaurantes que permite hospitalidade em cada ponto de contato.

Ao integrar a Olo e a Braze, você pode:

  • Atualizar os perfis de usuário na Braze para mantê-los consistentes com os perfis de usuário da Olo
  • Enviar a próxima melhor mensagem pela Braze com base nos eventos da Olo

Pré-requisitos

Requisito Descrição
Conta Olo É necessária uma conta Olo com acesso a webhooks para aproveitar essa parceria. Configure as inscrições de webhook por meio da ferramenta de webhooks de autoatendimento no dashboard da Olo.
Braze Data Transformation Uma URL de Data Transformation é necessária para receber dados da Olo.

Um webhook é uma maneira de a Olo enviar informações baseadas em eventos para a Braze sobre os usuários e suas ações, incluindo eventos como Pedido Realizado, Opt-in do Cliente, Pedido Retirado e mais. O webhook da Olo entrega o evento para a Braze geralmente em segundos após a ação ser realizada.

Aviso legal

No Olo, você tem um limite de um webhook por ambiente para cada marca aprovada, todos enviados para a mesma URL de destino. Marcas diferentes podem ter URLs diferentes, mas eventos da mesma marca devem compartilhar uma URL. Na Braze, isso significa que você pode criar apenas uma transformação para uso com o Olo.

Para lidar com vários eventos do Olo dentro dessa única transformação, procure o cabeçalho X-Olo-Event-Type em cada webhook. Esse cabeçalho permite processar condicionalmente diferentes eventos do Olo.

Integração

Etapa 1: Configure a Transformação de Dados da Braze para aceitar o evento de teste do Olo

No dashboard da Braze, acesse Configurações de dados > Transformação de dados.

Selecione Criar Transformação para nomear sua transformação e, em seguida, escolha sua experiência de edição.

Detalhes da transformação com a opção de escolher "Usar um modelo" ou "Começar do zero" para sua experiência de edição.

Selecione Usar um modelo para navegar por uma biblioteca de modelos, incluindo casos de uso de Transformação de dados. Ou selecione Começar do zero para carregar um modelo de código padrão.

Se você está começando do zero, escolha um destino para sua transformação. Você ainda pode inserir um modelo de código da biblioteca de modelos.

Mais sobre destinos
  • POST: Rastrear usuários: Transforma webhooks de uma plataforma de origem em atualizações de perfil de usuário, como atributos, eventos ou compras.
  • PUT: Atualizar vários itens do catálogo: Transforma webhooks de uma plataforma de origem em atualizações de itens do catálogo.
  • DELETE: Excluir vários itens do catálogo: Transforma webhooks de uma plataforma de origem em exclusões de itens do catálogo.
  • PATCH: Editar vários itens do catálogo: Transforma webhooks de uma plataforma de origem em edições de itens do catálogo.
  • POST: Enviar mensagens imediatamente via API Only: Transforma webhooks de uma plataforma de origem para enviar mensagens imediatas a usuários designados.

Após criar sua transformação, você verá a visão detalhada da transformação. Aqui, você pode visualizar o webhook mais recente recebido para esta transformação em Detalhes do webhook e um espaço para escrever seu código de transformação em Código de transformação.

Capture sua URL do webhook para uso na próxima etapa.

Etapa 2: Configure os webhooks do Olo

Use a ferramenta de webhooks de autoatendimento no dashboard do Olo para configurar webhooks que enviem dados para sua Transformação de Dados.

  1. Escolha quais eventos devem ser enviados para a Braze
  2. Configure a URL de destino. Essa será a URL da Transformação de Dados criada na etapa 1.
  1. Verifique se o webhook está configurado corretamente enviando um Evento de Teste para sua Transformação de Dados. Apenas usuários do dashboard do Olo com a permissão de Developer Tools podem enviar Eventos de Teste.

O Olo exige uma resposta bem-sucedida do webhook de Evento de Teste antes que você consiga concluir o processo de configuração do webhook do Olo.

Etapa 3: Escreva o código de transformação para aceitar os eventos do Olo escolhidos

Nesta etapa, você transformará a carga útil do webhook que será enviada da plataforma de origem em um valor de retorno de objeto JavaScript.

  1. Envie uma solicitação para a URL da sua Transformação de Dados com uma carga útil de evento de exemplo de um evento do Olo que você pretende suportar. Consulte o formato do corpo da solicitação para ajuda na formatação da sua solicitação.
  2. Atualize sua Transformação de Dados e verifique se você consegue ver a carga útil do evento de exemplo nos Detalhes do Webhook.
  3. Atualize o código da sua Transformação de Dados para suportar os eventos do Olo escolhidos.
  4. Clique em Validate para retornar uma prévia da saída do seu código e verificar se é uma solicitação /users/track aceitável.
  5. Salve e ative sua Transformação de Dados.

Formato do corpo da solicitação

Esse valor de retorno deve seguir o formato do corpo da solicitação /users/track da Braze:

  • O código de transformação é aceito na linguagem de programação JavaScript. Qualquer fluxo de controle JavaScript padrão, como lógica if/else, é compatível.
  • O código de transformação acessa o corpo da solicitação do webhook por meio da variável payload. Essa variável é um objeto preenchido pela análise do JSON do corpo da solicitação.
  • Qualquer recurso compatível com nosso endpoint /users/track é compatível, incluindo:
    • Objetos de atributos de usuário, objetos de evento e objetos de compra
    • Atributos aninhados e propriedades de eventos personalizados aninhados
    • Atualizações de grupo de inscrições
    • Endereço de e-mail como identificador

Exemplos de Data Transformations para webhooks do Olo

Esta seção contém modelos de exemplo que podem ser usados como ponto de partida. Fique à vontade para começar do zero ou excluir componentes específicos conforme necessário.

Em cada modelo, o código define uma variável, brazecall, para criar uma requisição /users/track.

Após a requisição /users/track ser atribuída a brazecall, você retornará explicitamente brazecall para gerar uma saída.

Transformação de evento único

Se você deseja suportar apenas um único evento do Olo, não será necessário usar o cabeçalho X-Olo-Event-Type para criar condicionalmente a carga útil da requisição /users/track. Por exemplo, registrar um evento de compra ou um evento personalizado no perfil de usuário quando um webhook de Order Placed do Olo é enviado para a Braze.

Registrando cada produto como uma 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;

Registrando um 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;

Transformação de eventos múltiplos

O Olo envia o tipo de evento dentro do cabeçalho X-Olo-Event-Type de cada webhook. Para oferecer suporte a vários eventos de webhook do Olo em uma única transformação, use lógica condicional para transformar a carga útil do webhook com base no valor desse tipo de cabeçalho.

No exemplo de transformação a seguir, nosso JavaScript cria uma carga útil específica para os eventos UserSignedUp e OrderPlaced. Além disso, uma condição else trata uma carga útil para quaisquer eventos do Olo enviados à Braze sem o cabeçalho X-Olo-Event-Type de UserSignedUp e 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;

Etapa 4: Publique seu webhook do Olo

Depois de ativar sua Transformação de Dados na Braze, use a ferramenta de webhooks de autoatendimento no dashboard do Olo para publicar seu webhook. Quando o webhook for publicado, a Transformação de Dados começará a receber mensagens de eventos de webhook do Olo.

O que saber

Novas tentativas

A Olo tentará reenviar chamadas de webhook que resultem em um código de status de resposta HTTP 429 - Too Many Requests ou na faixa 5xx (por exemplo, devido a um timeout de gateway ou erro de servidor), até 50 vezes ao longo de um período de 24 horas antes de descartar a solicitação.

Entrega pelo menos uma vez

Se uma chamada de webhook resultar em um código de status de resposta HTTP 429 - Too Many Requests ou na faixa 5xx (por exemplo, devido a um timeout de gateway ou erro de servidor), a Olo tentará reenviar a mensagem até 50 vezes ao longo de um período de 24 horas antes de desistir.

Portanto, os webhooks podem ser recebidos várias vezes por um assinante. Cabe ao assinante ignorar duplicatas verificando o cabeçalho X-Olo-Message-Id.

New Stuff!