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

# Messaging channels (Telegram, Slack, Messenger)

> Connect Discord, Teams, Google Chat, and other messaging channels to one shared assistant

Multi-channel messaging lets the same assistant answer customers on Telegram, Slack, Messenger, Microsoft Teams, Discord, Google Chat, X, and WhatsApp. Replies use text; incoming voice notes can be transcribed and images can be analyzed as described below. Phone and WhatsApp voice calls are configured separately. Every conversation lands in [History](/monitoring/history).

[SMS](/channels/sms)

## Voice notes and image analysis

When a connected channel supplies an accessible audio attachment, the assistant transcribes the speech and uses it as message text. For images, image analysis creates a short description of what the customer sent, including readable text where possible. The assistant uses that description in its reply. This also applies to audio and images attached to messages in connected mailbox and support channels, such as Zoho Mail. The reply follows the channel's normal text or email format.

* The first **5 attachments per message** can be processed, with a maximum of **10 MiB per attachment**.
* In **History**, an audio attachment shows its transcript when transcription succeeds and a player when the audio is available. The transcript remains readable if playback is unavailable.
* Images appear in **History** with their available descriptions. Descriptions summarize photos or screenshots; they are not a complete OCR export. PDFs, videos and other files are not analyzed by this attachment feature.
* The channel must include the attachment or allow the connected account to download it. A filename, private preview, or inaccessible link alone cannot be transcribed. Audio and image format support and access permissions can vary by channel.
* If a file cannot be downloaded or analyzed, the message keeps its attachment information without a transcript or description; the assistant cannot use the unavailable content.

Teams file attachments require the current channel app package and a personal chat. X and SMS currently have no inbound media path. Instagram voice notes depend on the channel supplying a downloadable audio file.

To retrieve a messaging conversation, including available transcripts, image descriptions and media links, use `GET /api/v1/history/messaging/{id}` or the MCP tool `get_messaging_history_item`. Obtain the conversation ID from `GET /api/v1/history` or `list_history`. Media links expire after one hour; fetch the conversation again to refresh them. Conversation detail includes up to 500 messages in chronological order.

## Tools (voice parity)

The assistant can use the same text-safe tools as on voice:

* API tools (HTTP)
* MCP tools (workspace + assistant servers)
* Knowledge base search
* Calendar integrations (built-in engine / Cal.com / Calendly / Acuity / eTermin / HighLevel / meetergo)
* Built-ins: current time, business hours, send SMS, send email, schedule callback, set variable

Voice-only actions are unavailable on text channels: call or assistant transfer, end call, DTMF/keypad, and payment-card collection.

## Prerequisites

1. Your plan includes the channel you want to connect (Telegram, Slack, Messenger, Teams, Discord, Google Chat, X, WhatsApp text / WhatsApp voice).
2. If a provider requires a webhook, use the exact URL shown after you connect the channel. Verified custom domains are supported automatically.

## Connect (product UI)

Channels you have not connected yet are listed under **Settings → Channels → All channels**. Once connected, a channel also appears in the Settings menu.

Settings → Channels → Telegram / Slack / Messenger:

1. Pick an assistant.
2. Connect with one-click where available (**Add to Slack**, **Connect with Facebook**) or paste bot credentials manually.
3. Configure conversation settings (below).
4. Save — Telegram webhooks are registered automatically; Slack/Messenger **BYO** need the shown webhook URL in their developer consoles. One-click installs require no URL copy.

<Frame caption="Settings → Channels → Telegram → Add: enter a Display name, choose the Assistant and provide the bot credentials in the connection form.">
  <img src="https://mintcdn.com/ouraicall/bijtnxODi_f3mm69/images/guide-ui/telegram-connect.png?fit=max&auto=format&n=bijtnxODi_f3mm69&q=85&s=8ec6c9f680914e55ddfeae57945c33e9" alt="Add Telegram form with name, assistant, empty bot token and optional username fields" width="520" height="473" data-path="images/guide-ui/telegram-connect.png" />
</Frame>

### Slack — Add to Slack

Preferred onboarding (platform domain / root workspaces only — not whitelabel hosts) uses the **shared Famulor Slack app**:

