Back to README
PicoClaw exposes WeCom as a single channels.wecom channel built on the official WeCom AI Bot WebSocket API.
This replaces the legacy wecom, wecom_app, and wecom_aibot split with one unified configuration model.
No public webhook callback URL is required. PicoClaw opens an outbound WebSocket connection to WeCom.
image, file, voice, video)reasoning_channel_id routingOpen the Web UI, navigate to Channels → WeCom, and click the QR binding button. Scan the QR code with WeCom and confirm in the app — credentials are saved automatically.
Run:
picoclaw auth wecom
The command:
bot_id and secret into channels.wecom and saves the configThe default timeout is 5 minutes. Use --timeout to extend it:
picoclaw auth wecom --timeout 10m
⚠️ Scanning the QR code is not enough — you must also tap Confirm inside the WeCom app, otherwise the command will time out.
If you already have a bot_id and secret from the WeCom AI Bot platform, configure directly:
{
"channel_list": {
"wecom": {
"enabled": true,
"type": "wecom",
"bot_id": "YOUR_BOT_ID",
"secret": "YOUR_SECRET",
"websocket_url": "wss://openws.work.weixin.qq.com",
"send_thinking_message": true,
"allow_from": [],
"reasoning_channel_id": ""
}
}
}
| Field | Type | Default | Description |
|---|---|---|---|
enabled |
bool | false |
Enable the WeCom channel. |
bot_id |
string | — | WeCom AI Bot identifier. Required when enabled. |
secret |
string | — | WeCom AI Bot secret. Stored encrypted in .security.yml. Required when enabled. |
websocket_url |
string | wss://openws.work.weixin.qq.com |
WeCom WebSocket endpoint. |
send_thinking_message |
bool | true |
Send a Processing... message before the streamed reply begins. |
allow_from |
array | [] |
Sender allowlist. Empty means allow all senders. |
reasoning_channel_id |
string | "" |
Optional chat ID to route reasoning/thinking output to a separate conversation. |
All fields can be overridden via environment variables with the prefix PICOCLAW_CHANNELS_WECOM_:
| Environment Variable | Corresponding Field |
|---|---|
PICOCLAW_CHANNELS_WECOM_ENABLED |
enabled |
PICOCLAW_CHANNELS_WECOM_BOT_ID |
bot_id |
PICOCLAW_CHANNELS_WECOM_SECRET |
secret |
PICOCLAW_CHANNELS_WECOM_WEBSOCKET_URL |
websocket_url |
PICOCLAW_CHANNELS_WECOM_SEND_THINKING_MESSAGE |
send_thinking_message |
PICOCLAW_CHANNELS_WECOM_ALLOW_FROM |
allow_from |
PICOCLAW_CHANNELS_WECOM_REASONING_CHANNEL_ID |
reasoning_channel_id |
| Previous config | Migration |
|---|---|
channels.wecom (webhook bot) |
Replace with channels.wecom using bot_id + secret. |
channels.wecom_app |
Remove. Use channels.wecom instead. |
channels.wecom_aibot |
Move bot_id and secret to channels.wecom. |
token, encoding_aes_key, webhook_url, webhook_path |
No longer used. Remove from config. |
corp_id, corp_secret, agent_id |
No longer used. Remove from config. |
welcome_message, processing_message, max_steps |
No longer part of the WeCom channel config. |
--timeout: picoclaw auth wecom --timeout 10mpicoclaw auth wecom to get a fresh one.bot_id and secret are correct.wss://openws.work.weixin.qq.com (outbound WebSocket, no inbound port needed).allow_from is blocking the sender.channels.wecom.bot_id and channels.wecom.secret are set and non-empty.