Skip to main content

Chat Channels

Connect PicoClaw to messaging platforms through its gateway mode.

picoclaw gateway

Supported Channels

ChannelDifficultyNotes
TelegramEasyRecommended. Supports voice transcription with Groq.
DiscordEasyBot token + intents. Supports group trigger.
SlackEasySocket mode, no public IP needed.
QQEasyOfficial QQ bot API (AppID + AppSecret).
DingTalkMediumStream mode, no public IP needed.
WeComEasyUnified WebSocket-based WeCom integration via AI Bot API. QR login supported.
FeishuHardEnterprise collaboration platform.
LINEHardWebhook via shared gateway port.
OneBotMediumCompatible with NapCat/Go-CQHTTP.
MatrixEasyOpen, decentralized protocol. Supports typing, placeholder, media.
WhatsAppMediumBridge mode or native (whatsmeow).
MaixCamEasyHardware-integrated AI camera.
VKEasyVKontakte community bot via Long Poll API.
PicoEasyNative WebSocket channel for custom clients.

How It Works

  1. Configure one or more channels in ~/.picoclaw/config.json under the channels key
  2. Set "enabled": true for each channel you want to use
  3. Run picoclaw gateway to start listening
  4. The gateway handles all channels concurrently

Access Control

All channels support the allow_from field to restrict access to specific users:

{
"channels": {
"telegram": {
"enabled": true,
"token": "YOUR_TOKEN",
"allow_from": ["123456789"]
}
}
}

Set allow_from to an empty array [] to allow all users. You can also set allow_from: ["*"] to explicitly allow all users (a warning will be logged at startup).

Common Channel Fields

All channels support these optional fields:

FieldDescription
reasoning_channel_idRoute reasoning/thinking output to a separate channel
group_triggerControl bot behavior in group chats (mention-only, prefixes)

Shared Gateway

All webhook-based channels (LINE, DingTalk, etc.) share the single gateway HTTP server on port 18790. Per-channel webhook_host/webhook_port fields are no longer needed — just configure webhook_path to differentiate endpoints. WeCom now uses outbound WebSocket and does not require a public-facing webhook.

Log verbosity is controlled by gateway.log_level (default: warn). Supported values: debug, info, warn, error, fatal.