Skip to main content
SI セッションを終了します。ホストまたはブランドエージェントのいずれからでも終了を開始でき、理由によってセッションの締め方が示されます。

リクエスト

FieldTypeRequiredDescription
session_idstringYes終了するセッション ID
reasonstringYesセッション終了の理由
termination_contextobjectNo終了に関する追加コンテキスト

終了理由

ReasonMeaningTypical Initiator
handoff_transactionユーザーが購入を完了したいブランドエージェント(pending_handoff 経由)
handoff_complete会話が自然に終了ブランドエージェント
user_exitユーザーが明示的に会話を終了Host
session_timeout非アクティブのタイムアウト到達Host
host_terminatedポリシー/エラー理由でホストが終了Host

Termination Context オブジェクト

追加詳細は理由によって異なります: handoff_transaction の場合:
{
  "intent": { /* purchase intent from handoff */ },
  "context_for_checkout": { /* ACP context */ }
}
user_exit の場合:
{
  "user_signal": "changed_topic",
  "partial_context": { /* what was discussed */ }
}
session_timeout の場合:
{
  "last_activity": "2026-01-18T10:30:00Z",
  "timeout_seconds": 300
}

レスポンス

FieldTypeDescription
session_idstringどのセッションが終了したかの確認
terminatedboolean成功時は常に true
acp_handoffobject取引ハンドオフ時に含まれる
follow_upobject将来のエンゲージメント向けの任意アクション

ACP Handoff オブジェクト

取引終了の場合、ACP チェックアウトに必要なデータを含みます:
FieldTypeDescription
checkout_urlstringブランドの ACP チェックアウトエンドポイント
payloadobjectACP に渡すデータ
expires_atstringチェックアウトコンテキストの ISO 8601 形式の有効期限

Follow-Up オブジェクト

将来のエンゲージメントに向けた提案:
FieldTypeDescription
suggested_actionstringホストが次に行うべきこと
dataobjectそのアクションに関する関連データ
messagestring表示用の任意メッセージ

トランザクションハンドオフ

type: "transaction"pending_handoff を受け取った後: Request:
{
  "session_id": "sess_abc123",
  "reason": "handoff_transaction",
  "termination_context": {
    "intent": {
      "action": "purchase",
      "product": {
        "type": "flight",
        "flight_number": "DL628"
      }
    }
  }
}
Response:
{
  "session_id": "sess_abc123",
  "terminated": true,
  "acp_handoff": {
    "checkout_url": "https://delta.com/acp/checkout",
    "payload": {
      "session_id": "sess_abc123",
      "flight": "DL628",
      "passenger": {
        "email": "[email protected]",
        "name": "Jane Smith"
      },
      "applied_offers": ["delta_chatgpt_3313"],
      "price": {
        "amount": 199,
        "currency": "USD"
      }
    },
    "expires_at": "2026-01-18T11:00:00Z"
  }
}

Conversation Complete (No Purchase)

トランザクションなしで会話が自然に終わる場合: Request:
{
  "session_id": "sess_abc123",
  "reason": "handoff_complete"
}
Response:
{
  "session_id": "sess_abc123",
  "terminated": true,
  "follow_up": {
    "suggested_action": "save_for_later",
    "data": {
      "flights_discussed": ["DL628", "DL632"],
      "destination": "BOS",
      "travel_date": "2026-01-27"
    },
    "message": "Let me know if you'd like to revisit Boston flights later!"
  }
}

ユーザー退出

ユーザーが話題を変える、または明示的に離脱する場合: Request:
{
  "session_id": "sess_abc123",
  "reason": "user_exit",
  "termination_context": {
    "user_signal": "changed_topic",
    "partial_context": {
      "flights_viewed": ["DL628"],
      "last_topic": "seat selection"
    }
  }
}
Response:
{
  "session_id": "sess_abc123",
  "terminated": true,
  "follow_up": {
    "suggested_action": "remind_later",
    "data": {
      "incomplete_booking": {
        "flight": "DL628",
        "step": "seat_selection"
      }
    }
  }
}

セッションタイムアウト

非アクティブによるタイムアウトの場合: Request:
{
  "session_id": "sess_abc123",
  "reason": "session_timeout",
  "termination_context": {
    "last_activity": "2026-01-18T10:25:00Z",
    "timeout_seconds": 300
  }
}
Response:
{
  "session_id": "sess_abc123",
  "terminated": true
}

ホストによる終了

ホストがポリシーやエラー理由でセッションを終了する場合: Request:
{
  "session_id": "sess_abc123",
  "reason": "host_terminated",
  "termination_context": {
    "cause": "user_left_app"
  }
}
Response:
{
  "session_id": "sess_abc123",
  "terminated": true
}

ACP 連携フロー

理由が handoff_transaction の場合:
  1. ホストは終了レスポンスで acp_handoff を受け取る
  2. ホストは提供された checkout_urlpayload を使って ACP チェックアウトを開始する
  3. ACP がトランザクションを処理し、ユーザーとホストの信頼関係を維持する
  4. ブランドは加盟店にはならず、支払いは ACP が処理する

キーポイント

  1. 常にセッションを終了する - 会話が終わったように見えても terminate を呼び、リソースクリーンアップとフォローアップ提案を得る。
  2. ACP ハンドオフデータには有効期限がある - expires_at フィールドがチェックアウトコンテキストの有効期間を示す。
  3. フォローアップで再エンゲージメントを促す - 取引がない終了でも将来のエンゲージメント提案を含められる。
  4. ホストが信頼を維持する - 取引は ACP を経由し、ユーザーとホストの関係性を保つ。