Olo
Olo は、あらゆるタッチポイントでのホスピタリティを実現するレストラン向けの大手オープンSaaSプラットフォームです。
OloとBrazeを統合することで、以下のことが可能になります。
- BrazeのユーザープロファイルをOloのユーザープロファイルと一致するように更新する
- Oloのイベントに基づいて、Brazeから最適な次のメッセージを送信する
前提条件
| 必要条件 | 説明 |
|---|---|
| Oloアカウント | このパートナーシップを利用するには、Webhookにアクセスできるoloアカウントが必要です。Oloダッシュボード内のセルフサービスWebhookツールを使用してWebhookサブスクリプションを設定してください。 |
| Brazeデータ変換 | Oloからデータを受信するには、データ変換URLが必要です。 |
Webhookとは、OloがBrazeにユーザーとそのアクションに関するイベント駆動型の情報を送信する方法であり、Order Placed(注文完了)、Guest Opt In(ゲストのオプトイン)、Order Picked Up(注文の受け取り)などのイベントが含まれます。Olo Webhookは、通常アクションが実行されてから数秒以内にBrazeにイベントを配信します。
免責事項
Oloでは、承認されたブランドごとに1環境につき1つのWebhookに制限され、すべて同じ送信先URLに送信されます。異なるブランドは異なるURLを持つことができますが、同じブランドのイベントはURLを共有する必要があります。これはBrazeでは、Oloで使用するために作成できるデータ変換が1つだけであることを意味します。
この1つの変換で複数のOloイベントを処理するには、各WebhookのX-Olo-Event-Typeヘッダーを確認してください。このヘッダーにより、異なるOloイベントを条件付きで処理できます。
統合
ステップ1:Oloのテストイベントを受け入れるようにBrazeデータ変換を設定する
Braze ダッシュボードで、[データ設定] > [データ変換] に移動します。
[変換を作成] を選択して変換に名前を付け、編集エクスペリエンスを選択します。

データ変換のユースケースを含むテンプレート・ライブラリを参照するには、[テンプレートの使用] を選択します。または、”Start from scratch “を選択してデフォルトのコードテンプレートを読み込む。
ゼロから作成するのであれば、変換先を選択します。テンプレートライブラリからコードテンプレートを挿入することもできます。
More on destinations
- POST: ユーザーを追跡:ソースプラットフォームからのWebhookを、属性、イベント、購入などのユーザープロファイル更新に変換する。
- PUT: 複数のカタログ項目を更新する:ソースプラットフォームからのWebhookをカタログアイテムの更新に変換する。
- DELETE: 複数のカタログ項目を削除する:ソースプラットフォームからのWebhookをカタログアイテムの削除に変換する。
- PATCH:複数のカタログ項目を編集する:ソースプラットフォームからのWebhookをカタログアイテムの編集に変換する。
- POST: APIのみでメッセージを即座に送信する:ソースプラットフォームからのWebhookを変換し、指定したユーザーに即座にメッセージを送信する。

追加のテンプレートや送信先をご希望ですか?製品フィードバックを残すことを検討してください。
変換を作成すると、変換の詳細ビューが表示されます。ここでは、[Webhook の詳細] の下にこの変換に対して受信した最新の Webhook が表示され、[変換コード] の下に変換コードを記述するスペースが表示されます。
次のステップで使用するWebhook URLをキャプチャする。
ステップ2:Olo Webhookを設定する
Oloダッシュボード内のセルフサービスWebhookツールを使用して、データ変換に送信するWebhookを設定します。
- Brazeに送信するイベントを選択します
- 送信先URLを設定します。これはステップ1で作成したデータ変換URLです。

OAuthとX-Olo-Signatureヘッダー共有シークレットは、変換には必要ありません。
- テストイベントをデータ変換に送信して、Webhookが正しく設定されていることを確認します。テストイベントを送信できるのは、Developer Tools権限を持つOloダッシュボードユーザーのみです。
Oloでは、Olo Webhook設定プロセスを完了する前に、テストイベントWebhookからの正常な応答が必要です。
ステップ3:選択したOloイベントを受け入れる変換コードを記述する
このステップでは、ソースプラットフォームから送信されるWebhookペイロードを、JavaScriptオブジェクトの戻り値に変換します。
- サポートする予定のOloイベントのサンプルイベントペイロードを添えて、データ変換URLにリクエストを送信します。リクエストの書式については、リクエスト本文の形式を参照してください。
- データ変換を更新し、Webhookの詳細にサンプルイベントペイロードが表示されていることを確認します。
- 選択したOloイベントをサポートするようにデータ変換コードを更新します。
- Validateをクリックして、コード出力のプレビューを返し、受け入れ可能な
/users/trackリクエストであるかどうかを確認します。 - データ変換を保存して有効化します。
リクエスト本文の形式
この戻り値は、Brazeの/users/trackリクエスト本文の形式に準拠する必要があります。
- 変換コードはJavaScriptプログラミング言語で記述します。if/elseロジックなど、標準的なJavaScript制御フローがすべてサポートされています。
- 変換コードは、ペイロード変数を通じてWebhookリクエスト本文にアクセスします。この変数は、リクエスト本文のJSONを解析して読み込まれたオブジェクトです。
/users/trackエンドポイントでサポートされるすべての機能がサポートされています。以下が含まれます。- ユーザー属性オブジェクト、イベントオブジェクト、購入オブジェクト
- ネストされた属性とネストされたカスタムイベントプロパティ
- サブスクリプショングループの更新
- 識別子としてのメールアドレス
Olo Webhookのデータ変換の例
このセクションには、出発点として使用できるテンプレートの例が含まれています。ゼロから作成するか、必要に応じて特定のコンポーネントを削除することもできます。
各テンプレートでは、/users/trackリクエストを作成するための変数brazecallがコードにより定義されます。
/users/trackリクエストがbrazecallに割り当てられた後、明示的にbrazecallを返して出力を作成します。
単一イベント変換
1つのOloイベントのみをサポートする場合は、/users/trackリクエストペイロードを条件付きで生成するためにX-Olo-Event-Typeヘッダーを使用する必要はありません。例えば、Olo Order Placed Webhookが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;
カスタムイベントを記録する
// 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条件により、X-Olo-Event-TypeヘッダーがUserSignedUpおよびOrderPlaced以外の値でBrazeに送信されたすべてのOloイベントのペイロードが処理されます。
// 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 Webhookを公開する
Brazeでデータ変換を有効化したら、Oloダッシュボード内のセルフサービスWebhookツールを使用してWebhookを公開します。Webhookが公開されると、データ変換は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ヘッダーを確認して重複を無視する必要があります。