コンテンツにスキップ

Olo

Oloは、あらゆるタッチポイントでのホスピタリティを実現するレストラン向けの大手オープンSaaSプラットフォームです。

OloとBrazeを統合することで、以下のことが可能になります。

  • BrazeのユーザープロファイルをOloのユーザープロファイルと一致するように更新する
  • Oloのイベントに基づいて、Brazeから最適な次のメッセージを送信する

前提条件

要件 説明
Oloアカウント このパートナーシップを利用するには、webhookにアクセスできるOloアカウントが必要です。Oloダッシュボード内のセルフサービスwebhookツールからwebhookサブスクリプションを設定してください。
Brazeデータ変換 Oloからデータを受信するには、データ変換URLが必要です。

webhookは、Oloがユーザーとそのアクションに関するイベント駆動型の情報をBrazeに送信する手段です。注文完了、ゲストのオプトイン、注文のピックアップなどのイベントが含まれます。Olo webhookは通常、アクションが実行されてから数秒以内にイベントをBrazeに配信します。

免責事項

Oloでは、承認されたブランドごとに各環境でwebhookは1つに制限されており、すべて同じ送信先URLに送信されます。異なるブランドには異なるURLを設定できますが、同一ブランドのイベントはURLを共有する必要があります。Brazeでは、Oloと連携するトランスフォーメーションは1つしか作成できません。

この単一のトランスフォーメーション内で複数のOloイベントを処理するには、各webhookの X-Olo-Event-Type ヘッダーを確認してください。このヘッダーを使用することで、異なるOloイベントを条件に応じて処理できます。

連携

ステップ1: OloのテストイベントをBraze Data Transformationで受け入れるよう設定する

Brazeダッシュボードで、データ設定 > データ変換に移動します。

変換を作成を選択して変換に名前を付け、編集エクスペリエンスを選択します。

編集エクスペリエンスとして「テンプレートを使用」または「ゼロから作成」を選択するオプションが表示された変換の詳細。

テンプレートを使用を選択すると、データ変換のユースケースを含むテンプレートライブラリーを参照できます。または、ゼロから作成を選択してデフォルトのコードテンプレートを読み込みます。

ゼロから作成する場合は、変換の送信先を選択します。テンプレートライブラリーからコードテンプレートを挿入することもできます。

送信先の詳細
  • POST: Track users: ソースプラットフォームからのWebhookを、属性、イベント、購入などのユーザープロファイル更新に変換します。
  • PUT: Update multiple catalog items: ソースプラットフォームからのWebhookをカタログアイテムの更新に変換します。
  • DELETE: Delete multiple catalog items: ソースプラットフォームからのWebhookをカタログアイテムの削除に変換します。
  • PATCH: Edit multiple catalog items: ソースプラットフォームからのWebhookをカタログアイテムの編集に変換します。
  • POST: Send messages immediately via API Only: ソースプラットフォームからのWebhookを変換し、指定したユーザーに即座にメッセージを送信します。

変換を作成すると、変換の詳細ビューが表示されます。ここでは、Webhookの詳細の下にこの変換に対して受信した最新のWebhookが表示され、変換コードの下に変換コードを記述するスペースが表示されます。

次のステップで使用するWebhook URLをコピーします。

ステップ2: Olo webhookを設定する

Oloダッシュボード内のセルフサービスwebhookツールを使用して、Data Transformationにデータを送信するwebhookを設定します。

  1. Brazeに送信するイベントを選択します
  2. Destination URLを設定します。これはステップ1で作成したData Transformation URLです。
  1. Data Transformationにテストイベントを送信して、webhookが正しく設定されていることを確認します。テストイベントを送信できるのは、Developer Tools権限を持つOloダッシュボードユーザーのみです。

Oloでは、Olo webhookの設定プロセスを完了するために、テストイベントwebhookからの成功レスポンスが必要です。

ステップ3: 選択したOloイベントを受け入れるトランスフォーメーションコードを作成する

このステップでは、ソースプラットフォームから送信されるwebhookペイロードを、JavaScriptオブジェクトの戻り値に変換します。

  1. サポートする予定のOloイベントのサンプルイベントペイロードを使用して、Data Transformation URLにリクエストを送信します。リクエストのフォーマットについては、リクエストボディのフォーマットを参照してください。
  2. Data Transformationを更新し、Webhook Detailsにサンプルイベントペイロードが表示されていることを確認します。
  3. 選択したOloイベントをサポートするようにData Transformationコードを更新します。
  4. Validateをクリックして、コード出力のプレビューを確認し、有効な/users/trackリクエストであるかどうかを確認します。
  5. Data Transformationを保存して有効化します。

リクエストボディのフォーマット

この戻り値は、Brazeの/users/trackリクエストボディのフォーマットに準拠する必要があります。

  • 変換コードはJavaScriptプログラミング言語で記述します。if/elseロジックなど、標準的なJavaScriptの制御フローがサポートされています。
  • 変換コードはpayload変数を介してWebhookリクエストボディにアクセスします。この変数は、リクエストボディのJSONを解析して生成されるオブジェクトです。
  • /users/trackエンドポイントでサポートされている機能はすべてサポートされています。以下が含まれます:
    • ユーザー属性オブジェクト、イベントオブジェクト、購入オブジェクト
    • ネストされた属性およびネストされたカスタムイベントプロパティ
    • 購読グループの更新
    • 識別子としてのメールアドレス

Olo webhookのデータ変換の例

このセクションには、出発点として使用できるテンプレートの例が含まれています。新しいテンプレートを作成したり、必要に応じて特定のコンポーネントを削除したりしてください。

各テンプレートのコードでは、/users/trackリクエストを構築するための変数brazecallを定義しています。

/users/trackリクエストがbrazecallに割り当てられた後、brazecallを明示的に返すことで出力を作成します。

単一イベントの変換

単一のOloイベントのみをサポートする場合、X-Olo-Event-Typeヘッダーを使用して/users/trackリクエストペイロードを条件付きで作成する必要はありません。たとえば、Olo Order Placed webhookがBrazeに送信されたときに、購入イベントやカスタムイベントをユーザープロファイルに記録する場合です。

各商品を購入として記録する

// 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条件により、UserSignedUpとOrderPlacedのX-Olo-Event-Typeヘッダーを持たない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 範囲(ゲートウェイタイムアウトやサーバーエラーなど)のwebhookコールをリクエストを破棄するまでに、24時間にわたって最大50回リトライします。

最低1回の配信

webhookコールがHTTPレスポンスステータスコード 429 - Too Many Requests または 5xx 範囲(ゲートウェイタイムアウトやサーバーエラーなど)になった場合、Oloは諦めるまでに24時間にわたって最大50回メッセージをリトライします。

そのため、サブスクライバーがwebhookを複数回受信する可能性があります。X-Olo-Message-Id ヘッダーを確認して重複を無視するかどうかは、サブスクライバーの責任です。

New Stuff!