Skip to main content
The Microsoft Teams — Workforce Availability integration connects Neo to your own Microsoft 365 tenant (not your clients’ tenants) so Ticket Dispatch can read your technicians’ live Teams presence and their Teams Shifts rota. With it enabled, Neo won’t assign work starting now to someone who is Away, Offline, or out of office — and it prefers technicians whose shift covers the time the work would start.
This integration reads your service desk’s own Microsoft tenant. It is separate from the Microsoft 365 integration that lets agents act on your end-clients’ tenants.

Set it up

You’ll need an administrator of your own Microsoft 365 tenant for step 2 — someone who can grant admin consent (typically a Global Administrator).
1

Open the integration

Go to IntegrationsDirectoryScheduling and click Microsoft Teams — Workforce Availability. The connect panel walks you through the next three steps.
The Microsoft Teams Workforce Availability connect panel showing the three setup steps: Grant admin consent (marked Granted), Pick your team(s) with checkboxes, and Run auto-map.
2

Grant admin consent

Click Open consent page. Microsoft’s consent screen opens in a new tab and lists what Neo asks for — sign-in basics plus four read-only application permissions:
Permission on the consent screenWhy Neo needs it
Read presence information for all usersLive Teams presence (Away/Offline/out-of-office) at dispatch time
Read all schedule itemsYour Teams Shifts rota, if you use one
Read all group membershipsListing your Teams and their members for the technician auto-map
Read all users’ full profilesThe members’ email/sign-in name — the key the auto-map matches technicians on
Neo never writes anything in your tenant, and these permissions do not cover chats, files, or mail. After you accept, you land back in the Neo dashboard — click Continue setup to return to the integration.
3

Pick your team(s)

Back in the panel, the team list loads. If it still says Teams can’t be listed yet, consent hasn’t completed or is still propagating — wait a minute and click Retry. Tick the Microsoft Team(s) where your service desk lives, or leave all unchecked to scan every Team in the tenant.
4

Auto-map technicians

Click Run auto-map. Neo matches each PSA technician to their Microsoft account by comparing the technician’s email in your PSA against the team members’ email/sign-in name (UPN), then shows a Matched / Unmatched review. Map any unmatched technicians manually — see Mapping technicians.
5

Turn it on per workflow

Enable the Teams availability toggle on a Ticket Dispatch action. If your rota lives in the Teams Shifts app, also pick the rota team(s) in the toggle’s settings.

Mapping technicians

The integration runs on one piece of state: a link from each PSA technician to their Microsoft account. Dispatch only sees presence and shifts for mapped technicians.
  • Auto-map matches on email. The technician’s email address in your PSA must equal the Microsoft account’s email or sign-in name (UPN). Technicians whose PSA record uses a different address — an alias, a shared address, a personal email — come back as Unmatched.
  • Manual mapping. Open Technicians, edit the technician, and fill in the Microsoft Teams Mapping section. A badge shows whether the mapping came from the auto-map (Auto-mapped) or was set by hand (Manual).
  • Re-running auto-map never touches manual work. Manual mappings are never overwritten or cleared by auto-map runs. A full-tenant re-run (no teams selected) also clears auto-derived mappings for technicians who no longer match — for example, someone who left the company — while a run scoped to specific teams only adds and updates.
  • To remove a mapping by hand, clear both fields in the technician’s Microsoft Teams Mapping section and save.
The integration card shows Connected once at least one technician is mapped.

What dispatch does with it

Live presence. A technician whose presence is Away, Offline, or who has out-of-office set is treated as on a break and is skipped for work starting now. Busy, In a call, Presenting, Do not disturb, and Be right back all still count as working — being occupied is what workload balancing is for; the presence check only asks “are they at their desk and on the clock?”. Presence is a right-now signal, so it is time-scoped: when the workflow books a schedule entry further in the future, a technician on a break right now can still get that slot — only slots starting within the next ~2 hours are blocked by live presence. Shifts. If you configure the rota team(s) in the dispatch action’s Teams availability settings, Neo reads each mapped technician’s upcoming shifts and prefers technicians whose shift covers the proposed assignment time. A mapped technician with no shift in the planning window is deprioritized as likely off-rota (custom instructions can override). Shifts influence AI dispatch only; Round Robin uses the on-break presence check. Fallbacks. The integration never blocks dispatch. If Teams can’t be reached, consent was revoked, or no technicians are mapped, dispatch falls back to its normal PSA-based logic and the run output notes why presence wasn’t used. Technicians without a mapping are simply judged on the other criteria — they are never penalized for missing presence data.

Check that it’s working

Run the dispatch workflow on a test ticket and open the execution’s details:
  • When presence was used, the dispatch reasoning references the technicians’ Teams availability (on a break vs. working).
  • When it wasn’t, the run output says why in plain words — for example, “Teams availability is enabled, but none of the candidate technicians are mapped to a Microsoft user — dispatch used PSA-only availability.” That message points you back to the auto-map step.

Custom instructions

The default break rules can be overridden per workflow with dispatch custom instructions, for example:
  • “Treat Do not disturb as unavailable.”
  • “Ignore Teams presence for P1 tickets.”

Troubleshooting

The match key is the technician’s email address in your PSA versus the Microsoft account’s email/sign-in name. Spot-check a couple of technicians: if your PSA stores a different address (alias, distribution address, personal email), either fix the PSA email or map those technicians manually on the Technicians page.
Two by-design cases: the assignment was a schedule entry starting more than ~2 hours out (live presence only blocks imminent work — the calendar and shifts govern later slots), or the technician shows Do not disturb / Busy / Be right back, which count as working. To change the defaults, use custom instructions (e.g. “Treat Do not disturb as unavailable”).
Check, in order: the Teams availability toggle is on for that workflow; the technician is mapped (Technicians page → Microsoft Teams Mapping); and they actively use Teams — accounts without a Teams license or an active session report an unknown presence, which Neo treats as “no signal” rather than on-break, so those technicians are judged on the other criteria only.
Shift preference requires: the rota team(s) set in the dispatch action’s Teams availability settings (picking teams in the integration’s auto-map step is not the same thing), the rota actually living in the Teams Shifts app of those teams, and the technicians being mapped. It is also a soft preference for AI dispatch only — Round Robin doesn’t consult shifts.

Security and data

  • Access is read-only and confined to your own tenant — the four application permissions above, granted through Microsoft admin consent and revocable in your Entra admin center at any time.
  • These permissions do not let Neo read your chats, files, mail, or calendars.
  • The only thing Neo stores is the per-technician mapping (the Microsoft account ID and sign-in name on the technician record). Presence and shift data are read at dispatch time and never persisted.

Public API

The integration can also be configured programmatically:
  • GET /public-api/teams-availability/consent-url — get the admin-consent URL
  • GET /public-api/teams-availability/teams — list your tenant’s Teams
  • POST /public-api/teams-availability/auto-map — run the technician auto-map
Full request/response schemas are in the public OpenAPI spec at GET /public-api/openapi.json.