Olo
Olo는 모든 터치포인트에서 호스피탈리티를 실현하는 레스토랑 업계 선도적인 오픈 SaaS 플랫폼입니다.
Olo와 Braze를 통합하면 다음을 수행할 수 있습니다.
- Braze의 고객 프로필을 Olo 고객 프로필과 일관되게 업데이트
- Olo 이벤트를 기반으로 Braze에서 최적의 다음 메시지 발송
필수 조건
| 요구 사항 | 설명 |
|---|---|
| Olo 계정 | 이 파트너십을 활용하려면 웹훅에 접근할 수 있는 Olo 계정이 필요합니다. Olo 대시보드 내 셀프 서비스 웹훅 도구를 통해 웹훅 구독을 설정하세요. |
| Braze 데이터 변환 | Olo에서 데이터를 수신하려면 데이터 변환 URL이 필요합니다. |
웹훅은 Olo가 사용자와 사용자의 행동에 대한 이벤트 기반 정보를 Braze로 전송하는 방법으로, Order Placed, Guest Opt In, Order Picked Up 등의 이벤트를 포함합니다. Olo 웹훅은 일반적으로 동작이 수행된 후 몇 초 이내에 이벤트를 Braze로 전달합니다.
면책 조항
Olo에서는 승인된 브랜드당 환경별로 하나의 웹훅만 사용할 수 있으며, 모두 동일한 Destination URL로 전송됩니다. 브랜드마다 다른 URL을 사용할 수 있지만, 동일한 브랜드의 이벤트는 하나의 URL을 공유해야 합니다. Braze에서는 Olo와 함께 사용할 수 있는 변환을 하나만 만들 수 있다는 의미입니다.
이 단일 변환 내에서 여러 Olo 이벤트를 처리하려면 각 웹훅의 X-Olo-Event-Type 헤더를 확인하세요. 이 헤더를 사용하면 다양한 Olo 이벤트를 조건부로 처리할 수 있습니다.
통합
1단계: Olo의 테스트 이벤트를 수신하도록 Braze 데이터 변환 설정
Braze 대시보드에서 데이터 설정 > 데이터 변환로 이동합니다.
변환 이름을 지정하려면 Create Transformation을 선택한 다음 편집 경험을 선택하세요.

템플릿 사용을 선택하여 데이터 변환 사용 사례를 포함한 템플릿 라이브러리를 탐색합니다. 또는 시작하기를 선택하여 기본값 코드 템플릿을 로드합니다.
아무것도 없는 상태에서 시작한다면, 변화를 위한 대상을 선택하세요. 템플릿 라이브러리에서 코드 템플릿을 여전히 삽입할 수 있습니다.
More on destinations
- 게시: 사용자 추적: 소스 플랫폼의 웹훅을 고객 프로필 업데이트로 변환합니다. 예를 들어 속성, 이벤트 또는 구매와 같은 것입니다.
- 넣기: 여러 카탈로그 항목 업데이트: 소스 플랫폼의 웹후크를 카탈로그 항목 업데이트로 변환합니다.
- 삭제: 여러 카탈로그 항목 삭제: 소스 플랫폼의 웹후크를 카탈로그 항목 삭제로 변환합니다.
- 패치: 여러 카탈로그 항목 편집: 소스 플랫폼의 웹후크를 카탈로그 항목 편집으로 변환합니다.
- 게시: API만을 통해 즉시 메시지를 전송하세요. 소스 플랫폼에서 웹후크를 변환하여 지정된 사용자에게 즉시 메시지를 전송합니다.

추가 템플릿이나 목적지를 요청하시겠습니까? 제품 피드백을 남겨 보세요.
변환을 생성한 후 변환의 세부 정보를 볼 수 있습니다. 여기에서 웹훅 세부정보 아래에서 이 변환을 위해 수신된 가장 최근의 웹훅을 볼 수 있으며, 변환 코드 아래에 변환 코드를 작성할 수 있는 공간이 있습니다.
다음 단계에서 사용할 웹훅 URL을(를) 캡처하세요.
2단계: Olo 웹훅 설정
Olo 대시보드 내 셀프 서비스 웹훅 도구를 사용하여 데이터 변환으로 전송할 웹훅을 설정합니다.
- Braze로 전송할 이벤트를 선택합니다.
- Destination URL을 구성합니다. 이 URL은 1단계에서 생성한 데이터 변환 URL입니다.

