パーソナライゼーション
StoryHubフィード は、各ユーザーの興味やコンテキストに合わせた AI パーソナライズコンテンツを配信します。
仕組み
フィード API は2段階のアプローチを使用します:
- 検索(Retrieval) — セマンティック検索により、ユーザーのプロフィールとコンテキストに関連するコンテンツを取得します。
- ランキング(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_namesとarea_idsは同時に使用できません(400エラー)。area_levelを省略し、同名エリアが複数存在する場合は400エラーになります。
エリア解決の優先順位:
- 明示的な
area_namesクエリパラメーター(最優先) - ユーザープロフィールに登録されたエリア
- エリアコンテキストなし(エリアブースト無効)
未登録ユーザーの挙動
ユーザーの事前登録状況に応じて、フィードの挙動が異なります:
| 条件 | フィードの挙動 |
|---|---|
PUT /v1/users/{user_id} で登録済み | パーソナライズされたフィードを返却 |
未登録の user_id を指定 | 汎用フィードを返却(パーソナライズなし) |
user_id を指定しない | 匿名の汎用フィードを返却 |
GET /v1/feedではユーザーの自動作成は行われません。- 未登録ユーザーでも
area_namesを指定すればエリアに最適化されたフィードが返却されます。 - ユーザーの作成方法については ユーザー管理 をご覧ください。
フィードの多様化
API は自動的に結果を多様化し、特定のソースやカテゴリーがフィードを独占することを防ぎます。これにより、ユーザーにバランスの取れたコンテンツ体験を提供します。
シナリオ
コンテンツ配信は、ランキングの挙動を制御するシナリオを通じて設定されます。シナリオには以下の2つのタイプがあります:
- フィード — アプリ内でコンテンツフィードを表示するためのシナリオ(例: ホーム画面のメインフィード、カテゴリー別フィードなど)
- プッシュ — プッシュ通知の候補コンテンツを選定するためのシナリオ
シナリオ名はテナントごとに自由に定義できます。StoryHubフィード管理画面からシナリオを作成し、アルゴリズムと紐づけて利用してください。設定の詳細については、担当のアカウントマネージャーにお問い合わせください。