OpenClaw Zalo Personal 通道(zalouser)集成指南:基于 zca-js 的个人账号消息自动化

📅 发布时间:2026/10/13 6:54:23
OpenClaw Zalo Personal 通道(zalouser)集成指南:基于 zca-js 的个人账号消息自动化
人工智能大模型LLM 网关AI Agent即时通讯【免费下载链接】openclaw-zero-tokenOpenClaw: Use All Major AI Models NO API Token! Claude/ChatGPT/Gemini/DeepSeek/Doubao/Grok/Qwen/Manus/Kimi项目地址https://gitcode.com/gh_mirrors/op/openclaw-zero-token点击查看免费下载导读本文面向希望在 OpenClaw 中接入Zalo 个人账号而非 Zalo 官方 Bot API的开发者完整讲解zalouser通道插件的安装、QR 扫码登录、DM/群组访问控制、多账号配置、消息收发能力与故障排查。读完本文你将能够独立完成 Zalo 个人账号的接入与运维并理解该集成在 OpenClaw 插件体系中的底层运行原理进程内zca-js监听、凭证持久化、文本分块与送达回执机制。状态说明该集成在 OpenClaw 中标记为experimental实验性且属于非官方unofficial集成——它自动化的是你的个人 Zalo 账号而非官方机器人接口。使用可能触发账号风控、封禁suspension/ban风险请自行评估后使用。一、这是什么为“个人账号”设计的 Zalo 通道Zalo 的官方 Bot API 并非所有场景都可获得OpenClaw 因此提供了面向个人账号的自动化方案。zalouser通道的核心定位如下见 zalouser/README.md完全进程内运行通过原生zca-js仓库锁定版本2.1.2见 zalouser/package.json在 OpenClaw Gateway 进程内完成登录、监听与发送不需要任何外部的zca/openzca/zca-cli二进制原生事件监听使用zca-js的事件监听器接收入站消息而不是轮询直接发送通过 JS API 直接发送文本、媒体与链接适合场景Zalo Bot API 不可用、但你需要用个人账号接入自动回复与 Agent 能力的场景。命名约定zalouser与zalo通道 ID 特意命名为zalouser以明确它自动化的是Zalo 个人用户账号非官方。而zalo这个 ID 被保留预留给未来可能的官方 Zalo API 集成。该通道同时注册了别名zlu在允许列表条目中写入zalouser:id或zlu:id前缀均会被正常解析参见 zalouser/package.json 与 zalouser/src/channel.ts。二、插件安装Zalo Personal 以插件形式分发不包含在 OpenClaw 核心安装中需要单独安装。两种方式任选其一# 方式 A从 npm 安装 openclaw plugins install openclaw/zalouser # 方式 B从源码检出目录安装 openclaw plugins install ./extensions/zalouser cd ./extensions/zalouser pnpm install安装完成后需要重启 Gateway。插件清单openclaw.plugin.json声明了channels: [zalouser]安装即向 OpenClaw 注册该通道。详细机制可参考 插件文档。从源码安装的另一种等价路径是仓库根目录下的zalouser/与extensions/zalouser/内容一致两者都是该插件包的源码形态。三、快速上手新手路径1. 登录QR 扫码在 Gateway 所在机器执行openclaw channels login --channel zalouser执行后插件会生成一个 QR 码并尽可能将其写入临时文件日志会打印Scan QR image: path使用手机上的Zalo App扫描并确认登录成功后会话凭证imei、cookie、userAgent会被持久化保存。2. 启用通道编辑配置文件加入以下内容JSON5/YAML 均可{ channels: { zalouser: { enabled: true, dmPolicy: pairing, }, }, }3. 重启 Gateway或完成 onboarding 向导4. 处理首个联系人DM 访问默认采用pairing策略陌生人首次发消息时会被要求配对你需要批准配对码后对方才能正常触发机器人。四、底层运行原理进程内 zca-js 如何工作1. 运行时延迟加载zca-js被放在运行时边界之后做动态import()见 zalouser/src/zca-client.ts目的是让打包后的元数据与契约模块可以在不解析 zca-js 的可选 WebSocket 依赖树的情况下加载降低插件启动成本。通过createZalo()工厂创建Zalo实例暴露login()凭证恢复与loginQR()二维码登录两条路径。2. 凭证存储与登录状态凭证保存在 OpenClaw 状态目录下的credentials/zalouser/中见 zalouser/src/zalo-js.ts默认 profilecredentials.json其他 profilecredentials-profile.json。每次会话恢复都会调用zalo.login({ imei, cookie, userAgent })并在成功后更新lastUsedAtQR 登录走loginQR()回调事件流完整覆盖四种事件类型见 zalouser/src/zca-constants.tsQRCodeGenerated生成二维码、QRCodeExpired过期自动重试、QRCodeDeclined用户拒绝、GotLoginInfo拿到 imei/cookie/userAgent 并落盘。3. 入站消息监听与健壮性Gateway 启动账号时调用startZaloListener()见 zalouser/src/zalo-js.ts注册message/error/closed三类监听过滤isSelf消息自己发的不回灌内置watchdog 看门狗每 30 秒检查一次事件间隔若间隔超过 35 秒判定异常并强制重连源码常量LISTENER_WATCHDOG_INTERVAL_MS 30_000、LISTENER_WATCHDOG_MAX_GAP_MS 35_000同一 profile 不允许重复启动监听器避免双连接。入站消息进入monitorZalouserProvider()见 zalouser/src/monitor.ts后会先按线程键群聊按group:threadId、私聊按发送者放入KeyedAsyncQueue串行处理保证同一会话的消息有序。4. 群组上下文缓存为避免高频拉取群信息插件对群组上下文做 5 分钟、最多 500 条的 LRU 缓存见 zalouser/src/zalo-js.ts缓存命中时顺带刷新热度。五、查找 IDdirectory CLI接入初期最重要的是拿到用户/群组的数字 ID。zalouser实现了完整的 directory 接口见 zalouser/src/channel.ts# 查看当前账号自己的信息 openclaw directory self --channel zalouser # 按名字搜索好友 openclaw directory peers list --channel zalouser --query name # 按关键词搜索群组 openclaw directory groups list --channel zalouser --query work # 查看群成员 openclaw directory groups members --channel zalouser --group-id id其中groups list返回的群组 ID 形如group:groupId。目标地址target支持以下规范化写法见 zalouser/src/session-route.ts写法含义zalouser:group:id/zlu:group:id群聊group:id/g:id/g-id群聊简写user:id/u:id/dm:id/u-id私聊简写裸数字 ID私聊向后兼容回退发送消息示例openclaw message send --channel zalouser --target threadId --message Hello from OpenClaw六、DM 访问控制1. dmPolicy 四种取值channels.zalouser.dmPolicy支持pairing | allowlist | open | disabled默认pairing配置默认值在源码中通过dmPolicy ?? pairing兜底见 zalouser/src/channel.ts 与 zalouser/src/monitor.ts取值行为pairing陌生人获得配对码批准前消息不处理推荐allowlist仅允许列表内用户发 DMopen任何人可发 DMdisabled忽略所有 DM2. allowFrom 与名字解析channels.zalouser.allowFrom接受用户 ID 或名字。在 onboarding 期间插件通过进程内联系人查找把名字解析为 ID启动时也会对允许列表做一次“名字 → ID”的解析并记录映射日志未解析成功的条目保持原样见 zalouser/src/monitor.ts。注意ID 匹配是精确匹配且条目前缀zalouser:/zlu:会被自动剥除后比较。3. 批准配对openclaw pairing list zalouser openclaw pairing approve zalouser code配对码机制与 OpenClaw 全局配对一致详见 配对文档8 位大写字符、不含易混淆字符、1 小时过期、每通道默认最多 3 个待处理请求。批准后notify会通过 zca-js 直接向用户发送确认消息见 zalouser/src/channel.ts。七、群组访问控制可选1. groupPolicy 与 allowlist默认channels.zalouser.groupPolicy open允许群组可在channels.defaults.groupPolicy中覆盖全局默认值限制到白名单groupPolicy allowlistgroups键为群 ID 或群名控制允许哪些群groupAllowFrom控制允许群内哪些发送者触发机器人完全禁用群组groupPolicy disabled若groupAllowFrom未设置运行时对群发送者的检查会回退到allowFrom发送者检查同时作用于普通群消息与控制命令如/new、/reset。示例配置{ channels: { zalouser: { groupPolicy: allowlist, groupAllowFrom: [1471383327500481391], groups: { 123456789: { allow: true }, Work Chat: { allow: true }, }, }, }, }2. 群匹配解析顺序groups.key的匹配顺序为精确群 ID / 群名 → 规范化群 slug →*通配 → 默认值见 zalouser/src/group-policy.ts。slug 规范化会把群名转为小写、去掉#前缀、将非字母数字字符替换为-。dangerouslyAllowNameMatching可控制是否启用按群名匹配默认关闭属于“危险”开关。3. Mention gating群内 门控channels.zalouser.groups.group.requireMention控制群回复是否必须 机器人解析顺序同上精确 ID/群名 → slug →*→ 默认true同时适用于白名单群与 open 群模式授权的控制命令如/new可绕过 mention 门控当一条群消息因需要 而被跳过时OpenClaw 会把它暂存为待处理群历史并在下一条被处理的群消息中附带它群历史条数上限默认取messages.groupChat.historyLimit回退值50可在账号级用channels.zalouser.historyLimit覆盖见 zalouser/src/monitor.ts。示例{ channels: { zalouser: { groupPolicy: allowlist, groups: { *: { allow: true, requireMention: true }, Work Chat: { allow: true, requireMention: false }, }, }, }, }4. 配置向导支持configure向导可交互式提示输入群 allowlist见 zalouser/src/setup-surface.ts并会在启动时把 allowlist 中的群名/用户名解析为 ID 并打印映射日志无法解析的条目保持原样源码中summarizeMapping逻辑见 zalouser/src/monitor.ts。八、多账号支持账号映射到 OpenClaw 状态中的zalouserprofile。示例{ channels: { zalouser: { enabled: true, defaultAccount: default, accounts: { work: { enabled: true, profile: work }, }, }, }, }profile 解析优先级见 zalouser/src/accounts.ts账号配置中的profile字段环境变量ZALOUSER_PROFILE环境变量ZCA_PROFILE非默认账号回退为账号 ID 本身最后回退为default。多账号下的登录命令openclaw channels login --channel zalouser --account work账号级配置 schema 还支持name、enabled、markdown、messagePrefix、responsePrefix、historyLimit、groupPolicy账号级默认allowlist与 Telegram 的安全默认一致见 zalouser/src/accounts.ts等字段完整定义见 zalouser/src/config-schema.ts。九、消息能力与发送细节1. 文本分块~2000 字符上限Zalo 客户端对单条文本长度有限制因此出站文本默认按2000 字符分块发送常量ZALOUSER_TEXT_CHUNK_LIMIT见 zalouser/src/channel.ts 与 zalouser/src/send.ts。分块有两种模式见 zalouser/src/send.tslength默认按固定长度硬切newline优先在段落空行、\n换行、空白处断句避免截断语义。分块时样式信息见下会按区间重新切片保证每条分块消息样式自洽。2. Markdown 文本样式zalouser支持把 Markdown 转成 Zalo 原生文本样式见 zalouser/src/zca-constants.ts加粗、斜体、下划线、删除线、红/橙/黄/绿文字、小字/大字、有序/无序列表、缩进。Markdown 表格默认以代码块形式输出tableMode可配置。发送媒体时文本 caption 同样会被截断到 2000 字符并做样式钳制见 zalouser/src/zalo-js.ts。3. 媒体、链接与语音图片/视频mediaUrl出站媒体会被下载支持本地媒体根目录mediaLocalRoots后通过uploadAttachment上传发送语音音频媒体走sendVoice先上传再取回 URL 发送见 zalouser/src/zalo-js.ts链接sendLink携带链接与可选 caption见 zalouser/src/zalo-js.ts。4. 输入状态、表情回应与送达回执Typing回复派发前尽力发送“正在输入”事件sendTypingEvent能力取决于当前 API 会话见 zalouser/src/zalo-js.tsReactionschannel actions 支持react动作见 zalouser/src/channel.ts使用remove: true可移除特定表情回应表情支持别名归一化like//:1:→ 、heart/❤️/3→ ❤️、haha/→ 、wow/、cry/、angry/见 zalouser/src/reaction.ts。反应语义详见 Reactions 文档送达回执入站消息若携带事件元数据OpenClaw 会尽力回发delivered已送达seen已读确认见 zalouser/src/monitor.ts。十、Agent 工具集成插件向 AI Agent 注册了一个zalouser工具见 zalouser/src/tool.ts可用动作包括动作说明send发送文本消息需threadIdmessageimage发送图片需threadIdurl可选message作为 captionlink发送链接需threadIdurl可选 captionfriends列出/搜索好友可选querygroups列出群组可选queryme查看当前账号信息status检查认证状态工具会自动感知当前会话上下文若正在处理 zalouser 会话可省略threadId直接复用当前会话目标见 zalouser/src/tool.ts。十一、已知限制出站文本被分块到约 2000 字符Zalo 客户端限制如上所述流式输出默认关闭streaming blocked by default回复以完整消息形式发出而非流式逐字输出属非官方集成存在账号封禁风险。十二、故障排查登录状态不稳定 / 不持久# 探测通道状态 openclaw channels status --probe # 重新登录 openclaw channels logout --channel zalouser openclaw channels login --channel zalouser--probe会实际调用getZaloUserInfo验证会话见 zalouser/src/probe.ts失败时给出“Not authenticated”等明确错误logout 会清空本地凭证与运行时常量QR 登录、群缓存、监听器、API 实例。allowlist / 群组名解析失败在allowFrom/groupAllowFrom/groups中优先使用数字 ID或使用与 Zalo 好友/群名完全一致的名称。名字解析依赖进程内联系人查找大小写不敏感但需精确匹配多名字命中时选择第一个源码会在日志中标注multiple matches; chose first。从旧版 CLI 方案升级移除对旧外部zca进程的假设该通道现在完全在 OpenClaw 进程内运行无需任何外部 CLI 二进制凭证自动存储于 OpenClaw 状态目录多账号通过 profile 隔离。附关键参考官方通道文档docs/channels/zalouser.md插件 READMEzalouser/README.md通道核心实现zalouser/src/channel.ts入站消息处理zalouser/src/monitor.tszca-js 适配层zalouser/src/zalo-js.ts、zalouser/src/zca-client.ts配置 Schemazalouser/src/config-schema.ts配对机制docs/channels/pairing.md赞分享人工智能大模型LLM 网关AI Agent即时通讯【免费下载链接】openclaw-zero-tokenOpenClaw: Use All Major AI Models NO API Token! Claude/ChatGPT/Gemini/DeepSeek/Doubao/Grok/Qwen/Manus/Kimi项目地址https://gitcode.com/gh_mirrors/op/openclaw-zero-token点击查看免费下载相关推荐OpenClaw 中文社区版 Zalo 个人账号接入指南zalouser 渠道插件的安装、配置与源码解析OpenClaw 中文社区版 Zalo 个人账号接入指南zalouser 渠道插件的安装、配置与源码解析 本文围绕 OpenClaw 中文社区版opencl人工智能AI Agent即时通讯后端本地部署语音OpenClaw Signal 通道实战基于 signal-cli 的账号模型、三种传输模式与消息行为全解析OpenClaw Signal 通道实战基于 signal cli 的账号模型、三种传输模式与消息行为全解析 本文基于 OpenClaw 仓库中的 SignaAI 应用AI Agent交互助手后端即时通讯网关OpenClaw 接入 Synology Chat基于 Webhook 的直连消息通道插件完整指南OpenClaw 接入 Synology Chat基于 Webhook 的直连消息通道插件完整指南 本指南完整讲解如何在 OpenClaw 中安装并启用 Sy人工智能大模型LLM 网关AI Agent即时通讯上一篇Guardian Grid 开源项目指南下一篇【亲测免费】 zsh-autosuggestions: 快速命令自动建议插件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考