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 | Uma conta Olo com acesso a webhooks é necessária para aproveitar esta parceria. Configure inscrições de webhook por meio da ferramenta de webhooks de autoatendimento no dashboard da Olo. |
| Transformação de dados da Braze | Uma URL de Transformação de dados é necessária para receber dados da Olo. |
Um webhook é uma maneira de a Olo enviar informações acionadas por eventos para a Braze sobre os usuários e suas ações, incluindo eventos como Pedido Realizado, Convidado Optou por Participar, 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
Na Olo, você está limitado a 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 fazer apenas uma transformação para usar com a Olo.
Para lidar com vários eventos da Olo dentro desta única transformação, procure o cabeçalho X-Olo-Event-Type em cada webhook. Esse cabeçalho permite processar condicionalmente diferentes eventos da Olo.
Integração
Etapa 1: Configure a Transformação de dados da Braze para aceitar o evento de teste da Olo
No painel da Braze, acesse Configurações de Dados > Transformação de Dados.
Selecione Criar Transformação para nomear sua transformação, em seguida escolha 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.
More on destinations
- 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 de catálogo.
- POST: Envie mensagens imediatamente via API Only: Transforma webhooks de uma plataforma de origem para enviar mensagens imediatas a usuários designados.

Quer solicitar modelos adicionais ou destinos? Considere deixar feedback do produto.
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 seu Webhook URL para uso na próxima etapa.
Etapa 2: Configure os webhooks da Olo
Use a ferramenta de webhooks de autoatendimento no dashboard da Olo para configurar webhooks para enviar à sua Transformação de dados.
- Escolha quais eventos devem ser enviados para a Braze.
- Configure a URL de Destino. Essa será a URL de Transformação de dados criada na etapa 1.

OAuth e o segredo compartilhado do cabeçalho X-Olo-Signature não são necessários para a transformação.
- Verifique se o webhook está configurado corretamente enviando um Evento de Teste para sua Transformação de dados. Somente os usuários do dashboard da Olo com a permissão de Ferramentas de Desenvolvedor podem enviar Eventos de Teste.
A Olo requer uma resposta bem-sucedida do webhook de Evento de Teste antes que você possa concluir o processo de configuração do webhook da Olo.
Etapa 3: Escreva o código de transformação para aceitar os eventos da 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.
- Envie uma solicitação para a URL da sua Transformação de dados com uma carga útil de evento de amostra de um evento da Olo que você pretende suportar. Consulte o formato do corpo da solicitação para obter ajuda na formatação da sua solicitação.
- Atualize sua Transformação de dados e certifique-se de que você pode ver a carga útil do evento de amostra em Informações do Webhook.
- Atualize seu código de Transformação de dados para suportar os eventos da Olo escolhidos.
- Clique em Validate para retornar uma prévia da saída do seu código e verificar se é uma solicitação
/users/trackaceitável. - 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. Todo fluxo de controle JavaScript padrão, como a lógica if/else, é suportado.
- O código de transformação acessa o corpo da solicitação do webhook por meio da variável de carga útil. Essa variável é um objeto preenchido pela análise do corpo da solicitação JSON.
- Qualquer recurso aceito em nosso endpoint
/users/tracké aceito, incluindo:- Objetos de atributos de usuário, objetos de eventos e objetos de compra
- Atributos aninhados e propriedades de evento personalizado aninhadas
- Atualizações do grupo de inscrições
- Endereço de e-mail como identificador
Exemplos de Transformações de dados para webhooks da Olo
Esta seção contém modelos de exemplo que podem ser usados como ponto de partida. Sinta-se à vontade para começar do zero ou excluir componentes específicos conforme achar necessário.
Em cada modelo, o código define uma variável, brazecall, para construir uma solicitação /users/track.
Depois que a solicitação /users/track for atribuída a brazecall, você retornará explicitamente brazecall para criar uma saída.
Transformação de evento único
Se você quiser suportar apenas um único evento da Olo, não precisará usar o cabeçalho X-Olo-Event-Type para criar condicionalmente a carga útil da solicitação /users/track. Por exemplo, registrar um evento de compra ou um evento personalizado no perfil do usuário quando um webhook de Pedido Realizado da 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 multi-evento
A Olo envia o tipo de evento no cabeçalho X-Olo-Event-Type de cada webhook. Para suportar vários eventos de webhook da Olo dentro de 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 abaixo, nosso JavaScript cria uma carga útil específica para os eventos UserSignedUp e OrderPlaced. Além disso, uma condição else lida com uma carga útil para quaisquer eventos da Olo enviados para a 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 da Olo
Depois de ativar sua Transformação de dados na Braze, use a ferramenta de webhooks de autoatendimento no dashboard da Olo para publicar seu webhook. Quando o webhook for publicado, a Transformação de dados começará a receber mensagens de eventos de webhook da Olo.
Informações importantes
Tentativas
A Olo tentará novamente as chamadas de webhook que resultarem em um código de status de resposta HTTP 429 - Too Many Requests ou na faixa 5xx (por exemplo, devido a um tempo limite do gateway ou erro do servidor), até 50 vezes em 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 tempo esgotado do gateway ou erro do servidor), a Olo tentará reenviar a mensagem até 50 vezes em 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.