> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Presence federation: Teams, Slack, Webex, Zoom, and calendar availability

> Connect Microsoft Teams, Slack, Webex, Zoom, and your Google or Microsoft 365 calendar to presence routing so inbound calls skip you while you are in a meeting — setup per provider, the busy/away/DnD behavior matrix, and the fixes for stale or unsynced presence.

# Settings → Presence

The **Presence** page under **Settings** federates your availability from the tools you already work in — Microsoft Teams, Slack, Cisco Webex, Zoom, and your Google or Microsoft 365 calendar — and feeds it into inbound call routing. When a connected source reports you in a meeting or on Do Not Disturb, Orbit folds that into your status so callers reach your voicemail or the next available teammate instead of ringing a phone you cannot answer.

This guide covers what each source adds, how to connect it, exactly how each presence state changes call routing, and what to do when a source will not sync.

## Where the setting lives and what each provider adds

Open **Settings → Presence**. Each provider gets its own tile with a connect switch, a status badge, and — once it has synced — the last sync time, the raw value the provider reported, and the outcome of the last sync.

Federation is a per-user choice layered on top of an organization-level connection. An org admin first connects the provider once for everyone; each person then opts in on their own Presence page. The per-source behaviors:

* **Microsoft Teams** (authorized through the **Microsoft 365** integration) — sets you **busy** or **Do Not Disturb** whenever Microsoft reports you in a meeting, presenting, on a Teams call, or marked Offline. Calendar-driven busy states cascade automatically.
* **Slack** — sets you **away** while Slack reports you idle, and **Do Not Disturb** while a Slack DND schedule or snooze is active. Your Slack messages and reactions stay in Slack; only the availability signal crosses over.
* **Cisco Webex** — sets you **busy** whenever Webex reports you in a call, in a meeting, or sharing content, and **Do Not Disturb** when you set Webex to Do Not Disturb or mark yourself Out of Office.
* **Zoom** — sets you **busy** whenever Zoom reports you in a meeting, on a phone call, presenting, or in a calendar event, and **Do Not Disturb** when you set Zoom to Do Not Disturb or mark yourself Out of Office.
* **Google Calendar** (authorized through the **Google Workspace** integration) — sets you **busy** for the duration of any meeting on your primary Google Calendar, and **Do Not Disturb** during out-of-office events. Events you marked as free and all-day events are ignored, so only real meetings change your routing.
* **Microsoft 365 Calendar** (authorized through the **Microsoft 365** integration) — sets you **busy** for the duration of any meeting marked busy on your Microsoft 365 calendar, and **Do Not Disturb** during out-of-office blocks. Tentative and all-day events are ignored, so only confirmed meetings change your routing.

Your merged status is computed from every connected source on a **most-busy-wins** rule. The status you set yourself from the dashboard header always wins over federated sources — federation can only make you appear *busier*, never less busy.

## Set up a provider connection

Setup always has the same two steps, in this order:

1. **Authorize the provider once for your organization.** An org admin opens **Settings → Integrations** and connects the integration that carries the OAuth grant for that presence source. If your organization uses the API rather than the dashboard, that is the `POST /api/v1/integrations/connect` flow — the response carries the `auth_url` you open to complete the provider's consent screen.
2. **Opt in on your own Presence page.** Open **Settings → Presence** and turn the provider's switch on. The tile shows "Waiting for first sync" and updates within about a minute.

<Note>
  Turning a source on does not authorize it. Without step 1 the tile stays in **Reconnect required** — the switch expresses your opt-in, the integration connection is the actual OAuth grant. Presence from that source only starts merging once both exist.
</Note>

The integration card that authorizes a presence source is not always named after the source. When the **Reconnect required** hint on a tile tells you to connect an integration, use the name it shows:

| Presence source (Settings → Presence) | Connect this integration (Settings → Integrations) |
| ------------------------------------- | -------------------------------------------------- |
| Microsoft Teams                       | Microsoft 365                                      |
| Microsoft 365 Calendar                | Microsoft 365                                      |
| Slack                                 | Slack                                              |
| Cisco Webex                           | Cisco Webex                                        |
| Zoom                                  | Zoom                                               |
| Google Calendar                       | Google Workspace                                   |

One authorized **Microsoft 365** connection covers both Microsoft Teams and Microsoft 365 Calendar. The same consent covers presence reading and calendar access.

## How presence changes inbound call routing

Your merged status decides whether a new inbound call rings your devices. Only **Do Not Disturb** silences ringing — Busy and Away change how you appear to colleagues but your phone still rings.

| Merged status      | What an inbound call does                                                                                                                                                                |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Available**      | Rings every device registered to your extension, as normal.                                                                                                                              |
| **Busy / Away**    | Your devices still ring. These states update how you appear to colleagues — busy lamps on the attendant console, shared-line keys, the colleagues panel — but do not stop inbound calls. |
| **Do Not Disturb** | Your extension and softphones are removed from the call route and stay silent. The caller goes straight to the route's fallback.                                                         |

Where **Do Not Disturb** takes you out of the route, the caller follows that surface's own fallback:

* **Direct calls to your extension** — go straight to your voicemail or no-answer fallback instead of ringing your devices.
* **Ring groups you belong to** — skip you and ring the other members; the group's overflow or voicemail fires if no one else answers.
* **Call queues you staff** — stop offering you new queued callers; they are distributed to the other available agents.
* **IVR and auto-attendant menus that dial you** — follow the menu option's no-answer branch: the next agent, a fallback menu, or voicemail.
* **Inbound number routing rules pointing at you** — send the caller to the rule's fallback destination instead of your extension.

Because only Do Not Disturb stops a call from ringing, a connected source quiets your phone during a meeting only when it maps that meeting to Do Not Disturb. Out-of-office events and a Slack DND schedule or snooze map to Do Not Disturb; an ordinary Busy calendar block keeps your devices ringing.

Teams, Webex, and Zoom activity (calls, meetings, presenting) maps to Busy — visible to colleagues, still ringable. If you want meetings to silence your phone, combine federation with the recurring schedule below, or set Do Not Disturb from the dashboard header — a manual status always wins over federated sources.

### Recurring Do Not Disturb schedule

The same page hosts a **recurring weekly Do Not Disturb schedule**: set the days, hours, and timezone your phone stays available, and outside that window you are automatically placed in Do Not Disturb — inbound calls go to voicemail or your route fallback instead of ringing. A manual Do Not Disturb you set from the dashboard header always wins over the schedule, so an ad-hoc "available outside hours today" override is never undone by the recurring rule.

## Who can change what

* **Org admins (owner / admin roles)** connect and remove provider integrations in **Settings → Integrations**. That OAuth grant is organization-level: it authorizes the provider for everyone and, through it, is what makes any per-user presence toggle able to sync.
* **Each user controls their own federation.** The connect switches on **Settings → Presence**, the recurring Do Not Disturb schedule, and removing one of your own sources are all per-user choices on your own account — nobody else can turn federation on or off for you, and removing your source never touches the org-level integration for your colleagues.
* **Nothing here alters routing for anyone but you.** Federation changes how one person's status merges; ring groups, queues, IVR menus, and routing rules keep working for everyone else while one member is in Do Not Disturb.

## Troubleshooting

Each tile badge reports the outcome of the last sync:

* **Synced** — the source connected and reported a value; everything is working.
* **Waiting for first sync** — the source is on but has not completed its first poll. The sync runs about once a minute, so give it a minute after you flip the switch. If it never moves past this, the org-level integration is not connected yet (see below).
* **Reconnect required** — syncs are being rejected for authorization. An org admin needs to connect (or reconnect) the matching integration in **Settings → Integrations**; the tile names which one. The OAuth grant expired, was revoked, or never existed.
* **Retrying** — the last poll hit a temporary network or provider error: a rate limit, a 5xx, a timeout. Syncs resume automatically, so no action is needed unless the status persists.
* **Unrecognised value** — the provider answered but returned an availability value we do not map yet. Your routing is unchanged for now and the next sync resolves it; no action needed.

Common failure modes and their fixes:

**A tile says "Reconnect required".** The OAuth grant is missing or dead. Have an org admin open **Settings → Integrations** and reconnect the integration the tile names — remember Microsoft Teams is authorized through the **Microsoft 365** connection, and Google Calendar through **Google Workspace**. Once the grant is back, the next sync clears the state within about a minute.

**Calls still ring while you are in a meeting.** Work the checklist in order:

1. Confirm the meeting actually maps to a silencing state. A plain Busy calendar block still rings your devices by design — only out-of-office events, a Slack DND schedule or snooze, and Webex/Zoom Do Not Disturb or Out of Office map to Do Not Disturb. Check the tile's "Provider reports" field for the raw value the provider sent.
2. Confirm the source is **on** and its badge reads **Synced** — an enabled source in "Reconnect required" or "Waiting for first sync" is not merging anything into your status.
3. Check the badge for **Unrecognised value** — the provider answered, but with a state we do not map yet, so your routing stays unchanged until a sync maps it.
4. Teams/Webex/Zoom meetings map to Busy, which intentionally keeps your devices ringing. To silence your phone during meetings, add the recurring Do Not Disturb schedule for your meeting hours or set Do Not Disturb manually.

**Stale presence — a tile stopped updating.** Check the "Last synced" time. If it is older than a few minutes, read the "Last status" field: **Retrying** heals itself, **Reconnect required** needs an org admin to re-authorize the integration. The Refresh control at the top of the page reloads every tile's state on demand.

**You want federation off but the switch is not enough.** The switch disables federation for that source and preserves its history. To remove the source outright — including its sync history on your account — use **Remove source** on the tile. That button appears only after the source has actually connected at least once, and it affects your account only; the org-level integration in **Settings → Integrations** stays connected for everyone else.

**Presence falls back gracefully.** If the page cannot load your sources, or a provider cannot be reached at all, your presence falls back to the status you set in the dashboard header — routing never treats a broken federation as unavailable.

## Cross-references

* [Agent presence and aux-code lifecycle](/concepts/agent-presence-lifecycle) — the concept page for the five-state presence model dispatch checks before it rings; this guide is the operator side of it.
* [Attendant console](/guides/attendant-console) — the supervisor view where Busy and Away federated states show up on busy lamps.
* [API recipes](/guides/api-recipes) — the OAuth connect → status → data loop behind **Settings → Integrations**, with copy-pasteable calls.
