Channels
ScalyClaw connects to seven messaging platforms simultaneously. One memory, one personality, one configuration — across all of them. Each channel is an independent adapter that normalises platform-specific message formats into a shared internal envelope before handing off to the orchestrator.
Overview
All channels share the same orchestrator, memory system, and personality defined in your mind/ files. Per-channel session state is stored in Redis at scalyclaw:session:{channelId} using a Lua-atomic state machine, so a busy Telegram conversation never blocks a simultaneous Discord one.
| Channel | Transport | Features | Status |
|---|---|---|---|
| Telegram | Bot API | Text, images, voice, documents, inline buttons | Stable |
| Discord | Gateway WebSocket | Text, embeds, threads, reactions | Stable |
| Slack | Socket Mode WebSocket | Text, Block Kit, threads, reactions, slash commands | Stable |
| Meta Cloud API (webhook) | Text, images, documents | Beta | |
| Signal | signald REST bridge | Text, attachments | Experimental |
| Teams | Azure Bot Framework | Text, Adaptive Cards | Beta |
| Web Gateway | HTTP REST + WebSocket | Full API access, real-time streaming, custom UIs | Stable |
Telegram
The Telegram adapter uses the official Bot API. You can restrict access to specific Telegram user IDs via the allowlist, and independently control whether direct messages and group messages are accepted.
Setup
- Open Telegram and start a chat with @BotFather.
- Send
/newbot, follow the prompts, and copy the bot token. - In the ScalyClaw dashboard, go to Channels → Telegram.
- Paste the token into the Bot Token field and save.
- Set DM Policy to
alloworallowlistand Group Policy toallowordeny. - Optionally add Telegram user IDs to the Allowlist.
Supported Capabilities
- Text messages (UTF-8, Markdown V2 formatting)
- Photo and document uploads — forwarded to the orchestrator as attachments
- Voice messages — transcribed before processing
- Inline keyboards returned as button payloads
// scalyclaw:config — channels.telegram { "botToken": "1234567890:ABC-your-bot-token-here", "allowlist": ["123456789"], // Telegram user IDs; empty = allow all "dmPolicy": "allowlist", // "allow" | "allowlist" "groupPolicy": "deny", // "allow" | "deny" "textChunkLimit": 4096, // max chars per message "mediaMaxMb": 20 // max media size in MB }
Discord
The Discord adapter uses the Gateway WebSocket API. You will need to create an application in the Discord Developer Portal and configure the correct gateway intents so ScalyClaw can read message content.
Setup
- Go to the Discord Developer Portal and create a new application.
- Navigate to the Bot tab, click Add Bot, and copy the bot token.
- Under Privileged Gateway Intents, enable Message Content Intent and Server Members Intent.
- Use the OAuth2 URL generator to invite the bot to your server with the
botscope andSend Messages,Read Message History, andAdd Reactionspermissions. - In the ScalyClaw dashboard, go to Channels → Discord and paste the bot token.
- Optionally restrict to specific guild IDs or channel IDs.
Supported Capabilities
- Text messages with Discord Markdown
- Rich embeds for structured responses
- Thread creation and participation
- Reaction-based interactions
// scalyclaw:config — channels.discord { "botToken": "your-discord-bot-token-here", "allowlist": ["1234567890"], // guild or channel IDs; empty = allow all "textChunkLimit": 2000 // max chars per message }
Slack
The Slack adapter uses Socket Mode, which means no public webhook URL is required. ScalyClaw connects to Slack over a persistent WebSocket, making it suitable for private or firewalled deployments.
Setup
- Go to api.slack.com/apps and create a new app from scratch.
- Under Socket Mode, enable it and generate an App-Level Token with the
connections:writescope. Copy it. - Under OAuth & Permissions, add the following bot token scopes:
chat:write,channels:history,groups:history,im:history,reactions:write,commands. - Install the app to your workspace and copy the Bot User OAuth Token.
- Under Event Subscriptions, subscribe to
message.channels,message.groups,message.im. - In the ScalyClaw dashboard, paste both tokens into Channels → Slack.
Supported Capabilities
- Text messages and Block Kit formatting for rich layouts
- Thread-aware replies — ScalyClaw tracks thread timestamps
- Emoji reactions for lightweight acknowledgements
- Slash commands registered at install time
// scalyclaw:config — channels.slack { "botToken": "xoxb-your-bot-token-here", // xoxb-… Bot User OAuth Token "appToken": "xapp-your-app-token-here", // xapp-… Socket Mode App-Level Token "textChunkLimit": 3000 // max chars per message }
The WhatsApp adapter uses the Meta Cloud API. Incoming messages arrive via a webhook registered with Meta; ScalyClaw verifies the webhook signature and responds through the same API. No WhatsApp Business App is required — everything goes through Meta's cloud infrastructure.
Setup
- Create a Meta Business account and a Meta App at developers.facebook.com.
- Add the WhatsApp product to your app and complete business verification.
- Under WhatsApp → Configuration, set the Webhook URL to
https://your-domain.com/webhook/whatsappand enter a Verify Token you choose. - Subscribe to the
messageswebhook field. - Copy the Phone Number ID, Access Token, and Verify Token into the ScalyClaw dashboard under Channels → WhatsApp.
Supported Capabilities
- Text messages with basic formatting
- Image and document uploads received as media URLs
- Read receipts handled automatically
Meta requires business verification before you can send messages to arbitrary phone numbers. During development, you can only message numbers explicitly added as test numbers in the Meta Developer Portal. Production access requires completing Meta's review process, which can take several days.
// scalyclaw:config — channels.whatsapp { "phoneNumberId": "1234567890", "accessToken": "your-meta-access-token", "verifyToken": "your-webhook-verify-token", "appSecret": "your-app-secret", // optional, for signature verification "apiVersion": "v21.0", "textChunkLimit": 4096 // max chars per message }
Signal
Signal does not provide an official bot API. ScalyClaw connects to Signal through signald, an open-source daemon that links a Signal account and exposes a local REST/socket interface. You run signald alongside ScalyClaw and configure the endpoint.
Setup
- Install signald by following the signald installation guide.
- Register or link a Signal number with signald:
signaldctl account register +15555550100 - Start the signald daemon. It listens on a Unix socket or a configurable HTTP port.
- In the ScalyClaw dashboard, go to Channels → Signal and provide the signald endpoint and your linked phone number.
Supported Capabilities
- Text messages (end-to-end encrypted, same as native Signal)
- File and image attachments
- Group message support (read and reply)
signald is an independent open-source project maintained by the community. It is not affiliated with Signal Messenger LLC. Using it may violate Signal's Terms of Service. ScalyClaw does not bundle or maintain signald — you are responsible for running and updating it.
// scalyclaw:config — channels.signal { "apiUrl": "http://localhost:9080", // signald REST URL "phoneNumber": "+15555550100", // linked Signal number "pollIntervalMs": 2000, // polling interval in milliseconds "textChunkLimit": 4096 // max chars per message }
Teams
The Microsoft Teams adapter is built on the Azure Bot Framework. ScalyClaw registers as a bot in Azure, and messages flow through the Bot Framework's activity relay. Responses can use Adaptive Cards for richly structured output.
Setup
- In the Azure Portal, create a new Bot Channels Registration resource. Copy the App ID and generate a Client Secret.
- Set the messaging endpoint to
https://your-domain.com/webhook/teams. - In the Azure portal's Bot resource, open Channels and add the Microsoft Teams channel.
- Create a Teams app manifest using App Studio or the Developer Portal and sideload it to your tenant, or publish it through the Teams admin center.
- In the ScalyClaw dashboard, go to Channels → Teams and enter the App ID and Client Secret.
Supported Capabilities
- Text messages with Markdown formatting
- Adaptive Cards for interactive and structured responses
- Personal chats and channel mentions
The Teams channel requires an active Azure subscription. The Bot Channels Registration resource itself is free, but you need a subscription to create it. Outbound messages from ScalyClaw count against the Bot Framework's standard rate limits.
// scalyclaw:config — channels.teams { "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "appPassword": "your-azure-client-secret", // Azure client secret "textChunkLimit": 4096 // max chars per message }
Web Gateway
The Web Gateway is the only channel that requires no external service or third-party account. ScalyClaw exposes an HTTP REST endpoint and a WebSocket endpoint directly. It is the fastest way to test the system, build custom UIs, or integrate ScalyClaw into an existing application.
Endpoints
| Method | Path | Description |
|---|---|---|
POST | /api/message | Send a message and receive the response synchronously |
GET | /api/history | Retrieve recent conversation history |
WebSocket | /ws | Real-time bidirectional stream — send messages, receive streaming tokens |
Setup
- In the ScalyClaw dashboard, go to Channels → Web and enable it.
- Set the port (default
3000). The gateway starts automatically when the process starts. - Optionally set
authTypetobearerorbasicand provide anauthValueto restrict access.
REST Example
# Send a message and get a response curl -X POST http://localhost:3000/api/message \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your-auth-value" \ -d '{"text": "What is the weather like today?", "channelId": "web-default"}'
WebSocket Example
const ws = new WebSocket("ws://localhost:3000/ws"); ws.onopen = () => { ws.send(JSON.stringify({ text: "Hello, ScalyClaw!", channelId: "web-default" })); }; ws.onmessage = (event) => { const msg = JSON.parse(event.data); if (msg.type === "token") process.stdout.write(msg.text); // streaming token if (msg.type === "done") console.log("\n[done]"); };
Config
// scalyclaw:config — gateway (NOT config.channels) { "host": "127.0.0.1", "port": 3000, "bind": "127.0.0.1", "authType": "bearer", // "none" | "bearer" | "basic" "authValue": "your-secret-token", // null to disable auth "tls": { "cert": "", "key": "" }, "cors": ["http://localhost:5173"] // allowed origins for browser clients }
The Web Gateway is also what the ScalyClaw dashboard uses internally for its built-in chat widget. You can use the same WebSocket endpoint to embed a chat interface in any web application — no extra server code needed.