Logo Site EngageLab Mark Colored TransparentDokumen
Cari

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

  • resolved adalah satu-satunya status prasyarat untuk masuk ke closed: open, pending, dan snoozed tidak dapat langsung diubah ke closed; status-status tersebut harus terlebih dahulu bertransisi ke resolved sebelum diarsipkan.
  • closed hanya dapat bertransisi kembali ke open: Percakapan yang diarsipkan tidak dapat langsung bertransisi ke status aktif lainnya seperti resolved, pending, atau snoozed.
  • 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 jalur save!, update!, serta status= + 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
Icon Solid Transparent White Qiyu
Hubungi Sales