Yq Weixin Connect

SKILLAI 工具
AI 工具 未标注权限 许可证不明确
安装这个技能

用于连接个人微信(非企业微信)。触发词:连接个人微信、接入个人微信、绑定个人微信、个人微信扫码。若用户提到企业微信或企微,使用 wecom‑connect skill。匹配后必须严格按流程执行,不得跳步或自行发挥。

累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

ClawHub 市场
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install clawhub_tianheihei002/yq-weixin-connect

技能档案

AI 工具
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方clawhub_tianheihei002仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式ClawHub 市场安装包 clawhub
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791736762
正文体量9.0 KBSKILL.md 原文大小,越大说明说明书写得越细

SKILL.md 全文

9.0 KB
模型实际读到的说明书原文,来自技能仓库

个人微信 Connect Skill

匹配规则(严格区分,不得混淆)

本 skill 仅适用于个人微信,以下关键词触发:
- "连接个人微信" / "接入个人微信" / "绑定个人微信"
- "个人微信扫码" / "微信扫码登录"
- "连接微信"(未带"企业"二字时,默认为个人微信)

以下关键词不属于本 skill,禁止触发:
- "企业微信" / "企微" / "wecom" / "WeCom" → 使用 wecom-connect skill

一旦读取本 skill,必须严格按下方流程从第 1 步执行到底,不得跳步、不得自由发挥、不得读取其他文档。

核心原则

  • 严格按步骤走,不要加戏,不要自作聪明加额外命令。
  • 速度优先! 二维码有效期仅约 1 分钟,把能合并的命令用 && 链起来一次执行,禁止拆成多个单独的 exec 调用。
  • qrcode_img_content 是一个 URL 字符串,必须用 qrcode npm 库把它编码成 PNG 图片。 这个 URL 指向的是网页不是图片,绝对禁止用 curl -o 直接下载。
  • 图片展示只能用 upload_to_cdn 返回的 CDN URL。 CDN 失败则引导用户打开 workspace 文件。禁止使用任何其他展示方式。
  • 不要自动轮询。 给完二维码等用户说"扫完了"再轮询。
  • 不要手动改写 openclaw.json。

执行流程

第 1 步:安装 legacy 版本插件(1 次 exec)

直接安装兼容的 legacy 版本,不需要做版本检查:

cd /tmp && npm pack @tencent-weixin/openclaw-weixin@legacy 2>&1 | tail -1 && rm -rf ~/.openclaw/extensions/openclaw-weixin && mkdir -p ~/.openclaw/extensions/openclaw-weixin && tar -xzf /tmp/tencent-weixin-openclaw-weixin-*.tgz -C ~/.openclaw/extensions/openclaw-weixin --strip-components=1 && cd ~/.openclaw/extensions/openclaw-weixin && npm install --production 2>&1 | tail -3 && (ln -sf "$(npm root -g)/openclaw" node_modules/openclaw 2>/dev/null || ln -sf "$(dirname "$(which openclaw)")/../lib/node_modules/openclaw" node_modules/openclaw) && ls node_modules/openclaw/package.json >/dev/null 2>&1 && echo "READY" || echo "FAILED"
  • READY → 继续第 2 步
  • FAILED → 告诉用户安装失败,需要人工排查

第 2 步:获取二维码(1 次 exec)

curl -s "https://ilinkai.weixin.qq.com/ilink/bot/get_bot_qrcode?bot_type=3"

从返回 JSON 提取:
- qrcode — 保存,轮询用
- qrcode_img_content — 这是一个 URL 字符串,下一步用 qrcode npm 库将它编码为 PNG 图片

第 3 步:生成 PNG → upload_to_cdn + workspace 双保险

一气呵成。

cd /tmp && npm install qrcode 2>/dev/null | tail -1
cd /tmp && node -e "const qr=require('qrcode'); qr.toFile('/tmp/weixin_qr.png','<qrcode_img_content>',{width:400,margin:2},(e)=>{if(e)console.error(e);else console.log('saved');})"

同时做两件事:

  1. upload_to_cdn:
upload_to_cdn /tmp/weixin_qr.png
  1. 保存 workspace 备份(无论 CDN 是否成功):
cp /tmp/weixin_qr.png ~/workspace/weixin_qr.png

CDN 结果处理:
- 成功 → 第 4 步用 CDN URL 展示
- 失败 → 重试 upload_to_cdn,最多 3 次
- 3 次仍失败 → 用 workspace 备份兜底

禁止任何替代上传方案(0x0.st、catbox、imgbb、base64、canvas、openclaw upload 等全部禁止)。

第 4 步:展示二维码,等用户扫码

CDN 成功时(推荐引导语):


微信扫码登录

用微信扫一扫下面的二维码:

<CDN 图片 URL>

(已保存备用图片至 ~/workspace/weixin_qr.png)

操作步骤:
1. 打开手机微信 App
2. 扫一扫上面的二维码
3. 在手机上确认登录
4. 扫完告诉我"ok",我会继续后续步骤

有效期:约 1 分钟,如果过期了告诉我"过期了",我会立即生成新的二维码。


CDN 失败(workspace 兜底时):


