Custom Engine Agents in Microsoft 365 Copilot

Agents in BizChat has been available for some time already, but now there is an upcoming update to Agents. The introduction of “ custom engine agents ” in Microsoft 365 Copilot! These specialized agents can be built on any large language model (LLM), toolchain, or orchestration tool, tailored specifically for your domain or tenant workflows. Initially supported in Microsoft Teams, this feature will soon be available in Microsoft 365 Copilot Business Chat ( BizChat ).   The introduction of Custom engine agents enables your organization to create customized experiences using your own AI systems and orchestrators. You can design unique prompts, connect to any LLM, and integrate these custom agents with Microsoft 365 Copilot. After the rollout, users will be able to access these agents, provided they are enabled and deployed in the Microsoft 365 admin center under the Copilot tab.   You can read more about the feature on this page . Eligible users can create agents using Micros...

Normalization rules order

I was troubleshooting a customer's normalization rules for international dialing, when I came the following conclusion: The order of the normalization rules in the DialPlan is important when you have more than one possible match.

In my setup, I was trying to accommodate how users might possibly try to dial an international number in different ways. Some users might have figured out how to use the + in their contact cards, or when dialing, and those are of no concern. But others will still tend to use "old-style" with a prefix, or forget the "+" all together.

For this I "always" create two simple rules:
One matching any number string longer than 8 digits (No extension in Norway is longer than 8 digits), and adding a + to it. This will Normalize any international number not beginning with a "+" and adding the "+" before routing.
New-CsVoiceNormalizationRule -Identity "Global/NO_INT_Digits" -Pattern '^(\d{8}\d+)$' -Translation '+$1'
The second rule was made to accommodate those who were dialing with the international prefix in front of the number (00)
New-CsVoiceNormalizationRule -Identity "Global/NO_INT_Digits00" -Pattern '^00(\d{8}\d+)$' -Translation '+$1'

What I have not considered before, is the order of which these commands are written. If you enter them in the order I have shown you here, the first rule will always take effect, and the stripping of 00 in the second rule, will never work.

So from now on, I will always add the most specific rule first, then the general rule.

Here's the "complete" list I usually use here in Norway:

New-CsVoiceNormalizationRule -Identity "Global/NO_3_Digits" -Pattern '^(1\d{2})$' -Translation '+47$1'
New-CsVoiceNormalizationRule -Identity "Global/NO_4_Digits" -Pattern '^(18\d{2})$' -Translation '+47$1'
New-CsVoiceNormalizationRule -Identity "Global/NO_5_Digits" -Pattern '^(0\d{4})$' -Translation '+47$1'
New-CsVoiceNormalizationRule -Identity "Global/NO_8_Digits" -Pattern '^(\d{8})$' -Translation '+47$1'
New-CsVoiceNormalizationRule -Identity "Global/NO_INT_Digits00" -Pattern '^00(\d{8}\d+)$' -Translation '+$1'
New-CsVoiceNormalizationRule -Identity "$Global/NO_INT_Digits" -Pattern '^(\d{8}\d+)$' -Translation '+$1'

Hope this saves you from some troubleshooting: Plan your Normalization rules carefully :)