会話ステータスを更新
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のみです:open、pending、snoozedからclosedに直接変更することはできません。アーカイブする前に、まずresolvedへ遷移する必要があります。closedから戻せるのはopenのみです:アーカイブ済みの会話は、resolved、pending、snoozedなど、他のアクティブなステータスへ直接遷移できません。- 同一ステータスへの書き込みは冪等です:対象ステータスが現在のステータスと同じ場合、検証はスキップされ、リクエストは直接成功します。コールバックはトリガーされません。
- バリデーションは 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_until(CustomExceptions::Conversation::InvalidSnoozedUntil に由来):
{
"message": "Invalid snoozed_until: \"not-a-timestamp\" (invalid date)"
}
{
"message": "Invalid snoozed_until: \"not-a-timestamp\" (invalid date)"
}
このコードブロックはフローティングウィンドウ内に表示されます










