バインド ID を使用して、トリガーを相互に関連付ける
トリガーベースの反復可能な体験の場合、顧客は以前の実行を完了せずに体験を反復できます。 たとえば、予定の確認とリマインダーを送信する体験を考えます。 あるユーザーが最初の予定を登録すると、そのユーザーは体験を開始して確認を受け取ります。 予定の前日にリマインダーを受け取るまで、そのユーザーは体験で引き続き待機します。 この間、同じユーザーが 2 つ目の予約に登録できます。 体験の参加者は 2 つ目の予定に対応する 2 回目の同じ体験を開始するでしょう。 これは言い換えれば、同じユーザーが同じ体験の 2 つのインスタンスを利用しています。
このような状況で、体験の参加者が予定の 1 つをキャンセルした場合、キャンセルした予定に関連付けられた体験のみを終了する必要があります。 たとえば、1 つ目の予定をキャンセルした場合、1 つ目の予定に関連付けられた体験を終了して、2 つ目の予定に関連付けられた体験は続行する必要があります。 既成の Dataverse を利用したイベントを使用している場合、この動作は自動的に実行され、他にアクションは必要ありません。 ただし、カスタム トリガーを使用している場合はトリガーを構成して、トリガーを関連付けるべき体験に対応する特定のインスタンスを、適切に識別する必要があります。
bindingId 属性を使用して体験の各インスタンスを一意に識別します
すべてのカスタム トリガーはオプションの bindingId 属性を持ち、体験の特定のインスタンスにトリガーをバインドするために使用できます。 bindingId 属性が存在しない場合、そのユーザーが参加している体験のすべてのインスタンスに対してトリガーが作用します。 たとえば、あるユーザーが 2 つの予定に登録し、その 1 つをキャンセルした場合、そのキャンセルしたトリガーで bindingId を使用しないとユーザーは両方の体験インスタンスを終了します。 反復できる体験でトリガーを使用する場合は、トリガーに bindingId を含めることを強く推奨します。
体験を開始するトリガーが bindingId を含む場合、その ID を体験インスタンスの識別に使用します。 他のイベントは、体験インスタンスを識別するために、同じ bindingId を使用する必要があります。 bindingId の形式を次に示します: {entityType}/{entityId}
。 たとえば開始イベントが 予定を確認しました という名前の予定エンティティであり、entityId が “123” の場合、bindingId は Appointment/123
になります。 終了イベント 予定をキャンセルしました は同じエンティティ タイプである必要があり、さらに同じ bindingId (Appointment/123
) を使用して体験インスタンスを一意に識別する必要があります。
体験でカスタム トリガーのみを使用している場合は、一意の文字列を使用して体験インスタンスを識別できます。
Note
bindingId が存在しない場合、または バインドが別のエンティティ タイプに対応する場合は、誰かが参加している体験のすべてのインスタンスにカスタム トリガーが作用します。
カスタム トリガーと既成のイベントやカスタム ビジネス イベントを相互に関連付ける
カスタム トリガーと、既成またはカスタムのビジネス イベントを組み合わせて使用する場合、bindingId は特別な形式を使用して Dataverse テーブルと行を一意に識別します。 たとえば、既成のイベント 営業案件を作成しました から自分の体験を開始できます。 次に、イベントの終了に 営業案件を受注しました と呼ばれるカスタム トリガーを使用できます。 各インスタンスを一意に識別するためには、カスタム トリガー 営業案件を受注しました に 営業案件を作成しました イベントのパターンに従う bindingId を含める必要があります。
既成のビジネス イベントやカスタム ビジネス イベントで体験を開始する場合は、いつでも各体験インスタンスをパターン {entityType}/{unique row ID}
で一意に識別できます。 カスタム トリガーと、既成またはカスタムのビジネス イベントを相互に関連付けるために、このパターンをカスタム トリガーの bindingId 属性に含める必要があります。
カスタム トリガー 営業案件を受注しました の場合、bindingId は次のようになります。
-
bindingId =
opportunity/{unique ID of the opportunity row}
カスタム トリガーが上記の bindingId パターンに従う場合、他のビジネス イベントに使用する場合でも、それらを使用して適切な体験インスタンスを識別できます。 bindingId を実装すると、すべての体験インスタンスに作用します。
Note
バインドは同じエンティティ タイプ間のみで機能します。
カスタム トリガーに bindingId を追加する方法
カスタム トリガーのコード スニペットで bindingId 属性を変更できます。
既存のカスタム トリガーのコード スニペットにアクセスする方法
- Customer Insights - Journeys>エンゲージメント>トリガーに移動します。
- bindingId を追加するカスタム トリガーを選択します。
- コード スニペットに移動する を選択します。
- このスニペットをコピーして、お好みのコード エディタに貼り付けます。 上記の形式に従って bindingId 属性を変更します (カスタム トリガーと既成のイベントやカスタム ビジネス イベントを相互に関連付け、カスタム トリガーや
{table_name}/{unique row ID}
でのみ使用する場合は、一意の文字列)。
新しいカスタム トリガーを作成する場合は、同じ手順に従って bindingId を追加できます。
bindingId の解釈
/
は予約文字です。 bindingId は、/
区切りの形式で、先頭や末尾の /
はすべて削除した状態で常に指定する必要があります。 さらに、結果は /
を含みません。 この {entityType}/{entityId}
方式によってアプリは常に解釈を実行します。
例:
"A/B"
will be interpreted as
{entityType = "A"}/{entityId = "B"}
"A"
will be interpreted as
{entityType = ""}/{entityId = "A"}
"A/B/C"
will be interpreted as
{entityType = "AB"}/{entityId = "C"}
""
will be interpreted as
{entityType = ""}/{entityId = ""}
"A/B/"
will be interpreted as
{entityType = "A"}/{entityId = "B"}
"///A/B////"
will be interpreted as
{entityType = "A"}/{entityId = "B"}
比較アルゴリズム:
[Case 0] trigger has bindingId = "", meaning no restriction at all
Always resume.
[Case 1] entityType matches, and entityId matches:
Resume.
[Case 2] entityType matches, but entityId doesn't match:
No resume.
[Case 3] entityType doesn't match trigger:
It doesn't make sense to apply binding, so we fall back to what we have now and let it resume the journey instance.
例:
Trigger event: "incident/000"
Resume event: "incident/000"
Result: Case 1 resume
Trigger event: "incident/000"
Resume event: "incident/001"
Result: Case 2 no resume
Trigger event: "incident/000"
Resume event: "opportunity/001"
Result: Case 3 resume
Trigger event: "incident/000"
Resume event: "opportunity/000"
Result: Case 3 resume
Trigger event: "incident/000"
Resume event: "random string"
Result: Case 3 resume
Trigger event: "random string"
Resume event: "random string"
Result: Case 1 resume
Trigger event: "random string 1"
Resume event: "random string 2"
Result: Case 2 no resume
Trigger event: "random string 2"
Resume event: ""
Result: Case 2 no resume
Trigger event: ""
Resume event: ""
Result: Case 0 resume
Trigger event: ""
Resume event: "incident/000"
Result: Case 0 resume
Trigger event: "incident/000"
Resume event: ""
Result: Case 3 resume