会話ステータスを更新

toggle_status API を使用して、指定した会話のステータスを変更します。サーバーは、対象ステータスへの遷移が STATUS_TRANSITIONS ステータス遷移マトリクス に従って有効かどうかを検証します。

リクエストメソッド

POST

リクエスト URL

https://livedesk-api.engagelab.com/api/v2/accounts/conversations/{conversation_id}/toggle_status

認証

詳細は、API Overview の認証に関する説明を参照してください。

リクエスト

リクエスト例

curl -X POST 'https://livedesk-api.engagelab.com/api/v2/accounts/conversations/{conversation_id}/toggle_status' \ -H 'Content-Type: application/json' \ -H 'Authorization: Basic base64(api_key:api_secret)' \ -d '{ "status": "resolved", "snoozed_until": 1715000000 }'
              
              curl -X POST 'https://livedesk-api.engagelab.com/api/v2/accounts/conversations/{conversation_id}/toggle_status' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic base64(api_key:api_secret)' \
-d '{
    "status": "resolved",
    "snoozed_until": 1715000000
}'

            
このコードブロックはフローティングウィンドウ内に表示されます

リクエストヘッダー

フィールド 説明
Authorization string Authorization: Basic base64(API Key:API Secret) を使用して認証します。API Keys ページで API key と API secret を取得し、コロンで連結してから、その結果を Base64 でエンコードしてください。
Content-Type application/json データ型。通常のテキストメッセージには application/json を使用します。

パスパラメータ

フィールド 必須 説明
conversation_id string Yes 会話 ID。

リクエストボディパラメータ

フィールド 必須 説明
status string Yes 対象ステータス。下記の列挙値を参照してください。
snoozed_until integer No status=snoozed の場合にのみ有効です。秒単位の UNIX タイムスタンプです。省略した場合、会話は無期限にスヌーズされます。
sender_type string No サーバー側の内部識別にのみ使用されます。呼び出し元が AgentBot で、現在のステータスが pending、対象ステータスが open の場合、bot_handoff! プロセスがトリガーされ、CONVERSATION_BOT_HANDOFF イベントが送出されます。

status の列挙値

意味
open オープン
resolved 解決済み
pending ボットまたはエージェントによる対応待ち
snoozed スヌーズ中
closed クローズド(アーカイブ済み)

ステータス遷移マトリクス(STATUS_TRANSITIONS

現在のステータス 許可される遷移先
open open, resolved, pending, snoozed
resolved resolved, open, pending, snoozed, closed
pending pending, open, resolved, snoozed
snoozed snoozed, open, resolved, pending
closed closed, open

主な制約

  • closed に遷移するための前提ステータスは resolved のみですopenpendingsnoozed から closed に直接変更することはできません。アーカイブする前に、まず resolved へ遷移する必要があります。
  • closed から戻せるのは open のみです:アーカイブ済みの会話は、resolvedpendingsnoozed など、他のアクティブなステータスへ直接遷移できません。
  • 同一ステータスへの書き込みは冪等です:対象ステータスが現在のステータスと同じ場合、検証はスキップされ、リクエストは直接成功します。コールバックはトリガーされません。
  • バリデーションは ActiveRecord モデルレイヤーで validate :status_transition_allowed, if: :will_save_change_to_status? によって実装されており、すべての save!update!、および status= の後に save を行う経路に適用されます。

レスポンス

成功レスポンス

HTTP 200

{ "meta": {}, "payload": { "success": true, "conversation_id": 45, "current_status": "resolved", "snoozed_until": null } }
              
              {
  "meta": {},
  "payload": {
    "success": true,
    "conversation_id": 45,
    "current_status": "resolved",
    "snoozed_until": null
  }
}

            
このコードブロックはフローティングウィンドウ内に表示されます

レスポンスパラメータ

フィールド 説明
success boolean save の戻り値。ステータス変更が成功した場合は true です。
conversation_id integer 会話の display_id。アカウント内で表示される ID です。
current_status string 変更後の会話ステータス。
snoozed_until integer / null 現在有効なスヌーズ期限のタイムスタンプ。snoozed 以外のステータスでは常に null です。

エラーレスポンス

HTTP ステータスコード 発生条件
401 未認証、または認証に失敗しました。
403 現在のユーザーに、その会話が属する Inbox へのアクセス権限がありません。
404 現在のアカウントで、対応する display_id を持つ会話が見つかりません。
422 status が有効な列挙値ではない、snoozed_until の解析に失敗した、または対象ステータスが STATUS_TRANSITIONS マトリクスに違反しています。

422 レスポンス構造

ステータス遷移マトリクス違反(モデルレイヤーのバリデーションに由来し、RequestExceptionHandler により full_messages としてレンダリングされます):

{ "message": "Status can't transition from open to closed", "attributes": ["status"] }
              
              {
  "message": "Status can't transition from open to closed",
  "attributes": ["status"]
}

            
このコードブロックはフローティングウィンドウ内に表示されます

不明なステータス列挙値CustomExceptions::Conversation::InvalidStatus に由来):

{ "message": "Invalid conversation status: \"foo\" ('foo' is not a valid status)" }
              
              {
  "message": "Invalid conversation status: \"foo\" ('foo' is not a valid status)"
}

            
このコードブロックはフローティングウィンドウ内に表示されます

無効な snoozed_untilCustomExceptions::Conversation::InvalidSnoozedUntil に由来):

{ "message": "Invalid snoozed_until: \"not-a-timestamp\" (invalid date)" }
              
              {
  "message": "Invalid snoozed_until: \"not-a-timestamp\" (invalid date)"
}

            
このコードブロックはフローティングウィンドウ内に表示されます
Icon Solid Transparent White Qiyu
お問い合わせ