OpenClawSkills
GitHub
通道 • 5 分钟阅读

Zalo

Zalo Bot:支持状态、能力与配置

状态:实验性。当前仅支持私信(1:1);按 Zalo 文档,群聊支持"即将推出"。

Tutorial.step

需要安装插件

Zalo 以插件形式提供,不随 core 安装打包。

- CLI 安装:openclaw plugins install @openclaw/zalo

- 或在 onboarding 里选择 Zalo 并确认安装提示

- 详情:''/plugin''

Tutorial.step

新手快速配置

1. 安装 Zalo 插件:

- 从源码 checkout:openclaw plugins install ./extensions/zalo

- 从 npm(若已发布):openclaw plugins install @openclaw/zalo

- 或在 onboarding 里选择 Zalo 并确认安装提示

2. 设置 token:

- Env:ZALO_BOT_TOKEN=...

- 或 config:channels.zalo.botToken: "..."。

3. 重启 gateway(或完成 onboarding)。

4. 私信默认 pairing:首次联系会收到配对码,批准后才会处理消息。

最小配置:

Json5
{
  channels: {
    zalo: {
      enabled: true,
      botToken: "12345689:abc-xyz",
      dmPolicy: "pairing",
    },
  },
}
Tutorial.step

这是什么

Zalo 是越南常用的消息应用;Bot API 允许 Gateway 运行一个 1:1 bot。适用于支持/通知等场景(需要确定性路由回 Zalo)。

- 一个由 Gateway 管理的 Zalo Bot API 通道。

- 确定性路由:回复只回到 Zalo,模型不会选择通道。

- 私信共享 agent 主会话。

- 群聊暂不支持(Zalo 文档称"coming soon")。

Tutorial.step

设置(快速路径)

#

Tutorial.step

1)创建 bot token(Zalo Bot Platform)

1. 打开 https://bot.zaloplatforms.com 并登录。

2. 创建一个新 bot 并完成设置。

3. 复制 bot token(格式:12345689:abc-xyz)。

#

Tutorial.step

2)配置 token(env 或 config)

示例:

Json5
{
  channels: {
    zalo: {
      enabled: true,
      botToken: "12345689:abc-xyz",
      dmPolicy: "pairing",
    },
  },
}

环境变量方式:ZALO_BOT_TOKEN=...(仅对 default account 生效)。

多账号:使用 channels.zalo.accounts 配置每个账号的 token(可选 name)。

3. 重启 gateway。token 可解析时(env 或 config)Zalo 会启动。

4. 私信默认 pairing:第一次联系时批准配对码。

Tutorial.step

工作方式(行为)

- 入站消息会被归一化到通用的 channel envelope(带媒体占位符)。

- 回复始终回到同一个 Zalo chat。

- 默认 long-polling;可通过 channels.zalo.webhookUrl 启用 webhook 模式。

Tutorial.step

限制

- 出站文本按 2000 字符分段(Zalo API 限制)。

- 媒体下载/上传上限:channels.zalo.mediaMaxMb(默认 5MB)。

- 由于 2000 字符上限使流式意义不大,默认禁用 streaming。

Tutorial.step

访问控制(私信)

#

Tutorial.step

私信访问

- 默认:channels.zalo.dmPolicy = "pairing"。未知发送者会收到配对码;批准前消息会被忽略(配对码 1 小时过期)。

- 批准:

- openclaw pairing list zalo

- openclaw pairing approve zalo <CODE>

- pairing 是默认 token exchange。详情:''/start/pairing''

- channels.zalo.allowFrom 只接受数值 user IDs(没有 username lookup)。

Tutorial.step

Long-polling vs webhook

- 默认:long-polling(不需要公网 URL)。

- Webhook 模式:设置 channels.zalo.webhookUrl 与 channels.zalo.webhookSecret。

- secret 必须为 8–256 个字符。

- webhook URL 必须为 HTTPS。

- Zalo 使用 X-Bot-Api-Secret-Token header 做校验。

- Gateway 在 channels.zalo.webhookPath 处理 webhook(默认使用 webhook URL 的 path)。

注意: 按 Zalo API 文档,getUpdates(polling)与 webhook 互斥。

Tutorial.step

支持的消息类型

- 文本:完全支持(2000 字符分段)。

- 图片:支持下载/处理入站图片;出站通过 sendPhoto 发送图片。

- 贴纸:会记录日志,但不会完整处理(通常不触发 agent 回复)。

- 不支持类型:仅记录日志(例如来自受保护用户的消息)。

Tutorial.step

能力

| 功能 | 状态 |

| -- |

| 私信 | ✅ 支持 |

| 群聊 | ❌ Zalo 文档称即将支持 |

| 媒体(图片) | ✅ 支持 |

| Reactions | ❌ 不支持 |

| Threads | ❌ 不支持 |

| Polls | ❌ 不支持 |

| 原生命令 | ❌ 不支持 |

| Streaming | ⚠️ 默认禁用(2000 字符限制) |

Tutorial.step

投递目标(CLI/cron)

- target 使用 chat id。

- 示例:openclaw message send --channel zalo --target 123456789 --message "hi"。

Tutorial.step

排障

Bot 不回复:

- 用 openclaw channels status --probe 检查 token 是否有效

- 确认发送者已被批准(pairing 或 allowFrom)

- 看日志:openclaw logs --follow

Webhook 收不到事件:

- 确认 webhook URL 为 HTTPS

- 确认 secret 长度为 8–256 字符

- 确认 gateway 的 HTTP endpoint 在配置的路径上可达

- 确认没有在跑 getUpdates polling(两者互斥)

Tutorial.step

配置参考(Zalo)

完整配置:''/gateway/configuration''

Provider 选项:

- channels.zalo.enabled

- channels.zalo.botToken

- channels.zalo.tokenFile(从文件读取)

- channels.zalo.dmPolicy:pairing | allowlist | open | disabled(默认 pairing)

- channels.zalo.allowFrom:私信 allowlist(user IDs);open 需要 "*";向导会要求填数值 ID

- channels.zalo.mediaMaxMb:入站/出站媒体上限(MB,默认 5)

- channels.zalo.webhookUrl:启用 webhook 模式(需要 HTTPS)

- channels.zalo.webhookSecret:webhook secret(8–256 字符)

- channels.zalo.webhookPath:gateway 的 webhook path

- channels.zalo.proxy:API 请求代理 URL

多账号选项:

- channels.zalo.accounts.<id>.botToken

- channels.zalo.accounts.<id>.tokenFile

- channels.zalo.accounts.<id>.name

- channels.zalo.accounts.<id>.enabled

- channels.zalo.accounts.<id>.dmPolicy

- channels.zalo.accounts.<id>.allowFrom

- channels.zalo.accounts.<id>.webhookUrl

- channels.zalo.accounts.<id>.webhookSecret

- channels.zalo.accounts.<id>.webhookPath

- channels.zalo.accounts.<id>.proxy