消息平台
Zalo Personal
状态:实验性。此集成通过原生 zca-js 在进程内自动操作个人 Zalo 账户,无需外部 CLI 二进制文件。
安装
Zalo Personal 是官方外部插件,不内置于核心中。使用前请先安装:
openclaw plugins install @openclaw/zalouser- 固定版本:
openclaw plugins install @openclaw/zalouser@<version> - 从源代码检出目录安装:
openclaw plugins install ./path/to/local/zalouser-plugin - 详细信息:插件
快速设置
- 安装插件(见上文)。
- 登录(在 Gateway 网关机器上扫描二维码):
openclaw channels login --channel zalouser- 使用 Zalo 移动应用扫描二维码。
- 启用渠道:
{ channels: { zalouser: { enabled: true, dmPolicy: "pairing", }, },}- 重启 Gateway 网关(或完成设置)。
- 私信访问默认采用配对方式;首次联系时批准配对码。
工作原理
- 完全通过
zca-js库在进程内运行(无需外部zca/openzca二进制文件)。 - 使用原生事件监听器(
message、error)接收入站消息。 - 通过 JS API 直接发送回复(文本、媒体、链接)。
- 专为无法使用 Zalo Bot API 的“个人账户”场景设计。
命名
渠道 ID 为 zalouser,明确表示此集成自动操作的是个人 Zalo 用户账户(非官方)。zalo 保留给未来可能推出的官方 Zalo API 集成。
查找 ID(目录)
openclaw directory self --channel zalouseropenclaw directory peers list --channel zalouser --query "name"openclaw directory groups list --channel zalouser --query "work"限制
- 出站文本按每段 2000 个字符进行分块(Zalo 客户端限制)。
- 不支持流式传输。
访问控制(私信)
channels.zalouser.dmPolicy:pairing | allowlist | open | disabled(默认值:pairing)。
channels.zalouser.allowFrom 应使用稳定的 Zalo 用户 ID。它也可以引用静态发送者访问组(accessGroup:<name>)。在交互式设置期间,可以使用插件的进程内联系人查询功能,将输入的名称解析为 ID。
如果配置中仍有原始名称,启动时仅会在启用 channels.zalouser.dangerouslyAllowNameMatching: true 后解析该名称。若未选择启用此选项,运行时发送者检查仅使用 ID,并在授权时忽略原始名称。
通过以下命令批准:
openclaw pairing list zalouseropenclaw pairing approve zalouser <code>
群组访问(可选)
- 默认值:
channels.zalouser.groupPolicy = "allowlist"(群组必须有明确的允许列表条目)。 - 开放所有群组:
channels.zalouser.groupPolicy = "open"。 - 屏蔽所有群组:
channels.zalouser.groupPolicy = "disabled"。 - 使用
groupPolicy = "allowlist"时:channels.zalouser.groups的键应为稳定的群组 ID;仅当启用channels.zalouser.dangerouslyAllowNameMatching: true时,才会在启动时将名称解析为 ID。channels.zalouser.groupAllowFrom控制允许群组中的哪些发送者可以触发机器人;可以使用accessGroup:<name>引用静态发送者访问组。
- 配置向导可以提示你设置群组允许列表。
- 默认情况下,群组允许列表仅按 ID 匹配。除非启用
channels.zalouser.dangerouslyAllowNameMatching: true,否则授权时会忽略无法解析的名称。 channels.zalouser.dangerouslyAllowNameMatching: true是一种紧急兼容模式,可重新启用易变的启动时名称解析和运行时群组名称匹配。- 对于普通群组消息,
groupAllowFrom不会回退到allowFrom:如果允许列表中的群组将其留空,该群组将对所有发送者开放。已授权的控制命令(例如/new)属于例外;当groupAllowFrom为空时,命令发送者检查会回退到allowFrom。
示例:
{ channels: { zalouser: { groupPolicy: "allowlist", groupAllowFrom: ["1471383327500481391"], groups: { "123456789": { enabled: true }, "Work Chat": { enabled: true }, }, }, },}群组提及门控
channels.zalouser.groups.<group>.requireMention控制群组回复是否需要提及机器人。- 解析顺序:群组 ID ->
group:<id>别名 -> 群组名称/标识名(仅当dangerouslyAllowNameMatching: true时才应用基于名称的候选项)->*-> 默认值(true)。 - 同时适用于允许列表群组和开放群组模式。
- 引用机器人消息会被视为隐式提及,从而激活群组处理。
- 已授权的控制命令(例如
/new)可以绕过提及门控。 - 当群组消息因需要提及而被跳过时,OpenClaw 会将其存储为待处理群组历史记录,并在处理下一条群组消息时将其包含在内。
- 群组历史记录限制依次取值于:
channels.zalouser.historyLimit、messages.groupChat.historyLimit,最后回退为50。
示例:
{ channels: { zalouser: { groupPolicy: "allowlist", groups: { "*": { enabled: true, requireMention: true }, "Work Chat": { enabled: true, requireMention: false }, }, }, },}多账户
账户映射到 OpenClaw 状态中的 zalouser 配置文件。示例:
{ channels: { zalouser: { enabled: true, defaultAccount: "default", accounts: { work: { enabled: true, profile: "work" }, }, }, },}环境变量
也可以通过环境变量选择配置文件:
| 变量 | 用途 |
|---|---|
ZALOUSER_PROFILE |
当渠道或账户配置中未设置 profile 时使用的配置文件名称。 |
ZCA_PROFILE |
旧版回退选项,仅在未设置 ZALOUSER_PROFILE 时使用。 |
配置文件名称用于选择 OpenClaw 状态中保存的 Zalo 登录凭据。解析顺序:
- 配置中明确指定的
profile。 ZALOUSER_PROFILE。ZCA_PROFILE。- 非默认账户使用账户 ID,默认账户使用
default。
对于多账户设置,建议在配置中为每个账户设置 profile,避免单个环境变量导致多个账户共享同一登录会话。
输入状态、表情回应和送达确认
- OpenClaw 在分派回复前发送输入状态事件(尽力而为)。
- 渠道操作支持对
zalouser使用消息表情回应操作react。- 使用
remove: true从消息中移除指定的表情回应。 - 表情回应语义:表情回应
- 使用
- 对于包含事件元数据的入站消息,OpenClaw 会发送已送达和已读确认(尽力而为)。
故障排查
登录状态无法保持:
openclaw channels status --probe- 重新登录:
openclaw channels logout --channel zalouser && openclaw channels login --channel zalouser
无法解析允许列表/群组名称:
- 在
allowFrom/groupAllowFrom中使用数字 ID,并在groups中使用稳定的群组 ID。如果确实需要使用精确的好友/群组名称,请启用channels.zalouser.dangerouslyAllowNameMatching: true。
从旧版外部 zca/基于 CLI 的设置升级:
- 移除所有依赖外部
zca进程的假设;该渠道现在完全通过zca-js在进程内运行,无需外部 CLI 二进制文件。
相关内容
Was this useful?