微信扫码登录

二维码已保存到 ~/workspace/weixin_qr.png,请打开文件后用微信扫码。

扫完在手机上确认登录,然后告诉我"ok"。

有效期:约 1 分钟,如果过期了告诉我"过期了",我会立即生成新的二维码。


然后停下来,等用户确认。

第 5 步:用户确认后 → 轮询 + 写凭证 + 重启

5a. 轮询状态(必须加 --max-time 10,此 API 是长轮询):

curl -s --max-time 10 &quot;https://ilinkai.weixin.qq.com/ilink/bot/get_qrcode_status?qrcode=&lt;qrcode&gt;&quot;
status 处理
超时(exit code 28)或 wait 等 3 秒再 poll
scaned 告诉用户"已扫码,请在手机上确认登录"
confirmed 成功!提取 ilink_bot_id、bot_token、baseurl、ilink_user_id
expired 从第 2 步重来(不需要重新装插件)

5b. 写入凭证(confirmed 后必须执行):

将 ilink_bot_id 中的 @ → -、. → - 得到 accountId(例:[email protected] → a34b410e2e6f-im-bot)。

API 返回的 bot_token 已包含 ilink_bot_id: 前缀,直接用 bot_token 的值作为 token,不要再拼接 ilink_bot_id:,否则 token 双重前缀、认证失败(errcode -14)。

将真实值内联写入 JS 脚本并执行(cat 和 node 写在同一个 exec 里):

cat &gt; /tmp/write_weixin_account.js &lt;&lt; &#x27;SCRIPT&#x27;
const fs = require(&#x27;fs&#x27;);
const path = require(&#x27;path&#x27;);
const home = process.env.HOME;

const accountId = &#x27;&lt;accountId&gt;&#x27;;
const data = {
  token: &#x27;&lt;bot_token&gt;&#x27;,
  savedAt: new Date().toISOString(),
  baseUrl: &#x27;&lt;baseurl&gt;&#x27;,
  userId: &#x27;&lt;ilink_user_id&gt;&#x27;
};

const accountsDir = path.join(home, &#x27;.openclaw/openclaw-weixin/accounts&#x27;);
fs.mkdirSync(accountsDir, { recursive: true });

const accountFile = path.join(accountsDir, accountId + &#x27;.json&#x27;);
fs.writeFileSync(accountFile, JSON.stringify(data, null, 2));
fs.chmodSync(accountFile, 0o600);

const indexPath = path.join(home, &#x27;.openclaw/openclaw-weixin/accounts.json&#x27;);
let existing = [];
try { existing = JSON.parse(fs.readFileSync(indexPath, &#x27;utf-8&#x27;)); } catch {}
if (!existing.includes(accountId)) existing.push(accountId);
fs.writeFileSync(indexPath, JSON.stringify(existing, null, 2));

console.log(&#x27;凭证 + 索引写入成功&#x27;);
SCRIPT
node /tmp/write_weixin_account.js

** &lt;accountId&gt;、&lt;bot_token&gt;、&lt;baseurl&gt;、&lt;ilink_user_id&gt; 是占位符,写入脚本时必须替换为 5a 步 confirmed 返回的真实值。

5c. 重启 Gateway:

openclaw gateway restart

成功回复


微信连接结果

  • 状态:已绑定成功
  • Gateway:已重启
  • ilink_bot_id: &lt;ilink_bot_id&gt;
  • ilink_user_id: &lt;ilink_user_id&gt;

现在可以直接在微信里发消息了 🎉


到此为止。不要再做任何额外操作。不要读文档。

二维码过期处理

用户说"过期了" → 只需从第 2 步重新获取二维码,不需要重新执行第 1 步。

绝对禁止

  • 禁止用 curl -o / curl --output / wget 下载 qrcode_img_content URL — 这个 URL 指向的是 HTML 网页不是 PNG 图片,下载得到的是一堆 HTML 代码。必须用 qrcode npm 库的 toFile() 将 URL 字符串编码为 PNG
  • 禁止用 canvas、browser、Generate Images、Image Understanding、MEDIA: 语法 等方式展示二维码 — 只能用 upload_to_cdn 返回的 CDN URL,或引导用户打开 workspace 文件
  • 禁止把能合并的命令拆成多次 exec(二维码有效期只有 1 分钟,拆太碎会过期)
  • 禁止自动开轮询(等用户说"扫完了 / ok")
  • 禁止手动改写 openclaw.json
  • 禁止跳过写凭证步骤(不写凭证插件无法连接)
  • 禁止给用户 qrcode_img_content 原始 URL
  • 禁止使用替代上传方案(0x0.st、catbox、imgbb、base64 等)
  • 禁止在 token 前拼接 ilink_bot_id:(bot_token 已包含前缀)
  • 禁止在 PNG 生成成功后再用 curl 下载覆盖文件

一句话总结

安装 legacy 插件(1 次 exec)→ curl 拿二维码(1 次 exec)→ npm install qrcode + 生成 PNG → upload_to_cdn + workspace 备份 → 展示二维码等用户扫 → 轮询确认 → 写凭证+执行(1 次 exec)→ 重启 gateway → 完成。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。