Content Cardsで消費者に注文の更新を通知する
注文管理システム (OMS) から注文の更新を記録し、発送やキャンセルなどの更新に応じてContent Cardsを送信し、キーと値のペアを使ってアプリ内で古いカードを非表示にすることで、カスタムの Content Card フィードを常に最新の注文ステータスに保ちます。
この例について
架空の衣料品・美容小売業者であるFlash & Threadは、モバイルアプリに横スクロールの Content Card フィードを設け、各カードで購入のステータスを表示したいと考えています。たとえば、注文が picked から dispatched (発送済み) に移行したときや、cancelled になったときです。
同社の注文管理システムには、消費者のメールアドレス、注文番号、注文ステータス、追跡URLが保存されており、これらの値が更新されるとBrazeを呼び出すことができます。マーケティング担当者は、ステータスごとに異なるカードの文言を使いたいと考えています (たとえば、dispatched には「ご注文の商品は配送中です」、picked には「ご注文の準備をしています」)。同じ注文の古いカード (dispatched のカードが届いた後の picked のカードなど) を非表示にして、消費者に最新のステータスだけが表示されるようにします。
この例では、次の方法を説明します。
- 注文管理システムが pending、held、picked、dispatched、cancelled などのステータス変更を記録したときに、カスタムイベント (たとえば
order_update) を/users/trackに記録する - これらのステータスごとに個別のアクションベースの Content Card キャンペーンをトリガーし、イベントプロパティを使ってLiquidでパーソナライゼーションを行う
- 各カードに
order_numberやorder_hierarchyなどのキーと値のペア (extras) を設定する - カスタムの Content Card フィードで、
order_numberごとにorder_hierarchyが最も高いカードのみを残し、それ以外を非表示にする
ダッシュボードの削除イベントだけでは、同じジャーニーから送信された多数のカードの中から特定の注文のカードだけを対象にできない場合に、この方法を使用します。
考慮事項
- Content Cardsは、送信から最長 30 日後に有効期限が切れて削除されます。終了ステータス (キャンセルなど) のカードをより早くフィードから消したい場合は、有効期限を短く設定してください。詳しくは、Content Cardの作成を参照してください。
- 注文管理システムにメールアドレスしかない場合は、
/users/trackでセカンダリー識別子emailを使ってユーザーを識別します。注文管理システムにexternal_idがある場合は、そちらを優先してください。カスタムの識別子タイプが必要な場合は、ユーザーエイリアスも選択肢になります。alias_nameに識別子の値を、alias_labelにタイプ (たとえばemail) を設定します。詳しくは、識別子の解決とユーザーエイリアスオブジェクトを参照してください。 - イベントトリガーの方法を使用する場合、カスタムイベントプロパティはLiquidによるパーソナライゼーションやイベントプロパティによるセグメンテーションに利用できます。ただし、属性としても書き込まない限り、プロファイルに属性として保持されることはありません。
- API トリガーの Content Card キャンペーンを代わりに使用すると、カスタムイベント (およびそのデータポイント) の記録を回避できます。ただし、キャンペーンごとに個別のトリガー送信が必要になり、そのシグナルに対するイベントプロパティによるセグメンテーションは利用できなくなります。
- カスタムフィードは、次のセッション開始時または手動で
requestContentCardsRefreshを呼び出すまで、セッション中に更新されません。消費者が注文フィードを開いたとき、またはプルして更新したときに、更新を呼び出してください。 - 完全にカスタマイズした Content Card UIでは、分析の手動ロギング (インプレッション、クリック、非表示) が必要です。デフォルトのフィードをサブクラス化する方が手間は少なくなりますが、横スクロールのカルーセルには対応していません。
- この階層ロジックは、1 つの注文番号につき同時に有効なステータスが 1 つであることを前提としています。1 つの注文に複数のステータスが同時に存在する可能性がある場合 (倉庫ごとに分割出荷する場合など) は、別のキー (フルフィルメント ID など) を追加し、残すか非表示にするかのルールに含めてください。
- アプリ側の非表示ロジックには、新しいアプリのリリースが必要です。本番環境の前に、開発用ワークスペースでテストしてください。
設定
ステップ 1: 注文管理システムから注文の更新を記録する
注文管理システムがステータスの変更を記録したら、カスタムイベントを /users/track に送信します。Content Cardのパーソナライゼーションに使用し、アプリが extras から読み取るイベントプロパティを含めてください。
次の表は、プロパティの例を示しています。
| プロパティ | 目的 |
|---|---|
order_number |
同じ注文のカードをグループ化します |
order_status |
文言とキャンペーンのフィルターに使用するステータスラベル |
tracking_url |
任意のディープリンクまたはボタン URL |
メールアドレスでユーザーを識別するリクエストの例は次のとおりです。
POST https://rest.iad-01.braze.com/users/track
Content-Type: application/json
Authorization: Bearer {YOUR_REST_API_KEY}
{
"events": [
{
"email": "[email protected]",
"name": "order_update",
"time": "2026-09-28T16:02:05Z",
"properties": {
"order_number": "12345",
"order_status": "picked",
"tracking_url": "https://www.flashandthread.example/track/12345"
}
}
]
}
ワークスペースの REST エンドポイントと、users.track 権限を持つ API キーを使用してください。サンプルのメールアドレスと注文の値は、注文管理システムのペイロードに置き換えてください。
ステップ 2: 注文ステータスごとに Content Card キャンペーンを作成する
送信するステータスごとに (たとえば pending、held、picked、dispatched、cancelled)、アクションベースの Content Card キャンペーンを 1 つずつ作成します。
- メッセージング > キャンペーン に移動し、キャンペーンを作成 を選択してから、Content Cards を選択します。
order_updateカスタムイベントに対してアクションベースの配信を設定します。対応するorder_statusイベントプロパティでフィルターをかけ、そのステータスのみがこのキャンペーンに入るようにします。- Liquidのイベントプロパティを使って、カードのタイトルまたは本文をパーソナライズします。
Order {{event_properties.${order_number}}} is {{event_properties.${order_status}}}.
- 設定 タブで 新しいペアを追加 を選択し、アプリで使用するキーと値のペアを追加します。
| キー | 値 |
|---|---|
order_number |
{{event_properties.${order_number}}} |
order_status |
{{event_properties.${order_status}}} (またはそのキャンペーンの固定ステータス) |
order_hierarchy |
このステータスの整数 (キャンペーンごとにハードコード) |
次の表は、階層の例を示しています。アプリは、注文ごとに値が最も高いカードを残します。
| ステータス | order_hierarchy |
|---|---|
| pending | 1 |
| held | 2 |
| picked | 3 |
| dispatched | 4 |
| cancelled | 5 |
- カードの有効期限 (最長 30 日) を設定します。終了ステータスには短い期間を設定することをお勧めします。
ダッシュボードの削除イベントはキャンペーンレベルで適用されるため、同じキャンペーンの他のカードを残したまま、1 つの注文のカードだけを削除することはできません。そのため、アプリは extras を使って古いカードを非表示にします。
ステップ 3: カスタムフィードで注文ごとに最新のカードを残す
カスタムフィードで Content Card の更新をサブスクライブし、extras を読み取り、order_number ごとに order_hierarchy が最も高いカードを残します。分析の正確性を保つため、残りのカードはプラットフォームの非表示 APIで非表示にします。
フィード内の各カードに対して、次の処理を行います。
extrasからorder_numberとorder_hierarchyを読み取ります。- 同じ
order_numberを持つカードの中で、最も高いorder_hierarchyを見つけます。 - カードの階層が最も高い値と一致する場合は、そのカードを表示します (カードのフィールドをカスタム UI オブジェクトにマッピングします)。
- それ以外の場合は、カードを非表示にします。
サブスクライブと非表示の呼び出しは、お使いのプラットフォームの最新のSDKで実装してください。まずは以下を参照してください。
消費者がすでにアプリを使用している場合は、requestContentCardsRefresh を呼び出して、次のセッションを待たずに新しい注文カードが表示されるようにします。
ステップ 4: ジャーニーをエンドツーエンドでテストする
- 同じ注文に対して、
order_statusの値が段階的に上がる一連のorder_updateイベントを送信します。 - 各ステータスのキャンペーンが想定どおりのカードを送信し、Liquidが正しく解決されることを確認します。
- フィードに注文ごとに 1 枚のカードが表示され、階層の低いカードが非表示になることを確認します。
- カスタム UIのインプレッション、クリック、非表示がキャンペーン分析に表示されることを確認します。