LearnMicrosoft Teams › 6 · Call flows & troubleshooting

Presence: how state propagates and why it lies

Presence is an eventually-consistent aggregation of signals with deliberate propagation delays. Once you know the precedence order and the lag windows, 'presence is wrong' tickets become explanations, not investigations.

Where a status comes from (precedence, top wins)

  1. User-configured — manually set status (with optional expiry) and status messages; beats everything until cleared/expired.
  2. App-driven states — In a call / In a meeting / Presenting come from actual service activity; Presenting also drives notification suppression.
  3. Calendar-driven — In a meeting from the Exchange calendar even if you never joined; Out of Office from automatic replies.
  4. Activity-driven — Available/Away from client input activity; Away after inactivity/lock, with mobile clients contributing their own (laggier) signal.

The aggregate publishes to subscribers — people whose client currently displays you. Subscription is on-view: your tile updates when someone is LOOKING at it; background contacts refresh lazily. That design choice is the root of half the mythology.

The honest lag table

Transition Typical feel
Available -> In a call Seconds (service knows immediately)
Meeting start (calendar) Around the start time, minute-ish granularity
Away on idle/lock Minutes-scale by design (avoids flapping)
Mobile-only state changes Laggiest; the phone's background limits apply
Cross-tenant (federated) viewers Slower still; subscription hops tenants

'Dave shows Available but he's gone' = activity-driven Away hasn't fired, or his phone is keeping him fresh — both by design. 'Shows In a meeting, isn't' = calendar-driven state from a meeting he declined to attend but not in calendar.

Presence as a control surface

Presence-based routing (call queues) and Do-Not-Disturb interplay make presence OPERATIONAL: a queue agent stuck on DND receives nothing; a boss's delegate setup changes who rings when Busy. When 'the queue skips me' arrives, presence precedence is the first suspect (see call-queues concept).

What to watch (proofs)

  • The service's belief RIGHT NOW: Graph GET /users/{id}/presence — availability
    • activity, bypassing every client cache; two calls a minute apart demonstrate propagation live.
  • Who's overriding: the same payload distinguishes user-set (manual) states — 'perpetually Busy' users have usually pinned it themselves with no expiry.
  • Calendar coupling: the calendar item vs presence at start time — the minute-level correlation proves layer 3.
  • Queue interplay: agent presence at the moment a call skipped them (Queues app real-time view / analytics) — the skip explains itself.

The wire

  • Publish: client/service signals -> presence service aggregate
  • Subscribe: on-view subscriptions; background tiles refresh lazily

PowerShell for this concept

  • Get-CsOnlineUser Returns information about users who have accounts homed on Microsoft Teams or Skype...
  • Get-CsUserCallingSettings This cmdlet will show the call forwarding, simultaneous ringing, call group, busy on...

Discussion

No messages yet — start the thread.

Sign in with your email to join the discussion — we send a one-time link, no password.