Featured image of post Teams Shared Voicemail for Basic Call Flows

Teams Shared Voicemail for Basic Call Flows

This blog post is about optimized version of my Power Automate flow to handle Teams shared voicemail more elegantly. It's a better fit for more basic call flows and smaller Teams which don't need an on-call call queue.

Not too long ago I wrote this blog post about the ultimate Teams shared voicemail solution. This solution assumed a full blown call flow with on-call coverage and an advanced notification mechanism. Today I’m going to show you a simplified but yet optimized version of my Power Automate Flow. While the previous solution works without any issues, it’s not really scalable. If you have a lot of queues, you probably don’t want to create a dedicated shared mailbox for every queue that needs shared voicemail access via Teams and Adaptive Cards. That just adds unnecessary management overhead to your Teams phone environment.

I’ve got some good news for you. I found a way to do it all without the need of shared mailbox. The flow is now directly triggered by a new email to the Microsoft 365 Group instead of a new email to the shared mailbox. Furthermore, all other mail related actions in the flow have been updated to use the Office 365 Groups Mail connector as well.

Call Flow Diagram

Let’s look at the scenario first. This time around, it’s a very simple call flow which consists of an auto attendant, a call queue and a Microsoft 365 Group as shared voicemail target.

Flow Trigger

The flow is now triggered by When a new email arrives to a group.

Flow Actions

Using the Office 365 Groups Mail connector is not as straight forward as retrieving an email from a shared mailbox or a normal user mailbox. There are conversations, threads and thread posts. Everything must be queried in the correct order to receive all the data that’s needed.

This is how it’s done.

Because this call flow doesn’t have an on-call option, the flow uses way less actions. However, there’s still a parallel branch needed. Once the Adaptive Card has been posted to the Teams channel, the flow waits for a reply so the messageId of the message containing the Adaptive card is still unknown to the flow. That’s where the parallel branch comes into play. It will get the messageId and then the userId of each Team member. Finally, the flow will send a Teams activity feed notification for the new Adaptive Card to each Team member. By using the flow to send the notifications we don’t need to worry about users not enabling notifications for all new channel posts. They’ll have no excuse if they ever forget to call somebody back.

Result in Teams

This is how the notification looks like for end users in Teams. In case the audio player on the card is not working for whatever reason, I’ve also included an additional button called Open MP3 which will open the audio file in Microsoft Stream when it’s clicked.

Final Notes

If you have an on-call option in your call flow but you still want to take advantage of the simplified trigger without the shared mailbox, you can just import both flows into your Power Automate Environment and build a new flow from scratch which combines the best of both worlds. The Microsoft Edge split screen feature and Power Automate’s copy/paste feature are a great help for that.


The initial scenario which included the on-call notification mechanism was designed for a very specific use case. This iteration of my Teams Shared Voicemail solution should fit a lot more customer scenarios. It’s easier to understand and implement and also has less moving parts. Feel free to download the basic version of my flow from here and give it a try. Just make sure to replace anything that’s specific to my lab tenant with your actual values.

If you need help importing the flow, please read this section in the initial article first.

If this blog provides additional value to you or your company, I want you to know that you can always show your support by donating on my GitHub Sponsors profile.

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Hosted on GitHub Pages
Built with Hugo
Theme Stack designed by Jimmy