1. Settings → Channels → Slack → **Add to Slack**
2. Approve the requested Slack permissions.
3. Return to the channel settings and confirm the connection is active.

Manual bot-token + signing-secret paste remains available as a fallback (per-connector webhook URL shown in Settings). Whitelabel hosts keep manual only (the shared bot would appear as Famulor).

Public API: `GET/POST /api/v1/slack/oauth` · MCP: `get_slack_oauth_config`, `start_slack_oauth`.

<Frame caption="Settings → Channels → Slack → Add: choose the Assistant and select Add to Slack to open the authorization flow where one-click connection is available.">
  <img src="https://mintcdn.com/ouraicall/bijtnxODi_f3mm69/images/guide-ui/slack-connect.png?fit=max&auto=format&n=bijtnxODi_f3mm69&q=85&s=eb3661abf85db8bc3820a18b8a8e4c82" alt="Add Slack form with assistant selection and Add to Slack authorization button" width="520" height="466" data-path="images/guide-ui/slack-connect.png" />
</Frame>

### Messenger — Connect with Facebook

Preferred onboarding (platform domain / root workspaces only — not whitelabel hosts) uses the **same platform Meta app** as WhatsApp:

1. Settings → Channels → Messenger → **Connect with Facebook** (HTTPS required)
2. Approve the requested permissions and select a Facebook Page.
3. Return to the channel settings and confirm the connection is active.

Manual page-token paste remains available as a fallback (per-connector webhook URL shown in Settings).

Public API: `GET/POST /api/v1/messenger/facebook-login` · MCP: `complete_messenger_facebook_login`.

## Conversation settings

Applies to every text channel:

<Frame caption="In the channel connection, open Conversation settings to set Response delay, Inactivity timeout, Allow re-triggering and AI auto-replies.">
  <img src="https://mintcdn.com/ouraicall/bijtnxODi_f3mm69/images/guide-ui/messaging-conversation-settings.png?fit=max&auto=format&n=bijtnxODi_f3mm69&q=85&s=157395e82129f9145ff116fc1a3bf6aa" alt="Messaging connection controls for response delay, inactivity, repeated triggers and AI replies" width="473" height="649" data-path="images/guide-ui/messaging-conversation-settings.png" />
</Frame>

| Setting | Default | Description |
| - | - | - |
| **Response delay (seconds)** | `5` | Slider `0`–`30`. Wait after the last customer message before one reply (merges quick multi-message bursts). `0` = reply instantly to every message. |
| **Inactivity timeout (minutes)** | `30` | Minutes of inactivity after the last customer message before the conversation is marked ended. |
| **Allow re-triggering** | off | If enabled, the conversation-ended webhook can fire again when the customer resumes an ended conversation and goes inactive again. |
| **Conversation ended webhook URL** | empty | Optional HTTPS URL. Leave empty to disable. Use **Test webhook** to send a sample payload. |

### Conversation ended webhook

Three things send a `conversation.ended` delivery:

* **Inactivity** — the inactivity timeout above elapses with no new customer message (checked about once a minute).
* **Manual** — someone selects **Actions → End conversation** on an open conversation in [History](/monitoring/history).
* **Test** — you select **Test webhook** in the connector's settings; this always sends a realistic example payload, whether or not a real conversation has ended yet.

Before sending, the platform runs the assistant's configured [analysis](/assistants/analysis) fields over the transcript and closes the conversation, so the payload always carries the finished analysis rather than a partial one. By default each conversation notifies its webhook once; turn on **Allow re-triggering** if a customer can resume an ended conversation and you want a fresh notification the next time it goes inactive.

A delivery looks like this:

