Almanac
Microsoft/teamsMicrosoft 365

Consultant-focused KB for Microsoft Teams: implementation notes, gotchas and configuration decisions beyond the official docs — across chat and collaboration, meetings, webinars and town halls, Teams Phone, PSTN connectivity (Direct Routing, Operator Connect, Calling Plans, Teams Phone Mobile), auto attendants, call queues and contact centre integration, Teams Rooms and devices, apps and extensibility, Copilot in Teams, administration and governance, security and compliance, network and call quality, and licensing — plus cross-cutting decision guides.

feature-phone-caller-id-policies.mdv1 · history
CurrentApplies to Teams PhoneUpdated 3 weeks agoSource Microsoft Learn ↗

What it does

Caller ID policies decide what number and name a user presents on outbound PSTN calls — their own number, anonymous, or the number of a resource account (an auto attendant or call queue) — and whether they see the caller's number on inbound PSTN calls.

Key facts

  • Managed in the Teams admin center under Voice > Caller ID policies, or with New-, Set-, Get-, Remove- and Grant-CsCallingLineIdentity.
  • -CallingIDSubstitute takes Resource, Anonymous or the user's own number (the default). The older Service value is deprecated — use Resource with -ResourceAccount <ObjectId>.
  • -ResourceAccount needs the resource account's ObjectId, e.g. from (Get-CsOnlineApplicationInstance -Identity <upn>).ObjectId.
  • -CompanyName sets the calling party name (CNAM) sent on outbound PSTN calls. Up to 200 characters, though downstream carriers often truncate or ignore it.
  • -BlockIncomingPstnCallerID (default off) hides the inbound caller's number, showing "Anonymous".
  • -EnableUserOverride (default off) lets the user change their own caller ID setting, and the user's choice then wins over the policy.
  • Numbers you can substitute: Calling Plan, Operator Connect and Direct Routing numbers assigned to resource accounts, and toll-free numbers in the Calling Plan inventory. You can't substitute a Calling Plan or Operator Connect number with a User usage type, a Direct Routing number assigned to a user, or a Skype for Business Server on-premises number.
  • Emergency calls always present the user's real number to the PSAP, regardless of policy.
  • On Direct Routing the substituted number and CNAM go in the SIP From header. With -ForwardPai $true on the gateway (Set-CsOnlinePstnGateway), the P-Asserted-Identity header carries the real calling user.
  • Inbound name resolution checks the user's People contacts, then Outlook and Entra ID contacts, then the CNAM from the carrier, then the raw number. Contact numbers only match if stored in E.164 in the mobile or business phone fields.

When to use / skip

The classic use is a department whose staff ring customers back and need to present the department's main number so callbacks land in the queue, not on someone's personal DDI. Service desks, sales teams, collections, clinics. That's the resource account substitution, and it's well worth doing for anyone who sits in a call queue.

Anonymous presentation is for a narrow set of roles — social services, some legal and safeguarding work — where showing any number is a risk. Most clients don't need it and some carriers treat anonymous calls with suspicion, so don't apply it widely.

What caller ID policies won't do is let you present an arbitrary number per user, or present a second DDI a user happens to own. If the requirement is "present the head office number for everyone" and head office is not a resource account number, you either put that number on a resource account or, on Direct Routing, do the manipulation on the SBC.

Configuration decisions

  • Which teams present a resource account number, and which resource account — the queue they belong to, or the front-door auto attendant.
  • Whether users can override (EnableUserOverride). Usually no for substitution policies; otherwise people switch it back and the queue loses callbacks.
  • What calling party name to send, bearing in mind many UK carriers don't pass CNAM through.
  • Whether any roles need inbound caller ID blocked.
  • On Direct Routing: whether to do number presentation in Teams policy or on the SBC, and whether to forward PAI so the carrier sees the real user for fraud and emergency purposes.
  • Policy per team vs one policy per resource account. One per resource account scales better.

Gotchas

  • You can't use a User-type number as the substitute. If the "main number" was ported in as a user number, you'll need it reassigned to a resource account before the policy works.
  • EnableUserOverride beats everything else in the policy. Leave it on by accident and your carefully designed substitution is one click away from being undone.
  • CNAM is best-effort. The 200-character limit is Microsoft's; the carrier's limit is usually much shorter and some drop it entirely. Don't promise the client their name will show.
  • Contacts saved without the leading + won't match inbound calls, so users see raw numbers for people who are definitely in their address book.
  • Some carriers reject or rewrite calls where the presented number isn't one they recognise as belonging to the trunk — check this with the carrier for Direct Routing and Operator Connect.
  • Service still turns up in older scripts and blog posts. It's deprecated; rewrite to Resource.

Consultant notes

  • Ask during discovery which teams call customers back and what number the customer should see. That's your caller ID policy list.
  • Name policies after the resource account they present (e.g. CLI-ServiceDesk) so the relationship is obvious in the admin centre.
  • Test from a mobile on each carrier you care about — number and name both — before sign-off.
  • Mention that emergency calls always show the user's own number; safeguarding teams on anonymous policies sometimes need reassurance or a conversation about it.

Recheck the list of allowed substitute number types if Microsoft extends substitution to user numbers — it's a regular customer ask

Was this accurate?