Skip to content

Add Contact Center agents, queues, reservations, assignment, and dialer-agnostic dialing#502

Merged
MikeAlhayek merged 1 commit into
ma/add-contact-centerfrom
ma/contact-center-agents-queues-dialer
Jun 29, 2026
Merged

Add Contact Center agents, queues, reservations, assignment, and dialer-agnostic dialing#502
MikeAlhayek merged 1 commit into
ma/add-contact-centerfrom
ma/contact-center-agents-queues-dialer

Conversation

@MikeAlhayek

Copy link
Copy Markdown
Member

Summary

Builds on the Contact Center base (PR #501) to deliver Phase 2 (agents, presence, queues, reservations) plus the routing and dialer cores, including a dialer-agnostic provider model and a DialPad implementation.

This PR targets ma/add-contact-center because it depends on the Phase 1 work that is not yet in main.

What changed

  • Abstractions: presence / reservation / queue-item enums, dialer modes & capabilities, and the dialer-agnostic IDialerProvider + IDialerProviderResolver with request/result models.
  • Core: AgentProfile, ActivityQueue, QueueItem, ActivityReservation, DialerProfile (models, indexes, stores, managers) and the orchestration brain: presence, queue, reservation lifecycle (reserve/accept/reject/expire), availability-based assignment (highest-priority work to the longest-idle available agent), and dialer orchestration.
  • ContactCenter module: feature-gated Agents, Queues, and Dialer features; reservation-expiry + dialer-pacing background tasks; agent/queue/dialer permissions; admin menu; CRUD UI for queues and dialer profiles; an agent sign-in workspace; and dialer activity-batch sources.
  • DialPad.Dialer feature: DialPadDialerProvider implements the dialer-agnostic IDialerProvider over the existing DialPad telephony provider, so outbound campaigns dial through DialPad while the Contact Center owns all assignment/queue/pacing/compliance logic.

How it works

Agents sign in to queues/campaigns from the Agent Workspace and become Available. A background task pairs the top-priority queued activity with the longest-idle available agent, creates a short-lived reservation (Available → Reserved → Assigned), and expires stale reservations. Power/progressive dialer profiles run each minute: reserve an agent, create an outbound interaction, and ask the configured provider to place the call.

Validation

  • dotnet build clean (zero warnings) for Core, the ContactCenter module, DialPad, and the full Cms.Web bundle.
  • 20/20 Contact Center unit tests pass (7 new: assignment, reservation lifecycle, presence).

Docs

  • New page: Contact Center → Agents, Queues & Dialer.
  • v2.0.0 changelog subsection; PLAN.md progress updated (Phase 2 done; Phase 3/5 cores started).

…er-agnostic dialing

Implements Phase 2 (agent presence, queues, reservations) plus the routing/dialer cores:

- Abstractions: presence/reservation/queue-item enums, dialer modes/capabilities, and the dialer-agnostic IDialerProvider + IDialerProviderResolver with request/result models.
- Core: AgentProfile, ActivityQueue, QueueItem, ActivityReservation, DialerProfile (models, indexes, stores, managers) and presence, queue, reservation-lifecycle, availability-based assignment, and dialer orchestration services.
- ContactCenter module: Agents/Queues/Dialer features, reservation-expiry and dialer-pacing background tasks, permissions, admin menu, CRUD UI for queues/dialer profiles, agent sign-in workspace, and dialer activity batch sources.
- DialPad.Dialer feature: DialPadDialerProvider implements IDialerProvider over the DialPad telephony provider.
- 7 new unit tests (20 ContactCenter tests pass); docs page + v2.0.0 changelog; PLAN progress updated.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@MikeAlhayek MikeAlhayek merged commit f90a595 into ma/add-contact-center Jun 29, 2026
3 checks passed
@MikeAlhayek MikeAlhayek deleted the ma/contact-center-agents-queues-dialer branch June 29, 2026 16:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant