Ignite 2022: Developer capabilities and tools to drive better, more automated customer experiences
Published Oct 12 2022 09:00 AM 7,469 Views

It’s been a busy and exciting past few months for Azure Communication Services. Since announcing the preview of new REST APIs and SDKs for sending Email at Build, we’ve released a new Power Apps connector for Email in preview, along with end to end Email Analytics through Azure monitoring, and support for Email on Java and Python. We’ve also launched new capabilities and tools for developers, including:


Support for Microsoft Teams users in custom applications

UI Library for iOS and Android

File and media sharing for interactive communication

Raw media access for Voice & Video Calling


Amplify the Customer Experience


Today at Ignite, Azure Communication Services announced the upcoming preview of call automation capabilities to build server-based calling workflows and simplify the delivery of personalized customer interactions. (UPDATE as of 11/10/22: Call automation from Azure Communication Services is now in public preview, see documentation to get started here.)


We understand that customers want to engage with businesses on their preferred channel of communication - enabled by voice, video, chat, and SMS – at their preferred time and convenience. Over the last couple of years businesses have been working hard to manage the increasing volume of their customer demand remotely, often requiring specialized telephony skills and systems. Businesses need to reduce context switching overhead for their employees with optimal business processes, and ideally with deeply integrated communication features in their existing tools.


Now with the upcoming release of call automation, businesses can build custom calling workflows within their applications using developer libraries to optimize their business processes and boost customer satisfaction. REST APIs provide a programmable interface that abstracts the complexity of telephony systems. Developers can use these APIs to program calls for transactional workflows like proactively calling for school closures, outage alerts and web-based click-to-call experiences or for complex interactive workflows such as resolving flight changes and orchestrating conversational AI call flows.


Zammo is thrilled to use call automation capabilities from Azure Communication Services in our conversational AI platform. We are better equipped to easily create voice-enabled workflows that integrate with our customers' existing contact centers. Paired with call recording and flexible telephony services, like direct routing and PSTN, we can deliver end-to-end customer experience solutions through Azure.” - Guy Tonye, Chief Engineer at Zammo.AI


Build custom calling workflows


With call automation capabilities from Azure Communication Services, developers can now add telephony (PSTN and direct routing) or web based (WebRTC) calling workflows into their applications. Our libraries, initially available in C# and Java, enable server applications to orchestrate calls using pre-call and mid-call actions. This is important because each action results in a corresponding event that can be used to trigger custom business logic to adapt to customers’ needs in real time. The ability to embed these types of calling workflows and commands into applications supports several business needs, such as:


Augmenting customer service. Build voice-based self-service application workflows to deflect load with prompts and help triage low-complexity high-value tasks for reduced time to customer resolution and boost agent productivity.


Adding Click-to-Call for Web or Mobile. Developers can embed WebRTC-based calling experiences directly into their applications with just a few lines of code, leveraging context from the customers journey on the application and reducing their overall telephony expense and complexity.


Programming simple voice workflows. Support various service providers with automated call-backs, number masking and redirect workflows to appropriately route callers along an interaction journey, using different numbers or endpoints. Derive insights and track success by analyzing call recordings, rich logs and telemetry.


Setting up voice reminders and alerts. Provide a superior customer experience with voice reminders or alerts that notify consumers about critical events and information such as utility outages, school closures, or reminders for upcoming appointments.




To see how this works, the below architecture shows a typical call automation workflow. An incoming call is received, handled with Azure Communication Services in a Contoso app, and routed to various endpoints using call automation APIs. Developers can also add call recording to these workflows to analyze interactions for better customer satisfaction.




Anywhere365 delivers cloud-based communication tools that sit exclusively on top of Microsoft UC solutions. Instead of just taking Microsoft Teams to the contact center, we take omnichannel communication capabilities to every Teams-powered enterprise user. With Azure Communication Services, we can accelerate the delivery of new features into our Dialogue Cloud platforms even further. The programmability of call automation is very exciting and is a game changer in building new calling endpoints into our dialogue management platform. And the market reach will be phenomenal.” - Ruud Lendfers, Product Director at Anywhere365


