メインコンテンツまでスキップ

パーソナライゼーション

StoryHubフィード は、各ユーザーの興味やコンテキストに合わせた AI パーソナライズコンテンツを配信します。

仕組み

フィード API は2段階のアプローチを使用します:

  1. 検索(Retrieval) — セマンティック検索により、ユーザーのプロフィールとコンテキストに関連するコンテンツを取得します。
  2. ランキング(Ranking) — コンテンツをランク付けし、関連性・鮮度・多様性のバランスを取ります。

パーソナライゼーションの向上

ユーザーイベントの送信

最も効果的なアクションは、エンゲージメントイベントを送信することです。クリックイベントにより、ユーザーが何に興味を持っているかをシステムに伝えます:

POST /v1/events
{
"events": [
{
"type": "click",
"session_id": "...",
"tracking_token": "...",
"occurred_at": "..."
}
]
}

ユーザープロパティの登録

より精度の高いレコメンデーションのために、ユーザーのコンテキスト情報を提供してください:

PUT /v1/users/{user_id}
{
"properties": {
"area_names": ["渋谷"],
"area_level": "station"
}
}

エリアコンテキストの活用

ロケーションコンテキストを渡すことで、地域に関連するコンテンツをブーストできます:

GET /v1/feed?scenario=YOUR_SCENARIO_NAME&area_names=渋谷&area_level=station

area_level の選択肢:

解決レベル
station
city市区町村
prefecture都道府県
country
日本語エリア名の URL エンコード

area_names に日本語の駅名を指定する場合、URL エンコード(パーセントエンコード)が必要です。エンコードされていない場合、400 Bad Request が返されます。curl を使用する場合は --data-urlencode オプションが便利です。詳しくは よくある質問 をご覧ください。

  • 駅名の「駅」接尾辞は省略可能です(例: 二子玉川二子玉川駅 は同じエリアに解決されます)。
  • 未登録のエリア名が含まれている場合、そのエリアはスキップされます(エラーにはなりません)。
  • area_namesarea_ids は同時に使用できません(400 エラー)。
  • area_level を省略し、同名エリアが複数存在する場合は 400 エラーになります。

エリア解決の優先順位:

  1. 明示的な area_names クエリパラメーター(最優先)
  2. ユーザープロフィールに登録されたエリア
  3. エリアコンテキストなし(エリアブースト無効)

未登録ユーザーの挙動

ユーザーの事前登録状況に応じて、フィードの挙動が異なります:

条件フィードの挙動
PUT /v1/users/{user_id} で登録済みパーソナライズされたフィードを返却
未登録の user_id を指定汎用フィードを返却(パーソナライズなし)
user_id を指定しない匿名の汎用フィードを返却
  • GET /v1/feed ではユーザーの自動作成は行われません。
  • 未登録ユーザーでも area_names を指定すればエリアに最適化されたフィードが返却されます。
  • ユーザーの作成方法については ユーザー管理 をご覧ください。

フィードの多様化

API は自動的に結果を多様化し、特定のソースやカテゴリーがフィードを独占することを防ぎます。これにより、ユーザーにバランスの取れたコンテンツ体験を提供します。

シナリオ

コンテンツ配信は、ランキングの挙動を制御するシナリオを通じて設定されます。シナリオには以下の2つのタイプがあります:

  • フィード — アプリ内でコンテンツフィードを表示するためのシナリオ(例: ホーム画面のメインフィード、カテゴリー別フィードなど)
  • プッシュ — プッシュ通知の候補コンテンツを選定するためのシナリオ

シナリオ名はテナントごとに自由に定義できます。StoryHubフィード管理画面からシナリオを作成し、アルゴリズムと紐づけて利用してください。設定の詳細については、担当のアカウントマネージャーにお問い合わせください。