> For the complete documentation index, see [llms.txt](https://docs.molt.id/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.molt.id/getting-started/openclaw-service/channels-and-plugins.md).

# Channels & Plugins

### Connect your agent to Telegram, Discord, and Slack. Configure OpenClaw plugins and skills.

## Channels & Plugins

Each Molt.id Multiclaw Service instance can connect to messaging platforms and extend functionality through OpenClaw's plugin and skill system.

***

### Supported Channels

| Channel      | Connection Mode                          |
| ------------ | ---------------------------------------- |
| **Telegram** | Webhook (works with sleeping containers) |
| **Discord**  | Gateway (polling)                        |
| **Slack**    | Socket mode                              |

***

### Telegram Integration

Telegram is the primary channel and uses **webhook mode**, which works seamlessly with sleeping containers:

1. A Telegram user sends a message to your bot
2. Telegram delivers the message to the Molt.id Multiclaw Service worker
3. The worker wakes the container (if sleeping)
4. The message is proxied to OpenClaw inside the container
5. OpenClaw processes the message and replies via the Telegram API

OpenClaw automatically registers its webhook with Telegram on startup. The webhook secret is deterministic, so it survives container restarts.

{% hint style="info" %}
**Why webhooks?** Since containers sleep after 10 minutes of inactivity, polling-based connections would disconnect. Telegram webhooks let incoming messages wake the container on demand — your agent responds even if it's been idle for hours.&#x20;
{% endhint %}

***

### Device Pairing

When a channel uses `pairing` mode (the default), users must be approved before they can chat with the agent:

1. Unknown user sends a message to the bot
2. OpenClaw generates a pairing code
3. The domain owner approves the pairing request
4. Approved device is saved and persists across container restarts

This prevents unauthorized users from interacting with your agent.

***

### OpenClaw Plugins

OpenClaw has a built-in plugin system. Molt.id Multiclaw Service enables the following plugins in each container:

#### Channel Plugins

`telegram` · `discord` · `slack` · `whatsapp` · `signal` · `line` · `mattermost` · `msteams` · `googlechat`

#### Core Plugins

`memory-core` · `llm-task` · `lobster` · `open-prose`

***

### Skills & Workspace

Each user has a workspace directory inside their container. This directory:

* Persists across container restarts (via R2 snapshots)
* Can contain custom files, scripts, and skill definitions
* Contains an `IDENTITY.md` file with the agent's persona:

markdown

```markdown
# Agent Identity

- name: {agentName}
- emoji: lobster
- creature: lobster
- vibe: autonomous, helpful
- theme: molt.id autonomous agent
- avatar: https://molt.id/logo.png
```

A separate skills directory is available for future skill file support.

***

### Setting Up Channels

#### Telegram

1. Message [@BotFather](https://t.me/BotFather) on Telegram to create a new bot
2. Copy the bot token
3. In the Molt.id UI → **My Domains** → your domain → **Channel Settings**
4. Paste the token in the Telegram field
5. Set DM policy (`pairing` for approval-based access, or `open` for anyone)
6. Click **Save** and **Restart Agent**

Your agent will automatically register its webhook with Telegram on startup.

#### Discord

1. Create a bot in the [Discord Developer Portal](https://discord.com/developers/applications)
2. Copy the bot token
3. In Channel Settings, paste the token in the Discord field
4. Save and restart

{% hint style="info" %}
Discord uses gateway polling, which requires an active container. If the container sleeps, the Discord connection will drop until the next wake event (e.g., a Telegram message or web visit)
{% endhint %}

#### Slack

1. Create a Slack app at [api.slack.com/apps](https://api.slack.com/apps)
2. Enable Socket Mode and generate an app-level token
3. Add a bot token with the required scopes
4. In Channel Settings, paste both the bot token and app token
5. Save and restart
