My Demo 365: Teams Phone- Shared Calling – Direct Routing Edition

Yup! We’re back! It’s time for another post in the probably never-ending series on Teams Phone Shared Calling! I’ve written about a number of Shared Calling items and I thought I’d connect a couple dots for you.

Last month you got a two-fer from me on setting up Direct Routing + AudioCodes SBCs
https://darylhunter.me/blog/2024/08/my-demo-365-teams-phone-direct-routing-audiocodes-sbc-virtual-edition.html
https://darylhunter.me/blog/2024/08/my-demo-365-teams-phone-direct-routing-audiocodes-sbc-virtual-edition-part-2.html

Last year at launch I started my Shared Calling series with two posts on how to use PAYGO Calling Plans and Operator Connect
https://darylhunter.me/blog/2023/10/my-demo-365-teams-phone-shared-calling-payg-edition.html
https://darylhunter.me/blog/2023/11/my-demo-365-teams-phone-shared-calling-operator-connect-edition.html

Today, let’s finish the operator choices and focus on Shared Calling + Direct Routing! One thing I felt that was super important to copy/paste is my point of view on this. So, these next two paragraphs are directly taken from my first few posts on the subject:

If you have users who aren’t heavy users of the Public Switched Telephone Network (PSTN), they might not need a dedicated assigned phone number. Instead, for these users, you should consider Shared Calling as a simpler, easier-to-implement phone solution for your organization. Shared Calling greatly simplifies phone number management for some users. Shared Calling also reduces costs for your organization because you don’t need a dedicated phone number for every user.

This is why I’m excited about it. If you’ve been managing Phone Systems like me for decades, especially legacy PBX, the concept is a no-brainer. You have plastic phones on desks, they don’t have dedicated phone numbers, they are just expected to work. Would you want to walk up to a water fountain, press the button and water not come out? Would you want to flip a light switch and the light not come on? Why would you want to deploy a Phone System and not have *every* phone be able to make phone calls? There has been some level of friction here with Teams Phone and Shared Calling removes that for the vast majority of use cases. Let’s walk through it a bit in my usual top-down style. When we’re done, I’ll provide a set of links at the bottom of this article for your continued learning on the subject.

Today, I want to reprise my earlier posts but instead focus on Direct Routing. If you recall, or if you’re new, Teams Phone can provide PSTN Calling via 1st Party and 3rd Party PSTN Options. Today I’m building on the Direct Routing lab setup from last month. Let’s get started.

1 – Assign Teams Phone licenses and enable users for voice
This one is fairly straight forward. You want to make sure the “end users” that will take advantage of Shared Calling have a Teams Phone license. This can be a bundled license like with E5, or a Teams Phone Standard standalone license, or even a device license including Teams Phone – like Shared Device License or Teams Room Pro. In this demo, I’ll be using Pradeep:

Super. Now, he has licenses. But, he needs to be EV enabled (Enterprise Voice Enabled). Let’s do this with PowerShell using the cmdlet set-CsPhoneNumberAssignment. Here’s a screen shot with the before, during, and after.

2 – Assign number to resource account for inbound/outbound calling
This is the heart of the matter. There is a resource account – either a net-new or existing – that needs to have a phone number assigned. This resource account can be Teams Phone powered by either Calling Plans (Pay As You Go only), Operator Connect, or Direct Routing. For this blog, I’ll focus on my Direct Routing setup with voip.ms as my PSTN carrier.Visually, this looks like this with the Resource Account at the center and powering the Shared Calling experience.

For this example, I’ll use the +1-502-678-0200 Phone Number I own with voip.ms.

Let’s create a new Resource Account from Teams Admin Center -> Voice -> Resource Accounts

And let’s give that a Resource Account license in M365 Admin Center

Okay, now we need to give it the phone number above!

Lastly, when using Direct Routing, you must have an online voice routing policy with valid PSTN usages.

