อัปเดตสถานะการสนทนา

ใช้ API toggle_status เพื่อเปลี่ยนสถานะของการสนทนาที่ระบุ เซิร์ฟเวอร์จะตรวจสอบว่าสถานะเป้าหมายถูกต้องตาม เมทริกซ์การเปลี่ยนสถานะ STATUS_TRANSITIONS หรือไม่

วิธีการส่งคำขอ

POST

URL สำหรับส่งคำขอ

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 ของการสนทนา

พารามิเตอร์ในเนื้อหาคำขอ

Field Type Required Description
status string Yes สถานะเป้าหมาย ดูค่าที่ระบุไว้ด้านล่าง
snoozed_until integer No มีผลเฉพาะเมื่อ status=snoozed เท่านั้น เป็น UNIX timestamp ในหน่วยวินาที หากไม่ระบุ การสนทนาจะถูกเลื่อนการแจ้งเตือนออกไปอย่างไม่มีกำหนด
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 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

ข้อจำกัดสำคัญ

  • 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 ไม่ใช่ค่าที่ระบุไว้ที่ถูกต้อง การแยกวิเคราะห์ 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"]
}

            
โค้ดนี้โชว์เป็นหน้าต่างลอย

ค่าที่ระบุไว้ของสถานะไม่รู้จัก (จาก 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)"
}

            
โค้ดนี้โชว์เป็นหน้าต่างลอย
Icon Solid Transparent White Qiyu
ติดต่อฝ่ายขาย