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

# Channels

> Every way work reaches an agent and how the answer comes back: Xpander Chat, Slack and Microsoft Teams threads, email, WhatsApp and Telegram, a webhook, MCP clients, the API and schedules, and the organization switches that govern them.

A conversation started from any channel is the same conversation: same agent, same skills and permissions, same record. Most channels are a section of the agent's **Channels** pane (the settings card's `CHANNEL` row opens it); Email is its own switch next to the message composer. What you see depends on what your organization has connected and on your user group's switches.

<Frame caption="The Channels pane on an agent. Shown with sample data.">
  <img src="https://mintcdn.com/xpanderai-099931d1/OdLxX9OyFVicAV0l/images/use/18-channels-card.png?fit=max&auto=format&n=OdLxX9OyFVicAV0l&q=85&s=c0d50feb4a2a2e94698ea7321156f11a" alt="Channels pane listing Omni, Email, Slack channels, Teams channels and Developer access sections" width="1440" height="900" data-path="images/use/18-channels-card.png" />
</Frame>

## Slack and Microsoft Teams

An admin connects the workspace or the tenant once under **Settings > Channels**; there is no bot to build. One Slack workspace maps to one organization, and one Microsoft 365 tenant likewise. People are matched to their xpander account by verified email; someone whose email does not match gets a **Link account** button with a code that lasts fifteen minutes.

**Which agent answers a message**, in this order:

1. An @mention of Xpander Chat reaches Omni, the built-in agent, in the author's own conversation, replying in a thread as **"your-name's Omni"** and following that thread for about five minutes without another mention.
2. A slash command, `/agent <name> <prompt>` (or `/xpander`), invokes a named agent the author may use; replies in that thread keep reaching it.
3. A direct message reaches Omni in a standing conversation; `new chat` or `reset` starts a fresh one.
4. An untagged message in a **channel routed to an agent** reaches that agent when auto-engagement is on and one of the channel's rules matches; a judge model confirms the intent, and a message addressed to a person is left alone. Once engaged, the agent follows the thread for about five minutes. Thread replies engage only when **Also engage in thread replies** is on for the channel.
5. Nothing matches: the message is ignored.

**Route a channel to an agent** from the agent's Channels pane (**Add a channel to listen to**) or from the composer's channel selector; one agent per channel, and Xpander Chat must be a member, which means `/invite @xpander` in a private channel. A channel row holds:

* **Rules**: plain-language descriptions of when to step in, each with an optional extra instruction for that case. The **Auto-engage** switch governs them; mentions always get through.
* **Reply**: **Also engage in thread replies**, and **Judge every message** instead of staying engaged after a match.
* **Where**: this channel, this channel and more, or somewhere else. The extra channels receive the finished answer only.
* **Format**: free-text instructions for how answers in this channel should look, which override the agent's own output format for that channel.

Rule edits take effect within a minute. A routed agent answers in the thread under its own name and icon, attributed to the message's author and, where systems allow, acting with that person's permissions. Several people in one thread each address the agent as themselves; the thread's conversation is shared, the follow window is per person. Replies from Teams follow the same rules, in the reply chain, without a per-channel format field.

**Progress while the agent works**: one status line that updates, then the finished answer. **Show detailed tool activity** on the channel row lists the steps instead. Slack streams word by word only in direct messages; channel replies arrive whole. Files in Slack are read (images and PDFs through OCR, voice notes transcribed, links fetched), each switchable workspace-wide under **Slack behavior**. A run's held approvals reach the approvers in Slack too.

Giving an agent its own @handle in Slack, relaying answers to other channels and troubleshooting are on [Agents in Slack](/guides/deploy/slack) and [Agents in Microsoft Teams](/guides/deploy/microsoft-teams).

## Email

The **Email** switch is opened from the mail icon beside the message composer, not the Channels pane. It gives the agent an address, `<handle>@xpander.bot` on xpander cloud. The switch also sets a sender policy, **Anyone**, **Listed senders** of addresses or domains, or a **Custom pattern**, and a **Reply to newsletters** switch. Mail to it, with attachments, becomes a turn; the answer is a reply in the same thread. A self-hosted installation can carry its own inbound mail domain; see [Email](/run/integrations/email).

## WhatsApp and Telegram

Members link a phone number or a Telegram account to their xpander account and talk to Omni, the built-in agent, from there; Omni hands work to the organization's agents as it does in Xpander Chat. Replies come back in the same chat, whole, and a message sent while a run is in progress is steered into the run. Both ride identities xpander owns, so they are offered on xpander cloud only; an admin switches each on or off for the organization under Settings > Channels.

## Webhook

<Frame caption="Developer access on a self-hosted install, before a public URL is generated.">
  <img src="https://mintcdn.com/xpanderai-099931d1/OdLxX9OyFVicAV0l/images/verify/reach-channels-pane2.png?fit=max&auto=format&n=OdLxX9OyFVicAV0l&q=85&s=39aa773ba3651cfdcade2ff90359f90b" alt="Channels pane showing Omni and Developer access sections, with API endpoint and a Generate public URL button" width="1440" height="900" data-path="images/verify/reach-channels-pane2.png" />
</Frame>

**Developer access > Public webhook URL** mints a URL that is itself the credential: anyone holding it can `POST` to it and run this agent with no API key, which suits a form builder, a CI job or a landing page. Treat it like a password. **Regenerate URL** revokes the old one immediately. The call returns the task's result when it completes, or `{"status": "Started", "task_id": ...}` with `?asynchronous=true`; it accepts JSON, form fields and multipart files. Field mapping and result extraction are on [Webhooks](/guides/deploy/webhooks).

## API

**Developer access > API endpoint** shows the address of the conversation API, `POST /v1/agents/{agent_id}/gateway/invoke`, which runs one turn of a conversation and returns the reply. A system that starts tasks and reads them back later uses `POST /v1/agents/{agent_id}/invoke` instead; both take an organization API key that can be scoped to named agents. See [API and structured output](/use/agents/api).

## MCP clients

People reach Omni, and through it your agents, from Claude Code, Cursor, Claude Desktop, ChatGPT and other MCP clients at `https://omni.xpander.ai/mcp`, signed in with OAuth in the browser. That is a personal connection, not a per-agent setting; setup is on [Connect your MCP client](/guides/deploy/omni-mcp). A separate endpoint, `https://api.xpander.ai/mcp/`, exposes the xpander API itself over MCP for integrations; it is not an agent, and it also signs in with OAuth 2.1. See [Model Context Protocol](/api-reference/mcp).

## Schedules

A cron schedule or a re-check the agent books for itself starts a turn in the agent's own conversation with no person present. See [Schedules](/use/agents/schedules).

## What your administrator controls

A workspace or tenant is connected once under **Settings > Channels**, where each channel also has an organization-wide switch; the steps are on [Slack workspace](/run/integrations/slack) and [Microsoft Teams tenant](/run/integrations/microsoft-teams). Which channel sections you may configure on an agent is set per user group under **Triggers**.

## What is recorded

Every task from any channel appears in the Task Manager with its source, under the person who asked; runs nobody started, such as webhooks and schedules, act as the agent's background user. Conversations that started in a Slack or Teams channel are listed under the organization's tasks, not in the personal sidebar; direct-message conversations appear in the sidebar. Changes to the organization switches land in **Settings > Audit logs** as `Org Channels Updated`.
