采购工作流修复:供应商查询逻辑、Contact创建、163 IMAP禁用、编码修复
修复的问题
1. 供应商查询逻辑(按产品名过滤)
文件: server/tools/procurement-workflow-v2.js
- Step1 SCSAI 查询 AML 增加
name condition="like"按产品名过滤:%${product}% - 按产品名未查到时,宽泛查询所有 Vendor(
maxRecords="50",无过滤条件) - 宽泛查询也未找到时,才自动创建供应商
2. Contact 创建失败(绕过 Contact,直接写 Vendor.contact_email)
文件: server/tools/procurement-workflow-v2.js
findOrCreateVendor()重写:跳过 Contact → Vendor → VendorContact 的三步走模式- 改为一步创建 Vendor 并直接写
contact_email字段:{ name, contact_name, contact_email } - 错误日志现在输出完整
fault详情
3. 供应商命名规则
文件: server/tools/procurement-workflow-v2.js
- 自动创建的供应商名称改为
{product}供应商{序号} - 如购买"伺服电机",则创建 "伺服电机供应商1"、"伺服电机供应商2"
- 方便后续按产品名搜索
4. 163邮箱全面禁用
文件: server/services/email-service.js
getImapConfigs()增加DISABLE_163_IMAP环境变量开关- 默认跳过163 IMAP(
DISABLE_163_IMAP未设置或为true时跳过) - 只有明确设为
false才启用
文件: server/tools/procurement-workflow-v2.js
- 供应商创建列表增加
skipEmails过滤:18601921816@163.com,tuan_zhang@sina.com - 第二个 fallback 入口同样过滤
5. IMAP 重复抓取
文件: server/services/email-service.js
fetchNewEmails()增加_lastProcessedSeq[label]追踪- 无新邮件直接跳过(
startSeq > total)
6. 编码修复
- nodemailer 已设
defaults: { charset: 'UTF-8' },邮件 Subject 自动 UTF-8 base64 编码 - 所有
??显示问题均为终端编码导致(Node.js 内存中字符串正确)
环境变量变更
DISABLE_163_IMAP=true- 禁用163 IMAP(已设,需在 .env 或启动时注入)SKIP_EMAILS- 逗号分隔的跳过邮箱列表(默认 163/sina)COZE_SUPPLIER_1/2/3- 自定义备用供应商邮箱
触发方式
DS-PROC-001 采购助手启动后:
- 查 SCSAI Vendor where name LIKE '%伺服电机%'
- 查到→使用;没查到→全量查(无过滤)
- 还没找到→自动创建"伺服电机供应商1/2"(跳过163/sina邮箱)
- 发询价邮件(过滤自身邮箱+163/sina)
- 等报价(仅 QQ IMAP 监听,163 不启)
- 比价+报告+确认+PO
文件修改清单
D:\openclaw\bossagents\server\tools\procurement-workflow-v2.js:供应商查询 AML、findOrCreateVendor、fallback 供应商名、163 过滤、self-email 过滤D:\openclaw\bossagents\server\services\email-service.js:163 IMAP 禁用开关、IMAP 去重追踪
BossAgents