Movable Ink Customer Data APIに接続する
BrazeとMovable Inkの顧客データAPI統合により、マーケティング担当者はBrazeに保存された顧客イベントデータを有効化して、Movable Ink内でパーソナライズされたコンテンツを生成することができる。
ムーバブル・インクは、顧客データAPIを通じてBrazeから行動イベントを取り込むことができる。イベントは、ムーバブルインクに渡される一意のユーザーID(UUID)に基づいてユーザープロファイルに保存される。
ストーリーズ、Movable Ink Customer Data API、およびMovable Inkが行動データをどのように活用しているかについての詳細は、以下のサポートセンターの記事を参照されたい:
前提条件
必要条件 | 説明 |
---|---|
ムーバブル・インクアカウント | このパートナーシップを利用するには、ムーバブル・インクのアカウントが必要である。 |
Movable Ink API認証情報 | Movable Inkのソリューション・チームがAPI認証情報を生成する。APIクレデンシャルは以下のものである:
|
行動イベント・ペイロード | イベントペイロードをMovable Inkクライアントエクスペリエンスチームと共有する必要がある。詳細については、「Movable Inkとイベントペイロードを共有する」を参照のこと。 |
クリエイティブ・アセットとビジネス・ロジック | ブロックを構築する方法についてMovable Inkに指示するAdobe Photoshop(PSD)ファイルや予備画像など、クリエイティブ資産をMovable Inkと共有する必要がある。また、パートナーがアクティベートしたコンテンツ・ブロックをいつ、どのように表示するかのビジネス・ロジックを提供する必要がある。 |
統合
ステップ1:BrazeでWebhookキャンペーンを作成する
ステップ 1a: 新しいキャンペーンを作成する
- Brazeで、Webhookキャンペーンを作成する。
- キャンペーン名と任意の説明をつける。
- テンプレートとしてBlank Templateを選択する。
ステップ 1b: 顧客データAPIの認証情報を追加する
- Webhook URLフィールドに、Movable InkのエンドポイントURLを入力する。
![BrazeのWebhookコンポーザーのComposeタブで、Movable InkのエンドポイントURLとリクエストボディをJSON Key/Value Pairsに設定する。][img1]{: style=”max-width:75%” }
2.設定タブを選択する。 3.以下のリクエストヘッダーをキーと値のペアとして追加する:
キー | 価値 |
---|---|
コンテンツタイプ | application/json |
認可 | ムーバブルインクから受け取った基本認証を入力する。 |
![BrazeのWebhookコンポーザーの設定タブ。Content-TypeとAuthorizationのキー・バリュー・ペアがある。][img2]{: style=”max-width:75%” }
ステップ1c:ペイロードを設定する
- 作曲タブに戻る。
- リクエストボディには、JSONキーと値のペアで独自のリクエストボディを作成するか、生のテキストとしてイベントペイロードを入力する。標準的なeコマースイベントの例については、サンプルペイロードを参照のこと。
![Brazeのウェブフック・コンポーザーのコンポーズ・タブに、ID、タイムスタンプ、ユーザーID、イベントタイプのJSONキー・バリュー・ペアがある。][img3]{: style=”max-width:75%” }
ステップ1d:ウェブフックをテストする
ペイロードのサンプルをMovable Inkクライアント・エクスペリエンス・チームと共有する必要がある。このペイロードは、作成したペイロードに基づいて、Testタブで生成することができる。
Movable Inkでは、Movable Inkクライアントエクスペリエンスチームがマッピングを完了し、テストを受ける準備ができていることを確認するまで、BrazeでのWebhookのテストを待つことを推奨している。このマッピングが完全でない場合、テスト時にエラーが出る可能性が高い。
ウェブフックをテストするには、以下のようにする:
- [テスト] タブを選択します。
- ユーザーとしてメッセージをプレビューし、そのユーザーのイベントペイロードのサンプルを表示する。プレビューは、ランダムユーザー、特定ユーザー、カスタムユーザーのいずれかを選択できる。
- 問題がなければ、Send testをクリックしてテストリクエストを送信する。
![200OKレスポンスを示すBrazeのWebhookレスポンスメッセージ。][img4]{: style=”max-width:75%” }
ステップ2:キャンペーン設定を確定する
ステップ 2a: キャンペーンをスケジュールする
ウェブフックの作成とテストが終わったら、キャンペーンをスケジュールする。
Brazeは、スケジュール配信、アクションベース配信、APIトリガー配信をサポートしている。アクション・ベースの配信は通常、ほとんどの行動イベントのユースケースに最適である。お客様のユースケースにとって何が理にかなっているかについてのご質問は、BrazeおよびMovable Inkのカスタマーサクセスマネージャーにお問い合わせいただきたい。
アクション・ベースのデリバリーのために:
- トリガーアクションを指定する。これは、Movable Inkへのウェブフックをトリガーするイベントである。
- Schedule Delayが Immediatelyに設定されていることを確認する。イベントデータは、イベント発生直後に遅延なくムーバブルインクに送信されるべきである。
- 開始時間を指定してキャンペーン期間を設定する。終了時刻は適用されない可能性が高いが、ユースケースに必要であれば設定できる。
データがリアルタイムでMovable Inkにストリーミングされるようにするには、ローカルタイムゾーンのユーザーにキャンペーンを送信するを選択しないこと。
ステップ 2b: 聴衆を特定する
次に、このキャンペーンでターゲットにしたいユーザーを決定する。詳細については、「ユーザーをターゲットにする」を参照のこと。
コントロールグループのチェックボックスをオフにして、キャンペーンでA/Bテストを使用しないことを確認する。コントロールグループが含まれる場合、ユーザーの何割かはMovable Inkにデータが送信されない。聴衆は全員、対照群ではなく変種に行くべきだ。
![BrazeキャンペーンにおけるA/Bテストパネル。100%のバリアント分布がバリアント1に割り当てられ、コントロールグループはない。][img5]
ステップ 2c: コンバージョンイベントを選択する(オプション)
必要であれば、Braze内でこのキャンペーンにコンバージョンイベントを割り当てることができる。
しかし、Webhookはあくまでデータをストリーミングするためのものであることを考えると、このレベルでのアトリビューションは、Brazeからの行動データがコンテンツのパーソナライズに使用された後、キャンペーンレベルでのアトリビューションを見るよりも役に立たない可能性が高い。
ステップ3:キャンペーンを開始する
ウェブフックの設定を確認し、キャンペーンを開始する。
考慮事項
一意のユーザー識別子で整列する
mi_u
として使用している一意のユーザー識別子(UUID)値がBraze内で利用可能であり、Movable Inkに送信されるイベントペイロードに含めることができることを確認する。
これにより、画像を生成する際にMovable Inkが参照する行動イベントが、行動イベントを受け取ったのと同じ顧客に関連付けられていることが保証される。UUID値がBrazeexternal_id
と同じでない場合、UUIDを取得し、属性としてBrazeに渡すか、Brazeイベントのイベントプロパティでこの識別子を活用する必要がある。
Brazeは、複数のプラットフォーム(ウェブやモバイルアプリなど)でユーザーの行動を追跡するため、1人のユーザーが複数の異なる匿名IDを持つ可能性がある。identify
イベントが匿名識別子と単一の既知の識別子の両方を含む限り、これらのIDは、identify
イベントがMovable Inkに送信されたときに、単一の既知のストーリーズユーザープロファイルにマージすることができる。
一旦Movable Inkが一人のユーザーについてuser_id
を受け取ると、そのユーザーに関する今後のすべてのイベントには、同じuser_id
を含めなければならない。
Movable Inkでイベントペイロードを共有する
Movable Inkの顧客データAPIへのコネクタを設定する前に、イベントのペイロードをMovable Inkのクライアント・エクスペリエンス・チームと共有しておくこと。これにより、Movable Inkはあなたのイベントを彼らのイベントスキーマにマッピングすることができ、APIコールの拒否や失敗を防ぐことができる。
任意のイベントプロパティを使用して、Braze内でイベントペイロードを生成できる。ランダムなユーザー、または特定のユーザーIDを検索してサンプルペイロードを生成する。詳細は上記のステップ1dを参照のこと。
このサンプルペイロードをMovable Inkクライアントエクスペリエンスチームと共有する。サンプルのペイロードに、個人を特定できる機密情報(電子メールアドレス、電話番号、生年月日など)が含まれていないことを確認する。
カスタムイベント・プロパティと、プロパティに含まれるデータの期待されるフォーマットの詳細については、カスタムイベント・プロパティを参照のこと。
既知のユーザーと匿名のユーザー
Brazeでは、匿名のユーザープロファイルでイベントを記録することができる。イベントロギング中にどの識別子がユーザープロファイルにリンクされるかは、ユーザーがどのように作成されたか(Braze SDKまたはAPIを通じて)と、ユーザーライフサイクルの現在の段階に依存する。
既知のユーザーのBrazeイベントのみを転送する
ウェブフック・キャンペーンでは、External User ID
フィルタを使用して、External User ID
is not blank
フィルタでexternal_id
を持つユーザーのみをターゲットにする。
匿名ユーザーと既知ユーザーのBrazeイベントを転送する
匿名ユーザー(プロファイルにexternal_id
が割り当てられる前のユーザー)からのBrazeイベントを転送したい場合、external_id
が利用可能になるまで、Movable Inkのanonymous_id
として使用する識別子を決定する必要がある。Brazeユーザープロフィールに常に表示されるanonymous_id
。Webhook 本体の Liquid ロジックを使って、anonymous_id
とuser_id
のどちらを渡すかを決めることができる。
詳しくは、サンプルペイロードの下にあるサンプルウェブフックを参照のこと。
ペイロードの例
プロダクト・ビュー・イベント
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"events": [
{
"email": "[email protected]",
"name": "Product Viewed",
"time": "2023-12-06T19:20:45+01:00",
"properties": {
"categories": [
{
"id": "Bathroom",
"url": "https://example.com/cat/bathroom"
}
],
"meta": {
"color": "green"
},
"title": "All-Purpose Cleaning Wipes",
"price": 1.99,
"id": "56544",
"url": "https://www.example.com/variants_id/5f08cb918dcc595aa74b0fbc"
}
}
]
}
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
curl --location --request POST 'https://collector.movableink-dmz.com/behavioral/{{key}}' \
--header 'Authorization: Basic {{authorization}}' \
--header 'Content-Type: application/json' \
--data-raw '{
"anonymous_id": "123-abc-678",
"event": "product_viewed",
"properties": {
"categories": [
{
"id": "Bathroom",
"url": "https://example.com/cat/bathroom"
}
],
"meta": {
"color": "green"
},
"title": "All-Purpose Cleaning Wipes",
"price": 1.99,
"id": "56544",
"url": "https://www.example.com/variants_id/5f08cb918dcc595aa74b0fbc"
},
"timestamp": 1257894000000,
"timezone": "America/New_York",
"type": "track",
"user_id": "5c3aa83113dd490100d3d8d7"
}'
この例では、external_id
を持たないユーザーのために、anonymous_id
としてハッシュ化されたメールアドレスが使われている。
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
// Converts the timestamp of "now" to seconds since 1970 and assigns it to a local variable "timestamp"
{% assign timestamp = "now" | date: "%s" %}
// Example of md5 hashing the email address to use as the anonymous_id
{% assign anon_id = {{${email_address}}} | md5 %}
// Condition logic to determine which identifier to use. If an external_id is available use that, otherwise use the anonymous_id
{% if {{${user_id}}} %}
{% capture user_identifier %}"user_id": "{{${user_id}}}"{% endcapture %}
{% else %}
{% capture user_identifier %}"anonymous_id": "{{anon_id}}"{% endcapture %}
{% endif %}
{
{{user_identifier}}
"event": "product_viewed",
"properties": {
"categories": [
{
"id": "{{event_properties.${categories}[0].id}}",
"url": "{{event_properties.${categories}[0].url}}"
}
],
"meta": {
"color": "{{event_properties.${meta}.color}}"
},
"title": "{{event_properties.${title}}}",
"price": "{{event_properties.${price}}}",
"id": "{{event_properties.${id}}}",
"url": "{{event_properties.${url}}}"
},
"timestamp": "{{timestamp}}",
"timezone": "{{${time_zone}}}",
"type": "track",
}
カテゴリー表示イベント
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"events": [
{
"external_id": "123456789",
"name": "Category Viewed",
"time": "2023-12-06T19:20:45+01:00",
"properties": {
"id": "bathroom-1",
"title": "Bathroom Stuff",
"url": "https://www.example.com/categories/bathroom"
}
}
]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
curl --location --request POST 'https://collector.movableink-dmz.com/behavioral/{{key}}' \
--header 'Authorization: Basic {{authorization}}' \
--header 'Content-Type: application/json' \
--data-raw '{
"anonymous_id": "123-abc-678",
"event": "category_viewed",
"properties": {
"id": "bathroom-1",
"title": "Bathroom Stuff",
"url": "https://www.example.com/categories/bathroom"
},
"timestamp": 1257894000000,
"timezone": "America/New_York",
"type": "track",
"user_id": "5c3aa83113dd490100d3d8d7"
}'
この例では、既知のユーザー(external_id
を持つユーザー)のみのイベントを追跡するウェブフックを示している。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Converts the timestamp of "now" to seconds since 1970 and assigns it to a local variable "timestamp"
{% assign timestamp = "now" | date: "%s" %}
{
"event": "category_viewed",
"properties": {
"id": "{{event_properties.${id}}}",
"title": "{{event_properties.${title}}}",
"url": "{{event_properties.${url}}}"
},
"timestamp": "{{timestamp}}",
"timezone": "{{${time_zone}}}",
"type": "track",
"user_id": "{{${user_id}}}"
}
イベントを特定する
1
2
3
4
5
6
7
8
9
{
"events": [
{
"external_id": "123456789",
"name": "Account Created",
"time": "2023-12-06T19:20:45+01:00"
}
]
}
1
2
3
4
5
6
7
8
9
10
curl --location --request POST 'https://collector.movableink-dmz.com/behavioral/{{key}}' \
--header 'Authorization: Basic {{authorization}}' \
--header 'Content-Type: application/json' \
--data-raw '{
"anonymous_id": "jg0iq5gd30dqpwn8zmx05p06mzjmjir4r8",
"timestamp": 1257894000000,
"timezone": "America/New_York",
"type": "identify",
"user_id": "mycustomerid123"
}'
この例では、external_id
を持たないユーザーのために、anonymous_id
としてハッシュ化されたメールアドレスが使われている。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Converts the timestamp of "now" to seconds since 1970 and assigns it to a local variable "timestamp"
{% assign timestamp = "now" | date: "%s" %}
// Example of md5 hashing the email address to use as the anonymous_id
{% assign anon_id = {{${email_address}}} | md5 %}
{
"anonymous_id": "{{anon_id}}",
"timestamp": "{{timestamp}}",
"timezone": "{{${time_zone}}}",
"type": "identify",
"user_id": "{{${user_id}}}"
}
[img1] : /docs/ja/assets/img/movable_ink/cd_api_webhook_url.png?4a30e1e31c920801636e8f4a2b73e465 [img2] : /docs/ja/assets/img/movable_ink/cd_api_webhook_settings.png?003b9b9225ba12b8541965a859c4f20f [img3] : /docs/ja/assets/img/movable_ink/cd_api_webhook_kvp.png?8c5eff835137eefe27cdb07f754b4fbe [img4] : /docs/ja/assets/img/movable_ink/cd_api_webhook_response.png?5c53a834c927709cdef104324c321fae [img5] : /docs/ja/assets/img/movable_ink/cd_api_webhook_ab.png?ff12099af7dc4f7ca84f0d428a30dbe7