What you may recall from our last blogs on Direct Routing + AudioCodes, we created a Voice Routing Policy called “AC-VOIPMS-DR” so we want to “grant” this to the AA-Shared-DR resource account. Again, we did this in the previous blog, so, here’s what that would look like here.

Good. Done. Moving on.

3 – Associate resource account with Auto Attendant for inbound calling
This one is really fielder’s choice. If your Shared Calling scenario doesn’t require inbound calling, then, this is optional. But, if you *do* want to provide inbound calling reach to the Shared Calling enabled users, an AA is a great way to handle that. In my case, I have a simple AA with no operator, and 24×7 availability and assign this Resource Account to it.

4 – Assign a location to the resource account for emergency calling
In Teams Admin Center -> Locations – Emergency addresses, I already have setup my home office in Crestwood, Kentucky where I live

This next part is a little tricky via PowerShell. First I need to get the “location ID” of the Crestwood Office above via the Get-CsOnlineLisLocation PowerShell cmdlet. Then need to assign that location ID to the Phone Number for the resource account in #2 and #3 above via the Set-CsPhoneNumberAssignment cmdlet.

First of all, let’s “get it”

Of course, I could have copied it from Teams Admin Center, but, now you know two methods! Now that’s “set it”

And validate that it has applied

5 – If you’re using a resource account with Calling Plans, assign the additional PAYG/Credits
If you read my previous post on Shared Calling + PAYG, you saw me handle this. But, today, I’m focused on Direct Routing so I have nothing to do here. No additional license work to do. Let’s continue.

6 – Create a voice routing policy without PSTN usages
Shared Calling users must not have assigned voice routing policy with PSTN usages. So, unless your Global Voice Routing policy has empty PSTN usages, you’ll want to setup a new voice routing policy and assign this to Shared Calling users.

I created a SharedVRP-Empty policy via Teams Admin Center -> Voice -> Voice routing policies

and then assigned it to Pradeep.

Just to be explicit. It’s the “users” that are assigned Shared Calling policies that need to have empty Voice Routing Policies. The Resource Account that powers the Shared Calling policy may need to have one and in the case of Direct Routing, this is required and I covered that in section #2 above. Moving on.

7 – Enable emergency calling for users
Shared Calling takes Emergency Calling into account. You can read up more detail in our existing Emergency calling details. You aren’t *required* to define emergency numbers for a Shared Calling policy. If you don’t define a set of emergency numbers, when an emergency call is made, the number associated with the resource account in the Shared Calling policy is used. I have not configured Emergency Calling policies. Additionally, I don’t think I plan to test emergency calling with Direct Routing anytime soon. So, I left this alone.

Step 8 – Create the Shared Calling Policy (Learn Article)
Previously, this was only configured via PowerShell (TPM Module 5.5 or greater). But now we can use Teams Admin Center. If you *do* wish to use PowerShell, you’ll use the following Teams PowerShell cmdlets:
Grant-CsTeamsSharedCallingRoutingPolicy
New-CsTeamsSharedCallingRoutingPolicy
Get-CsTeamsSharedCallingRoutingPolicy
Remove-CsTeamsSharedCallingRoutingPolicy
Set-CsTeamsSharedCallingRoutingPolicy

Navigate to Teams Admin Center (https://admin.teams.microsoft.com) -> Voice -> Shared calling policies

To create a new Shared Calling Policy – click Add.

Enter details for the description, and then search / add a Resource Account – AA-Shared-DR in this case. The Phone / Location Details will automatically populate assuming you set them up correctly. 🙂

Now Add your Emergency Callback numbers (as needed). In my case, I didn’t.

Important Note: as called out in the main Shared Calling documentation, the assigned Emergency Callback numbers added in the pool must be of the same TYPE (Calling Plan, Operator Connect, Direct Routing) as the Phone number assigned to the Resource Account. Teams Admin Center offers a checksum in the policy itself where when you add new callback numbers, it knows what type they should be!

Great – now – final review and then click save!

Step 9 – Assign the Shared Calling Policy to users (Learn Article)
Now that you’ve created the Shared Calling Policy, assigning it is super easy! From the same Teams Admin Center -> Voice -> Shared calling policies – select a policy and click Assign Users.

We’ll assign this policy to Pradeep.

When you Add – and then Apply changes – you’ll be given a confirmation screen

Teams Admin Center – Can you filter users by Shared Calling policy?
This one has come up many times! All this is great, but, how can I be sure to filter on my specific M365 users enabled with a particular Shared Calling Policy! No problem. You can do this two ways.
1) Easy Way – just click on “View users” from any Shared Calling Policy

