会話ステータスを更新

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

リクエストメソッド

POST

エンドポイント

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
}'

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

リクエストヘッダー

Field Type Description
Authorization string 認証には Authorization: Basic base64(API Key:API Secret) を使用します。API キーページで API Key と API Secret を取得し、コロンで連結したうえで、結果を Base64 エンコードしてください。
Content-Type application/json コンテンツタイプです。プレーンテキストメッセージには application/json を使用します。

パスパラメータ

Field Type Required Description
conversation_id string Yes 会話 ID。

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

Field Type Required Description
status string Yes 対象のステータス。下記の列挙値を参照してください。
snoozed_until integer No status=snoozed の場合にのみ有効です。UNIX タイムスタンプ(秒)。省略した場合、会話は無期限でスヌーズされます。
sender_type string No 内部のサーバー側識別専用です。呼び出し元が AgentBot で、現在のステータスが pending、対象ステータスが open の場合、bot_handoff! フローがトリガーされ、CONVERSATION_BOT_HANDOFF イベントがディスパッチされます。

status の列挙値

Value Meaning
open 進行中
resolved 解決済み
pending ボット/エージェント対応待ち
snoozed スヌーズ中
closed クローズ済み(アーカイブ)

状態遷移マトリクス(STATUS_TRANSITIONS)

Current Status Allowed Target Status
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 などの他のアクティブなステータスへ直接遷移できません。
  • 同じステータスの設定は冪等です:対象ステータスが現在のステータスと同じ場合、検証はスキップされ、そのまま成功が返されます。コールバックはトリガーされません。
  • 検証は validate :status_transition_allowed, if: :will_save_change_to_status? を通じて ActiveRecord のモデルレイヤーで実装されており、すべての 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
  }
}

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

レスポンスパラメータ

Field Type Description
success boolean save の戻り値です。ステータス更新が成功した場合は true です。
conversation_id integer 会話の display_id(アカウント内で表示される ID)。
current_status string 更新後の会話ステータス。
snoozed_until integer / null 現在有効なスヌーズ期限のタイムスタンプ。ステータスが snoozed でない場合は常に null です。

エラーレスポンス

HTTP Status Code Trigger Condition
401 未認証、または認証に失敗した場合
403 現在のユーザーに、その会話が属する受信トレイへのアクセス権限がない場合
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"]
}

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

不明な 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
お問い合わせ