```json theme={null}
{
  "event": "conversation.ended",
  "timestamp": "2026-08-26T14:32:07.000Z",
  "reason": "inactivity",
  "data": {
    "tenant_id": "9f86d081-0000-4000-8000-000000000020",
    "conversation_id": "c1b2c3d4-0000-4000-8000-000000000010",
    "platform": "telegram",
    "status": "closed",
    "duration_sec": 187,
    "message_count": 6,
    "conversation": {
      "id": "c1b2c3d4-0000-4000-8000-000000000010",
      "platform": "telegram",
      "external_thread_id": "123456789",
      "external_user_id": "123456789",
      "external_user_name": "Max Mustermann",
      "started_at": "2026-08-26T14:28:40.000Z",
      "ended_at": "2026-08-26T14:32:07.000Z",
      "last_customer_message_at": "2026-08-26T14:29:55.000Z"
    },
    "connector": { "id": "1b2c3d4e-0000-4000-8000-000000000030", "name": "Support Telegram", "platform": "telegram" },
    "assistant": { "id": "2c3d4e5f-0000-4000-8000-000000000040", "name": "Support Assistant" },
    "transcript": "Customer: Hi, I need help with my order.\nAssistant: Of course — what's your order number?",
    "messages": [
      { "id": "msg-1", "role": "user", "direction": "inbound", "text": "Hi, I need help with my order.", "created_at": "2026-08-26T14:28:40.000Z" }
    ],
    "analysis": {
      "summary": "Customer asked about an order and got help finding it.",
      "sentiment": "positive",
      "success": true,
      "success_reason": "The order was located and the delivery date confirmed.",
      "data": { "order_number": "12345" },
      "analyzed_at": "2026-08-26T14:32:07.000Z"
    }
  }
}
```

`reason` is `inactivity`, `manual`, or `test`. `conversation`, `connector`, `assistant`, `transcript`, and `analysis` are repeated at the top level of the payload too, for older receivers built against that flat shape instead of the `data` envelope. Inside `analysis`, only the parts you enabled on the assistant are present — sentiment, success plus its reason, and a `data` map of your own extracted fields; see [Analysis](/assistants/analysis) for the full shape.

Configure the target in the **Conversation ended webhook URL** field above, or with `PATCH /api/v1/messaging-connectors/{id}` / `update_messaging_connector` — each channel connector carries its own URL. To send a delivery again after the fact — for example once a re-evaluation changed the analysis — use **Resend webhooks** on the conversation in [History](/monitoring/history).

## Beta connectors

Ten additional channels connect the same way, once your workspace turns on **Beta Features** under **Settings → Workspace**: Freshdesk, Gmail, Outlook, Zendesk, ServiceNow, Intercom, Zoho Mail, AgentMail, Instagram, and Zulip. Their entries stay out of **Settings → Channels** until Beta Features is on.

Instead of pasting a bot token or app secret, you connect these through Famulor's OAuth connector flow: sign in to the account once, and Famulor keeps the connection alive. Beyond the [conversation settings](#conversation-settings) every text channel shares, a Beta connector can add:

| Setting | What it does | Where it applies |
| - | - | - |
| **Reply mode** | Send the assistant's reply automatically, or save it as a draft in the mailbox for a teammate to review and send. | Gmail, Outlook |
| **Watch** | Which part of the mailbox the assistant answers: the Inbox (the default), the whole mailbox, or a single label or folder. | Gmail, Outlook, Zoho Mail |
| **Extra action** | One additional capability specific to that service — applying a label, tagging a ticket, reacting to a message, and similar. Off until you turn it on. | Every Beta connector, one action each |
| **Import existing items** | On connect, how far back to pull messages that already exist — the last hour, 24 hours, or 7 days. Defaults to new messages only. | Freshdesk, ServiceNow, Intercom, Zoho Mail, Instagram |

<Warning>
  **Import existing items** is not a silent import: every message pulled in gets a real, automatic assistant reply. Leave it on **Only new messages** unless you want the assistant to answer your existing backlog.
</Warning>

## Billing

Sending and receiving messages on Telegram, Slack, Messenger, Teams, Discord, Google Chat, X, and the Beta connectors costs credits per message, at the workspace's **Messaging (sent)** / **Messaging (received)** rate — the same rate [WhatsApp text](/channels/whatsapp#billing) uses. Current rates are on the [Usage page](https://app.famulor.io/usage); see also [How usage is billed](/billing/minutes).

## Platform apps you create

