Skip to content

Hàng đợi (Queue)

Quản lý hàng đợi của Zorio PBX: CRUD queue, thêm/sửa/xoá tier agent.

GET /api/pbx/queues — Liệt kê

Query: search (match name hoặc queue_number), page, per_page (1-200).

Response format giống Extensions (5 keys: current_page, data, last_page, per_page, total).

GET /api/pbx/queues/{name} — Chi tiết

Path parameter

name (string user-facing, KHÔNG phải id).

Response body fields

FieldTypeMô tảGiá trị hợp lệ
namestringTên queue user-facingunique per tài khoản
queue_numberstringSố extension nội bộ để dial vào queue3-10 chữ số
team_idinteger|nullNhóm sở hữu
strategystringCách chọn agentring-all / longest-idle-agent / round-robin / top-down / agent-with-least-talk-time / agent-with-fewest-calls / sequentially-by-agent-order / random
tier_rules_applyboolÁp dụng tier rule không
tier_rule_wait_secondintegerSố giây chờ trước khi escalate lên tier kế tiếp0-3600
tier_rule_wait_multiply_levelboolNhân số giây theo tier level
tier_rule_no_agent_no_waitboolKhông chờ nếu tier không có agent online
abandoned_resume_allowedboolCho phép caller gọi lại sau khi cúp
discard_abandoned_afterintegerSau bao nhiêu giây mới xoá record abandoned
max_wait_time_with_no_agentintegerTối đa chờ khi không có agent (giây)≥ 0
max_wait_time_with_no_agent_time_reachedstringHành động khi hết thời gian chờhangup / hoặc tên action khác
time_base_scorestringTính điểm theo system (toàn hệ) hay queue (chỉ trong queue)system / queue
recording_templatestring|nullTemplate tên file ghi âm (Zorio PBX variable interpolation)
statusstringTrạng tháiactive / inactive
created_atdatetime
updated_atdatetime

Response Body (JSON) — 200

json
{
  "data": {
    "name": "Support01",
    "queue_number": "200",
    "team_id": 2,
    "strategy": "agent-with-fewest-calls",
    "tier_rules_apply": true,
    "tier_rule_wait_second": 15,
    "tier_rule_wait_multiply_level": true,
    "tier_rule_no_agent_no_wait": true,
    "abandoned_resume_allowed": false,
    "discard_abandoned_after": 14400,
    "max_wait_time_with_no_agent": 60,
    "max_wait_time_with_no_agent_time_reached": "hangup",
    "time_base_score": "queue",
    "recording_template": null,
    "status": "active"
  }
}

POST /api/pbx/queues — Tạo mới

Request body fields

FieldTypeRequiredMô tảGiá trị
namestringTên queuemax 100, unique per tài khoản
queue_numberstringSố dial vào queueRegex ^[0-9]{3,10}$, unique per tài khoản
team_idintegeroptionalNhóm sở hữu
strategystringoptionalCách chọn agent8 giá trị enum (xem Chi tiết)
tier_rules_applybooloptional
tier_rule_wait_secondintegeroptional0-3600
tier_rule_wait_multiply_levelbooloptional
tier_rule_no_agent_no_waitbooloptional
abandoned_resume_allowedbooloptional
discard_abandoned_afterintegeroptional≥ 0
max_wait_time_with_no_agentintegeroptional≥ 0
max_wait_time_with_no_agent_time_reachedstringoptional
time_base_scorestringoptionalsystem / queue

Request Body (JSON)

json
{
  "name": "Sales01",
  "queue_number": "300",
  "team_id": 2,
  "strategy": "agent-with-fewest-calls",
  "tier_rules_apply": true,
  "tier_rule_wait_second": 15,
  "tier_rule_no_agent_no_wait": true,
  "max_wait_time_with_no_agent": 60,
  "time_base_score": "queue"
}

Response Body (JSON) — 201

json
{
  "data": {
    "name": "Sales01",
    "queue_number": "300",
    "team_id": 2,
    "strategy": "agent-with-fewest-calls",
    "tier_rules_apply": true,
    "tier_rule_wait_second": 15,
    "tier_rule_wait_multiply_level": false,
    "tier_rule_no_agent_no_wait": true,
    "abandoned_resume_allowed": false,
    "discard_abandoned_after": 0,
    "max_wait_time_with_no_agent": 60,
    "max_wait_time_with_no_agent_time_reached": "hangup",
    "time_base_score": "queue",
    "recording_template": null,
    "status": "active"
  }
}

PUT / DELETE /api/pbx/queues/{name}

PUT

Body chấp nhận mọi field như Create trừ namequeue_number (immutable).

json
{
  "strategy": "longest-idle-agent",
  "tier_rule_wait_second": 20,
  "max_wait_time_with_no_agent": 90
}

Response 200 = { data: { ...17 field queue } }.

DELETE

Soft delete + observer tự detach runtime.

json
{ "data": { "deleted": true } }

Quản lý tier agent

GET /api/pbx/queues/{name}/agents — Liệt kê tier

Response body fields (mỗi item trong data[])

FieldTypeMô tảGiá trị
extension_numberstringSố máy nhánh agent
agent_namestringTên agent <ext>@<sip-domain>
statusstringTrạng thái presence agentavailable / available_on_demand / on_break / logged_out
statestringState runtime hàng đợiidle / waiting / receiving / in_a_queue_call
tier_levelintegerCấp ưu tiên (1 = cao nhất)1-9
tier_positionintegerThứ tự trong cùng level1-99
max_no_answerintegerSố lần ko nhấc trước khi auto logout
wrap_up_timeintegerThời gian wrap-up sau cuộc (giây)
json
{
  "data": [
    {
      "extension_number": "2001",
      "agent_name": "2001@app.zorio.vn",
      "status": "available",
      "state": "idle",
      "tier_level": 1,
      "tier_position": 1,
      "max_no_answer": 3,
      "wrap_up_time": 5
    }
  ]
}

POST /api/pbx/queues/{name}/agents — Thêm tier

Request body fields

FieldTypeRequiredMô tảGiá trị
extensionstringSố máy nhánhPhải tồn tại. Regex ^[0-9]{3,10}$
tier_levelintegeroptionalCấp ưu tiên1-9 (default 1)
tier_positionintegeroptionalVị trí trong level1-99 (default 1)

Auto tạo record tier agent nếu agent chưa tồn tại. Trả 409 nếu ext đã ở trong queue này.

json
{ "extension": "2001", "tier_level": 1, "tier_position": 1 }

Response 201: { "data": { "added": true } }

PATCH /api/pbx/queues/{name}/agents/{ext} — Sửa tier

Path: name (queue), ext (extension_number).

Request body fields (mọi field optional)

FieldTypeMô tảGiá trị
tier_levelintegerCấp ưu tiên1-9
tier_positionintegerVị trí trong level1-99
statusstringTrạng thái presence agentavailable / available_on_demand / on_break / logged_out
json
{ "tier_level": 2, "tier_position": 1, "status": "on_break" }

Response 200: { "data": { "updated": true } }

DELETE /api/pbx/queues/{name}/agents/{ext} — Xoá tier

Không có Request Body. Response 200: { "data": { "removed": true } }

KHÔNG xoá tier agent record — chỉ remove khỏi queue (agent có thể tham gia queue khác).

Cấp phép theo điều khoản sử dụng của Zorio.