IM channel bridge: WeChat (ilinkai) / QQ / Feishu with proactive push — wake the channel bot from scheduled tasks and deliver AI replies to your phone.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-msg-hub
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:AbcdefgXW/dsh-msg-hub
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
An IM channel bridge plugin for dsh (DeepSeek Harness): connects WeChat (ilinkai) / QQ (Open Platform) / Feishu (Open Platform) messages into dsh agent sessions, with proactive push support (wake the channel bot and deliver the AI reply back to your phone — for scheduled tasks etc.).
Features
- 📱 WeChat: ilinkai simulated protocol (QR login), text / image / voice send/receive
- 💬 QQ: Tencent Open Platform official WebSocket channel, text / image / voice (C2C / group)
- 📡 Feishu: Feishu Open Platform official API (app credentials), text / image / voice (P2P / group)
- 🖼️ Images & voice (supported on all three channels):
- Images: downloaded into
.im-media/<channel>/<date>/in the workspace; only the path enters the session and the agent views it withread_image— dsh natively supports image input and auto-degrades for text-only models; kept 7 days by default (DSH_MSG_HUB_MEDIA_KEEP_DAYS) - Voice: transcribed to text before entering the session (models cannot listen to audio). QQ uses the official
asr_refer_text(free, instant, more accurate than self-hosted ASR) and falls back to self-hosted ASR when empty - WeChat voice: official CDN download → AES-128-ECB decrypt → silk→WAV transcode (
silk-wasm) → self-hosted ASR - Self-hosted ASR setup: put
DASHSCOPE_API_KEYinstate/asr.env; voice is skipped when unset, text and images are unaffected - Retention: media lives in date-based folders and is swept at most once per day on write
- Images: downloaded into
- 🩺 Diagnostic log:
state/logs/bridge-debug.logwith built-in size rotation (default 5MB × 3) and daily log cleanup (default 14 days); tune viaDSH_MSG_HUB_LOG_MAX_BYTES/DSH_MSG_HUB_LOG_KEEP/DSH_MSG_HUB_LOG_KEEP_DAYS - 🧩 Proactive push service (
dsh-channels-pushcordis service):push({channel, peerId, text}): send text directly to IMtask({channel, peerId, prompt}): wake the channel agent to run a task; the AI reply is delivered back to the IM automatically- Consumed by plugins like dsh-toolbox-web's scheduled heartbeat (channel push is unavailable without this plugin; everything else is unaffected)
- 📡 Remote monitoring (keep an eye on tasks away from the computer):
- Remote approval: when the bound session's agent requests approval, the request is pushed to IM (tool name / reason / command detail); reply "批准" or "拒绝" to answer; 5-minute timeout falls back to rejected (safe default)
- Turn push: task started / finished / errored / blocked notifications for the bound session
- Session commands:
/sessionslists the 5 most recent sessions (name+ID),/bind <sessionId>binds,/statusshows the binding
Requirements
- dsh runtime (cordis plugin, registered in the dsh web profile)
- Node.js ≥ 22.13
- Per-channel credentials: WeChat QR / QQ AppID+Secret / Feishu AppID+Secret
Installation
Installation
# Option 1: npm package (recommended)
dsh plugin --profile web add dsh-msg-hub
# Option 2: GitHub repository
dsh plugin --profile web add github:AbcdefgXW/dsh-msg-hub
# Option 3: manual
git clone https://github.com/AbcdefgXW/dsh-msg-hub.git
cd dsh-msg-hub && npm install
```bash
git clone https://github.com/USER/dsh-msg-hub.git
cd dsh-msg-hub && npm install
cd $DSH_HOME/profiles/web && pnpm link /path/to/dsh-msg-hub
Register in cordis.patch.yml:
- insert:
- id: dsh-msg-hub
name: dsh-msg-hub
Restart dsh web.
Channel connection guide
WeChat (ilinkai QR login)
node scripts/weixin-login.mjs login
- A QR code appears in the terminal — scan it with the WeChat app
- On success the token is saved to
state/weixin/; restart dsh to activate - A dedicated WeChat account is recommended (simulated protocol — see "Safety Notes" for risk-control warnings)
QQ (Open Platform official bot, two options)
First register a bot app on the QQ Open Platform to get AppID and AppSecret:
# Option A: credentials directly (recommended once the bot exists)
node scripts/qq-login.mjs --appid <AppID> --secret <AppSecret>
# Option B: QR binding (requires an existing bot under this QQ account)
node scripts/qq-login.mjs
Restart dsh after configuring. ⚠️ Proactive pushes additionally require applying for "proactive message permission" on the Open Platform, otherwise they fail silently (passive replies are unaffected).
Feishu (Open Platform enterprise self-built app)
- Create an "enterprise self-built app" on the Feishu Open Platform → enable the bot capability → publish the app
- Copy AppID and AppSecret from the app's "Credentials & Basic Info" page (needs app admin permission)
node scripts/feishu-login.mjs --appid <AppID> --secret <AppSecret>
Restart dsh after configuring.
Credentials are stored under the plugin
state/dir (gitignored, never committed); all three channels can run simultaneously.
Environment Variables
| Variable | Purpose | Default |
|---|---|---|
DSH_CHANNELS_STATE_DIR |
channel state dir (credentials/logs/data) | plugin state/ dir |
DSH_CHANNELS_CWD |
channel agent workspace root | /workspace |
Safety Notes
- WeChat (ilinkai) uses a simulated web protocol (not an official API) — frequent proactive messaging carries account risk-control risk; keep push frequency low (scheduled interval ≥ 15 minutes)
- QQ proactive messages require applying for "proactive message permission" on the Open Platform; without it, proactive pushes fail silently (passive replies are unaffected)
- Feishu uses the official API — compliant and safe
- Credentials live in
state/(excluded via.gitignore) — never commit them
License
MIT
Links
More in this category
xmanrui/dsh-im★ 3574
Connect IM bots to DeepSeek Harness via QR codes or bot credentials (9 channels: Feishu, WeChat, DingTalk, WeCom, QQ, Slack, Telegram, Discord, and WhatsApp).
shaobeichen/dsh-pocket★ 2955
Remote phone access to the DSH Web UI: scan a QR code for LAN or public (cloudflared tunnel) access with real-time sync, a mobile-adaptive layout, and a settings tab.
OpenPetsHQ/openpets#dsh★ 1400
Bridges DeepSeek Harness lifecycle status, errors, and approval requests to a locally running OpenPets desktop companion.
c1overzz/dsh-bili-scroll★ 1393
Let your DSH agent browse Bilibili on its own, read subtitles, write a daily digest, and @ you when it finds something worth your attention.
inclusionAI/Avernet#deepseek-harness-channel-bcn★ 602
Connects DeepSeek Harness to Avernet's Bot Collaboration Network over WebSocket V2, with automatic onboarding, isolated agent sessions, tool-call events, and multi-bot routing tools.
zaofan-make/dsh-qqbot★ 251
QQ official bot channel (enhanced fork of tencent-connect/dsh-qqbot): full agent chat in groups and DMs, rich media, an auto-tagged sticker library with AI image replies, join approval, mute and broadcast, scheduled wakeups, remote approvals over QQ, interactive cards, multi-account instances, extensions, member profiles, and token-saving value-scored wakeups.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.