อัปเดตสถานะการสนทนา
ใช้ API toggle_status เพื่อเปลี่ยนสถานะของการสนทนาที่ระบุ โดยเซิร์ฟเวอร์จะตรวจสอบว่าสถานะเป้าหมายถูกต้องตามเมทริกซ์การเปลี่ยนสถานะ STATUS_TRANSITIONS หรือไม่
วิธีการร้องขอ
POST
Endpoint
https://livedesk-api.engagelab.com/api/v2/accounts/conversations/{conversation_id}/toggle_status
การยืนยันตัวตน
สำหรับรายละเอียด โปรดดูคำอธิบายวิธีการยืนยันตัวตนใน ภาพรวม API
คำขอ
ตัวอย่างคำขอ
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 ของการสนทนา |
พารามิเตอร์ Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| status | string | Yes | สถานะเป้าหมาย ดูค่า enum ด้านล่าง |
| snoozed_until | integer | No | มีผลเฉพาะเมื่อ status=snoozed เท่านั้น เป็น UNIX timestamp (วินาที) หากละไว้ การสนทนาจะถูกพักไว้แบบไม่มีกำหนด |
| sender_type | string | No | ใช้สำหรับการระบุฝั่งเซิร์ฟเวอร์ภายในเท่านั้น เมื่อผู้เรียกคือ AgentBot สถานะปัจจุบันคือ pending และสถานะเป้าหมายคือ open ระบบจะทริกเกอร์โฟลว์ bot_handoff! และส่งอีเวนต์ CONVERSATION_BOT_HANDOFF |
ค่า enum ของ 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 |
ข้อจำกัดสำคัญ
resolvedเป็นสถานะเงื่อนไขเดียวก่อนเข้าสู่closed: ไม่สามารถเปลี่ยนสถานะจากopen,pendingหรือsnoozedเป็นclosedได้โดยตรง ต้องเปลี่ยนเป็นresolvedก่อน จึงจะเก็บถาวรได้closedสามารถเปลี่ยนกลับไปเป็นopenได้เท่านั้น: การสนทนาที่เก็บถาวรแล้วไม่สามารถเปลี่ยนโดยตรงไปยังสถานะที่ยังใช้งานอยู่อื่น ๆ เช่นresolved,pendingหรือsnoozed- การตั้งค่าสถานะเดิมซ้ำมีคุณสมบัติ idempotent: หากสถานะเป้าหมายเท่ากับสถานะปัจจุบัน ระบบจะข้ามการตรวจสอบและส่งคืนผลสำเร็จทันที โดยจะไม่มีการทริกเกอร์ callback
- การตรวจสอบถูกนำไปใช้ที่เลเยอร์โมเดล 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
}
}
โค้ดนี้โชว์เป็นหน้าต่างลอย
พารามิเตอร์การตอบกลับ
| Field | Type | Description |
|---|---|---|
| success | boolean | ค่าที่ส่งกลับของ save; จะเป็น true หากอัปเดตสถานะสำเร็จ |
| conversation_id | integer | display_id ของการสนทนา (ID ที่มองเห็นได้ในบัญชี) |
| current_status | string | สถานะของการสนทนาหลังการอัปเดต |
| snoozed_until | integer / null | timestamp เวลาหมดอายุของการพักที่มีผลอยู่ในปัจจุบัน; จะเป็น null เสมอเมื่อสถานะไม่ใช่ snoozed |
การตอบกลับข้อผิดพลาด
| HTTP Status Code | Trigger Condition |
|---|---|
| 401 | ยังไม่ได้ยืนยันตัวตน หรือยืนยันตัวตนล้มเหลว |
| 403 | ผู้ใช้ปัจจุบันไม่มีสิทธิ์เข้าถึง inbox ที่การสนทนานี้สังกัดอยู่ |
| 404 | ไม่พบการสนทนาที่มี display_id ตรงกันภายใต้บัญชีปัจจุบัน |
| 422 | status ไม่ใช่ค่า enum ที่ถูกต้อง, snoozed_until แยกวิเคราะห์ไม่สำเร็จ หรือสถานะเป้าหมายขัดกับเมทริกซ์ STATUS_TRANSITIONS |
โครงสร้างการตอบกลับ 422
ขัดกับเมทริกซ์การเปลี่ยนสถานะ (มาจากการตรวจสอบที่เลเยอร์โมเดล และถูกเรนเดอร์เป็น full_messages โดย RequestExceptionHandler):
{
"message": "Status can't transition from open to closed",
"attributes": ["status"]
}
{
"message": "Status can't transition from open to closed",
"attributes": ["status"]
}
โค้ดนี้โชว์เป็นหน้าต่างลอย
ไม่รู้จักค่า enum ของ 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)"
}
โค้ดนี้โชว์เป็นหน้าต่างลอย










