Some checks failed
ClawSweeper Dispatch / dispatch (push) Has been cancelled
CodeQL / Security High (actions) (push) Has been cancelled
CodeQL / Security High (channel-runtime-boundary) (push) Has been cancelled
CodeQL / Security High (core-auth-secrets) (push) Has been cancelled
CodeQL / Security High (mcp-process-tool-boundary) (push) Has been cancelled
CodeQL / Security High (network-ssrf-boundary) (push) Has been cancelled
CodeQL / Security High (plugin-trust-boundary) (push) Has been cancelled
CodeQL / Security High (process-exec-boundary) (push) Has been cancelled
Docs Sync Publish Repo / sync-publish-repo (push) Has been cancelled
Docs / docs (push) Has been cancelled
OpenClaw Stable Main Closeout / Resolve stable release closeout inputs (push) Has been cancelled
OpenClaw Stable Main Closeout / Verify stable main closeout (push) Has been cancelled
Workflow Sanity / no-tabs (push) Has been cancelled
Workflow Sanity / actionlint (push) Has been cancelled
Workflow Sanity / generated-doc-baselines (push) Has been cancelled
CI / runner-admission (push) Has been cancelled
CI / preflight (push) Has been cancelled
CI / security-fast (push) Has been cancelled
CI / pnpm-store-warmup (push) Has been cancelled
CI / build-artifacts (push) Has been cancelled
CI / native-i18n (push) Has been cancelled
CI / ${{ matrix.check_name }} (push) Has been cancelled
CI / ${{ matrix.checkName }} (push) Has been cancelled
CI / checks-node-compat-node22 (push) Has been cancelled
CI / check-bundled-channel-config-metadata (push) Has been cancelled
CI / check-dependencies (push) Has been cancelled
CI / check-guards (push) Has been cancelled
CI / check-lint (push) Has been cancelled
CI / check-prod-types (push) Has been cancelled
CI / check-shrinkwrap (push) Has been cancelled
CI / check-test-types (push) Has been cancelled
CI / check-additional-boundaries-a (push) Has been cancelled
CI / check-additional-boundaries-bcd (push) Has been cancelled
CI / check-additional-extension-bundled (push) Has been cancelled
CI / check-additional-extension-channels (push) Has been cancelled
CI / check-additional-extension-package-boundary (push) Has been cancelled
CI / check-additional-runtime-topology-architecture (push) Has been cancelled
CI / check-session-accessor-boundary (push) Has been cancelled
CI / check-session-transcript-reader-boundary (push) Has been cancelled
CI / check-docs (push) Has been cancelled
CI / skills-python (push) Has been cancelled
CI / macos-swift (push) Has been cancelled
CI / ios-build (push) Has been cancelled
CI / ci-timings-summary (push) Has been cancelled
Native App Locale Refresh / Refresh native fa (push) Has been cancelled
Native App Locale Refresh / Refresh native fr (push) Has been cancelled
Native App Locale Refresh / Refresh native hi (push) Has been cancelled
Native App Locale Refresh / Refresh native id (push) Has been cancelled
Native App Locale Refresh / Refresh native it (push) Has been cancelled
Native App Locale Refresh / Refresh native ja-JP (push) Has been cancelled
Control UI Locale Refresh / plan (push) Has been cancelled
Control UI Locale Refresh / Refresh ${{ matrix.locale }} (push) Has been cancelled
Control UI Locale Refresh / Commit control UI locale refresh (push) Has been cancelled
Live Media Runner Image / Build live media runner image (push) Has been cancelled
Native App Locale Refresh / Refresh native ar (push) Has been cancelled
Native App Locale Refresh / Refresh native de (push) Has been cancelled
Native App Locale Refresh / Refresh native es (push) Has been cancelled
Native App Locale Refresh / Refresh native ko (push) Has been cancelled
Native App Locale Refresh / Refresh native nl (push) Has been cancelled
Native App Locale Refresh / Refresh native pl (push) Has been cancelled
Native App Locale Refresh / Refresh native pt-BR (push) Has been cancelled
Native App Locale Refresh / Refresh native ru (push) Has been cancelled
Native App Locale Refresh / Refresh native sv (push) Has been cancelled
Native App Locale Refresh / Refresh native th (push) Has been cancelled
Native App Locale Refresh / Refresh native tr (push) Has been cancelled
Native App Locale Refresh / Refresh native uk (push) Has been cancelled
Native App Locale Refresh / Refresh native vi (push) Has been cancelled
Native App Locale Refresh / Refresh native zh-CN (push) Has been cancelled
Native App Locale Refresh / Refresh native zh-TW (push) Has been cancelled
Native App Locale Refresh / Commit native locale refresh (push) Has been cancelled
Plugin Init Scaffold Validation / Validate provider scaffold (push) Has been cancelled
Plugin NPM Release / preview_plugins_npm (push) Has been cancelled
Plugin NPM Release / Validate release publish approval (push) Has been cancelled
Plugin NPM Release / preview_plugin_pack (push) Has been cancelled
Plugin NPM Release / publish_plugins_npm (push) Has been cancelled
Sandbox Common Smoke / sandbox-common-smoke (push) Has been cancelled
Website Installer Sync / static (push) Has been cancelled
Website Installer Sync / linux-docker (push) Has been cancelled
Website Installer Sync / macos-installer (push) Has been cancelled
Website Installer Sync / windows-installer (push) Has been cancelled
Website Installer Sync / sync-website (push) Has been cancelled
Adolf is a fork/vendored clone of github.com/openclaw/openclaw (v2026.6.11), free to diverge. Tree copied sans upstream .git; upstream remote added for future syncs. Node pinned to 24 (.nvmrc); engines already require >=22.19. Preserves docs/ARCHITECTURE.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LeqyaxJF2nbRXJtae2kNB2
174 lines
5.6 KiB
Markdown
174 lines
5.6 KiB
Markdown
---
|
|
summary: "WeChat channel setup through the external openclaw-weixin plugin"
|
|
read_when:
|
|
- You want to connect OpenClaw to WeChat or Weixin
|
|
- You are installing or troubleshooting the openclaw-weixin channel plugin
|
|
- You need to understand how external channel plugins run beside the Gateway
|
|
title: "WeChat"
|
|
---
|
|
|
|
OpenClaw connects to WeChat through Tencent's external
|
|
`@tencent-weixin/openclaw-weixin` channel plugin.
|
|
|
|
Status: external plugin, maintained by the Tencent Weixin team. Direct chats and
|
|
media are supported. Group chats are not advertised by the plugin capability
|
|
metadata (it declares direct chats only).
|
|
|
|
## Naming
|
|
|
|
- **WeChat** is the user-facing name in these docs.
|
|
- **Weixin** is the name used by Tencent's package and by the plugin id.
|
|
- `openclaw-weixin` is the OpenClaw channel id (`weixin` and `wechat` work as aliases).
|
|
- `@tencent-weixin/openclaw-weixin` is the npm package.
|
|
|
|
Use `openclaw-weixin` in CLI commands and config paths.
|
|
|
|
## How it works
|
|
|
|
The WeChat code does not live in the OpenClaw core repo. OpenClaw provides the
|
|
generic channel plugin contract, and the external plugin provides the
|
|
WeChat-specific runtime:
|
|
|
|
1. `openclaw plugins install` installs `@tencent-weixin/openclaw-weixin`.
|
|
2. The Gateway discovers the plugin manifest and loads the plugin entrypoint.
|
|
3. The plugin registers channel id `openclaw-weixin`.
|
|
4. `openclaw channels login --channel openclaw-weixin` starts QR login.
|
|
5. The plugin stores account credentials under the OpenClaw state directory
|
|
(`~/.openclaw` by default).
|
|
6. When the Gateway starts, the plugin starts its Weixin monitor for each
|
|
configured account.
|
|
7. Inbound WeChat messages are normalized through the channel contract, routed to
|
|
the selected OpenClaw agent, and sent back through the plugin outbound path.
|
|
|
|
That separation matters: OpenClaw core stays channel-agnostic. WeChat login,
|
|
Tencent iLink API calls, media upload/download, context tokens, and account
|
|
monitoring are owned by the external plugin.
|
|
|
|
## Install
|
|
|
|
Quick install:
|
|
|
|
```bash
|
|
npx -y @tencent-weixin/openclaw-weixin-cli install
|
|
```
|
|
|
|
Manual install:
|
|
|
|
```bash
|
|
openclaw plugins install "@tencent-weixin/openclaw-weixin"
|
|
openclaw config set plugins.entries.openclaw-weixin.enabled true
|
|
```
|
|
|
|
Restart the Gateway after install:
|
|
|
|
```bash
|
|
openclaw gateway restart
|
|
```
|
|
|
|
## Login
|
|
|
|
Run QR login on the same machine that runs the Gateway:
|
|
|
|
```bash
|
|
openclaw channels login --channel openclaw-weixin
|
|
```
|
|
|
|
Scan the QR code with WeChat on your phone and confirm the login. The plugin saves
|
|
the account token locally after a successful scan.
|
|
|
|
To add another WeChat account, run the same login command again. For multiple
|
|
accounts, isolate direct-message sessions by account, channel, and sender:
|
|
|
|
```bash
|
|
openclaw config set session.dmScope per-account-channel-peer
|
|
```
|
|
|
|
## Access control
|
|
|
|
Direct messages use the normal OpenClaw pairing and allowlist model for channel
|
|
plugins.
|
|
|
|
Approve new senders:
|
|
|
|
```bash
|
|
openclaw pairing list openclaw-weixin
|
|
openclaw pairing approve openclaw-weixin <CODE>
|
|
```
|
|
|
|
For the full access-control model, see [Pairing](/channels/pairing).
|
|
|
|
## Compatibility
|
|
|
|
The plugin checks the host OpenClaw version at startup.
|
|
|
|
| Plugin line | OpenClaw version | npm tag |
|
|
| ----------- | --------------------------------------------------------------- | -------- |
|
|
| `2.x` | `>=2026.5.12` (current 2.4.6; early 2.x accepted `>=2026.3.22`) | `latest` |
|
|
| `1.x` | `>=2026.1.0 <2026.3.22` | `legacy` |
|
|
|
|
If the plugin reports that your OpenClaw version is too old, either update
|
|
OpenClaw or install the legacy plugin line:
|
|
|
|
```bash
|
|
openclaw plugins install @tencent-weixin/openclaw-weixin@legacy
|
|
```
|
|
|
|
## Sidecar process
|
|
|
|
The WeChat plugin can run helper work beside the Gateway while it monitors the
|
|
Tencent iLink API. In issue #68451, that helper path exposed a bug in OpenClaw's
|
|
generic stale-Gateway cleanup: a child process could try to clean up the parent
|
|
Gateway process, causing restart loops under process managers such as systemd.
|
|
|
|
Current OpenClaw startup cleanup excludes the current process and its ancestors,
|
|
so a channel helper cannot kill the Gateway that launched it. This fix is
|
|
generic; it is not a WeChat-specific path in core.
|
|
|
|
## Troubleshooting
|
|
|
|
Check install and status:
|
|
|
|
```bash
|
|
openclaw plugins list
|
|
openclaw channels status --probe
|
|
openclaw --version
|
|
```
|
|
|
|
If the channel shows as installed but does not connect, confirm that the plugin is
|
|
enabled and restart:
|
|
|
|
```bash
|
|
openclaw config set plugins.entries.openclaw-weixin.enabled true
|
|
openclaw gateway restart
|
|
```
|
|
|
|
If the Gateway restarts repeatedly after enabling WeChat, update both OpenClaw and
|
|
the plugin:
|
|
|
|
```bash
|
|
npm view @tencent-weixin/openclaw-weixin version
|
|
openclaw plugins install "@tencent-weixin/openclaw-weixin" --force
|
|
openclaw gateway restart
|
|
```
|
|
|
|
If startup reports that the installed plugin package `requires compiled runtime
|
|
output for TypeScript entry`, the npm package was published without the compiled
|
|
JavaScript runtime files OpenClaw needs. Update/reinstall after the plugin
|
|
publisher ships a fixed package, or temporarily disable/uninstall the plugin.
|
|
|
|
Temporary disable:
|
|
|
|
```bash
|
|
openclaw config set plugins.entries.openclaw-weixin.enabled false
|
|
openclaw gateway restart
|
|
```
|
|
|
|
## Related docs
|
|
|
|
- Channel overview: [Chat Channels](/channels)
|
|
- Pairing: [Pairing](/channels/pairing)
|
|
- Channel routing: [Channel Routing](/channels/channel-routing)
|
|
- Plugin architecture: [Plugin Architecture](/plugins/architecture)
|
|
- Channel plugin SDK: [Channel Plugin SDK](/plugins/sdk-channel-plugins)
|
|
- External package: [@tencent-weixin/openclaw-weixin](https://www.npmjs.com/package/@tencent-weixin/openclaw-weixin)
|