Skip to content

Releases

v2.6.1

Choose a tag to compare

@mwolff44 mwolff44 released this 25 Jun 17:13
2f04c56

Fixed

  • is_offline no longer stays stuck true across a logout/login cycle. An agent that went offline (QueueMemberStatus Status 5) while logged into a queue, was then disconnected and later reconnected its WDA and logged back in, kept is_offline: true in GET /queues/agents_status and the queue_agents_status event — nothing cleared the flag after the re-login (only a QueueMemberAdded fires on re-login, and no QueueMemberStatus follows when the device registered before the queue login). Now:
    • is_offline is reset to false when an agent leaves all its queues (full logout / confd dissociation to empty), so a stale value never bleeds into the next login;
    • QueueMemberAdded derives is_offline from the device Status the event already carries (Status 5 → offline), so any (re)join reflects the real device state immediately — including an agent added while its device is still unavailable, which a logout-only reset would miss. Guarded on Status presence so a source that omits it never clobbers a known state.

Covered by four new unit tests (TDD); the QueueMemberStatus Status-5 → offline path (the "agent offline while still in a queue" case) is unchanged.


Full changelog: v2.6.0...v2.6.1

v2.6.0

Choose a tag to compare

@mwolff44 mwolff44 released this 25 Jun 16:08
fdc1f8d

Added

  • Connect auto-login — PUT /queues/{queue_name}/connect now handles an agent that has no active wazo-agentd session: instead of failing, the agent is logged in on its own line (resolved from confd) and joined to only the selected queue. A 400 is now returned solely when the agent has no line to log in on. Fixes #17.

  • WDA connectivity pre-check on connect — before connecting, the agent's application (WDA) must be reachable: its device must be registered. If the device is Unavailable (websocket KO), the request is rejected with 409 agent-wda-not-connected so the supervisor can be told to have the agent reconnect first. This also catches an agent that still holds an agentd session while its WDA has dropped. Checked via AMI ExtensionState on the agent's own extension.

  • New ACL amid.action.ExtensionState.create on the wazo-calld service token (etc/wazo-auth-keys/conf.d/call_queue.yml), required by the WDA pre-check. Re-run wazo-auth-keys service update and restart wazo-calld after upgrading.

Fixed

  • is_offline now tracks real device/WDA reachability. It is recomputed on every QueueMemberStatus event (Status 5 / Unavailable → is_offline: true, reachable statuses → false), so an agent still logged into a queue whose WDA has disconnected is correctly reported offline. Previously is_offline could stay false for a disconnected device.

Changed — error mapping on /connect

outcome HTTP
success / already connected 204 (idempotent)
agent has no line to log in on 400
agent's WDA not connected 409 (agent-wda-not-connected)
supervisor not a member of the queue 403
unknown agent / queue 404

