Perbarui Status Percakapan
Gunakan API toggle_status untuk mengubah status percakapan yang ditentukan. Server memvalidasi apakah status target valid sesuai dengan matriks transisi status STATUS_TRANSITIONS.
Metode Permintaan
POST
Endpoint
https://livedesk-api.engagelab.com/api/v2/accounts/conversations/{conversation_id}/toggle_status
Autentikasi
Untuk detail, lihat deskripsi metode 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 | Gunakan Authorization: Basic base64(API Key:API Secret) untuk autentikasi. Buka halaman API key untuk mendapatkan API Key dan API Secret, lalu gabungkan keduanya dengan tanda titik dua dan enkode hasilnya dalam Base64. |
| Content-Type | application/json | Jenis konten. Gunakan application/json untuk payload JSON. |
Parameter Path
| Field | Type | Required | Description |
|---|---|---|---|
| conversation_id | string | Yes | ID percakapan. |
Parameter Body Permintaan
| Field | Type | Required | Description |
|---|---|---|---|
| status | string | Yes | Status target. Lihat nilai enum di bawah. |
| snoozed_until | integer | No | Hanya berlaku saat status=snoozed. Timestamp UNIX (detik). Jika dihilangkan, percakapan akan ditunda tanpa batas waktu. |
| sender_type | string | No | Hanya untuk identifikasi internal di sisi server. Saat pemanggil adalah AgentBot, status saat ini pending, dan status target open, alur bot_handoff! akan dipicu dan event CONVERSATION_BOT_HANDOFF akan dikirim. |
Nilai Enum status
| Value | Meaning |
|---|---|
| open | Sedang berlangsung |
| resolved | Terselesaikan |
| pending | Menunggu penanganan bot/agen |
| snoozed | Ditunda |
| closed | Ditutup (diarsipkan) |
Matriks Transisi Status (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 |
Batasan Utama
resolvedadalah satu-satunya status prasyarat untuk masuk keclosed:open,pending, dansnoozedtidak dapat langsung diubah keclosed; status-status tersebut harus terlebih dahulu bertransisi keresolvedsebelum diarsipkan.closedhanya dapat bertransisi kembali keopen: Percakapan yang diarsipkan tidak dapat langsung bertransisi ke status aktif lainnya sepertiresolved,pending, atausnoozed.- Mengatur status yang sama bersifat idempoten: Jika status target sama dengan status saat ini, validasi akan dilewati dan keberhasilan langsung dikembalikan. 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 jalursave!,update!, sertastatus=+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 kembalian dari save; true jika pembaruan status berhasil. |
| conversation_id | integer | display_id percakapan (ID yang terlihat di akun). |
| current_status | string | Status percakapan setelah pembaruan. |
| snoozed_until | integer / null | Timestamp kedaluwarsa penundaan yang saat ini berlaku; selalu null jika status bukan snoozed. |
Respons Kesalahan
| HTTP Status Code | Trigger Condition |
|---|---|
| 401 | Tidak terautentikasi atau autentikasi gagal |
| 403 | Pengguna saat ini tidak memiliki akses ke inbox tempat percakapan berada |
| 404 | Tidak ditemukan percakapan dengan display_id yang sesuai di akun saat ini |
| 422 | status bukan nilai enum yang valid, snoozed_until gagal diurai, atau status target melanggar matriks STATUS_TRANSITIONS |
Struktur Respons 422
Melanggar 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 enum status tidak dikenal (berasal 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 (berasal 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










