# 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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.molt.id/getting-started/openclaw-service/channels-and-plugins.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
