Skip to content

ルールベースの推奨事項

ルールベースのレコメンデーションエンジンは、ユーザーデータと製品情報を使用して、メッセージ内でユーザーに関連するアイテムを提案します。それはLiquidとBraze カタログまたはコネクテッドコンテンツのいずれかを使用して、ユーザーの行動と属性に基づいてコンテンツを動的にパーソナライズします。

Liquid、カタログ、コネクテッドコンテンツについて詳しく知るには、これらのBraze学習コースをチェックしてください:

カタログのレコメンデーションエンジンを作成する

  1. 製品のカタログを作成する
  2. 各製品について、区切り文字(パイプ|など)で区切られた文字列として推奨製品のリストを「product_recommendations」という列に追加します。
  3. 製品IDをカタログに渡して、推奨事項を見つけてください。
  4. そのカタログアイテムのproduct_recommendations値を取得し、Liquid分割フィルターでデリミタで分割します。
  5. それらのIDの1つ以上をカタログに戻して、他の製品の詳細を収集します。

カタログのユースケース

たとえば、健康食品アプリを持っていて、ユーザーがアプリにサインアップしてからの期間に応じて異なるレシピを送信するコンテンツカードキャンペーンを作成したいとします。

  1. CSVを介して次の情報を含むカタログを作成してアップロードします:
    - id:ユーザーがあなたのアプリにサインアップしてからの日数に相当するユニークな番号。例えば、3は3日間に相当します。
    タイプ:レシピのカテゴリ、例えばcomfortfresh、その他。
    タイトル:各IDに送信されるコンテンツカードのタイトルは、「今週のランチのために作り置き」や「タコスについて話そう」などです。
    リンク:レシピ記事へのリンク。
    画像_url:レシピに対応する画像。

2.カタログがBrazeにアップロードされた後、カタログアイテムの一部のプレビューを確認して、情報が正確にインポートされたことを確認してください。アイテムはプレビューでランダム化される場合がありますが、レコメンデーションエンジンの出力には影響しません。

3.コンテンツカードキャンペーンを作成します。コンポーザーで、どのユーザーがキャンペーンを受け取るべきか、どのレシピと画像を表示するべきかを決定するためにLiquidロジックを入力します。このユースケースでは、Braze はユーザーのstart_date(またはサインアップ日)を取得し、現在の日付と比較します。日数の違いによって、どのコンテンツカードが送信されるかが決まります。

Title:

1
2
3
4
5
6
{% assign start_date = {{custom_attribute.${start_date}}} | date: "%s" %}
{% assign current_date = "now" | date: "%s" %}
{% assign diff = {{current_date}} | minus: {{start_date}} | divided_by: 86400 %}
{% assign days = {{diff}} | round %}
{% catalog_items Healthy_Recipe_Catalog_SMB {{days}} %}
{{ items[0].title }}

メッセージ:

1
2
3
4
5
6
7
8
9
10
{% assign start_date = {{custom_attribute.${start_date}}} | date: "%s" %}
{% assign current_date = "now" | date: "%s" %}
{% assign diff = {{current_date}} | minus: {{start_date}} | divided_by: 86400 %}
{% assign days = {{diff}} | round %}
{% catalog_items Healthy_Recipe_Catalog_SMB {{days}} %}
{% if items[0].title != blank %}
{{ items[0].body }}
{% else %}
{% abort_message('no card for today') %}
{% endif %}

画像:

1
2
3
4
5
6
{% assign start_date = {{custom_attribute.${start_date}}} | date: "%s" %}
{% assign current_date = "now" | date: "%s" %}
{% assign diff = {{current_date}} | minus: {{start_date}} | divided_by: 86400 %}
{% assign days = {{diff}} | round %}
{% catalog_items Healthy_Recipe_Catalog_SMB {{days}} %}
{{ items[0].image_url }}

4.「クリック時の動作」セクションで、iOS、Android、およびWebデバイスでコンテンツカードをクリックしたときにユーザーがリダイレクトされる場所のLiquidロジックを入力します。

1
2
3
4
5
6
{% assign start_date = {{custom_attribute.${start_date}}} | date: "%s" %}
{% assign current_date = "now" | date: "%s" %}
{% assign diff = {{current_date}} | minus: {{start_date}} | divided_by: 86400 %}
{% assign days = {{diff}} | round %}
{% catalog_items Healthy_Recipe_Catalog_SMB {{days}} %}
{{ items[0].link }}



