What is InterpretedUserType in Microsoft Teams?

I decided to write this blog to help other people get a better understanding of what InterpretedUserType is. My first in encounter with InterpretedUserType was almost a year ago when I was troubleshooting why a user in my Teams environment couldn’t receive PSTN phone calls using Direct Routing even though the user was enabled for Direct Routing following Microsoft docs on how to enable user for Direct Routing. After troubleshooting for about 30 minutes, I decided to compare the users Teams settings with my own (Because I didn’t experience the same issue as the user). I opened a PowerShell terminal and connected to Microsoft Teams, and I ran the following command on the user and myself:

Get-CsOnlineUser -Identity "mail@domain.com"

I then pasted the outputs into Notepad++ and then did a comparison to see what was different between me and the user. That is when I discovered the attribute named InterpretedUserType for the first time, as the user and I had a different value. My value was HybridOnlineTeamsOnlyUser which is one of the desired values a user should have, but I’ll elaborate on that later. I honestly don’t remember what the users InterpretedUserType value was, but it took me almost an hour to figure how to resolve the issue because there is no real documentation on this, so this I why I’m writing this to hopefully help others save some time.

What is InterpretedUserType?

InterpretedUserType is basically an attribute attached to a user in Microsoft Teams, it holds only one value at a time. But there are a lot of different values the attribute can hold and depending on that value, it determines what might causing issues when you enabled a user in Teams for PSTN calling or a user might be missing the dial pad under “Calls” in Teams or other issues you might encounter when managing users in Teams.

InterpretedUserType is a sort of ‘state’ that the user is currently in, think in terms of user provisioning and InterpretedUserType holds a value that describes what state the user is currently in. In terms of what is the “right” value for InterpretedUserType there really isn’t one. As I mentioned in the beginning it’s more of having a desired value, because the value can be different ones and the still be right one for the user. One of two desired values is: HybridOnlineTeamsOnlyUser – That value translates roughly to: User is moved from SFB online to Teams and still has SFB attributes set and is there for in Hybrid mode because of that. The other value is: PureOnlineTeamsOnlyUser – That value translates roughly to: The user is created(homed) in Teams and has not been in SFB online and therefore doesn’t have any old SFB attributes related to it. – This is a value you will see on newly created user in your Teams environment. What those two values have in common is that any user holding one of these two values in InterpretedUserType is ready to be enabled for PSTN calling, so the user is in a desired state, and one is not righter than the other for you to enable a user for PSTN calling.

How to find the value of InterpretedUserType

There are now two ways to find the value of InterpretedUserType. One way to find it, is by using PowerShell as I did the first time, but you can also find the value by using Teams Admin Center (TAC) (This was not possible when I first started working with Microsoft Teams). In Teams Admin Center, navigate to the Users menu on the left and then select Manage users, in the overview of users you will see a column with the name Interpreted user type.

(If you don’t see the column, you need to click on the gear icon on the right side of the overview and then select Interpreted user type) To find the value of InterpretedUserType using PowerShell you need run the following command:

Get-CsOnlineUser -Identity "mail@domain.com" | Select-Object InterpretedUserType

Output sample:

InterpretedUserTyp

-------------------

HybridOnlineTeamsOnlyUsere

Notes from the field:

The value can be different in Teams Admin Center than in the PowerShell output – You should trust the PowerShell output over Teams Admin Center.

Changing the value of InterpretedUserType

One question that still needs answering is, can you change the value by running a command? The answer is no, you cannot. To change the value, you must take certain steps to change it and it all depends on value that is currently set in InterpretedUserType.

So, let’s say you want to change HybridOnlineTeamsOnlyUser to AADConnectEnabledOnlineTeamsOnlyUser.

WARNING! DON’T DO THIS IN PRODUCTION TIME YOU WILL DISABLE THE USERS AVALIBTY TO MAKE AND RESCIVE CALLS UNDTIL YOU FINISH.

To achieve changing HybridOnlineTeamsOnlyUser to AADConnectEnabledOnlineTeamsOnlyUser you need to the following:

Run the following command:

$UserEmail = "mail@domain.com"

Get-CsOnlineUser -Identity $UserEmail | Select-Object RegistrarPool, OnPremLineUriManuallySet, OnPremLineUri,LineUri, EnterpriseVoiceEnabled, InterpretedUserType
  • Open Active Directory on-prem
  • Find the user and access the Attribute Editor tab on the user’s profile. 
  • Make a note of the user’s phone number and SIP address
  • clear out all values in the attributes named msRTCSIP-*
  • Then do an Azure AD connect delta sync (You might need to do this a couple of times)
  • Run the following command:
Get-CsOnlineUser -Identity $UserEmail | Select-Object RegistrarPool, OnPremLineUriManuallySet, OnPremLineUri, LineUri, EnterpriseVoiceEnabled, InterpretedUserType again

You should now have a different output (have patience)

Now run the following command:

$UserPhoneNr = "+4512345678"

Set-CsUser -Identity $UserEmail -OnPremLineURI tel:$UserPhoneNr -EnterpriseVoiceEnabled $true -HostedVoiceMail $true -Verbose

Wait a few seconds and then run the following command:

Get-CsOnlineUser -Identity $UserEmail | Select-Object RegistrarPool, OnPremLineUriManuallySet, OnPremLineUri, LineUri, EnterpriseVoiceEnabled, InterpretedUserType

You will see that the value has changed to AADConnectEnabledOnlineTeamsOnlyUser

This is how you finish the migration of a user from SFB online/On-prem to Teams (Truly) 🙂

Another sample of changing the value:

If the value of InterpretedUserType is: HybridOnlineActiveDirectoryDisabledUser, then all you need to do is enable the user in Active Directory on-prem and then do an Azure AD connect delta sync and wait a cloud minute. The value should now be: HybridOnlineTeamsOnlyUser. But it could change to another value that is not desired depending on the user.

Is there a list of all the values and what action can you take to get a desired value?

Yes, there is a list on my GitHub page that lists all the values I have discovered in my Teams environment over time and what action you might need to take to change a value into a desired value.

For the purpose of automation, I have created a .xml file with the values, descriptions and actions that can be used to fx. validate if a user is ready to be enabled for PSTN calling in Teams.

Both lists can be found at this link: MSTeams/InterpretedUserType at main · ChrFrohn/MSTeams (github.com)