Internal

  • Code-quality toolchain (PR #19): pre-commit orchestrating black, isort, flake8, pyupgrade, mypy and the Wazo copyright check; configuration in pyproject.toml; tox -e linters; and a GitHub Actions CI running the linters and pytest on every PR. The whole codebase was formatted to one consistent style (double-quoted strings).
  • docs/ISSUE-agentd-fresh-login-missing-per-queue-event.md: upstream report that a full agentd login emits no per-queue UserAgentQueueLoggedInEvent, so a standard WDA's queue list only refreshes after a reload.

Full changelog: v2.5.0...v2.6.0

v2.5.0

Choose a tag to compare

@mwolff44 mwolff44 released this 25 Jun 11:40
578215b

Added

  • Per-queue agent connect / disconnect for supervisors — two new REST endpoints on the wazo-calld plugin:

    Method Path Caller ACL
    PUT /queues/{queue_name}/connect calld.queues.{queue_name}.connect.update
    PUT /queues/{queue_name}/disconnect calld.queues.{queue_name}.disconnect.update

    Body {"agent_id": <int>}, 204 on success. The endpoint acts as an authorization proxy + delegation to wazo-agentd: the caller is authorized server-side — the token's user must be an agent that is itself a member of the target queue (resolved via confd user → agent → queue roster) — then the request is delegated to agentd (agent_login_to_queue / agent_logoff_from_queue). The queue_id sent to agentd comes from the supervisor's own roster, never from the request body, and all confd/agentd calls are tenant-scoped.

    No AMI action, no in-memory state mutation and no new bus event: the change propagates through the existing QueueMemberAdded / QueueMemberRemoved events and the queue_agents_status payload.

  • Two agentd.agents.*.queues.*.{login,logoff}.update ACL on the wazo-calld service token (etc/wazo-auth-keys/conf.d/call_queue.yml).

Error mapping

agentd outcome HTTP
success 204
ALREADY_IN_QUEUE / NOT_IN_QUEUE 204 (idempotent — target state reached)
NOT_LOGGED (no active session) 400
NO_SUCH_QUEUE / NO_SUCH_AGENT 404
supervisor not a member of the queue 403
any other agentd error 502

Fixes #3.


Full changelog: v2.4.1...v2.5.0

v2.4.1

Choose a tag to compare

@mwolff44 mwolff44 released this 24 Jun 05:12
21b6af6

Fixed

  • configured_queues now stays in sync with confd when an agent is added to or removed from a queue. The handler subscribes to the confd queue_member_agent_associated / queue_member_agent_dissociated events and resyncs the cached roster (and runtime queues / paused_queues) from confd. Previously a queue removed from a logged-off agent in confd stayed in configured_queues (and the legacy queue field) until the next wazo-calld restart, because the plugin only learned membership from runtime AMI events and never pruned the configured roster.
  • When the prune empties the agent's runtime membership, session/device fields (logged_at, paused_at, is_talking, …) are now cleared just like a regular last-queue logout.
  • The legacy queue field is reset to false when an agent is no longer configured for any queue. It stays "sticky" (keeps its last-known name) only while the agent still belongs to at least one queue.

Full changelog: v2.4.0...v2.4.1

v2.4.0

Choose a tag to compare

@mwolff44 mwolff44 released this 23 Jun 12:26
85dd7ed

Added

  • configured_queues on each agent in GET /queues/agents_status and the queue_agents_status event: the full confd-configured queue roster, independent of login state. Unlike runtime queues (empty when the agent is logged off), it lets a client list a queue's complete roster — including logged-off members — and derive per-queue status (present when the queue is also in queues, paused when in paused_queues, else disconnected). Kept a superset of queues; does not feed is_logged / is_paused (those stay derived from runtime membership).
  • docs/FRONTEND_INTEGRATION.md and the QueueAgentsStatus Swagger definition document the new field and the per-queue roster/status pattern.

Fixed

  • #13 — a multi-queue agent that was logged off only surfaced its first configured queue via the legacy queue field and was undiscoverable for its other queues. The new configured_queues exposes the full membership regardless of login.

Frontend counterpart: wazo-communication/wda-supervisor#16.

Full changelog: v2.1.0...v2.4.0

v2.1.0

Choose a tag to compare

@mwolff44 mwolff44 released this 18 Jun 08:14
v2.1.0
166a01b

wazo-calld-queue 2.1.0

Requires Wazo 26.06. The plugin now lives in the wazo namespace under the wazo-communication organization.

Fixes

  • Remove recursive __ne__ in ArbitraryEvent (prevents infinite recursion).
  • Make ArbitraryEvent.__eq__ robust to missing required_acl and foreign types.
  • Avoid IndexError when removing waiting calls in _livestats.
  • Use load_default instead of the deprecated missing argument in QueueSchema.
  • Use a valid plugin namespace (wazo).

Improvements

  • Remove unused AgentStatusHandler and QueueStatusHandler.
  • Replace debug print with logger.info in get_agents_status.
  • Add unit tests for bus_consume, QueueService, and the marshmallow schemas.
  • Add AGENTS.md contributor guidance (with CLAUDE.md pointer).

Full changelog: v2.0.2...v2.1.0

v2.0.2

Choose a tag to compare

@mwolff44 mwolff44 released this 11 Dec 11:54
5c270ba

What's Changed

  • fix: add Loader argument to yaml.load() for PyYAML 6.0 compatibility by @mwolff44 in #5

Full Changelog: v2.0.1...v2.0.2

v2.0.1

Choose a tag to compare

@mwolff44 mwolff44 released this 24 Oct 15:55
f7e63fc

What's Changed

Full Changelog: v2.0.0...v2.0.1

v2.0.0

Choose a tag to compare

@mwolff44 mwolff44 released this 22 Oct 15:43
876ef35

What's Changed

Full Changelog: v1.1.1...v2.0.0

v1.1.1 : bug fix

Choose a tag to compare

@mwolff44 mwolff44 released this 11 Jun 15:57

What's Changed

New Contributors

Full Changelog: 24_02_v1.1.0...v1.1.1