OpenClaw 接入 Zalo 个人账号:@openclaw/zalouser 通道插件实战指南 人工智能大模型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/zalouser是 OpenClaw 官方的 Zalo 个人账号通道扩展通过内置zca-js以进程内监听/发送的方式接入 Zalo无需任何外部zca、openzca或zca-cli二进制。本文基于 zalouser/README.md 及其仓库源码完整讲解该扩展的安装、QR 登录、单/多账号配置、发送消息、通讯录查询、Agent 工具调用与常见故障排查并深入源码揭示其会话持久化、DM/群组策略与 Markdown 富文本的实现原理。风险提示Zalo 个人账号自动化存在被封号或限制的风险该集成属于非官方实现请自行评估并承担使用风险。扩展概览与能力边界该扩展以 Channel Plugin 形式注册到 OpenClaw Gateway其插件清单 zalouser/openclaw.plugin.json 声明通道 ID 为zalouserzalouser/package.json 显示其唯一运行时依赖为zca-js2.1.2另含sinclair/typebox用于工具参数 schema并以openclaw 2026.3.28作为宿主版本门槛。从 zalouser/index.ts 与 zalouser/src/shared.ts 声明的能力看该通道支持会话形态direct私聊与group群聊两种聊天类型媒体能力支持图片、链接、音频语音等媒体发送表情回应支持对消息发送/移除react详见下文表情回应一节流式输出支持blockStreaming模型分块生成的回复可边生成边发送不支持的形态原生命令nativeCommands、线程threads、投票polls均为false回复模式固定为off见 zalouser/src/channel.ts。插件元信息zalouser/src/shared.ts中通道别名zlu可用于配置键、allowlist 条目等场景通道排序order: 85。前置条件与安装前置条件已部署并运行OpenClaw Gateway一部安装了Zalo 官方手机 App的设备用于扫码登录不需要外部 Zalo CLI 工具所有能力由扩展进程内的zca-js提供。安装方式方式 Anpm 安装openclaw plugins install openclaw/zalouser方式 B本地源码安装openclaw plugins install ./extensions/zalouser cd ./extensions/zalouser pnpm install安装完成后需重启 Gateway使扩展生效。源码方式安装时扩展位于仓库的 extensions/zalouser 目录与本文所读的zalouser/目录内容一致均为该通道插件的实现。快速上手登录、启用与发送第一步QR 登录openclaw channels login --channel zalouser执行后终端会输出一张 QR 码图片路径用手机上的 Zalo App 扫码并确认即可完成登录。登录成功后凭证会写入本机状态目录下credentials/zalouser/中默认 profile 为credentials.json非默认 profile 为credentials-profile.json见 zalouser/src/zalo-js.ts。QR 码本身会被写入临时目录openclaw-zalouser-qr-profile.pngzalouser/src/qr-temp-file.ts。从源码看QR 登录流程zalouser/src/channel.ts分两步startZaloQrLogin生成二维码超时 35 秒waitForZaloQrLogin轮询等待用户扫码确认最长 180 秒。登录过程覆盖了QRCodeGenerated / QRCodeExpired / QRCodeScanned / QRCodeDeclined / GotLoginInfo五种回调事件zalouser/src/zca-constants.tsQR 过期会自动重试扫码被拒绝会明确报错。若当前 profile 已登录命令会直接提示Zalo is already linked如需强制重新登录可加force选项。第二步启用通道channels: zalouser: enabled: true dmPolicy: pairing # pairing | allowlist | open | disableddmPolicy决定私聊DM的准入策略详见下文DM 与群组访问策略。第三步发送一条消息openclaw message send --channel zalouser --target threadId --message Hello from OpenClawthreadId可用user:id或group:id形式指定目标见下文目标地址解析。也可以直接使用裸数字 ID此时按私聊处理。配置详解基础配置channels: zalouser: enabled: true dmPolicy: pairing多账号配置channels: zalouser: enabled: true defaultAccount: default accounts: default: enabled: true profile: default work: enabled: true profile: work每个账号对应一个独立的 Zalo profile凭证分开存储、可分别登录实现一个 Gateway 同时挂载多个 Zalo 账号。defaultAccount指定默认使用哪个账号。完整配置项源码级zalouser/src/config-schema.ts 用 Zod 定义了完整的账号配置 schema各字段含义如下配置项类型默认值说明enabledbooleantrue账号是否启用namestring—账号显示名称profilestring环境变量ZALOUSER_PROFILE/ZCA_PROFILE否则default对应凭证目录名多账号隔离的关键字段dmPolicypairing \| allowlist \| open \| disabledpairing私聊准入策略allowFromstring[][]DM 白名单用户 ID 或好友名groupAllowFromstring[][]群聊发送者白名单groupPolicyopen \| allowlist \| disabledallowlist群聊准入策略groupsobject{}群组策略表键为群 ID/群名/通配符requireMentionbooleantrue群聊是否必须 机器人逐群可覆盖dangerouslyAllowNameMatchingbooleanfalse是否允许用名称匹配群/用户有歧义风险historyLimitint ≥ 0全局messages.groupChat.historyLimit群聊上下文历史条数上限markdownobject—Markdown 渲染配置如表转换模式messagePrefix/responsePrefixstring—消息/回复前后缀profile 的解析顺序在 zalouser/src/accounts.ts先取配置中的profile其次ZALOUSER_PROFILE环境变量再次ZCA_PROFILE环境变量最后回落到账号 ID 或default。多账号配置在 zalouser/src/channel.ts 中按账号隔离解析账号级配置会与通道级基础配置合并zalouser/src/accounts.ts。常用命令速查# 登录默认账号 / 指定账号 openclaw channels login --channel zalouser openclaw channels login --channel zalouser --account work # 探测连接状态 openclaw channels status --probe # 退出登录 openclaw channels logout --channel zalouser # 通讯录查询 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这些命令背后对应 zalouser/src/channel.ts 的directory实现directory self返回当前账号自己的userId、displayName、avatarzalouser/src/channel.tspeers list按名字/ID 模糊匹配好友列表命中多个时取第一个并注明multiple matches; chose firstzalouser/src/zalo-js.tsgroups list先拉取全部群组再按名字过滤zalouser/src/zalo-js.tsgroups members通过群信息接口解析成员 ID 后批量拉取成员资料zalouser/src/zalo-js.ts。status --probe会真实调用 Zalo 账号信息接口做一次轻量探测zalouser/src/probe.ts其channel.ts中的状态适配器zalouser/src/channel.ts同时会汇总未认证openclaw channels login --channel zalouser可修复与dmPolicy: open安全提示两类状态问题zalouser/src/status-issues.ts。目标地址解析与会话路由发送目标支持多种写法由 zalouser/src/session-route.ts 统一归一化规则如下输入写法归一化结果语义user:id/u:id/dm:iduser:id私聊group:id/g:id/g-idgroup:id群聊u-iduser:id私聊裸数字 ID原样按私聊处理兼容旧写法zalouser:target/zlu:target去除前缀后按上述规则解析带通道前缀的写法注意群聊发送应显式使用group:id裸 ID 会被当作私聊目标zalouser/src/session-route.ts。出站会话路由据此构造direct/group两种 peer 形态的 session keyzalouser/src/session-route.ts。私聊入站会话默认采用per-channel-peer作用域session.dmScope可改为main且为升级兼容保留了旧会话 key 的读取逻辑新会话统一走规范化 keyzalouser/src/monitor.ts。Agent 工具zalouser该扩展通过 zalouser/index.ts 向 AI Agent 注册名为zalouser的工具工具 schema 与执行逻辑在 zalouser/src/tool.ts。可用 action 共 7 种action功能必填参数返回值send发送文本消息threadId、message{ success, messageId }image发送图片 URLthreadId、urlmessage作为配文{ success, messageId }link发送链接卡片threadId、urlmessage作为配文{ success, messageId }friends列出/搜索好友query可选好友列表groups列出/搜索群组query可选群组列表me查询当前账号资料—用户信息或Not authenticatedstatus认证状态检查—{ authenticated }所有 action 通用可选参数threadId、isGroup、profile、query、url、message。值得注意的实现细节zalouser/src/tool.ts当 Agent 处于某个 Zalo 会话上下文中回复时若未显式传threadId工具会自动从deliveryContext继承当前会话的to/threadId作为环境目标ambient target显式参数优先于环境目标。错误统一以{ error }形式返回不会中断 Agent 的调用链。消息发送与富文本实现分块与样式处理sendMessageZalouserzalouser/src/send.ts是文本发送的核心先将文本按 Markdown 解析为纯文本 样式区间text-styles.ts再按textChunkLimit默认 2000 字符通道级常量在 zalouser/src/channel.ts切分成多个块依次发送样式区间会被精确地重新映射到每个分块上sliceTextStyles。分块模式textChunkMode支持两种length默认按固定长度硬切newline优先在段落空行、换行、空白处断开避免打断语义单元zalouser/src/send.ts。两种模式都会在每次发送后返回最后一个分块的messageId。发送图片/语音时先经loadOutboundMediaFromUrl下载 URL 内容再作为附件上传zalouser/src/zalo-js.ts。Markdown → Zalo 富文本映射zalouser/src/text-styles.ts 实现了一套轻量 Markdown 解析器把常见的 Markdown 标记转换为 Zalo 的富文本样式样式常量见 zalouser/src/zca-constants.tsMarkdown 写法Zalo 样式**bold**/__bold__加粗b*italic*/_italic_斜体i***bold italic***加粗 斜体~~strike~~删除线s{red}...{/red}、{orange}...{/orange}、{yellow}...{/yellow}、{green}...{/green}彩色文字c_*{big}...{/big}大字号f_18# 标题1–4 级加粗H1 额外加大字号- 列表项/1. 列表项无序/有序列表样式缩进空格/引用缩进样式ind_$行内代码code、围栏代码块、转义\*按字面输出不解析解析器会正确处理嵌套样式、引用块缩进与代码块的空白保留确保复制出的正文与样式偏移量严格对齐。已读/送达回执与正在输入入站消息处理后扩展会自动向 Zalo 回送delivered与seen回执zalouser/src/monitor.ts并在模型开始生成回复前发送正在输入指示typing indicator随后通过blockStreaming管道分块投递回复zalouser/src/monitor.ts。Markdown 表格默认以代码块形式渲染tableMode: code可在markdown配置中调整。DM 与群组访问策略私聊策略dmPolicypairing默认陌生人发来私聊会收到一条包含其 Zalo user id 的配对请求用户将其 ID 加入allowFrom后即可正常对话allowlist仅allowFrom中列出的用户可私聊open任何人可私聊状态探测会给出安全提示见 zalouser/src/status-issues.tsdisabled忽略所有私聊。DM 策略解析器位于 zalouser/src/channel.ts允许条目支持zalouser:/zlu:前缀并自动剥离createPairingPrefixStripper也支持通配符*。配对流程在 zalouser/src/monitor.ts 中实现配对批准后会收到Your pairing request has been approved.的确认通知zalouser/src/channel.ts。群组策略groupPolicy 与 groupsgroupPolicy: allowlist默认只有groups表中列出的群可触发机器人groupPolicy: open所有群可触发groupPolicy: disabled忽略所有群消息。groups表结构示例channels: zalouser: accounts: default: groupPolicy: allowlist groups: 123456789: # 群 ID推荐可避免名称歧义 allow: true requireMention: true Family: # 群名需 dangerouslyAllowNameMatching allow: true requireMention: true *: # 通配符开放所有群同时需 groupPolicy: open allow: true requireMention: true逐群的字段allow、enabled、requireMention、tools工具策略zalouser/src/types.ts。群匹配优先级为 群ID →group:id别名 → 群名/群 slug → 通配符zalouser/src/group-policy.ts群名匹配仅当dangerouslyAllowNameMatching开启时生效。群聊默认要求 机器人requireMention默认true若无法检测到 且机器人无法解析自身 ID会直接丢弃群消息并记录错误zalouser/src/monitor.ts。当群未 机器人时消息会暂存到群历史缓冲区受historyLimit约束供下次 时作为上下文补全zalouser/src/monitor.ts。表情回应通道支持react消息动作zalouser/src/channel.ts可通过openclaw的消息动作接口或 Agent 工具触发。回应需要threadId、messageIdcliMsgId或当前消息上下文表情通过 zalouser/src/reaction.ts 归一化like/→ Zalo 点赞图标heart/❤️/3→ 心形另支持haha/wow/cry/angry及对应 emoji 别名remove: true可移除已有回应。原始 Zalo 图标常量定义在 zalouser/src/zca-constants.ts。监控与稳定性机制网关为每个账号启动一个监听器zalouser/src/monitor.ts关键机制包括按会话串行队列KeyedAsyncQueue以direct:senderId/group:threadId为键保证同一会话内消息按顺序处理互不阻塞监听器看门狗zalo-js.ts中每 30 秒检查一次事件间隔若超过 35 秒无心跳则强制重建连接zalouser/src/zalo-js.ts群上下文缓存群名/成员信息缓存 5 分钟、上限 500 条避免高频查询zalouser/src/zalo-js.ts凭证复用与失效恢复登录凭证缓存于内存会话过期会自动失效并可通过channels login重新登录允许名单自动解析启动时若allowFrom/groups配置了好友名或群名会先拉取好友/群列表自动解析为数字 ID 并合并进运行时配置解析失败的原样保留并输出映射摘要zalouser/src/monitor.ts。故障排查症状处理方式登录状态未持久化openclaw channels logout --channel zalouser openclaw channels login --channel zalouser重新登录连接状态异常openclaw channels status --probe查看探测结果与错误信息allowlist / 群组名称解析失败改用数字 ID 或精确的 Zalo 好友名名称匹配需开启dangerouslyAllowNameMatching登录提示 No saved Zalo session对应 profile 尚未登录先执行openclaw channels login --channel zalouser --account profile群消息不触发检查groupPolicy与groups白名单并确认消息中 了机器人会话过期监听器会报错并停止重新执行channels login恢复小结openclaw/zalouser以纯进程内方式zca-js把 Zalo 个人账号接入 OpenClaw GatewayQR 扫码登录即可收发私聊与群消息支持多账号、DM/群组细粒度准入策略、Markdown 富文本、图片/链接/语音、表情回应与 Agent 工具调用。其会话凭证按 profile 落盘隔离、监听器带看门狗自愈、允许名单支持名称自动解析配置与运维成本都相当低。如需进一步深入可直接阅读仓库中的 zalouser/src/channel.ts、zalouser/src/monitor.ts 与 zalouser/src/zalo-js.ts 三份核心源码以及配套测试zalouser/src/channel.test.ts、zalouser/src/monitor.account-scope.test.ts、zalouser/src/send.test.ts了解更细的行为契约。本文基于zalouser/README.md与仓库源码撰写Zalo 自动化存在账号风险请务必在了解并接受风险的前提下使用。赞分享人工智能大模型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 插件安装、QR 登录与消息自动化实战指南OpenClaw 接入 Zalo 个人账户zalouser 插件安装、QR 登录与消息自动化实战指南 本文以 OpenClaw 的 zalouser 渠道插件人工智能大模型LLM 网关AI Agent即时通讯OpenClaw 中文社区版 Zalo 个人账号接入指南zalouser 渠道插件的安装、配置与源码解析OpenClaw 中文社区版 Zalo 个人账号接入指南zalouser 渠道插件的安装、配置与源码解析 本文围绕 OpenClaw 中文社区版opencl人工智能AI Agent即时通讯后端本地部署语音OpenClaw Zalo Personal 通道zalouser集成指南基于 zca-js 的个人账号消息自动化OpenClaw Zalo Personal 通道zalouser集成指南基于 zca js 的个人账号消息自动化 导读 本文面向希望在 OpenClaw人工智能大模型LLM 网关AI Agent即时通讯上一篇PDF补丁丁终极指南如何一键批量处理100个PDF文档下一篇Discord API官方文档10个快速构建社交应用的终极技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考