老板数字员工平台 — 统一调度与多通道对接方案
版本: 2.0 | 更新日期: 2026-05-29
核心调整: 去掉"邮箱中心"模型,邮箱只是传输中介之一,与飞书/企微/Telegram/WorkBuddy 本质等价。
一、设计原则
1.1 通道无关 (Channel-Agnostic)
老板不需要关心消息走哪条通道。所有业务事件通过统一调度层 dispatch() 分发,平台按优先级和配置自动选择通道:
业务事件 (库存预警/ECR待审/BOM变更/报表就绪)
│
▼
dispatch() ← 统一入口,通道无关
│
├── 邮件通道 (SMTP → 老板邮箱 / Coze智能体邮箱)
├── 飞书通道 (Webhook → 飞书群/机器人)
├── 企微通道 (Webhook → 企业微信群)
├── Telegram通道 (Bot API → 私聊/群组)
└── WorkBuddy通道 (Webhook → AI技能执行)
关键认知:邮箱只是"文档中介"(文档传输载体),不是架构中心。Coze 智能体自带邮箱能力、WorkBuddy 可通过技能收发邮件、飞书也有邮件集成——所有通道本质上都是"把结构化消息投递给老板"。
1.2 双向交互
- 推送(BossAgents → 老板):业务事件触发 → dispatch() 多通道并行推送
- 指令(老板 → BossAgents):自然语言 → 任意通道接入 → 执行业务操作 → 返回结果
老板通过任意通道发指令
│
▼
┌─────────────────────────────────────────────┐
│ WorkBuddy Hook POST /api/workbuddy/hook │ ← 自然语言→工具执行
│ Coze 回调 POST /api/coze/callback │ ← 结构化action执行
│ 飞书机器人 POST /api/feishu/webhook │ ← 未来扩展
│ 企微机器人 POST /api/wework/webhook │ ← 未来扩展
└─────────────────────────────────────────────┘
│
▼
执行引擎 (SCSAI AML / SQLite查询 / LLM推理)
│
▼
结果 → dispatch() → 推送回老板(任意通道)
1.3 渐进接入
不需要一次配齐所有通道。配一个激活一个:
| 通道 | 状态 | 配置要求 |
|------|------|---------|
| 邮件 (SMTP) | 已配置 | .env 中 SMTP_* 已填,开箱即用 |
| WorkBuddy | 已配置 | 本地 webhook,已实现 |
| Coze 回调 | 已实现 | /api/coze/callback,可创建采购单 |
| 飞书 | 待配置 | .env 填 FEISHU_WEBHOOK |
| 企微 | 待配置 | .env 填 WEWORK_WEBHOOK |
| Telegram | 待配置 | .env 填 TELEGRAM_BOT_TOKEN + CHAT_ID |
二、核心架构
2.1 统一调度服务
文件: server/services/unified-dispatch.js
// 核心函数签名
async function dispatch(event) {
// event = {
// type: 'inventory_alert' | 'bom_change' | 'report_ready' | 'task_completed' | 'ecr_pending'
// subject: '库存预警:3项物料低于安全库存'
// text: '纯文本内容'
// html: '<h2>HTML内容</h2>' // 邮件专用
// icon: '📦'
// summary: '摘要'
// data: { items: [...] } // 结构化数据
// channels: ['email', 'feishu'] // 指定通道,默认全部
// priority: 'high' | 'normal' | 'low'
// metadata: {} // 透传元数据
// }
}
6 个便捷方法:
| 方法 | 事件类型 | 优先级 | 典型触发 |
|------|---------|--------|---------|
| dispatchInventoryAlert(items) | inventory_alert | high | 定时巡检发现库存不足 |
| dispatchBomChange(changes) | bom_change | normal | BOM工程师修改了BOM结构 |
| dispatchEcrPending(ecrInfo) | ecr_pending | high | 新ECR提交等待审批 |
| dispatchReportReady(reportInfo) | report_ready | low | 数字员工生成了分析报告 |
| dispatchTaskComplete(taskInfo) | task_completed | normal | 数字员工执行完成一轮 |
| dispatchNotify(subject, text) | notification | normal | 任意自定义通知 |
调用示例:
const dispatch = require('./server/services/unified-dispatch');
// 库存预警 → 仅推邮件
await dispatch.dispatchInventoryAlert(alertItems, {
channels: ['email']
});
// ECR待审 → 邮件 + 飞书 + WorkBuddy 三通道
await dispatch.dispatchEcrPending(ecrData, {
channels: ['email', 'feishu', 'workbuddy']
});
// 报表就绪 → 全通道(默认)
await dispatch.dispatchReportReady(reportInfo);
2.2 五大通道适配器
| 通道 | 适配器函数 | 底层实现 | 配置来源 |
|------|-----------|---------|---------|
| 邮件 | channelEmail() | nodemailer SMTP | .env SMTP_* + config.yaml notify.email |
| 飞书 | channelFeishu() | notify.js → 飞书Webhook | config.yaml notify.feishu |
| 企微 | channelWework() | notify.js → 企微Webhook | config.yaml notify.wework |
| Telegram | channelTelegram() | notify.js → Bot API | config.yaml notify.telegram |
| WorkBuddy | channelWorkbuddy() | HTTP POST → webhook | .env WORKBUDDY_HOOK_URL |
所有适配器执行结果统一格式:{ channel: string, ok: boolean, error?: string }
2.3 邮件通道的双子通道
邮件通道内部有两个子通道(不需要都启用):
channelEmail()
├── boss_agent 子通道 → 推送到 COZE 智能体邮箱 (BOSS_AGENT_EMAIL)
│ 触发条件: channels 含 'email' 或 'boss_agent'
│
└── notify_email 子通道 → 推送到 notify.email.to 收件人列表
触发条件: channels 含 'email' 或 'notify_email'
- boss_agent 子通道:用于让 Coze 智能体收到邮件后自动处理(创建采购单等)
- notify_email 子通道:用于普通邮件通知(发送给老板/团队成员)
三、双向指令链路
3.1 WorkBuddy 直接对接(已实现)
路由: POST /api/workbuddy/hook
老板通过 WorkBuddy 发自然语言 → BossAgents 解析意图 → 调用工具 → 返回结果。
已注册的工具:
query_bom_structure— 查询BOM结构check_inventory— 库存检查query_vendors— 供应商查询create_purchase_order— 创建采购单get_dashboard— 老板看板数据
3.2 Coze 回调对接(已实现)
路由: POST /api/coze/callback
Coze 智能体收到邮件后,可回调 BossAgents 执行操作:
| Action | 说明 | 实现状态 |
|--------|------|---------|
| ping | 健康检查 | 已实现 |
| create_purchase_order | 创建采购单(写SCSAI) | 已实现 |
| get_inventory_alerts | 查询库存预警 | 已实现 |
| get_vendor_info | 查询供应商信息 | 已实现 |
| approve_ecr | 审批ECR | 待实现 |
| query_bom | 查询BOM | 待实现 |
3.3 飞书/企微对接(待实现)
未来可注册 Webhook 路由,接入飞书机器人或企微机器人,实现同样的自然语言→工具执行链路。
四、配置体系
4.1 配置优先级
环境变量 (.env) > config.yaml > 代码默认值
4.2 邮件配置(已就绪)
.env 文件:
SMTP_HOST=smtp.sina.com
SMTP_PORT=465
SMTP_SECURE=true
SMTP_USER=tuan_zhang@sina.com
SMTP_PASS=******
SMTP_FROM_NAME=WorkBuddy
SMTP_FROM=tuan_zhang@sina.com
NOTIFICATION_EMAIL=tuan_zhang@sina.com # 收件人
config-loader 自动映射到 config.notify.email,并设 enabled = true。
4.3 新增通道只需两步
以飞书为例:
Step 1: .env 添加
FEISHU_WEBHOOK=https://open.feishu.cn/open-apis/bot/v2/hook/xxx
Step 2: config.yaml 添加(或通过环境变量覆盖)
notify:
feishu:
enabled: true
webhook_url: https://open.feishu.cn/open-apis/bot/v2/hook/xxx
统一调度层自动识别并激活,无需改代码。
五、事件触发场景
5.1 自动触发(数字员工巡检)
定时任务 (node-cron)
│
├── 库存巡检 (每小时) → 发现缺料 → dispatchInventoryAlert()
├── ECR 扫描 (15分钟) → 待审批ECR → dispatchEcrPending()
├── 供应商评分 (每天) → 质量下降 → dispatchNotify()
└── BOM 变更监听 → 结构变更 → dispatchBomChange()
5.2 手动触发(老板指令)
老板 → WorkBuddy/Coze/飞书 → 自然语言
│
├── "查一下最近的库存预警" → getInventoryAlerts → 返回数据
├── "帮我创建采购单给XX供应商" → createPurchaseOrder → 返回PO号
├── "ECR-001 通过审批" → approveECR → 返回审批结果
└── "把这份报告发给我" → dispatchReportReady() → 推送到所有通道
5.3 闭环场景(推送→指令→执行→推送)
库存巡检发现缺料
→ dispatchInventoryAlert() 推送到老板邮箱
→ 老板回复 "给XX供应商创建采购单"
→ Coze/WorkBuddy 识别指令
→ POST /api/coze/callback { action: 'create_purchase_order', ... }
→ SCSAI 创建采购单
→ dispatchTaskComplete() 通知老板 "采购单 PO-XXX 已创建"
六、当前实现状态
6.1 已完成
| 模块 | 文件 | 说明 |
|------|------|------|
| 统一调度服务 | server/services/unified-dispatch.js | dispatch() + 6个便捷方法 + 5通道适配器 |
| 邮件服务 | server/services/email-service.js | nodemailer SMTP,sendToBossAgent / sendEmail |
| 通用推送 | notify.js | 飞书/企微/Telegram/邮件 4通道底层实现 |
| Coze 回调 | server/services/coze-callback-service.js | 4个action已实现 |
| WorkBuddy 对接 | server.js (路由) | hook + tools + execute 3个API |
| 推送路由 | server.js | /api/dispatch POST + /api/dispatch/history GET |
| 推送历史 | dispatch_history 表 | boss_analytics.db 记录每次推送结果 |
| 配置加载 | config-loader.js | .env → config 映射,SMTP自动启用 |
| 库存预警对接 | server/agents/inventory-alert-agent.js | 已改用 dispatch.dispatchInventoryAlert() |
6.2 待完成
| 模块 | 说明 | 优先级 |
|---|---|---|
| ECR 数字员工对接 | ECR审核完成后调 dispatchEcrPending() | P1 |
| BOM变更监听对接 | BOM变更时调 dispatchBomChange() | P1 |
| 成本优化报告对接 | 报告生成后调 dispatchReportReady() | P2 |
| 飞书 Webhook 路由 | POST /api/feishu/webhook 自然语言→执行 | P2 |
| 企微 Webhook 路由 | POST /api/wework/webhook 自然语言→执行 | P2 |
| Coze action 扩展 | approve_ecr、query_bom 等 | P2 |
| 推送历史前端展示 | 老板看板展示 dispatch_history | P2 |
| 通道优先级策略 | 按优先级和时区智能选通道 | P3 |
七、与旧方案的对比
| 维度 | 旧方案(邮箱中心) | 新方案(通道无关) |
|---|---|---|
| 架构中心 | 邮箱(Coze智能体邮箱) | 统一调度层 dispatch() |
| 邮箱角色 | 枢纽,所有消息经邮箱中转 | 通道之一,与其他通道等价 |
| 新增通道 | 需围绕邮箱改造 | 只需添加通道适配器 + 配置 |
| 接入方式 | 必须配邮箱 | 任意通道可独立接入 |
| 老板体验 | 只能看邮件 | 飞书/企微/Telegram/邮件/WB 任选 |
| 闭环链路 | 邮件→Coze→回调→邮件 | 任意通道入→执行→任意通道出 |
八、API 速查
推送(出站)
POST /api/dispatch
Body: { type, subject, text, channels, data, priority }
Response: { success, results: [{ channel, ok }], dispatched_at }
GET /api/dispatch/history?limit=20
Response: [{ event_type, subject, channels, success_count, dispatched_at }]
指令(入站)
POST /api/workbuddy/hook
Body: { message: "自然语言指令" }
Response: { reply, data }
POST /api/coze/callback
Body: { action: "create_purchase_order", data: {...} }
Response: { success, data: { po_no } }
GET /api/workbuddy/tools
Response: [{ name, description, parameters }]
BossAgents