Perbarui Status Percakapan

Gunakan API toggle_status untuk mengubah status percakapan tertentu. Server akan memvalidasi apakah status target valid sesuai matriks transisi status STATUS_TRANSITIONS.

Metode Permintaan

POST

URL Permintaan

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

Autentikasi

Untuk detailnya, lihat panduan autentikasi di Ikhtisar API.

Permintaan

Contoh Permintaan

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

            
Tampilkan blok kode ini di jendela mengambang

Header Permintaan

Field Type Description
Authorization string Autentikasi menggunakan Authorization: Basic base64(API Key:API Secret). Buka halaman API Keys untuk mendapatkan API key dan API secret, pisahkan keduanya dengan tanda titik dua, lalu enkode hasilnya ke Base64.
Content-Type application/json Tipe data. Gunakan application/json untuk pesan teks biasa.

Parameter Path

Field Type Required Description
conversation_id string Yes ID percakapan.

Parameter Request Body

Field Type Required Description
status string Yes Status target. Lihat nilai enumerasi di bawah.
snoozed_until integer No Berlaku hanya saat status=snoozed. Timestamp UNIX dalam satuan detik. Jika dihilangkan, percakapan akan ditunda tanpa batas waktu.
sender_type string No Digunakan hanya untuk identifikasi internal di sisi server. Saat pemanggil adalah AgentBot, status saat ini pending, dan status target open, proses bot_handoff! akan dipicu dan event CONVERSATION_BOT_HANDOFF akan dikirim.

Nilai Enumerasi status

Value Meaning
open Terbuka
resolved Terselesaikan
pending Menunggu penanganan bot/agen
snoozed Ditunda
closed Ditutup (diarsipkan)

Matriks Transisi Status (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

Batasan Utama

  • resolved adalah satu-satunya status prasyarat untuk beralih ke closed: open, pending, dan snoozed tidak dapat langsung diubah menjadi closed. Ketiganya harus terlebih dahulu bertransisi ke resolved sebelum diarsipkan.
  • closed hanya dapat kembali ke open: Percakapan yang diarsipkan tidak dapat langsung bertransisi ke status aktif lainnya, seperti resolved, pending, atau snoozed.
  • Penetapan status yang sama bersifat idempoten: Saat status target sama dengan status saat ini, validasi dilewati dan permintaan langsung berhasil. Tidak ada callback yang dipicu.
  • Validasi diimplementasikan pada lapisan model ActiveRecord melalui validate :status_transition_allowed, if: :will_save_change_to_status?, dan berlaku untuk semua jalur save!, update!, serta status= yang diikuti oleh save.

Respons

Respons Berhasil

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

            
Tampilkan blok kode ini di jendela mengambang

Parameter Respons

Field Type Description
success boolean Nilai yang dikembalikan oleh save; true jika perubahan status berhasil.
conversation_id integer display_id percakapan, yaitu ID yang terlihat di dalam akun.
current_status string Status percakapan setelah perubahan.
snoozed_until integer / null Timestamp kedaluwarsa penundaan yang sedang berlaku; selalu null untuk status selain snoozed.

Respons Kesalahan

HTTP Status Code Trigger Condition
401 Tidak terautentikasi atau autentikasi gagal.
403 Pengguna saat ini tidak memiliki izin untuk mengakses Inbox tempat percakapan berada.
404 Tidak ditemukan percakapan dengan display_id yang sesuai di akun saat ini.
422 status bukan nilai enumerasi yang valid, parsing snoozed_until gagal, atau status target melanggar matriks STATUS_TRANSITIONS.

Struktur Respons 422

Pelanggaran matriks transisi status (berasal dari validasi lapisan model dan dirender sebagai full_messages oleh RequestExceptionHandler):

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

            
Tampilkan blok kode ini di jendela mengambang

Nilai enumerasi status tidak dikenal (dari 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)"
}

            
Tampilkan blok kode ini di jendela mengambang

snoozed_until tidak valid (dari CustomExceptions::Conversation::InvalidSnoozedUntil):

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

            
Tampilkan blok kode ini di jendela mengambang
Icon Solid Transparent White Qiyu
Hubungi Sales