BlogBuilding a Voice-First Contact Center in the UAE: Dynamics 365 Contact Center, Azure Communication Services, and a Real-Time Copilot Voice Agent
Contact center agent on a headset working alongside an AI-assisted routing dashboard
Contact Center
August 1, 2026 · Quegentic Team

Building a Voice-First Contact Center in the UAE: Dynamics 365 Contact Center, Azure Communication Services, and a Real-Time Copilot Voice Agent

If you're standing up a contact center in the UAE and want customers to reach you on a local number that lands directly into an AI-assisted, omnichannel-routed experience, the path that Microsoft has actually built for this is more straightforward than it looks on a whiteboard. It comes down to three moving parts: your telephone provider's Session Border Controller (SBC), Azure Communication Services (ACS) as the bridge, and Dynamics 365 Contact Center on the receiving end — with a Copilot Studio real-time voice agent doing the first line of triage before a human ever picks up.

This post walks through the architecture, the prerequisites, and the build steps, end to end.

The architecture, in one picture

Your telecom provider stays your carrier of record — you keep the number, the regulatory relationship, and the billing arrangement with them. Azure Communication Services doesn't replace that; it's the SIP bridge that lets Dynamics 365 receive and place calls over a trunk your provider exposes. Dynamics never talks to the carrier directly — it talks to ACS, and ACS talks to the SBC.

Call flow

Customer (PSTN)
Telephone provider's SBC
Azure Communication Services Direct Routing · UAE North region
Dynamics 365 Contact Center Voice channel
Copilot Studio real-time voice agent Speech + DTMF, same agent
Omnichannel Unified Routing → Advanced Queue → Human Agent

Worth knowing

A "voice bot with DTMF" and "a chatbot that listens and talks back" aren't two separate things here. They're the same object — a single Copilot Studio real-time voice agent that handles speech and DTMF as two input modes on the same conversation. Building them as two separate bots means two components fighting over one call session. Design one flow, not two.

Prerequisites

Three checklists, one per layer of the stack. Line these up before you open the admin center.

01

From your telephone provider

  • An SBC on Microsoft's certified Direct Routing list, or written confirmation that theirs qualifies.
  • A public, static FQDN and signaling port, reachable over TLS, with SRTP for encrypted media.
  • The DID/number you're bringing over, formatted in E.164.
  • Ideally, the SBC hosted in or near the UAE — pairing a UAE ACS resource with a distant SBC shows up as call-quality issues.
  • A signed carrier agreement permitting the number to forward calls to a third-party cloud platform.
02

From Azure

  • A subscription with permissions to create resource groups, ACS resources, and Cognitive Services.
  • An Azure Communication Services resource deployed in UAE North, for low-latency pairing and data residency.
  • Direct Routing enabled: a verified custom domain, the SBC's FQDN and port registered, and a default voice route.
  • Azure Speech Services, for higher-fidelity or multilingual speech beyond Copilot Studio defaults — useful for Arabic and English callers.
  • Azure Monitor / Log Analytics for ACSCallSummary logs, plus Event Grid and Key Vault as needed.
  • Firewall rules opening the SIP signaling and media port ranges Microsoft publishes for Direct Routing.
03

From Dynamics 365 / Power Platform

  • A Dynamics 365 Contact Center (embedded or standalone) or Customer Service license with the voice channel enabled.
  • The Omnichannel administrator role.
  • A Copilot Studio license and the CCI Admin role for whoever builds the voice agent.
  • An existing Unified Routing setup — workstreams, queues, agent skills — since voice plugs into this framework rather than replacing it.

Building it, step by step

01

Stand up Azure Communication Services

Create the ACS resource in UAE North. Under Telephony and SMS → Direct Routing, verify the domain matching your provider's SBC certificate, register the SBC's FQDN and port, and configure a voice route. Place a test call through the trunk and confirm you get SIP 1xx/2xx responses with media flowing both ways before you touch Dynamics at all.

02

Bring the number into Dynamics 365

In the Contact Center admin center, go to Channels → Phone numbers → Advanced → Bring your own number via Azure Direct Routing, and add the number in E.164 format. Sync it and confirm it's available to assign to a voice workstream.

03

Build the Copilot Studio real-time voice agent

Start from the Voice template in Copilot Studio, then work through these settings:

  • Under Settings → Voice, enable voice and select Real-time voice. This choice can't be reversed for that agent later, so decide your production topology first — one agent handling everything, or separate agents by language or business line.
  • Author the conversation the same way you would a chat flow; voice and text share the authoring canvas.
  • Configure DTMF explicitly per prompt: simple key-press menus ("press 1 for billing"), and multi-digit aggregation with a termination character for things like account numbers.
  • Choose speech settings: NLU engine, voice/language packs, and constrained speech grammars for fields like account numbers or postal codes where free-form recognition is unreliable.
  • Set silence detection, no-input/no-match handling, and — critically — a guaranteed fallback to a human transfer after repeated failures. Never let the flow dead-end.
  • Configure the handoff action to carry the full transcript and collected context (intent, account ID, language) forward into the Omnichannel session.
04

Attach the agent to a voice workstream

Add the Copilot agent to the relevant voice workstream in the admin center (one Copilot agent per workstream). If you have a pre-existing voice workstream from an older setup, migrate it — classic bots don't work with the enhanced real-time voice experience.

05

Design the Omnichannel workstream and advanced queues

  • Create a dedicated voice workstream tied to the number.
  • Use context variables the Copilot agent sets (detected intent, language, customer tier pulled from Dataverse) to drive routing rules.
  • Build queues by business line — billing, technical support, VIP, an Arabic-language queue — each with its own agent pool and skills.
  • Configure Unified Routing with skill- and presence-based matching rather than plain round-robin, priority boosting for VIP or long-wait callers, and overflow rules (route to a secondary queue, or back to the Copilot agent for further self-service, if wait time crosses a threshold).
  • Set SLA thresholds per queue with supervisor alerting.
06

Handing off to a human agent

When the Copilot agent transfers, the call arrives in the target queue as a live work item with the transcript and context already attached — agents see history, not a cold call. Make sure agents have the voice channel enabled on their license and a configured softphone/headset. If your compliance posture requires it, enable supervisor monitoring and call recording via Event Grid — and check UAE consent and data-retention requirements for recorded calls before you turn this on, since they differ from what teams building similar stacks in the US or EU may be used to.

07

Test before go-live

Run the full path — inbound call, SBC, ACS, Dynamics voice channel, Copilot agent (test speech and DTMF paths separately), transfer, queue, agent pickup. Load-test concurrent calls against both the SBC's and the ACS resource's session limits. Test failure modes deliberately: what happens if the Copilot agent errors mid-call, or the SBC/ACS path drops. And before go-live, correlate one test call end-to-end across Dynamics' msdyn_ocliveworkitemid, ACS's CorrelationId, and the SBC's trunkCallId — you want that runbook working before support needs it, not during an incident.

The bottom line

This is a three-layer handoff: your provider's SBC hands the call to Azure Communication Services over Direct Routing, ACS hands it to Dynamics 365's voice channel, and a single Copilot Studio real-time voice agent — handling speech and DTMF together — triages before Unified Routing sends the call to the right queue and agent. Get the region pairing right (UAE North on both sides of the SBC-to-ACS link) and build the voice agent as one real-time agent rather than two bots, and the rest of the build is largely configuration, not engineering.