| Channel | What you create | Key fields |
| - | - | - |
| Telegram | Bot via [@BotFather](https://t.me/BotFather) | Bot token |
| Slack | Famulor Slack app (Add to Slack) or BYO Slack App (Bot + Event Subscriptions) | OAuth install; or bot token `xoxb-…` + Signing secret (BYO) |
| Messenger | Platform Meta app (Connect with Facebook) or BYO Meta app + Page | Page access token, App secret, Verify token (BYO); Facebook Login for preferred path |
| Teams | Azure Bot | App ID, App password |
| Discord | Discord Application | Bot token, Public key, Application ID |
| Google Chat | GCP Chat app + service account | Service account JSON |
| X | X developer app + Activity API webhook | Consumer secret, OAuth user token (or client ID + refresh token) |

Copy the connector-specific webhook URL shown in **Settings → Channels**. Telegram configures this automatically after you save.

## Public API & MCP

* REST: `GET/POST /api/v1/messaging-connectors`, `PATCH/DELETE /api/v1/messaging-connectors/{id}`, `GET /api/v1/messaging-connectors/{id}/watch-options` (Gmail labels / Outlook and Zoho Mail folders), `POST /api/v1/messaging-connectors/{id}/ended-webhook-test`
* Slack OAuth: `GET/POST /api/v1/slack/oauth`
* WhatsApp templates: `GET/POST /api/v1/whatsapp/templates`
* WhatsApp outbound voice: `POST /api/v1/calls/whatsapp-outbound`
* MCP tools: `list_messaging_connectors`, `list_messaging_connector_watch_options`, `create_messaging_connector`, `update_messaging_connector`, `delete_messaging_connector`, `test_messaging_ended_webhook`, `get_slack_oauth_config`, `start_slack_oauth`, plus WhatsApp template/call tools
* OpenAPI tag: **Messaging** / **Calls**

## WhatsApp

Full setup (credentials, webhook fields, templates, voice toggles): **[WhatsApp (Text + Voice)](/channels/whatsapp)**.

* **Text:** WhatsApp Business chat, when included in your plan.
* **Voice:** WhatsApp calling on the same connection, when included in your plan — see [WhatsApp Voice](/telephony/whatsapp-voice).
* **Templates:** `GET/POST /api/v1/whatsapp/templates` (+ MCP tools).
* **Outbound voice:** `POST /api/v1/calls/whatsapp-outbound`.

## Email

Full setup — connect a domain, create addresses, set defaults: **[Email channel setup](/channels/email)**. Email conversations appear in [Email history](/email/history) alongside your other channels.

## SMS

A workspace number that is SMS-capable and has **Allow outbound SMS** enabled can send text through the built-in **Send SMS** tool — from an assistant mid-call or mid-chat, or as an automation step (for example, a confirmation after a call ends, or an appointment reminder). See [SMS](/api-reference/sms) for which numbers qualify and the send API.

A few practices keep SMS useful instead of annoying:

* Keep messages short and to the point — SMS has no rich formatting, and it's billed per 160-character segment (70 if you use emoji or accented characters), so length costs money.
* Include opt-out instructions where local law requires them.
* Send a test message to yourself before turning a template loose on a full campaign.
* Keep an eye on SMS spend under **Usage**, especially after changing a template or targeting a new country.

## Message labels

New incoming messages can receive a **Possible scam** label. Unsolicited sales pitches, SEO offers and paid award promotions in email can receive **Advertising**. Labels appear beside the message and in the History list after background processing.

These are advisory hints and may be wrong. Messages remain visible, replies continue as usual, and no message is moved, deleted or marked as spam in a connected mailbox, including Gmail. No label does not mean a message is safe. Booking and customer enquiries should remain unlabelled.

Workspace owners and admins can switch **Message labels** on or off in **Settings → Workspace**, when included in their plan. Changes apply to new messages; existing labels remain. Members with write access can dismiss an incorrect label in the message details.

History API responses and the history MCP tools include active labels. Use `dismiss_inbox_label` to dismiss one, and `get_inbox_label_settings` / `update_inbox_label_settings` to manage the workspace setting.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.