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

行動ログでのユーザー / セッション自動作成

POST /v1/events の挙動を更新しました。session_start / login 以外の行動ログ(click / impression / return / share / like / dislike)でも user_id が含まれている場合、未登録ユーザーをバックグラウンドで自動作成するようになりました。

変更内容

  • すべての行動ログでユーザー自動作成: user_id を含むあらゆる行動ログで、未登録ユーザーを冪等に作成します。session_start を送信せずに click を送信したケース(イベント順序の race)でも、データ欠損は発生しません。

  • session_id も同様: session_id を含むイベントは、未登録の場合にセッションを冪等に作成します。後から session_start が到達した場合、started_atdevice_infosession_start の値で上書きされます。

  • total_sessions のセマンティクス: session_start を観測した回数のみカウントします。click 等で先に作成されたユーザーは total_sessions = 0 で開き、後から session_start を観測すると +1 されます。

  • user_id の技術的バリデーション: POST /v1/events および PUT/PATCH /v1/users/{user_id}user_id に対して、最大 128 文字 / ^[A-Za-z0-9._:@|+=\-]{1,128}$ の制約を導入しました。違反時は 400 Validation を返します。

    本制約は ストレージ・ログ・URL ルーティング等で予期せぬ挙動を起こし得る値を弾く技術的セーフティ です。PII(実名・連絡先等)を識別子に含めないことは引き続き利用規約上の責務となります。

    許容される代表例(自動作成・既存パス共通):

    形式
    UUID v4/v7(推奨)550e8400-e29b-41d4-a716-446655440000
    ULID01ARZ3NDEKTSV4RRFFQ69G5FAV
    数値 ID1234567890
    provider:subjecttenant:acme.user_12
    Auth0 / Cognitoauth0|abc123
    メール形式alice+promo@example.com
    base64 パディング含みYWxpY2U=

    拒否される代表例:

    形式
    空白・タブuser 123, user\t123
    絵文字・非 ASCIIuser-😀
    制御文字・NULuser\x00123
    パス区切りusers/123
    バックスラッシュuser\\123

影響

  • 既存の session_start / login パスの挙動には変更ありません。
  • 既存テナントで user_id に空白・絵文字・パス区切り等を含むクライアントがある場合、当該イベントは 400 で reject されます。auth provider 由来の auth0|... やメール形式は そのまま送れます
  • ユーザーの total_sessions の意味論が変わりました(session_start 観測回数のみカウント)。これまでは total_sessions >= 1 が「既知ユーザー」の不変条件でしたが、今後は行動ログ単独で作成されたユーザーは total_sessions = 0 で開始します。total_sessions > 0 を「既知ユーザー」として参照していたダッシュボード/セグメント/プッシュ条件は見直しをご確認ください。

詳細は 行動イベント および ユーザー管理 をご覧ください。