Skip to content

Commit f14b794

Browse files
authored
Merge pull request #13 from AgentFlocks/codex/add-whatsapp-channel-config-docs
docs: add whatsapp channel configuration
2 parents 35893db + 1de8b30 commit f14b794

13 files changed

Lines changed: 225 additions & 22 deletions

File tree

‎docs/index.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ features:
7474

7575
1. 按部署与接入顺序完成 [部署与配置](/md/communication)
7676
2. 补齐模型与供应商: [模型配置](/md/communication-models) 和 [模型报错排查](/md/llm_models#模型报错排查)
77-
3. 配置消息通道:选择 [钉钉](/md/channels/dingtalk)、[飞书](/md/channels/feishu)、[企微](/md/channels/wecom)、[Telegram](/md/channels/telegram)、[微信](/md/channels/weixin) 配置页
77+
3. 配置消息通道:选择 [钉钉](/md/channels/dingtalk)、[飞书](/md/channels/feishu)、[企微](/md/channels/wecom)、[Telegram](/md/channels/telegram)、[微信](/md/channels/weixin)、[WhatsApp](/md/channels/whatsapp) 配置页
7878
4. 对接内部工具: [工具清单](/md/modules/tools)
7979

8080
### 我要做安全运营场景

‎docs/md/appendix.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ flocks restart
6666
| `provider` | 定义模型供应商、适配器和模型集合 | 接入 OpenAI Compatible、本地模型、自建网关 |
6767
| `api_services` | 定义外部安全服务是否启用 | 接 TDP、ThreatBook、Qingteng 等平台 |
6868
| `mcp` | 定义 MCP 服务接入 | 用 MCP 扩展外部上下文或工具能力 |
69-
| `channels` | 定义消息通道 | 接飞书、企微、钉钉、Telegram |
69+
| `channels` | 定义消息通道 | 接飞书、企微、钉钉、Telegram、WhatsApp |
7070
| `sandbox` | 定义执行隔离方式 | 团队化运行、需要更强边界控制时 |
7171
| `server` | 定义服务层行为 | 调整 CORS 或服务访问相关配置 |
7272
| `allowReadPaths` | 定义允许读取的路径 | 需要显式授权额外读路径时 |
@@ -133,7 +133,7 @@ Flocks 运行时用于保存输入、输出、中间产物和报告的工作区
133133

134134
### Channel
135135

136-
把消息发送到飞书、企业微信、钉钉、Telegram 等外部触点的通道能力。
136+
把消息发送到飞书、企业微信、钉钉、Telegram、WhatsApp 等外部触点的通道能力。
137137

138138
### Sandbox
139139

‎docs/md/channels/dingtalk.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,4 +100,4 @@
100100

101101
---
102102

103-
相关:[通道配置总览](/md/communication-channels) · [飞书通道配置](/md/channels/feishu) · [企业微信通道配置](/md/channels/wecom) · [Telegram 通道配置](/md/channels/telegram) · [微信通道配置](/md/channels/weixin)
103+
相关:[通道配置总览](/md/communication-channels) · [飞书通道配置](/md/channels/feishu) · [企业微信通道配置](/md/channels/wecom) · [Telegram 通道配置](/md/channels/telegram) · [微信通道配置](/md/channels/weixin) · [WhatsApp 通道配置](/md/channels/whatsapp)

‎docs/md/channels/feishu.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,4 @@
6666

6767
---
6868

69-
相关:[通道配置总览](/md/communication-channels) · [钉钉通道配置](/md/channels/dingtalk) · [企业微信通道配置](/md/channels/wecom) · [Telegram 通道配置](/md/channels/telegram) · [微信通道配置](/md/channels/weixin)
69+
相关:[通道配置总览](/md/communication-channels) · [钉钉通道配置](/md/channels/dingtalk) · [企业微信通道配置](/md/channels/wecom) · [Telegram 通道配置](/md/channels/telegram) · [微信通道配置](/md/channels/weixin) · [WhatsApp 通道配置](/md/channels/whatsapp)

‎docs/md/channels/telegram.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,4 +178,4 @@ Flocks 会根据 `session ID` 自动找到绑定的 Telegram 对话并发送消
178178

179179
---
180180

181-
相关:[通道配置总览](/md/communication-channels) · [钉钉通道配置](/md/channels/dingtalk) · [飞书通道配置](/md/channels/feishu) · [企业微信通道配置](/md/channels/wecom) · [微信通道配置](/md/channels/weixin)
181+
相关:[通道配置总览](/md/communication-channels) · [钉钉通道配置](/md/channels/dingtalk) · [飞书通道配置](/md/channels/feishu) · [企业微信通道配置](/md/channels/wecom) · [微信通道配置](/md/channels/weixin) · [WhatsApp 通道配置](/md/channels/whatsapp)

‎docs/md/channels/wecom.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,4 @@ Flocks 会根据 `session ID` 自动找到绑定的企微会话并发送消息
7474

7575
---
7676

77-
相关:[通道配置总览](/md/communication-channels) · [钉钉通道配置](/md/channels/dingtalk) · [飞书通道配置](/md/channels/feishu) · [Telegram 通道配置](/md/channels/telegram) · [微信通道配置](/md/channels/weixin)
77+
相关:[通道配置总览](/md/communication-channels) · [钉钉通道配置](/md/channels/dingtalk) · [飞书通道配置](/md/channels/feishu) · [Telegram 通道配置](/md/channels/telegram) · [微信通道配置](/md/channels/weixin) · [WhatsApp 通道配置](/md/channels/whatsapp)

‎docs/md/channels/weixin.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,4 @@
7373

7474
---
7575

76-
相关:[通道配置总览](/md/communication-channels) · [企业微信通道配置](/md/channels/wecom) · [飞书通道配置](/md/channels/feishu) · [钉钉通道配置](/md/channels/dingtalk) · [Telegram 通道配置](/md/channels/telegram)
76+
相关:[通道配置总览](/md/communication-channels) · [企业微信通道配置](/md/channels/wecom) · [飞书通道配置](/md/channels/feishu) · [钉钉通道配置](/md/channels/dingtalk) · [Telegram 通道配置](/md/channels/telegram) · [WhatsApp 通道配置](/md/channels/whatsapp)

‎docs/md/channels/whatsapp.md‎

Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
# WhatsApp 通道配置
2+
3+
本文介绍如何在 Flocks WebUI 中通过 WhatsApp Linked Devices 扫码配对,完成 WhatsApp 通道的连接、权限控制与验证。
4+
5+
## 适用场景
6+
7+
- 希望通过 WhatsApp 私聊触发 Rex 或指定 Agent。
8+
- 希望在 WhatsApp 群聊中接收问题,并把分析结果回复到原会话。
9+
- 希望把任务中心、Workflow 或会话结果推送到固定 WhatsApp 联系人或群组。
10+
- 不具备 Meta Business 账号或公网 Webhook 条件,希望先用 WhatsApp Web 配对方式快速接入。
11+
12+
## 前置准备
13+
14+
- Flocks 所在服务器已安装 `Node.js 18+` 和 `npm`。WhatsApp 通道使用本地 Baileys bridge 进程连接 WhatsApp Web。
15+
- 手机端已安装并登录 WhatsApp,用于扫描 Linked Devices 二维码。
16+
- 部署环境可以访问 WhatsApp Web 相关 HTTPS / WebSocket 服务。
17+
- 建议准备一个专用 WhatsApp 号码作为机器人账号,不建议直接使用个人常用号码。
18+
19+
> WhatsApp 通道使用 WhatsApp Web 协议配对,不是 Meta 官方 WhatsApp Business Cloud API。因此无需 Meta 开发者账号,也无需配置公网回调地址;但 WhatsApp Web 协议更新或账号风控策略变化,可能导致连接中断或需要重新配对。
20+
21+
## 操作步骤
22+
23+
### 1. 打开 WhatsApp 通道配置页
24+
25+
进入 Flocks WebUI 的「通道配置 → WhatsApp」。
26+
27+
首次配置时,「账号连接」区域会显示 **扫码连接 WhatsApp**。如果已经配对过,会显示已配对状态,并提供 **重新扫码 / 更换账号**。
28+
29+
### 2. 选择运行模式
30+
31+
WhatsApp 通道支持两种模式:
32+
33+
34+
| 模式 | 说明 | 推荐场景 |
35+
| ---------------- | --------------------------------------- | ----------------- |
36+
| Bot 模式(独立账号) | 使用一个专门的 WhatsApp 账号作为机器人账号,其他用户向该账号发消息。 | 团队使用、多人私聊、群聊、生产环境 |
37+
| Self-chat(仅本人自聊) | 使用自己的 WhatsApp 账号,只处理本人发给自己的消息。 | 个人测试、单用户验证 |
38+
39+
40+
生产环境建议使用 **Bot 模式(独立账号)**。这样可以降低误操作和账号权限混用风险,也更容易管理白名单、群聊和消息投递目标。
41+
42+
### 3. 扫码配对
43+
44+
1. 点击 **扫码连接 WhatsApp**。
45+
2. WebUI 会启动本地 WhatsApp bridge,并弹出二维码。
46+
3. 打开手机 WhatsApp。
47+
4. 进入 **Settings → Linked Devices**。
48+
5. 点击 **Link a Device**,扫描 WebUI 中的二维码。
49+
6. WebUI 显示连接完成后,Flocks 会保存会话凭据并启用或重启通道。
50+
51+
二维码过期、扫码失败或需要更换账号时,点击 **重新扫码 / 更换账号** 再次配对即可。
52+
53+
### 4. 配置私信策略
54+
55+
私信策略用于控制哪些 WhatsApp 用户可以触发 Agent。
56+
57+
58+
| 策略 | 说明 |
59+
| ------------- | ----------------------------------- |
60+
| 开放(所有人均可) | 任意给该 WhatsApp 账号发私信的用户都可以触发 Flocks。 |
61+
| 白名单(仅允许名单内用户) | 只有 `允许的用户` 列表中的号码或 JID 可以触发 Flocks。 |
62+
| 关闭(不接受私信) | 不处理 WhatsApp 私聊消息。 |
63+
64+
65+
生产环境建议使用白名单。`允许的用户` 支持以下格式:
66+
67+
```text
68+
15551234567
69+
15551234567@s.whatsapp.net
70+
123456789@lid
71+
```
72+
73+
填写手机号时建议包含国家或地区码,不需要空格;Flocks 会在运行时归一化为 WhatsApp JID。
74+
75+
### 5. 配置群聊策略
76+
77+
群聊策略用于控制 WhatsApp 群消息是否可以触发 Agent。
78+
79+
80+
| 策略 | 说明 |
81+
| ------------ | -------------------------------- |
82+
| 开放(所有群均可) | 机器人所在的所有 WhatsApp 群都可以触发 Flocks。 |
83+
| 白名单(仅允许名单内群) | 只有 `允许的群 JID` 列表中的群可以触发 Flocks。 |
84+
| 关闭(不处理群聊) | 不处理 WhatsApp 群聊消息。 |
85+
86+
87+
群 JID 通常以 `@g.us` 结尾,例如:
88+
89+
```text
90+
120363000000000000@g.us
91+
```
92+
93+
群聊触发方式建议保持为 **仅 @ 或回复机器人时触发**。只有在非常明确需要处理群内所有消息时,才改为 **所有消息都触发**,否则容易造成大量无关消息触发 Agent。
94+
95+
### 6. 调整高级设置
96+
97+
默认配置通常可以直接使用。只有在端口冲突、长消息体验或网络较慢时,才需要调整高级设置。
98+
99+
100+
| 配置项 | 默认值 / 说明 |
101+
| --------- | -------------------------------------------------------------------- |
102+
| 会话目录 | 默认 `~/.flocks/workspace/channels/whatsapp/session`,保存 WhatsApp 登录凭据。 |
103+
| Bridge 端口 | 默认 `3100`,本地 bridge 仅监听 `127.0.0.1`。如端口冲突可修改。 |
104+
| 回复前缀 | 发送到 WhatsApp 前追加的文本前缀,可留空。 |
105+
| 文本合并等待 | 连续多条文本消息在触发 Agent 前的合并等待时间,避免一段话被拆成多次调用。 |
106+
| 分块发送间隔 | 长回复拆分为多条 WhatsApp 消息时,每段之间的发送间隔。 |
107+
| 发送超时 | bridge 调用 WhatsApp `sendMessage` 的单次超时时间。 |
108+
| 媒体缓存目录 | 入站媒体下载到本地的目录,留空使用默认工作区目录。 |
109+
110+
111+
## 验证连接
112+
113+
保存并启用通道后,可以按下面方式验证:
114+
115+
1. 用允许名单内的 WhatsApp 用户向机器人账号发送一条私信。
116+
2. 如果启用了群聊,在允许的群里 `@` 机器人或回复机器人消息。
117+
3. 在 WhatsApp 中发送 `/status`,查看当前绑定的 Session、Agent、模型和通道信息。
118+
4. 如果 Flocks 正常回复,说明 WhatsApp 通道已经连接成功。
119+
120+
## 结果推送与 session ID
121+
122+
如需在 Flocks 页面、任务中心或 Workflow 中主动向 WhatsApp 发送结果,建议先建立会话绑定并获取目标 `session ID`。
123+
124+
获取方式:
125+
126+
1. 在目标 WhatsApp 私聊或群聊中询问 Rex:`你的 sessionid 是什么?`
127+
2. 或发送 `/status`,查看当前绑定的 Session、Agent、模型和 WhatsApp 对话信息。
128+
3. 在 WebUI、另一个会话、任务中心或 Workflow 中使用这个 `session ID`:
129+
130+
```text
131+
给 sessionid:<sessionID>,发送:今日巡检完成,发现 2 条高危告警。
132+
```
133+
134+
Flocks 会根据 `session ID` 自动找到绑定的 WhatsApp 对话并发送消息。如果目标 WhatsApp 对话执行过 `/new`,会重新绑定新的 Session,后续推送应使用新的 `session ID`。
135+
136+
## 会话凭据与安全注意事项
137+
138+
WhatsApp 配对完成后,会话凭据保存在 `会话目录` 下。默认路径为:
139+
140+
```text
141+
~/.flocks/workspace/channels/whatsapp/session
142+
```
143+
144+
请按敏感凭据保护这个目录:
145+
146+
- 不要把会话目录提交到 Git、复制给他人或放入公开备份。
147+
- 建议限制目录权限,例如只允许 Flocks 运行用户读取。
148+
- 如果怀疑凭据泄露,在手机 WhatsApp 的 **Linked Devices** 中移除对应设备,然后在 Flocks 中重新扫码。
149+
- 生产环境建议使用专用号码,避免个人聊天、联系人和业务机器人混用。
150+
- 不要进行批量营销、垃圾消息或未经对方主动联系的外呼式自动消息。
151+
152+
## 常见问题
153+
154+
### 提示未安装 Node.js 或 npm
155+
156+
WhatsApp bridge 依赖本机 `node` 和 `npm`。请先安装 `Node.js 18+`,并确认 Flocks 服务进程能找到它们:
157+
158+
```bash
159+
node --version
160+
npm --version
161+
```
162+
163+
如果终端里能找到 `node`,但以系统服务方式启动的 Flocks 找不到,通常是服务进程的 `PATH` 和当前 shell 不一致。请调整服务环境变量后重启 Flocks。
164+
165+
### 二维码一直加载或弹出超时
166+
167+
优先检查:
168+
169+
- 部署环境是否可以访问 WhatsApp Web 相关 HTTPS / WebSocket 服务。
170+
- 是否可以正常执行 `npm ci` 或 `npm install` 安装 bridge 依赖。
171+
- 企业代理、防火墙或 DNS 是否阻断 WebSocket。
172+
- `~/.flocks/workspace/channels/whatsapp/bridge.log` 中是否有 TLS、网络、登录或配对错误。
173+
174+
Flocks 会在 WhatsApp bridge 的 Node 子进程中使用 Node 内置 CA,以减少部分系统 CA 链异常导致的 TLS 连接失败。如果企业环境必须使用自签 CA 或代理 CA,应同时检查 Node 进程的证书与代理配置。
175+
176+
### 扫码成功后消息没有响应
177+
178+
优先检查:
179+
180+
- 通道是否已启用并处于运行中状态。
181+
- 私信策略是否为白名单,但当前用户不在 `允许的用户` 中。
182+
- 群聊策略是否关闭,或当前群不在 `允许的群 JID` 中。
183+
- 群聊触发方式是否要求 `@` 或回复机器人。
184+
- 当前账号是否仍在手机 WhatsApp 的 **Linked Devices** 列表中。
185+
186+
### 需要重新配对或更换账号
187+
188+
在 WhatsApp 通道配置页点击 **重新扫码 / 更换账号**。新二维码配对成功后,Flocks 会保存新的会话凭据并重启通道。
189+
190+
如果手机端已经手动移除了 Linked Device,或 WhatsApp 更新后旧会话失效,也需要重新扫码。
191+
192+
### Bridge 端口冲突
193+
194+
默认 bridge 端口是 `3100`,且仅监听 `127.0.0.1`。如果同一台机器上运行多个 Flocks 实例,或端口被其他程序占用,请在高级设置中修改 `Bridge 端口`,然后保存并重启通道。
195+
196+
---
197+
198+
相关:[通道配置总览](/md/communication-channels) · [钉钉通道配置](/md/channels/dingtalk) · [飞书通道配置](/md/channels/feishu) · [企业微信通道配置](/md/channels/wecom) · [Telegram 通道配置](/md/channels/telegram) · [微信通道配置](/md/channels/weixin)

‎docs/md/communication-channels.md‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
# 3.3 通道配置
22

3-
通道配置负责把 Flocks 的能力延伸到 IM 或外部触点。当前 WebUI 的通道页已经支持飞书、企业微信、微信、Telegram 和钉钉等通道,并且允许分别查看启用状态和配置字段。
3+
通道配置负责把 Flocks 的能力延伸到 IM 或外部触点。当前 WebUI 的通道页已经支持飞书、企业微信、微信、WhatsApp、Telegram 和钉钉等通道,并且允许分别查看启用状态和配置字段。
44

55
![通道配置页面](../img/communication-channels-overview.png)
66

77
配置 IM 通道后,Flocks 可以覆盖下面这些典型使用场景:
88

9-
- 把研判结果主动发到企业微信群、微信会话、钉钉群或其他消息触点
9+
- 把研判结果主动发到企业微信群、微信会话、WhatsApp 会话、钉钉群或其他消息触点
1010
- 让机器人在特定群或会话中接收消息
1111
- 把定时任务的结果直接推送给值班人员或运营团队
1212

13-
## 3.3.1 五大平台配置入口
13+
## 3.3.1 平台配置入口
1414

1515
不同 IM 平台的开发者后台流程差异较大,Flocks 将主流平台的接入指南拆成独立页面,按需查阅即可:
1616

@@ -19,16 +19,17 @@
1919
- [企业微信通道配置](/md/channels/wecom):企业微信管理后台 + 智能机器人 + Bot ID / Secret
2020
- [Telegram 通道配置](/md/channels/telegram):BotFather 创建 Bot + Bot Token + Polling / Webhook
2121
- [微信通道配置](/md/channels/weixin):微信 iLink Bot 扫码登录 + Token / Account ID
22+
- [WhatsApp 通道配置](/md/channels/whatsapp):WhatsApp Linked Devices 扫码配对 + 本地 Baileys bridge
2223

23-
每个子页面都给出了从平台侧创建机器人到 Flocks 连接的完整步骤。多群投递与 `session ID` 的使用细节,放在 [企业微信通道配置](/md/channels/wecom#多群消息与-session-id) 和 [Telegram 通道配置](/md/channels/telegram#结果推送与-session-id) 中说明;微信通道则通过 WebUI 内置的二维码登录直接获取 `Token` 与 `Account ID`。
24+
每个子页面都给出了从平台侧准备到 Flocks 连接的完整步骤。多群投递与 `session ID` 的使用细节,放在 [企业微信通道配置](/md/channels/wecom#多群消息与-session-id)、[Telegram 通道配置](/md/channels/telegram#结果推送与-session-id) 和 [WhatsApp 通道配置](/md/channels/whatsapp#结果推送与-session-id) 中分别说明;微信和 WhatsApp 通道都通过 WebUI 内置二维码流程完成账号连接。
2425

2526
## 3.3.2 使用方式
2627

2728
配置好 IM 通道后,可以通过两种方式使用 Flocks。
2829

2930
### 从 IM 中直接发消息
3031

31-
在企业微信、飞书、钉钉、Telegram 或微信等 IM 中向 Flocks 机器人发送消息后,Flocks 会在当前 IM 会话中回答。
32+
在企业微信、飞书、钉钉、Telegram、微信或 WhatsApp 等 IM 中向 Flocks 机器人发送消息后,Flocks 会在当前 IM 会话中回答。
3233

3334
常见用法:
3435

‎docs/md/modules.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ Skill、Agent / Subagent 与 Workflow 都用于承载具体任务能力,核心
113113

114114
### 2.11 [通道管理](/md/modules/channels)
115115

116-
通道管理用于配置飞书、企业微信、钉钉、Telegram、微信等 IM 通道,让 Rex 可以在团队协作入口接收消息,任务中心和 Workflow 也可以把结果推送到指定群或用户。
116+
通道管理用于配置飞书、企业微信、钉钉、Telegram、微信、WhatsApp 等 IM 通道,让 Rex 可以在团队协作入口接收消息,任务中心和 Workflow 也可以把结果推送到指定群或用户。
117117

118118
> 典型用法:群里 @Rex 触发研判 · 定时巡检结果发企微 · 告警研判报告推送飞书
119119

0 commit comments

Comments
 (0)