5.テスト タブに移動し、ユーザーとしてメッセージをプレビュー の下の カスタムユーザー を選択します。日付をカスタム属性フィールドに入力して、その日にサインアップしたユーザーに送信されるコンテンツカードをプレビューします。

コネクテッドコンテンツレコメンデーションエンジンの作成

  1. 次のいずれかの方法でコネクテッドコンテンツエンドポイントを作成します:
    • スプレッドシートをJSON APIエンドポイントに変換するには、SheetDPのようなサービスを使用し、生成されるAPI URLに注意してください。
    • カスタムビルドの社内エンドポイントを構築、ホスト、および維持する
    • サードパーティのパートナーを通じてレコメンデーションエンジンを購入します。例えば、Alloyパートナーの1つであるAmazon PersonaliseCertonaダイナミックなYieldなどがあります。
  2. メッセージ本文またはコンテンツブロックHTMLエディタにコネクテッドコンテンツLiquidを記述して、データベースを検索するエンドポイントを呼び出します。
  3. 与えられたユーザーのプロファイルで見つけたカスタム属性の値にLiquidを合わせます。
  4. 正しい推奨事項を結果として引き出します。
1
2
3
4
5
6
7
8
{% connected_content YOUR-API-URL :save items %}

{% assign recommended_item_ids_from_user_profile = custom_attribute.${RECOMMENDED_ITEM_IDS} | split: ';' %}

{% for item_id in recommended_item_ids_from_user_profile %}
  {% assign recommended_item = items | where: "ITEM_ID", ITEM_ID | first %}
  recommended_item.item_name
{% endfor %}
属性 交換
YOUR-API-URL APIの実際のURLに置き換えてください。
RECOMMENDED_ITEM_IDS 推奨アイテムのIDを含むカスタム属性の実際の名前に置き換えてください。この属性は、セミコロンで区切られたIDの文字列であることが期待されます。
ITEM_ID APIレスポンス内のアイテムIDに対応する属性の実際の名前に置き換えてください。

コネクテッドコンテンツ ユースケース

レストランの推薦をZomatoレストランデータベースから引き出し、その結果をrestaurantsというローカル変数として保存したいとしましょう。次のコネクテッドコンテンツ呼び出しを行うことができます:

1
2
3
4
{% connected_content https://developers.zomato.com/api/v2.1/search?entity_id={{city_id}}&entity_type=city&count=20&cuisines={{food_type}}&sort=rating:headers{“user-key”:“USER_KEY”} :save restaurants %}

{{city_food.restaurants[0]}}

次に、ユーザーの市区町村と食べ物の種類に基づいてレストランの推薦を引き出したいとしましょう。ユーザーの市区町村と食べ物の種類のカスタム属性を動的に挿入し、restaurantsの値を変数city_food.restaurantsに割り当てることで、これを行うことができます。

コネクテッドコンテンツの呼び出しは次のようになります:

1
2
3
4
5
6
7
8
{% assign city_id = {{custom_attribute.${city_id} | default: ‘306’}} %}
{% assign food_type = {{custom_attribute.${food_type} | default: ‘471’}} %}

{%- connected_content https://developers.zomato.com/api/v2.1/search?entity_id={{city_id}}&entity_type=city&count=20&cuisines={{food_type}}&sort=rating:headers{“user-key”:“USER_KEY”} :save restaurants %}

{% assign restaurants = city_food.restaurants %}

{{city_food.restaurants[0]}}

応答をレストランの名前と評価のみに絞りたい場合は、次のように呼び出しの最後にフィルターを追加できます:

1
2
3
4
5
6
7
8
{% assign city_id = {{custom_attribute.${city_id} | default: ‘306’}} %}
{% assign food_type = {{custom_attribute.${food_type} | default: ‘471’}} %}

{%- connected_content https://developers.zomato.com/api/v2.1/search?entity_id={{city_id}}&entity_type=city&count=20&cuisines={{food_type}}&sort=rating:headers{“user-key”:”USER_KEY”} :save restaurants %}
{% assign restaurants = city_food.restaurants %}

{{city_food.restaurants[0].restaurant.name}}
{{city_food.restaurants[0].restaurant.user_rating.rating_text}}

最後に、レストランのおすすめを評価ごとにグループ化したいとしましょう。次のことを行ってください:

  1. 「優秀」、「非常に良い」、「良い」の評価カテゴリの空の配列を作成するにはassignを使用します。
  2. リスト内の各レストランの評価を調べるforループを追加します。
    • 評価が「優れている」場合は、レストラン名をexcellent_restaurants文字列に追加し、各レストラン名を区切るために最後に*文字を追加します。
    • 評価が「非常に良い」の場合は、レストラン名をvery_good_restaurants文字列に追加し、最後に*文字を追加します。
    • 評価が「良い」の場合、レストラン名をgood_restaurants文字列に追加し、最後に*文字を追加します。
  3. カテゴリごとのレストランの推薦数を4つに制限する。

これは最終的な呼び出しがどのように見えるかです:

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
37
38
39
40
41
42
43
44
45
46
47
48
49
{% assign city_id = {{custom_attribute.${city_id} | default: ‘306’}} %}
{% assign food_type = {{custom_attribute.${food_type} | default: ‘471’}} %}
{%- connected_content https://developers.zomato.com/api/v2.1/search?entity_id={{city_id}}&entity_type=city&count=20&cuisines={{food_type}}&sort=rating:headers{“user-key”:”USER_KEY”} :save restaurants %}
{% assign restaurants = city_food.restaurants %}
{% assign excellent_restaurants = “” %}
{% assign very_good_resturants = “” %}
{% assign good_restaurants = “” %}
{% for list in restaurants %}
{% if {{list.restaurant.user_rating.rating_text}} == `Excellent` %}
{% assign excellent_restaurants = excellent_restaurants | append: list.restaurant.name | append: `*` %}
{% elseif {{list.restaurant.user_rating.rating_text}} == `Very Good` %}
{% assign very_good_restaurants = very_good_restaurants | append: list.restaurant.name | append: `*` %}
{% elseif {{list.restaurant.user_rating.rating_text}} == `Good` %}
{% assign good_restaurants = good_restaurants | append: list.restaurant.name | append: `*` %}
{% endif %}
{% endfor %}
{% assign excellent_array = excellent_restaurants | split: `*` %}
{% assign very_good_array = very_good_restaurants | split: `*` %}
{% assign good_array = good_restaurants | split: `*` %}

Excellent places
{% for list in excellent_array %}

{{list}}
{% assign total_count = total_count | plus:1 %}
{% if total_count >= 4 %}
{% break %}
{% endif %}
{% endfor %}

Very good places
{% for list in very_good_array %}

{{list}}
{% assign total_count = total_count | plus:1 %}
{% if total_count >= 4 %}
{% break %}
{% endif %}
{% endfor %}

Good places
{% for list in good_array %}

{{list}}
{% assign total_count = total_count | plus:1 %}
{% if total_count >= 4 %}
{% break %}
{% endif %}
{% endfor %}

ユーザーのデバイスに応答が表示される例については、以下のスクリーンショットを参照してください。

考慮事項

どのレコメンデーションエンジンが利用可能なリソースとユースケースに適しているかを決定する際には、この考慮事項の表を参照してください。

考慮事項 Liquid カタログ CSV カタログ API コネクテッドコンテンツ
データポイントを消費しません サポートされていません サポートされている サポートされている サポートされている
コードなしソリューション サポートされていません 事前生成されたLiquidがサポートされている場合 サポートされていません サポートされていません
高度なLiquidが必要な場合が多い サポートされている サポートされていません サポートされていません サポートされている
製品フィードのデータの更新 サポートされていません 推奨事項が頻繁に更新されない場合にサポートされます 推奨事項が毎時更新される場合にサポートされます サポートと推奨事項はリアルタイムまで更新されます
Braze UI内で推奨事項を生成する サポートされている サポートされている サポートされている Braze 以外で生成された場合はサポートされません
ホスティング、管理、トラブルシューティングの推奨データはありません サポートされている サポートされている サポートされている サポートされていません
「このページはどの程度役に立ちましたか?」
New Stuff!