Azure Communication Services architecture design
Azure Communication Services changes the design problem from building media transport to orchestrating identities, tokens, and call context across client and server boundaries. For technical teams, the core dependency is not the UI kit or SDK alone, but the trusted service that maps application users to Communication Services identities and issues short-lived access tokens. That service becomes a critical control-plane component and should be treated like any other privileged workload in your architecture.
A practical implication is that the data plane and control plane must be separated cleanly. Clients should never hold long-lived credentials, and token generation should be isolated behind a managed service such as Azure App Service or Azure Functions. Using Azure Managed Identity reduces secret handling, but it also means your deployment, permissions model, and failure handling must be designed around Azure-native authentication flows rather than embedded keys or ad hoc configuration.
The article also highlights a common integration pattern: calling apps, chat workflows, telephony, and external systems all exchange identifiers rather than direct session state. That creates coupling to your own data model for friends lists, group call IDs, phone number mapping, or meeting links. If those relationships live in Cosmos DB, Graph, or another system of record, you need consistent governance for lifecycle, revocation, and lookup latency.
For enterprises, the main trade-off is flexibility versus operational complexity. Communication Services can front web, mobile, and bot scenarios, and it can interoperate with Teams through Microsoft Graph, but each integration path introduces distinct authorization, routing, and user-experience constraints. Background calling, PSTN access, and Teams meeting participation all require careful attention to notification flow, tenant policy, and the reliability of the controller service that brokers each interaction.
- Client application. A website or native application used by end users for communication. Communication Services provides SDK client libraries for browsers and native apps. The open-source UI Library that’s built on these SDKs provides programmable web (React), iOS, and Android UI components.
- Identity management service. A service that you build to map users and services to Communication Services identities. This service also creates tokens for users when they need to access the data plane. You can enhance security and simplify management by using Azure Managed Identity for this service, eliminating the need for managing credentials manually.
- Communication controller service. A service that you build to control chat threads and voice and video calls.
- Communication data service. A service capability that you build to directly interact with communication content, like sending chat and SMS messages or playing audio in a voice call.
| System | Function | Protocols | Access model |
|---|---|---|---|
| Control plane | Governs who communicates, when, and how | REST | Microsoft Entra ID service credentials |
| Data plane | Contains communication content, voice, video, text, and data that interface with humans and apps | UDP, RTMP, WebSockets, REST | User access tokens and Microsoft Entra ID service credentials such as Managed Identity |
- What meetings do I have today?
- What phone number do I use to call my friend Joseph?
- What are the names of my teammates? What ongoing chat threads do we have?
Users authenticated via user access tokens
Download a Visio file of this architecture.
Dataflow
- A user starts the client application.
- The client application contacts your identity management service. The identity management service maintains a mapping between application identities and Communication Services identities. (Application identities include your users and other addressable objects, like services or bots.)
- The identity management service uses the mapping to issue a user access token for the applicable identity.
User calls an app or phone number
Download a Visio file of this architecture.
- The initiating user obtains the Communication Services identity of the person they want to call. In a typical scenario, the user gets the identity from a friends list that’s maintained by the identity management service. The list collates the user’s friends and associated Communication Services identities.
- The initiating user starts the Call client and calls the remote user.
- The accepting user is notified of the incoming call via the Calling SDK. To receive incoming calls, the acceptor must have already initialized the Call client.
- The users communicate with each other via voice and video in a call.
User joins a group call without an invitation
Download a Visio file of this architecture.
- The initiating user initializes the Call client and makes a group call.
- The initiating user shares the group call ID with a communication controller service.
- The communication controller service shares the call ID with other users. For example, if the application provides user clubs, the group call ID is an attribute of the club’s data model that’s stored in Azure Cosmos DB.
- Other users join the call by using the group call ID.
- Users communicate with each other via voice and video in a call.
- Build a custom application to allow an external user to join a Teams meeting. This scenario is ideal for virtual visit scenarios, where a business that’s using Teams hosts a meeting for external consumers who are using a custom app and a custom identity. To learn more about this scenario, see Virtual visits tutorial and Sample Builder.
- Build a custom application for an internal user with Teams / Microsoft Entra credentials. This scenario is designed for building custom Teams clients for employees.
Application joins a scheduled Teams call
Download a Visio file of this architecture.
- (1A) The communication controller service schedules the group call by using the Microsoft Graph API. In another use case, (1B), users schedule the group call by using Outlook or Teams.
- The communication controller service shares the details of the Teams call with Communication Services clients.
- Typically, a Teams user must join the call via the Teams UI and allow external users to pass through the Teams pre-call lobby. However, this requirement depends on the configuration of the Teams tenant and the specific meeting settings.
- Communication Services users initialize the Call client and join the Teams meeting by using the details received in step 2.
- Users communicate with each other via voice and video.
Enjoyed this article? Sign up for our newsletter to receive regular insights and stay connected.