This brings up a specific filtered view! And there’s Pradeep!

2) Longer Way – first navigate to Teams Admin Center -> Users -> Manage users and click Filter

Filter by Shared Calling policy and choose your options

This is in effect the same as Option 1 – just a longer way to get there 🙂

Teams Admin Center – Can you view Shared Calling details assigned to a user?
Well. I sure hope so! As you remember above, we’ve enabled Pradeep for Shared Calling. Let’s see what details we can see. Either manually navigate to Pradeep in Teams Admin Center -> Users -> Manage users, or better yet, choose one of your methods above to filter by that SharedCalling-DR-TAC policy so you can find Pradeep Gupta. Click on his name.

Nice! Check out that Red Box! You can see all of his Shared Calling details – policy name, phone number assigned (Which is the phone number assigned to the Shared Calling policy) etc. If you click on the “View Policy” button, you’re taken back to the Shared Calling policy details that were created at the top of this blog.

Prove it monkeyboy!
Sure, let’s prove it works – let’s login as Pradeep and call a number. Maybe like my mobile phone.

Uh oh!

What happened? Well, here’s an interesting fun fact. I alluded to this in my previous PAYGO and Operator Connect blogs:

This may be carrier specific, but, these Shared Calling calls go outbound as ANONYMOUS and most carriers will block them. They would expect this call to come from a known DID belonging to the carrier. Think of that like an ACL / security check. Let’s fix it.

Navigate to Teams Admin Center -> Voice -> Caller ID policies. Click Add.

Let’s make a policy that will rewrite caller ID with the phone number assigned to the Resource Account we’ve been using for this Shared Calling policy. Click Save.

Now, let’s assign that Caller ID Policy. You can do this in PowerShell, or, via Teams Admin Center -> Users -> Manage Users. Find Pradeep and navigate to his Policies.

Edit that Caller ID Policy

Now that it’s assigned you could see any/all users where you’ve assigned this with a filter, or, by clicking on the Caller ID policy -> view users. Both take you here.

Great. Now, let’s try this call again.

Sweet! That looks right. Notice the Caller ID shows the proper +1 502 678 0200 that we expect.

And inbound via the AA – let’s call +1 502 678 0200 and search for Pradeep by name

Okay, let’s wrap this up. Just like below, let’s get you setup with some resources for further learning.

Resources for further learning
Now that we’re at the end, let’s highlight some useful resources for your continued learning.

Phone System documentation for Shared Calling

Plan for Shared Calling – Microsoft Teams | Microsoft Learn 
Configure Shared Calling – Microsoft Teams | Microsoft Learn 
Shared Calling scenario – Microsoft Teams | Microsoft Learn 

TPM PS cmdlet documentation

New-CsTeamsSharedCallingRoutingPolicy 
Get-CsTeamsSharedCallingRoutingPolicy 
Remove-CsTeamsSharedCallingRoutingPolicy 
Set-CsTeamsSharedCallingRoutingPolicy 
Grant-CsTeamsSharedCallingRoutingPolicy 

YouTube – from Shervin Shaffie who is a Microsoft Principal Technical Specialist

Shervin Shaffie (Principal TS) Walkthrough

We made it. You did it. We’re done. I’d love to hear any comments about this and if you find this useful or if this doesn’t *yet* fit a scenario you have where you need to provide Teams Phone to users without dedicated phone numbers. This looks compelling for most. Tell me what you think.

Leave a Reply