Olo
Olo は、あらゆるタッチポイントでの応対を可能にする飲食店向けの大手オープン SaaS プラットフォームです。
OloとBrazeを統合することで、それが可能になる:
- Brazeのユーザープロファイルを更新し、Oloのユーザープロファイルとの一貫性を保つ。
- Oloのイベントに基づいて、Brazeから適切な次善のメッセージを送る
前提条件
必要条件 | 説明 |
---|---|
Olo アカウント | このパートナーシップを利用するには、ウェブフックにアクセスできるOloアカウントが必要である。Oloダッシュボード内のセルフサービスWebhooksツールでWebhookサブスクリプションを設定する。 |
Braze Data Transformation | Olo からデータを受信するには、Data Transformation URL が必要です。 |
Webhookとは、OloがBrazeにユーザーとそのアクションに関するイベントドリブンな情報を送信する方法であり、Order Placed(注文の発注)、Guest Opt In(ゲストのオプトイン)、Order Picked Up(注文の受け取り)などのイベントを含む。Olo Webhookは、一般的にアクションが実行されてから数秒以内にBrazeにイベントを配信する。
免責事項
Oloでは、承認されたブランドごとに1環境につき1つのウェブフックに制限され、すべて同じ宛先URLに送信される。異なるブランドは異なるURLを持つことができるが、同じブランドのイベントはURLを共有しなければならない。これは Braze では、Olo で使用するために作成できる変換が1つだけであることを意味します。
この1つの変換で複数のOloイベントを処理するには、各ウェブフックのX-Olo-Event-Type
ヘッダーを探す。このヘッダーによって、異なるOloイベントを条件付きで処理することができる。
統合
ステップ1:Olo のテストイベントを受け入れるように Braze Data Transformation を設定する
Brazeダッシュボードで、データ設定>データ変換に進む。
古いナビゲーションを使用している場合は、「データ」の下に「トランスフォーメーション」がある。
トランスフォームの作成」を選択してトランスフォームに名前を付け、編集エクスペリエンスを選択する。
変形の詳細は、編集体験のために「テンプレートを使用する」または「ゼロから始める」を選択するオプションがある。
データ変換のユースケースを含むテンプレート・ライブラリを参照するには、Use a templateを選択する。または、”Start from scratch “を選択してデフォルトのコードテンプレートを読み込む。
ゼロから始めるのであれば、変身のための送信先を選ぶ。テンプレート・ライブラリーからコード・テンプレートを挿入することはできる。
送信先の詳細
- POST: ユーザーをトラッキングする:ソースプラットフォームからのWebhookを、属性、イベント、購入などのユーザープロファイル更新に変換する。
- PUT: 複数のカタログ項目を更新する:ソースプラットフォームからのWebhookをカタログアイテムの更新に変換する。
- DELETE: 複数のカタログ項目を削除する:ソースプラットフォームからのWebhookをカタログアイテムの削除に変換する。
- パッチを当てる:複数のカタログ項目を編集する:ソースプラットフォームからのWebhookをカタログアイテムの編集に変換する。
- POST: APIのみでメッセージを即座に送信する:ソースプラットフォームからのWebhookを変換し、指定したユーザーに即座にメッセージを送信する。
追加のテンプレートや送信先をご希望ですか?製品フィードバックを残すことを検討する。
トランスフォームを作成すると、トランスフォームの詳細ビューが表示される。ここでは、Webhook Detailsの下に、このトランスフォーメーションに対して受信した最新のWebhookを表示することができ、Transformation codeの下に、トランスフォーメーションコードを書き込むスペースがある。
ステップ2:Oloウェブフックを設定する
Olo ダッシュボード内のセルフサービス Webhooks ツールを使用して、Data Transformation に送信する Webhook を設定します。
- Brazeに送信するイベントを選択する
- 宛先 URL を設定します。これは、ステップ1で作成された Data Transformation URL です。
OAuth
と X-Olo-Signature
ヘッダー共有シークレットは、変換には必要ありません。
3.テストイベントを Data Transformation に送信して、Webhook が正しく設定されていることを確認します。テストイベントを送信できるのは、Developer Tools 権限を持つ Olo Dashboard ユーザのみである。
Olo では、Olo Webhook 設定プロセスを完了する前に、テストイベント Webhook からの正常な応答が必要です。
ステップ3:選んだOloイベントを受け入れる変換コードを書く
このステップでは、ソース・プラットフォームから送信されるウェブフック・ペイロードを、JavaScriptオブジェクトの戻り値に変換する。
- データ変換 URL に、サポートする予定の Olo イベントのサンプルイベントペイロードを添えてリクエストを送信する。リクエストの書式については、リクエストボディの書式を参照のこと。
- Data Transformation を更新し、[Webhook の詳細] にサンプルイベントペイロードが表示されていることを確認します。
- 選択した Olo イベントをサポートするように Data Transformation コードを更新します。
- [検証] をクリックして、コード出力のプレビューを返し、受け入れられる
/users/track
リクエストであるかどうかを確認します。 - Data Transformation を保存して有効化します。
リクエスト本文の形式
この戻り値は、Brazeの /users/track
リクエストの本文フォーマットに準拠しなければなりません。
- 変換コードは JavaScript プログラミング言語で受け入れられます。if/else ロジックなど、標準的な JavaScript 制御フローがすべてサポートされています。
- 変換コードは、ペイロード変数を通じてウェブフック・リクエスト・ボディにアクセスする。この変数は、リクエスト本文の JSON を解析して読み込まれたオブジェクトです。
/users/track
エンドポイントでサポートされるすべてのフィーチャーがサポートされています。例を示します。- ユーザー属性オブジェクト、イベントオブジェクト、購入オブジェクト
- 階層化属性と階層化カスタムイベントプロパティ
- サブスクリプショングループの更新
- 識別子としてのメールアドレス
Oloウェブフックのデータ変換の例
このセクションには、出発点として使用できるテンプレートの例が含まれている。ゼロから作成するか、必要に応じて特定のコンポーネントを削除することができます。
各テンプレートでは、/users/track
リクエストを作成するための変数 brazecall
がコードにより定義されます。
/users/track
リクエストが brazecall
に割り当てられた後、明示的に brazecall
を返して出力を作成します。
単一イベント変換
もしあなたが一つのOloイベントだけをサポートしようとしているなら、/users/track
リクエストペイロードを条件付きで生成するためにX-Olo-Event-Type
ヘッダーを使う必要はない。例えば、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 は、各Webhookの X-Olo-Event-Type
ヘッダーにイベントタイプを入れて送信します。単一の変換内で複数の Olo webhook イベントをサポートするには、条件付きロジックを使用して、このヘッダー型の値に基づいて webhook ペイロードを変換する。
以下の変換例では、JavaScriptはUserSignedUp
とOrderPlaced
のイベントに対して特定のペイロードを作成している。さらに else
条件により、UserSignedUp
および OrderPlaced
の X-Olo-Event-Type ヘッダーなしで Braze に送信されたすべての Olo イベントのペイロードが処理されます。
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 で Data Transformation を有効化したら、Olo ダッシュボード内のセルフサービス Webhook ツールを使用して Webhook を公開します。Webhook が公開されると、Data Transformation はOlo Webhook イベントメッセージの受信を開始します。
知っておくべきこと
再試行
Olo は、HTTP 応答ステータスコードが429 - Too Many Requests
、または5xx
範囲内のコード (ゲートウェイのタイムアウトやサーバーエラーなどに起因する) である場合、リクエストをドロップするまで、24時間以内に50回までWebhook 呼び出しを再試行します。
1回以上の配信
Webhook 呼び出しの結果、HTTP 応答ステータスコードが429 - Too Many Requests
または5xx
範囲内のコード (ゲートウェイのタイムアウトやサーバーのエラーなどに起因する) である場合、Olo は24時間以内に最大50回メッセージを再試行してから、処理をあきらめます。
したがって、Webhookはサブスクライバーによって複数回受信される可能性がある。サブスクライバーは、X-Olo-Message-Id
ヘッダーを確認して重複を無視するかどうかを決定します。