Build Your AI Email Agent with Microsoft Copilot Studio
In this tutorial, you'll learn how to create an AI agent that can send emails on your behalf. We'll use Microsoft Copilot Studio and the robust infrastructure of Azure Communication Services to create the AI agent that can be published on M365 Copilot, Teams, the web and many more. You can view the video tutorial for creating your AI agent below: Prerequisites: Microsoft Copilot Studio Access: You will need a license to use the platform. Azure Subscription: An active Azure account is required to set up the email sending service. Step 1: Create Your First Agent in Copilot Studio First, we'll create the basic framework for our AI assistant. Navigate to Copilot Studio: Open your web browser and go to copilotstudio.microsoft.com. Describe Your Agent: On the homepage, you'll see a prompt that says, "Describe your agent to create it." In the text box, type a simple description of what you want your agent to do. For this tutorial, use: "I want to create an agent that can send out emails using Azure communication services." Configure the Agent: Copilot Studio will generate a basic agent for you. You'll be taken to a configuration page. Give your agent a descriptive name, such as "AI Email Agent." Review the auto-generated description and instructions. You can modify these later if needed. Create the Agent: Click the Create button. Copilot Studio will now set up your agent's environment. Step 2: Set Up Your Email Service in Azure To give your agent the ability to send emails, we need to configure a backend service in Microsoft Azure. Go to the Azure Portal: Log in to your account at portal.azure.com. Create Resources: You will need to create two services: Communication Services: Search for "Communication Services" in the marketplace and create a new resource. This will serve as the main hub. More details can be found here: Create a communication service resource. Email Communication Services: Search for "Email Communication Services" and create this resource. This service is specifically for adding email capabilities. More details can be found here: Send email via azure communication services email Get Your Sender Address: Once these resources are created, you will have a sender address (e.g., DoNotReply@...). This is the email address your AI agent will use. Step 3: Connect Your Services with an Azure Function We need a way for Copilot Studio to communicate with Azure Communication Services to send the email. An Azure Function is the perfect tool to act as this bridge. Create a Function App: In the Azure portal, create a new Function App. This app will host our code. When setting it up, select Python as the runtime stack. Develop the Function: You'll write a simple Python script that acts as a web API. This script will: Receive data (recipient, subject, body) from Copilot Studio. Connect to your Azure Communication Services resource. Send the emai The code for the Azure Function app can be found on our Github page Deploy the Function: Once your code is ready, deploy it to the Function App you created. After deployment, make sure to get the Function URL, as you'll need it in the next step. In the Azure portal head over to your Function App. Go to Settings > Environment Variables, click Add. Add the following: Name: ACS_CONNECTION_STRING Value: <insert your connection string> Name: ACS_SENDER_EMAIL Value: <insert your send email address> (e.g. “DoNotReply@...) Make sure to click Apply, so your settings are applied. Note: For this tutorial, you can use Visual Studio Code with the "Azure Functions" and "Azure Resources" extensions installed to write and deploy your code efficiently. Step 4: Design the Conversation Flow in Copilot Studio Now, let's teach our agent how to interact with users to gather the necessary email details. We'll do this using a "Topic." Go to the Topics Tab: In your Copilot Studio agent, navigate to the Topics tab on the menu. Create a New Topic: Click + Add a topic and select From blank. You can ask Copilot to create a topic for you but for this tutorial we are going to create from scratch. Set the Trigger: The first node is the Trigger. This is what starts the conversation. Click on it and under "Phrases," add phrases like "send an email." This means whenever a user types this phrase, this topic will activate. Ask for the Recipient: Click the + icon below the trigger and select Ask a question. In the text box, type: "What's the recipient email?" Under "Identify," choose User's entire response. Save the response in a new variable called varRecipient. Ask for Subject and Body: Repeat the process above to ask for the Subject and Message body. Save the responses in variables named varSubject and varBody, respectively. Ask for Personalization (Optional): You can also ask for the Recipient's name for a personalized greeting and save it in a variable called varName. Step 5: Call the Azure Function to Send the Email With all the information gathered, it's time to send it to our Azure Function. Add an HTTP Request Node: Click the + icon below your last question. Go to Advanced > Send HTTP request. Configure the Request: URL: Paste the Function URL you copied from your Azure Function. Method: Select POST. Headers and body: Click Edit. For the body, select JSON content and use the formula editor to structure your data, mapping your topic variables (e.g., Topic.varSubject, Topic.varBody) to the JSON fields your function expects. Save the Response: The result from the Azure Function can be saved to a variable, such as varSendResult. This allows you to check if the email was sent successfully. Step 6: Test and Publish Your Agent Your AI email assistant is now fully configured! Let's test it out. Open the Test Panel: On the right side of the screen, open the Test your agent panel. Start a Conversation: Type your trigger phrase, "send an email," and press Enter. Follow the Prompts: The agent will ask you for the recipient, subject, and body. Provide the information as requested. Check Your Inbox: The agent will process the request and send the email. Check the recipient's inbox to confirm it has arrived! Publish: Once you are satisfied with the agent's performance, click the Publish button at the top of the page. You can then go to the Channels tab to deploy your agent to various platforms like Microsoft Teams, a demo website, or even Facebook. Congratulations! You have successfully built and deployed a functional AI email agent. Debugging and Troubleshooting Agent asking unnecessary information: If you want the agent to only ask the question that you have input and to not add anything extra. In your agent settings in Copilot Studio, turn off generative AI orchestration. This will force the AI agent to only asks questions Agent stuck in a loop: If, after sending, the agent jumps back to “What’s the recipient email?”, explicitly end the topic. Add + → Topic management → End current topic immediately after your success message. If you want branching, remember the HTTP Request action has no built-in success check, you can save the response (e.g., varSendResult), add a Condition that tests varSendResult.ok == true, and on success send a confirmation and End current topic to prevent loops.ACS Email now Generally Available in Azure Government
Microsoft today announced the General Availability (GA) of its Email Communication Service within Azure Government, a milestone that marks a significant advancement in secure and compliant digital communication for U.S. federal, state, and local government agencies. This release also includes FedRAMP High authorization, aligning the service with the most rigorous standards for cloud security and data protection. The Email Communication Service, part of Azure Communication Services (ACS), enables government customers to reliably send high-scale, programmatic email communications -- whether transactional, informational, promotional, or mission-critical -- while ensuring compliance with federal mandates and cybersecurity frameworks. Key Benefits for Government Customers: FedRAMP High Authorization: Provides assurance for handling Controlled Unclassified Information (CUI) and other sensitive government data. Built for Mission-Critical Communication: Enables reliable email delivery for scenarios like citizen engagement, emergency notifications, program updates, and case management. Scalable, Secure, and Compliant: Leverages the resiliency and compliance of Azure Government infrastructure, including FIPS 140-2 encryption, data residency, and advanced DDoS protection. Integration Ready: Seamlessly integrates with existing systems, applications, and services through REST APIs and SDKs, enabling faster modernization of legacy communication workflows. For more information, detailed guidance, or to get started, government customers are encouraged to explore Azure Communication Services documentation for additional support.10 Things You Might Not Know You Could Do with Azure Communication Services
Azure Communication Services gives developers the building blocks for voice, video, chat, SMS, and more. But the real magic happens when you start combining those capabilities with other Azure services to solve real-world problems. This blog isn’t a feature list or a product pitch. It’s a collection of creative, practical scenarios that show what’s possible with Azure Communication Services today. Each one is based on real questions, real demos, and real developer experiences. Some are simple. Some are surprisingly powerful. All of them are designed to spark ideas. We’ve included links to sample code, documentation, and visuals to help you dive deeper. And we’ll keep this post updated as new scenarios emerge, so if you’ve built something cool, let us know! Build a Voice Assistant That Understands Users—and Follows Through 🔎 Quick Look What it does: Create a voice-first assistant that can understand, respond, and follow up using natural language. Why it matters: Offers a more intelligent, flexible alternative to traditional IVRs. What you'll need: Azure Communication Services for voice, Azure OpenAI, and backend logic to handle actions. Most voice agents are limited to scripted menus or keyword matching. But with Azure Communication Services and Azure OpenAI, you can build a voice experience that actually understands what users are saying and responds with meaningful action. In this demo, a user calls a virtual assistant looking for dinner inspiration. Instead of navigating a rigid menu, they just talk naturally. The assistant interprets the request, asks follow-up questions, and sends a personalized recipe link via SMS—all powered by Azure Communication Services for both the voice and messaging workflows. This kind of voice-first interaction is ideal for customer support, concierge services, or any scenario where users want to speak naturally and get something done. Watch the video below to see the full experience in action or explore the demo yourself here. Send Responsive Messages in Real-Time 🔎 Quick Look What it does: Trigger personalized messages based on real-time user behavior (like missed appointments or failed logins). Why it matters: Helps you move beyond static reminders to more timely, relevant communication. What you’ll need: Azure Communication Services, Azure Event Grid, Azure OpenAI, and an event source like a Logic App or backend service. Most messaging systems are built around schedules: send a reminder at 9 AM, a follow-up two days later, and so on. But what if your messages could respond to what your users are doing right now? With Azure Communication Services, you can build event-driven workflows that trigger messages based on real-time behavior. A customer misses an appointment. A user completes a transaction. A login attempt fails. Using Azure Event Grid, you can detect these events, generate a tailored message with Azure OpenAI, and send it instantly via SMS, email, or WhatsApp using Azure Communication Servies. This approach helps teams move beyond static, one-size-fits-all messaging. It enables timely, relevant communication that’s easier to maintain and scale - without manually scripting every variation. Learn more and get started: Azure Communication Services as an Event Grid source Handle SMS events with Event Grid Push notifications overview Use Event Grid to send calling push notifications Let Users Schedule Appointments by Text – In Their Own Words 🔎 Quick Look What it does: Enable natural language scheduling over SMS. No apps, menus, or portals required. Why it matters: Makes scheduling faster and more user-friendly, especially for service-based businesses. What you’ll need: Azure Communication Services for SMS, Azure OpenAI to interpret intent, and a backend or Logic App to manage availability and confirmations. Coordinating appointments over email or phone is slow and manual. Even traditional SMS-based schedulers often rely on rigid decision trees that break when users type something unexpected. This demo takes a smarter approach. By combining Azure Communication Services with Azure OpenAI, it lets users book, confirm, or reschedule appointments through natural, conversational SMS - no app, no portal, no menus. Just text like you normally would: “Hey, can I move my appointment to next Tuesday?” “Do you have anything earlier in the day?” Behind the scenes, Azure Communication Services handles the messaging layer, while OpenAI interprets the user’s intent and routes it to backend logic that manages availability and confirmations. It’s a lightweight, flexible solution that’s ideal for clinics, service providers, or any business that wants to streamline scheduling—without sacrificing user experience. Try the SMS scheduling demo. Everything you need to get started is in the README. Reach Customers on WhatsApp – Right Alongside SMS & Email 🔎 Quick Look What it does: Send messages across WhatsApp, SMS, and email from a single workflow. Why it matters: Increases engagement by meeting users where they are. What you’ll need: Azure Communication Services with Advanced Messaging SDK, verified sender setup for each channel Your customers are already on WhatsApp. Now your app can be too, without rearchitecting your entire messaging stack. Azure Communication Services lets you send and receive WhatsApp messages using the same platform you already use for SMS, email, and chat. That means you can reuse your existing workflows, backend logic, and delivery infrastructure - just with a new channel that meets your users where they are. Whether it’s appointment reminders, shipping updates, or live customer support, WhatsApp becomes just another part of your communication toolkit. You can trigger messages using Azure Event Grid, automate replies with Azure Bot Framework, and manage everything through the Advanced Messaging SDK. Want to see it in action? This quickstart guide walks you through registering your WhatsApp Business Account, connecting it to Azure Communication Services, and sending both text and media messages. > Channels selected from the blade menu. Learn more: Overview of Advanced Messaging for WhatsApp Send text and media WhatsApp messages (Quickstart) Publish an agent to WhatsApp using Copilot Studio Let Customers Join a Teams Meeting- Without a Teams Account 🔎 Quick Look What it does: Embed a browser-based Teams meeting experience into your app or site. Why it matters: Makes it easy for customers to join secure meetings without downloading Teams or signing in. What you’ll need: Azure Communication Services with Teams interop, a Teams meeting link, and a web app or portal. Not every customer wants to download an app or create a Microsoft account just to join a meeting. With Azure Communication Services, you can embed a fully branded, browser-based meeting experience into your app or website that connects directly to a Microsoft Teams meeting - no Teams account required. This is especially useful for industries like healthcare, legal, or financial services, where external participants need to join secure consultations or appointments without friction. You control the UI, the branding, and the flow, while Azure Communication Services handles the real-time voice and video connection to Teams. You can see how this works in the interop-quickstart demo, which shows how to create a Teams meeting, generate a join link, and embed the experience in a custom app. Handle Teams Calls Inside Your CRM—No App Switch Required 🔎 Quick Look What it does: Let agents make and receive Teams calls directly inside Dynamics 365 or a custom contact center UI. Why it matters: Reduces context switching and improves agent efficiency. What you’ll need: Teams Phone Extensibility, Azure Communication Services Call Automation, Dynamics 365 or another CCaaS. Most contact center agents juggle multiple tools - CRM, phone, notes, AI assistants - just to handle a single call. But what if they could do it all in one place? With Teams Phone Extensibility, powered by Azure Communication Services, agents can make and receive Teams calls directly inside Dynamics 365 or any custom contact center app. No need to open the Teams client. Here’s what’s possible: Answer calls in a custom agent desktop, routed through Teams Phone. Trigger AI workflows mid-call—like summarizing the conversation with Azure OpenAI or escalating to a supervisor. Initiate outbound calls from bots or workflows using ACS’s Call Automation APIs. Record and analyze calls with full control over logic and storage. It’s a surprising way to bring AI, voice, and CRM together, without rebuilding your contact center from scratch. Embed Secure Video Visits to Your Healthcare App–Fast 🔎 Quick Look What it does: Add HIPAA-compliant video calling with identity integration. Why it matters: Enables secure, branded telehealth or consultation experiences. What you’ll need: Azure Communication Services for video, Azure AD B2C, and a secure frontend. Telehealth is here to stay. But building a secure, compliant video experience from scratch can be a heavy lift. Azure Communication Services makes it easier. With built-in support for HIPAA, GDPR, and SOC 2, encrypted media transport, and identity integration via Azure AD B2C, Azure Communication Services lets you embed video calling directly into your app—without compromising on privacy or user experience. The Sample Builder shows how to combine video, chat, and SMS into a seamless patient-provider experience. It’s ready to deploy, customize, and scale. Learn more: Azure Communication Services HIPAA compliance overview Quickstart - Add video calling to your app - An Azure Communication Services quickstart | Microsoft Learn Combine AI and Human Support in a Single Chat Experience 🔎 Quick Look What it does: Start with an AI assistant and escalate to a human agent with full context. Why it matters: Scales support while preserving the human touch when needed. What you’ll need: Azure Communication Services for chat, Azure OpenAI, bot framework, and agent handoff logic. Most customer service chats start with automation—but they shouldn’t get stuck there. With Azure Communication Services, you can build a chat experience that begins with an AI assistant and hands off to a human agent when it makes sense. This demo shows how it works: a customer starts chatting through a web widget. An AI assistant, powered by Azure OpenAI, handles common questions and tasks. If the conversation gets complex or the user asks for help, the chat transitions smoothly to a live agent—no context lost. Agents can even generate AI-powered summaries to get up to speed quickly before jumping in. It’s a practical way to scale support without sacrificing the human touch. . On the left, a dialog box displays the user experience, while on the right, the agent's view shows the conversation summary and includes a button to take over the automated chat. Build a voice-first, AI virtual assistant in Under a Week 🔎 Quick Look What it does: Launch a branded voice assistant quickly using Zammo.ai and ACS. Why it matters: Speeds up deployment of voice experiences across channels. What you’ll need: Zammo.ai, Azure Communication Services for voice, and a publishing channel (e.g., Alexa, web). When Montgomery County, Maryland needed to support COVID-19 vaccine registration, they didn’t have months to build a solution. In just six business days, they launched a voice-first virtual assistant that handled 100% of inbound calls: automating appointment scheduling, supporting English and Spanish, and deflecting thousands of calls from live agents. They partnered with Zammo.ai to build the experience, all without writing custom code. Where Azure Communication Services fits in: Azure Communication Services powered the voice infrastructure, enabling a scalable, multilingual experience that saved time, reduced hold times by 90%, and helped the county serve residents more equitably. Don’t take our word for it, learn more about how it came together here. Know What You’ll Pay, Before You Ship 🔎 Quick Look What it does: Estimate costs and usage before you build. Why it matters: Helps you plan and budget more effectively. What you’ll need: Azure Communication Services pricing calculator, usage estimator, and billing dashboard. One of the first questions developers ask when building with Azure Communication Services is: “How much is this going to cost me?” And the answer is: it depends, but in a good way. Azure Communication Services uses a flexible, pay-as-you-go pricing model. You’re only billed for what you use - no upfront commitments, no recurring subscription fees. That makes it easy to prototype, test, and scale without overcommitting. Each communication channel (SMS, email, voice/video calling, and WhatsApp) has its own pricing structure based on usage volume, geography, and delivery method. For example: SMS to U.S. numbers is priced differently than international messages. Voice calls vary depending on whether you’re using VoIP, PSTN, or Teams interop. WhatsApp pricing may involve partner-based rates through Messaging Connect. There are a few exceptions to the pay-as-you-go model. For instance, leasing a dedicated phone number incurs a monthly fee. But overall, the model is transparent and developer-friendly. To help you estimate costs and plan ahead, here are some helpful resources: Azure portal pricing calculator: Azure Communication Services pricing | Microsoft Azure Azure Communication Services Pricing Overview: Azure Communication Services pricing | Microsoft Azure What Will You Build Next? Azure Communication Services gives you the flexibility to build the communication experience your users actually want - whether that’s a quick SMS, a secure video call, or a voice assistant that gets things done. And when you combine ACS with other Azure services like OpenAI, Event Grid, and Bot Framework, the possibilities expand even further. We’ll keep this post updated as new scenarios and demos emerge. If you’ve built something interesting with ACS, we’d love to hear about it—and maybe even feature it in a future post. Check out our official documentation to get started today!Build an AI Email Responder with OpenAI and Azure Communication Services
Customer support is vital but often bogged down by repetitive queries like password resets, billing issues, and basic troubleshooting. Automating these common responses frees up valuable time, allowing your team to focus on more complex tasks. In this tutorial, we'll build an AI-Powered Email Responder that leverages OpenAI’s GPT models to craft intelligent replies and Azure Communication Services to handle email delivery seamlessly. How It Works Here's how our AI-powered responder works: Input Query: Enter the recipient’s email, subject, and customer query. Generate Response: GPT quickly drafts a detailed reply. Review & Edit: You can adjust the response as needed. Send Email: Azure Communication Services dispatches the message instantly. Prefer a walkthrough? Watch the full video demo to see the app in action with live code explanations. Tools We’re Using This project is ideal for developers, solution architects, or anyone exploring practical AI integrations with minimal setup. We will utilize the following services: Azure OpenAI Service: Provides state-of-the-art GPT models capable of intelligent text generation and conversational responses. Azure Communication Services: Delivers reliable, scalable, and secure email capabilities suitable for enterprise-level applications. Azure Environment Setup Follow these steps to configure your Azure environment: 1. Azure OpenAI Service Go to Azure Portal and create an "Azure OpenAI" resource (see how: docs). In Azure AI Studio, deploy your selected GPT model (such as GPT-4o). Retrieve your API Key, Endpoint URL, and Deployment ID. 2. Azure Communication Services In Azure Portal, create "Communication Services" and "Email Communication Services" resources (see how: docs or video). Provision a free Azure subdomain and obtain your verified sender email address. Copy your Connection String from your Communication Services resource for later use. Coding the Application You can view the full project on GitHub to access the complete, ready-to-use code, and skip the manual steps — or follow the highlights below to understand how everything works. Create two files; an .env file and app.py file in your preferred IDE. 3. Environment Variables (.env file): Replace OpenAI and Azure Communication Services configurations with your credentials obtained in the above steps. Store sensitive credentials securely: # OpenAI Configuration OPENAI_API_KEY=your_azure_openai_key OPENAI_ENDPOINT=https://your-openai-resource.openai.azure.com/ # Azure Communication Services Configuration ACS_CONNECTION_STRING=endpoint=https://your-resource.communication.azure.com/;accesskey=your_key ACS_SENDER_EMAIL=DoNotReply@your-resource.communication.azure.com RECIPIENT_EMAIL=someone@example.com 4. Python Application (app.py): The app.py file provided uses Streamlit to create an intuitive and interactive user interface. Users input recipient details and customer queries directly through the web-based form. Behind the scenes, the app makes API calls to Azure OpenAI, sending the customer's query to generate a contextually relevant reply using the GPT model. It also leverages Azure Communication Services API to dispatch the finalized email instantly to the specified recipient. You can access the full detailed code and in-depth explanations in the GitHub repository. Below is the breakdown of the app’s core functionality, highlighting how each user action maps to backend logic for generating, editing, and sending AI-crafted responses. 🧠 Generate Response We send the user’s query to Azure OpenAI with a prompt like: "You are a support agent. Respond only with the email body. Be concise, helpful, and use numbered steps if needed." 💬 Preview and Edit The AI-generated response is displayed in a text area, allowing human review and manual editing. ✉️ Send via Azure Communication Services Email We use the EmailClient from the azure.communication.email package to send the final message. Ideas for Extension The app provides a strong foundation for exploring AI automation using large language models and email APIs, and it can easily be extended with additional capabilities such as: RAG (Retrieval-Augmented Generation): Integrate with internal knowledge bases for more tailored answers. Ticketing Integration: Connect directly with your existing support or ticketing system to fetch queries and update responses automatically. Role-based Prompts: Fine-tune the AI’s tone based on use case (e.g., sales vs. tech support). Analytics & Logs: Track usage and monitor AI-generated replies for compliance and quality. Final Thoughts This project shows how easy it is to bring real AI capabilities into customer workflows using Azure. You get powerful language understanding via OpenAI and production-grade email delivery through Azure Communication Services—all in a minimal Python app. Whether you're prototyping a support bot or building internal tools, this project offers a practical entry point into real-world AI automation. Get started by exploring the GitHub repository.Moving Email Traffic from Exchange to Azure Communication Services
This article describes the important steps and considerations for transitioning from Exchange Online or other on-premises solutions to the Azure Communication Services email platform. It is also relevant for customers migrating from other mail solutions, whether on-premises or hybrid, to Azure Communication Services.Getting Started with Email in Azure Communication Services
If you’ve already dipped your toes into email with Azure Communication Services, you know it’s easy to get started. But what happens after that first email? This blog is your guide to going from “I sent an email” to “I built something useful.” We’ve put together a four-part video series that walks through everything from sending your first message in the portal to tracking engagement in real time and triggering workflows when someone clicks a link. Whether you’re building a notification system, a marketing campaign, or just exploring what’s possible, this series helps you get up and running—and doing more—with email from Azure Communication Services. Video 1: Send your first email from the Azure Portal In this first video, we demonstrate how to send an email directly from the Azure portal—no code required. Here’s what we cover: Create an Email Communication resource Choose between a free Azure-managed subdomain or a custom domain Verify your domain (including DNS setup for custom domains) Connect your domain to your Communication Services resource Add custom “From” addresses and suppression lists Send your first email directly from the portal (with kittens, if you’d like) If you’re just exploring or want to test things quickly, the Azure-managed subdomain is the fastest way to get started. But if you want more control—like sending from your own domain or enabling user engagement tracking—you want to go the custom domain route. Once your domain is verified and connected, you can send emails right from the portal Try Email feature. Just fill out the form, choose your sender, add a recipient, and hit send. The portal even generates sample code in multiple languages based on your selections. Video 2: Send email using the JavaScript quickstart SDK Once you send your first email from the portal, the next step is sending email programmatically. This video walks through how to do that using the official JavaScript quickstart from the Azure Communication Services GitHub repo. Here’s what you’ll see: Cloning the quickstart repo and navigating to the send-email folder Opening the send-email.js file and updating three key values: Your Azure Communication Services connection string Your verified sender email address The recipient email address Running the script with just two commands: The script sends a simple HTML email, and you see it land in your inbox in real time. It’s a great starting point for integrating email into your own apps or workflows. Video 3: Analyzing email logs in the Azure Portal Once you can send emails, the next question is: how are they performing? This video proves a step-by-step guide to set up logging and telemetry for your Azure Communication Services email resource—so you can track delivery, failures, engagement, and more. It’s all done through the Azure portal, and once it’s configured, you’ll have access to both high-level dashboards and detailed log queries. Here’s what’s covered: ✅ Prerequisites Before you can start analyzing logs, you’ll need: An active email resource that’s already sending messages A Log Analytics workspace (this is where your logs live) 🛠️ Step 1: Create a Log Analytics Workspace This is your central hub for telemetry data. You’ll create it like any other Azure resource—just give it a name, choose your subscription and resource group, and hit Create. 🛠️ Step 2: Configure Diagnostic Settings Next, connect your Communication Services resource to the workspace: Go to your Communication Services resource Under Monitoring, select Diagnostic settings Add a new setting and select the email-related log categories: Send mail logs Delivery status updates User engagement logs Point them to your Log Analytics workspace and save Once that’s done, your logs start flowing automatically. 📊 Step 3: Explore Built-in Insights With logging enabled, you can use the Insights tab in the portal to get a high-level overview of: Emails delivered, failed, or suppressed Engagement metrics like opens and clicks Performance summaries and error breakdowns It’s a great way to get a quick pulse on how your email system is doing. 🔍 Step 4: Run Custom Queries with KQL For deeper analysis, head to the Logs section and use the built-in query hub. The video covers several examples using Kusto Query Language (KQL), including how to: Find bounced or suppressed emails Filter by delivery status or failure reason Track engagement by link clicks or views Drill into specific emails using correlation IDs You can even export results to CSV, Power BI, or Excel—or share queries with teammates. Whether you’re debugging delivery issues or analyzing campaign performance, this setup gives you the visibility you need. Video 4: Real-Time email event tracking with Azure Event Grid Want to know the moment someone opens your email? Or clicks a link in your campaign? This video shows how to set up real-time email event tracking using Azure Event Grid and a lightweight web app called the Azure Event Grid Viewer. Here’s what’s covered: 🧱 Step 1: Deploy the Azure Event Grid Viewer The Event Grid Viewer is a simple web app that listens for incoming events and displays them in real time. You can deploy it in just a few clicks using a prebuilt GitHub repo and the Deploy to Azure button. Once deployed, you get a live URL that acts as a webhook endpoint—ready to receive email events. 🔗 Step 2: Create an Event Subscription Back in your Azure Communication Services resource: Go to the Events tab Click + Event Subscription Choose the event types you want to track (such as Email Delivery Report or Email Engagement Tracking) Set the endpoint type to Webhook Paste in the Event Grid Viewer URL (ending in /api/updates) Now, every time one of those events occurs, it is sent to your viewer in real time. 📬 Step 3: Send Emails and Watch Events Roll In Once your subscription is active, try sending a few emails from the portal. You see events appear in the viewer as they happen: Delivery confirmations Open events Link clicks (with details on which link was clicked) It’s a great way to test your setup and see how email events flow through the system. 🎯 Bonus: Filter Events by Type Don’t want to see every single event? You can filter them. For example, only show events where the engagement type is click. Just go back to your event subscription, add a filter on data.engagementType, and set it to click. You can even filter by correlation ID to track specific campaigns or recipients. ⚙️ Automate Anything The Event Grid Viewer is just one example. You can use these events to trigger: Azure Functions Power Automate flows Notifications in Microsoft Teams Custom dashboards Anything else that fits your workflow If it can react to a webhook, it can react to an email event. Wrapping Up That’s the full tour—from sending your first email in the portal to tracking engagement in real time. Here’s a quick recap of what we covered: Send your first email using the Azure portal Send programmatically using the JavaScript quickstart Analyze logs and telemetry with Log Analytics and KQL Track events in real time with Azure Event Grid Whether you’re building a notification system, a marketing campaign, or just exploring what’s possible, Azure Communication Services gives you the tools to do it—fast. Check out any of the videos or read our documentation to learn more about email in Azure Communication Services.2.2KViews0likes0CommentsGet more from your Email logs with Azure Communication Services
If you're sending emails with Azure Communication Services, you already know how powerful the platform is for delivering messages at scale. But what happens after you hit send? In our latest video, we walk through how to unlock insights from your email activity using logs and telemetry in the Azure portal. Whether you're tracking delivery success, debugging failures, or analyzing engagement, this guide helps you get started with the tools that matter. Why email telemetry matters Understanding how your emails perform is critical—especially when you're running campaigns, monitoring sender reputation, or troubleshooting delivery issues. With Azure Communication Services, you can tap into Log Analytics for real-time visibility into: Delivery and failure rates Suppression reasons User engagement (opens, clicks) Correlation IDs for tracing specific messages While this video focuses on email, the same logging and telemetry setup applies to other Azure Communication Services like SMS, voice, and chat—so once you’ve got the hang of it, you can reuse the same approach across channels. Step 1: Set up your log analytics workspace Before you can start querying logs, you’ll need a place to store them. In the Azure portal: Create a Log Analytics workspace. Choose your subscription and resource group. Name your workspace and click Review + Create. This workspace acts as the central hub for all your telemetry data. A GIF of a user creating a Log Analytics Workspace in the Azure Portal. Step 2: Configure diagnostic settings Next, connect your Azure Communication Services resource to the workspace: Navigate to your Communication Services resource. Under Monitoring, select Diagnostic settings. Add a new setting and choose the email-related log categories: Send mail logs Delivery status updates User engagement logs Point them to your Log Analytics workspace and save. Now your logs will start to flow into the workspace automatically. Step 3: Explore insights in the portal With logs enabled, you can start exploring your data: Use the Insights tab for a high-level overview of delivery and engagement. Filter by sender address or time range. View metrics like delivery success, failures, and clicks. This is great for quick checks—but for deeper analysis, you can write custom queries. delivered,failed, and suppressed. Step 4: Run custom queries with KQL In the Logs section of your workspace, use Kusto Query Language (KQL) to dig into the details: Find suppressed or bounced emails Trace delivery failures with correlation IDs Identify which links were clicked in a campaign Export results to CSV, Power BI, or Excel The video walks through several examples, including how to change sample queries and build your own. . It shows a sample query looking for logs that have a specific RecipientId and UserAgent Bonus: Reuse this setup across Azure Communication Services channels While this walkthrough focuses on email, the same telemetry setup works for other Azure Communication Services channels. Whether you're building with SMS, voice, or chat, you can use Log Analytics to monitor performance, debug issues, and improve user experience. Watch the full walkthrough Want to see it in action? Watch the preceding full video above for a step-by-step demo of everything covered here. And if you’re already using logs in creative ways—or have questions about telemetry for other Azure Communication Services features—drop us a comment. We’d love to hear how you use it!Catch Up on the Azure Communication Services Fundamentals Series
This April, we partnered with Microsoft Reactor to deliver a four-part webcast series designed to help developers get started with Azure Communication Services. Each 20-minute episode focused on a different communication channel—giving developers the tools to build real-time, scalable, and secure communication experiences into their apps. If you missed the live sessions, don’t worry, they’re all available on-demand! Check out the full playlist here or see the following individual videos. Here’s a quick look at what each episode covered: Episode 1: WhatsApp Messaging We kicked off the series by showing how to integrate WhatsApp Business messaging into your Azure Communication Services applications. We walked through everything from sandbox testing to connecting a verified WhatsApp Business Account and sending messages with SDKs. For a deeper dive on what was covered, read about it here from Gloria herself! Episode 2: Exploring SMS Capabilities This session described how to provision a phone number, verify the number, and how to send/receive SMS messages. We also covered how to handle incoming messages with event grid listeners and code-based handlers. For a deeper dive on exactly what was covered, read about it here from Pranita herself! Episode 3: Maximizing Email Insights with Logs and Events Next, we dove into email analytics and telemetry setting up logs and events, understanding sender reputation, and using sample queries to gain insights. From basic sample queries to advanced Kusto Query Language (KQL) queries, this session covered everything you need to run a successful email marketing campaign with Azure Communication Services. Episode 4: Add Audio & Video Calling We wrapped the season with a demo-rich session on embedding calling features into your communications application using Azure Communication Services. Highlights included new AI-powered features like captions, noise suppression, grid views, and real-time translation. What’s Next? We’re already planning Season 2, launching later this year, with a focus on Azure Communication Services + AI. Expect deeper dives, new use cases, and more interactive demos. Want to stay in the loop? Sign up for season two updates to be the first to know when the new season launches and tell us what you want to learn about!The U.S. Small Business Administration integrates Azure Communication Services, sending critical information to millions of Americans more quickly
At the U.S. Small Business Administration (SBA), we faced significant challenges with our existing mass communications solution. Our organization is the only cabinet-level federal agency fully dedicated to small business counseling, capital, and contracting expertise. We also offer disaster assistance for homeowners, renters, nonprofits, and businesses of all sizes affected by disaster recovery-related assistance, so we needed a scalable platform that could efficiently send critical information to millions of Americans, especially during times of disaster recovery and urgent business support. We also required a platform that could do this quickly and was cost-effective, while also allowing us to further centralize operational capabilities within Dynamics 365, which would help teams internally. Centralizing capabilities means finding ways to consolidate information in one system, creating a single-pane-of-glass experience, so people here don't have to leave Dynamics 365 and can have everything they need without jumping from one system to another to get their work done. How the U.S. SBA implemented Azure Communication Services into their existing systems After evaluating various options, we decided to implement Microsoft Azure Communication Services for email mass communications. It was an easy decision for us because Azure Communication Services meets our needs in the following ways: Speed: We can send out one million emails in under 20 minutes. Cost: Azure Comms is significantly more affordable than competing solutions. Integration: Azure Comms seamlessly integrates into Dynamics 365 as a complementary feature. How SBA implemented Microsoft Azure Communication Services into Dynamics 365 To implement Azure Communication Services, we worked closely with the product group to integrate it into Dynamics 365, which we use to handle large campaigns. Dynamics 365 also centralizes knowledge base reference materials for agents and customer service representatives. With the Azure Comms integration into Dynamics 365, we focused on refining the system’s outbound email velocity over the course of several months. Within 30 days, we successfully transitioned over 50 campaign teams to Dynamics 365 while collaborating with Microsoft to integrate Azure Communications Services into the platform. Some challenges arose, but we collaborated with the product group to incorporate improvements and refine its capabilities over time. We are also leveraging AI for sentiment analysis and process automation to meet various internal and external requirements. We recently implemented Copilot in Dynamics 365, for example, which is safe, secure, and free within our D365 licensing. We've done so much work in bringing people’s knowledge base materials into the platform that employees have been able to immediately see the benefits of using Copilot: Ask feature on Copilot makes it easy to submit a prompt and get help with a specific task. Automatic summarization of a specific case, which helps our agents and service representatives get up to speed immediately and be more responsive. Email drafting is now much easier and faster with Copilot because it allows anyone to write an email from scratch in a fraction of the time. Language translation via Copilot allows us to toggle on the fly between different languages and translate a different language into English--and vice versa. A crucial skill set in our organization is language proficiency, particularly in Spanish. Historically, we've had to either hire representatives with Spanish language skills or rely on contracted services to meet this need. If we receive an email in Spanish, an English-speaking team member can translate it into English and respond in Spanish, helping to reduce our reliance on individuals with specialized language skills. "It’s difficult to predict when we’ll receive an email in a different language. But now, we can translate messages instantly and respond in the sender’s native language—removing barriers and streamlining communication like never before. It’s an incredible advantage—one that doesn’t get nearly enough attention. Microsoft Dynamics 365 Copilot’s translation capability isn’t just convenient; it’s a game-changer."" The results of implementing ACS into Dynamics 365 There are many benefits to using Azure Communication Services and integrating it into Dynamics 365. ACS has empowered our campaign teams to address time-sensitive requests efficiently, enabling us to send out critical communications within minutes or a few hours—rather than days. We have sent over 300 million emails through Azure Comms since its implementation in March 2023. Looking ahead We plan to extend the functionality of Azure Communication Services to support internal-facing communications in the near future, including: Exploring additional communication methods (e.g., SMS, phone) to provide omnichannel, preference-oriented campaigns. Leveraging virtual appointment options to enhance service delivery. Developing more refined metrics, such as open and click rates, for better insights into the impact of our mass communication efforts. Azure Communication Services has transformed our ability to respond promptly to diverse mass communication needs, even with minimal notice. Our journey with Azure Comms showcases the power of cloud-based communication solutions in enhancing organizational efficiency and effectiveness. The more people grasp the features of Dynamics 365 and its ease of integration with systems like Azure Communication Services, the better they understand its quantifiable benefits and true value. A common misconception is that adopting Dynamics 365 means being restricted to Microsoft-only systems—but that’s not the case. You can integrate a different phone system, leverage various databases, and customize the platform to suit your needs. Whether it's delivering crucial information to frontline workers or enabling responsive services, Dynamics 365 is far more than just a customer relationship management (CRM) system—it's a versatile, customizable solution designed to support a wide range of business requirements and operational needs.Azure Communication Services technical documentation table of contents update
Technical documentation is like a map for using a platform—whether you're building services, solving problems, or learning new features, great documentation shows you the way to the solution you need. But what good is a map if it’s hard to read or confusing to follow? That’s why easy-to-navigate documentation is so important. It saves time, reduces frustration, and helps users focus on what they want to achieve. Azure Communication Services is a powerful platform, and powerful platforms require great documentation for both new and experienced developers. Our customers tell us consistently that our docs are a crucial part of their experience of using our platform. Some studies suggest that documentation and samples are the most important elements of a great developer experience. In this update, we’re excited to share how we’ve improved our technical documentation’s navigation to make it quicker and simpler than ever to find the information you need when you need it. Why did we change? In order for our content to be useful to you, it first needs to be findable. When we launched Azure Communication Services, the small number of articles on our site made it easy to navigate and find relevant content. As we’ve grown, though, our content became harder to find for users due to the quantity of articles they need to navigate. To refresh your memory, the table of contents on our docs site used to be structured with these base categories: Overview Quickstart Tutorials Samples Concepts Resources References These directory names describ e the type of content they contain. This structure is a very useful model for products with a clearly-defined set of use cases, where typically a customer’s job-to-be-done is more constrained, but it breaks down when used for complex, powerful platforms that support a broad range of use cases in the way that Azure Communication Services does. We tried a number of small-scale changes to address the problems people were having on our site, such as having certain directories default to open on page load, but as the site grew, we became concerned that our site navigation model was becoming confusing to users and having a negative impact on their experience with our product. We decided to test that hypothesis and consider different structures that might serve our content and our customers better. Our user research team interviewed 18 customers with varying levels of experience on our platform. The research uncovered several problems that customers were having with the way our docs navigation was structured. From confusing folder titles, to related topics being far away from each other in the nav model, to general confusion around what folder titles meant, to problems finding some of the most basic information about using our platform, and a host of other issues, our user research made it clear to us that we had a problem that we needed to fix for our users. What did we change in this release? To help address these issues, we made a few key changes to make our table of contents simpler and easier to navigate. The changes we made were strictly to site navigation, not page content, and they include: We've restructured the root-level navigation to be focused on communication modality and feature type, rather than content type, to better model our customers' jobs-to-be-done. Topics include All supported communication channels Horizontal features that span more than one channel Topics of special interest to our customers, like AI Basic needs, like troubleshooting and support This will allow customers to more easily find the content they need by focusing on the job they need to do, rather than on the content type. We've simplified the overview and fundamentals sections to make the site less overwhelming on first load. We've surfaced features that customers told us were difficult to find, such as UI Library, Teams interop, and Job router. We've organized the content within each directory to roughly follow a beginner->expert path to make content more linear, and to make it easier for a user to find the next step in completing their task. We've removed unnecessary layers in our nav, making content easier to find. We've added a link to pricing information to each primitive to address a common customer complaint, that pricing information is difficult to find and understand. We've combined quickstarts, samples, and tutorials into one directory per primitive, called "Samples and tutorials", to address a customer complaint that our category names were confusing. We added a directory to each primitive for Resources, to keep important information close by. We added root-level directories for Common Scenarios, Troubleshooting, and Help and support. We did a full pass across all TOC entries to ensure correct casing, and edited entries for readability and consistency with page content, as well as for length to adhere to Microsoft guidelines and improve readability. These changes have led us to a structure that we feel less taxing for the reader, especially on first visit, maps more closely to the customer’s mental model of the information by focusing on the job-to-be-done rather than content type, helps lead them through the content from easiest to hardest, helps make it easier for them to find the information they need when they need it, and helps remind them of all the different features we support. Here’s what the table of contents looks like on page load as of Feb 6: These changes are live now. You can see them on the Azure Communication Services Technical documentation site. What’s next: In the coming weeks we will continue to make refinements based on customer feedback and our assessment of usage metrics. Our content team will begin updating article content to improve readability and enhance learning. We will be monitoring our changes and seeking your feedback. How will we monitor the effectiveness of our changes? To track the effectiveness of our changes and to be sure we haven’t regressed, we’ll be tracking a few key metrics Bounce rates: We’ll be on the lookout for an increase in bounce rates, which would indicate that customers are frequently landing on pages that don’t meet their expectations. Page Views: We’ll be tracking the number of page views for our most-visited pages across different features. A decrease in page views for these pages will be an indicator that customers are not able to find pages that had previously been popular. Customer Interviews: We will be reaching out to some of you to get your impressions of the new structure of our content over the coming weeks. Customer Surveys: We've created a survey that you can use to give us your feedback. We'll also be adding this link to select pages to allow you to tell us what you think of our changes while you're using them! So, give our new site navigation a try, and please don’t hesitate to share your feedback either by filling out our survey or by sending an email to acs-docs-feedback@microsoft.com. We look forward to hearing from you! A2.3KViews2likes2Comments