Maximize control with minimal APIs


We are excited about the upcoming preview of call automation capabilities for a couple of reasons. First, our primary focus has been to ensure that we provide a great developer experience through an event driven, action-based programming model. Second, developers can orchestrate complex calling workflows to make outbound, take inbound or modify existing calls that adapt to business logic in real-time. Lastly, our call automation APIs provide programmability for Azure Communication Services’ telephony services like direct routing and PSTN, or programming workflows for embedded WebRTC calling experiences that eliminate telephony complexity and overhead.


For example, with the IncomingCall event, developers can choose to answer or reject a call or redirect to one or more endpoints. The answer action takes a standard web hook callback to receive call state change events and responses to mid-call actions. In addition, CreateCall action can be used to place outbound calls to phone numbers and to other communication users. See below:





//answer an incoming call
await callAutomationClient.AnswerCallAsync(incomingCallContext, new Uri("https://myserver.com/api/calls"));

//reject call
await callAutomationClient.RejectCallAsync(incomingCallContext, CallRejectReason.Busy);

//redirect call
await callAutomationClient.RedirectCallAsync(incomingCall.IncomingCallContext, CommunicationIdentifier.FromRawId("8:acs:[resourceId]_[id]"));

//make an outbound call
await callAutomationClient.CreateCallAsync(new CreateCallOptions(callSource, target, callbackUri));





During a call, developers can execute actions like playing a pre-recorded message, recording the call, recognizing DTMF input, or route the caller to another communication user, such as a customer service agent. See below:





//add participants to a call
var usersToAdd = new List<CommunicationIdentifier>() { new CommunicationUserIdentifier("id1"), new CommunicationUserIdentifier("id2") };
await connection.AddParticipantsAsync(new AddParticipantsOptions(usersToAdd));

//play a prompt and recognize DTMF input allowing interruption
var recognizeOptions = new CallMediaRecognizeDtmfOptions(new PhoneNumberIdentifier(configuration["CustomerPhoneNumber"]), 1)
    InitialSilenceTimeout = TimeSpan.FromSeconds(10),
    InterruptPrompt = true,
    InterruptCallMediaOperation = true,
    Prompt = new FileSource(welcomeMessage),
    OperationContext = "YourContext"
await callAutomationClient

//start call recording
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<ServerCallId>")) 
    RecordingStateCallbackEndpoint = new Uri("<CallbackUri>");
Response<RecordingStateResult> response = await callAutomationClient.getCallRecording()

//pause call recording
var pauseRecording = await callAutomationClient.GetCallRecording ().PauseRecordingAsync(recording.Value.RecordingId);

//resume call recording
var resumeRecording = await callAutomationClient.GetCallRecording().ResumeRecordingAsync(recording.Value.RecordingId);

//stop call recording
var stopRecording = await callAutomationClient.GetCallRecording().StopRecordingAsync(recording.Value.RecordingId);





To see another example like the one above, check out our on-demand session (OD47): “Build custom calling workflows for delightful customer experiences with Azure Communication... at Ignite where we walk through how to notify a customer about an upcoming flight change.


Next steps


Be on the lookout for our quick starts, documentation, and samples for this upcoming preview next month. (UPDATE as of 11/10/22: Call automation from Azure Communication Services is now in public preview, see documentation to get started here.)


We have additional Azure Communication Services features in the works. To get access, please visit aka.ms/ACS-EarlyAdopter to join our highly engaged technology adoption program (TAP) community of developers and product managers.


To stay engaged with our Azure Communication Services team, visit our discussion space on the Microsoft tech community


And lastly, don't miss our additional developer sessions and content at Ignite, including:

Version history
Last update:
‎Nov 10 2022 02:19 PM
Updated by: