With Teams Interop for Azure Communication Services, developers can finally create native Web and Mobile experiences
It’s a pretty big day for the Teams Developer Platform. It’s come about in a slightly unusual fashion, but one of the key missing pieces of functionality for developers has finally be realised: a first-party way for developers to create their own clients that can interact with Microsoft Teams clients for chat, voice and video.
Older developers will remember the Skype for Business Client SDK and the ability to run in UI-suppressed mode (that I was talking about way back in 2014!). This enabled us to build applications that contained Skype for Business functionality, presented within a 3rd party application. With Microsoft Teams, this has never been possible, until now.
Why do I say it’s come about in an unusual fashion? Well, because it’s arrived courtesy of work done by a completely separate team – the Azure Communication Services team. Under the hood and behind the scenes, of course, it’s all one company and one set of people, but it underlines the point that as a developer you can’t be too blinkered to just your immediate problem domain and space. This interop feature directly impacts Microsoft Teams developers but requires developers to skill-up on a related technology, Azure Communication Services.
What just got announced?
So, why am I so excited? Today, at Microsoft Ignite 2021, Microsoft announced that Azure Communication Services will become generally available this month and that it supports Teams Interop functionality in preview. This will allow for an ACS application to directly join a Microsoft Teams meeting, showing as a guest user. They will benefit from the rich experience Teams has, such as blurred background, but as an ACS application can have a completely customised look and feel. There are React components for WebRTC-based web application, plus native iOS and Android libraries for mobile applications.
This is a good way to understand how Azure Communication Services works with Microsoft Teams. It’s not Teams, but it powers some of the audio/video/chat functionality that Teams has. In Azure Communication Services, Microsoft are opening up their global, powerful communication platform for use by everyone.
For more detail behind Azure Communication Services, I would suggest reading my previous blog posts:Â Azure Communication Services: what it is, how you use it, and why itâs AMAZING! and the more practical, code-heavy demo:Â How to: Create your own Family Video Room using Azure Communication Services without writing any code.
I want to build an Azure Communication Services Teams Interop App. How do I do that?
If you’re familiar with using Azure Communication Services already then you can join any Teams meeting with just the Join URL. You can get this from the meeting details, but it’s also exposed in Microsoft Graph calls to create or get a meeting (see the onlineMeeting resource type and its methods). Once you have that, you can join just like you would join an ACS Group call, just using a special join context of meetingLink:
call = callAgent.join({meetingLink: meetingLinkInput.value}, {}); |
Everything about how the call works stays exactly the same as for a regular ACS call, so your existing code will work just the same. And, in the Teams meeting, the user shows up as a regular guest user (the display name of “ACS User” is the displayName value you provide when you create the CallAgent in ACS)
and in the participant list, just as you’d expect:
I’ll be going into a lot more detail about using this new functionality in Day 8 of the Learn ACS series.
If you’re new to Azure Communication Services…
If you are new to Azure Communication Services; you’re not alone – it’s not even GA yet! Luckily for you, I’m celebrating this news by kicking off a 15+ day series of blog posts, focused on learning Azure Communication Services. It’s totally free and is a mixture of blog posts, code samples for fully-working demos, and videos. Get started on your Azure Communication Services journey today at learnacs.dev.