OAuth 및 X-Olo-Signature 헤더 공유 비밀은 변환에 필요하지 않습니다.
- 테스트 이벤트를 데이터 변환으로 전송하여 웹훅이 올바르게 구성되었는지 확인합니다. Developer Tools 권한이 있는 Olo 대시보드 사용자만 테스트 이벤트를 전송할 수 있습니다.
Olo 웹훅 구성 프로세스를 완료하려면 테스트 이벤트 웹훅에서 성공적인 응답을 받아야 합니다.
3단계: 선택한 Olo 이벤트를 수신하는 변환 코드 작성
이 단계에서는 소스 플랫폼에서 전송될 웹훅 페이로드를 JavaScript 오브젝트 반환 값으로 변환합니다.
- 지원하려는 Olo 이벤트의 샘플 이벤트 페이로드와 함께 데이터 변환 URL로 요청을 전송합니다. 요청 형식에 대한 도움말은 요청 본문 형식을 참조하세요.
- 데이터 변환을 새로고침하고 Webhook Details에서 샘플 이벤트 페이로드를 확인할 수 있는지 확인합니다.
- 선택한 Olo 이벤트를 지원하도록 데이터 변환 코드를 업데이트합니다.
- Validate를 클릭하여 코드 출력의 미리보기를 반환하고 유효한
/users/track요청인지 확인합니다. - 데이터 변환을 저장하고 활성화합니다.
요청 본문 형식
이 반환 값은 Braze의 /users/track 요청 본문 형식을 준수해야 합니다.
- 변환 코드는 JavaScript 프로그래밍 언어로 작성됩니다. if/else 로직과 같은 모든 표준 JavaScript 제어 흐름이 지원됩니다.
- 변환 코드는 payload 변수를 통해 웹훅 요청 본문에 접근합니다. 이 변수는 요청 본문 JSON을 파싱하여 채워진 오브젝트입니다.
/users/track엔드포인트에서 지원되는 모든 기능이 지원되며, 다음을 포함합니다.- 사용자 속성 오브젝트, 이벤트 오브젝트, 구매 오브젝트
- 중첩 속성 및 중첩 커스텀 이벤트 등록정보
- 구독 그룹 업데이트
- 식별자로서의 이메일 주소
Olo 웹훅을 위한 데이터 변환 예시
이 섹션에는 시작점으로 사용할 수 있는 예시 템플릿이 포함되어 있습니다. 처음부터 시작하거나 필요에 따라 특정 구성요소를 삭제해도 됩니다.
각 템플릿에서 코드는 /users/track 요청을 구축하기 위해 brazecall 변수를 정의합니다.
/users/track 요청이 brazecall에 할당된 후, brazecall을 명시적으로 반환하여 출력을 생성합니다.
단일 이벤트 변환
단일 Olo 이벤트만 지원하려는 경우 X-Olo-Event-Type 헤더를 사용하여 /users/track 요청 페이로드를 조건부로 생성할 필요가 없습니다. 예를 들어, Olo Order Placed 웹훅이 Braze로 전송될 때 고객 프로필에 구매 이벤트 또는 커스텀 이벤트를 기록하는 경우입니다.
각 제품을 구매로 기록
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;
커스텀 이벤트 기록
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;
다중 이벤트 변환
Olo는 각 웹훅의 X-Olo-Event-Type 헤더 내에 이벤트 유형을 전송합니다. 단일 변환 내에서 여러 Olo 웹훅 이벤트를 지원하려면 조건 로직을 사용하여 이 헤더 유형의 값에 따라 웹훅 페이로드를 변환합니다.
아래 변환 예시에서 JavaScript는 UserSignedUp 및 OrderPlaced 이벤트에 대해 특정 페이로드를 생성합니다. 또한 else 조건은 X-Olo-Event-Type 헤더가 UserSignedUp 및 OrderPlaced가 아닌 Olo 이벤트가 Braze로 전송될 때의 페이로드를 처리합니다.
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;
4단계: Olo 웹훅 게시
Braze에서 데이터 변환을 활성화한 후, Olo 대시보드 내 셀프 서비스 웹훅 도구를 사용하여 웹훅을 게시합니다. 웹훅이 게시되면 데이터 변환이 Olo 웹훅 이벤트 메시지를 수신하기 시작합니다.
알아두어야 할 사항
재시도
Olo는 HTTP 응답 상태 코드가 429 - Too Many Requests이거나 5xx 범위(예: 게이트웨이 타임아웃 또는 서버 오류)인 웹훅 호출을 24시간 동안 최대 50회까지 재시도한 후 요청을 삭제합니다.
최소 1회 전달
웹훅 호출의 HTTP 응답 상태 코드가 429 - Too Many Requests이거나 5xx 범위(예: 게이트웨이 타임아웃 또는 서버 오류)인 경우, Olo는 24시간 동안 최대 50회까지 메시지를 재시도한 후 포기합니다.
따라서 구독자가 웹훅을 여러 번 수신할 수 있습니다. X-Olo-Message-Id 헤더를 확인하여 중복을 무시하는 것은 구독자의 책임입니다.