企业搭建落地openclaw记录

第一章:背景

我所在的公司深耕新能源领域,业务涵盖光伏电站投资、储能系统集成、锂电池回收等。随着“十五五”规划开局,行业政策密集出台,技术迭代加速,市场竞争白热化。公司内部多个部门对信息有着强烈需求:

  • 市场部:需要实时掌握竞争对手动态、招投标信息、海外市场准入政策,以便调整营销策略。
  • 研发部:关注固态电池、钙钛矿、深远海风电等前沿技术突破,用于指导研发方向。
  • 战略部:追踪国家及地方新能源规划、补贴政策、电价改革,辅助高层决策。
  • 采购部:紧盯碳酸锂、硅料、稀土等原材料价格波动,优化采购节点。
  • 管理层:希望每天早上9点看到一份涵盖全行业的综合日报,了解重大事件和趋势。

传统模式的痛点

  • 人工成本高:安排实习生每天浏览北极星电力网、维科网锂电等10+网站,耗时2-3小时,且容易遗漏。
  • 信息碎片化:各部门各自为战,市场部只看招标,研发部只看技术,缺乏整合。
  • 时效性差:往往是第二天才看到昨天的新闻,错失商机。
  • 无法追溯:信息分散在Excel、邮件、微信聊天中,难以检索和沉淀。

团队讨论后,提出一个看似简单的要求:“能不能有个系统,每天自动把新能源全行业的动态整理好,带原文链接,早上9点准时推送到企业微信群,同时发邮件给相关人员?”

这个需求后来演变为我的核心项目——基于OpenClaw的企业级AI信息助手。


第二章:技术选型——为什么是OpenClaw?

在项目启动时,我们评估了多种方案:

方案 优点 缺点
Python爬虫+定时任务 灵活可控 需开发解析逻辑,维护成本高,无AI能力
RSS+IFTTT 简单 无法定制内容,不支持智能提取
OpenClaw 内置AI,支持自然语言定义任务,多通道集成 生态较新,文档不够完善
Dify/AutoGPT 功能强大 太重,部署复杂,不适合快速落地

最终选择OpenClaw,因为它完美匹配我们的需求:

  • Skill机制:可以用自然语言描述任务,AI自动理解并调用工具,大大降低了开发门槛。
  • 通道插件:原生支持企业微信、飞书、邮件,省去对接API的麻烦。
  • 定时任务:内置Cron,无需额外写调度脚本。
  • 国产友好:社区版openclaw-cn对国内开发者很友好,文档有中文版。

决定之后,我开始了为期三周的“踩坑之旅”。


第三章:环境部署

3.1 Node.js版本与Git认证

第一关就卡在安装上。按照官方文档,我打开PowerShell(管理员),输入:

npm install -g openclaw-cn@latest

结果报错:

npm error code 128
npm error An unknown git error occurred
npm error command git --no-replace-objects ls-remote ssh://git@github.com/whiskeysockets/libsignal-node.git
npm error git@github.com: Permission denied (publickey).

搜索后发现,OpenClaw依赖libsignal-node,需要通过git从GitHub拉取,但我的环境没有配置SSH密钥。解决方案是强制git走HTTPS协议:

git config --global url."https://github.com/".insteadOf git@github.com:
git config --global url."https://".insteadOf ssh://

重新安装,成功。

3.2 命令找不到?PATH的坑

安装完后输入openclaw-cn --version,提示“不是内部或外部命令”。这才意识到npm的全局路径没加到PATH里。

npm config get prefix
# 输出:C:\Users\用户名\AppData\Roaming\npm

手动将该路径添加到系统环境变量Path,重启PowerShell,命令可用。

教训:Windows下玩Node.js,PATH是第一道坎。

3.3 防火墙与端口放行

启动网关:

openclaw-cn gateway --port 18789

浏览器访问http://127.0.0.1:18789正常。但要让企业微信能回调,需要公网访问。公司没有公网IP,于是使用内网穿透工具serveo.net

ssh -R 80:localhost:18789 serveo.net

得到地址https://xxx.serveo.net。填到企业微信后台,保存时报错“服务器无响应”。排查发现Windows防火墙拦截了18789端口的入站请求。

添加防火墙规则:

New-NetFirewallRule -DisplayName "OpenClaw 18789" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 18789

再次测试,依然失败。用Test-NetConnection检查端口连通性:

Test-NetConnection -ComputerName 公网IP -Port 18789

结果显示TcpTestSucceeded : False。原来公司网络出口防火墙封了非标准端口,而且serveo.net给的HTTPS地址可能被企业微信误判。换用国内服务Cpolar

cpolar http 18789

得到http://xxx.cpolar.io的地址,填到企业微信后台,保存成功!

教训:内网穿透一定要选国内服务,回调URL尽量用HTTP(企业微信支持),且确保端口全通。


第四章:核心功能——企业微信机器人接入

4.1 创建应用与获取凭证

在企业微信后台创建自建应用,拿到企业IDAgentIdSecret。最关键的是接收消息服务器配置,需要填URL、Token和EncodingAESKey。

点击“随机获取”生成Token和43位的EncodingAESKey,务必先复制保存,因为关闭后无法再次查看。

4.2 配置OpenClaw通道

编辑~/.openclaw/openclaw.json,添加:

"channels": {
  "wecom": {
    "enabled": true,
    "token": "复制的Token",
    "encodingAesKey": "复制的43位密钥"
  }
}

注意:字段名是encodingAesKey(中间Aes),不是全大写的encodingAESKey。我在这卡了半小时。

重启网关:

openclaw-cn gateway restart

4.3 回调验证失败?时区与Token不一致

在企业微信后台点击“保存”,再次报错“token验证失败”。反复核对Token,一模一样。最后发现是时区问题——企业微信服务器用UTC时间,而我的OpenClaw默认使用本地时间,导致签名计算不一致。

解决方案:在OpenClaw配置中指定时区(虽然官方说默认UTC,但实测需要显式设置)。编辑openclaw.json,在gateway下添加:

"timezone": "Asia/Shanghai"

重启,保存成功。

教训:企业微信回调对时间戳敏感,务必确保时区一致。


第五章:邮件技能——最折腾的环节

5.1 需求:日报不仅要发群,还要发邮件,带附件

老板希望日报能归档,并且附件里包含政策原文PDF、价格数据表格等。企业微信不支持直接发文件,邮件是更好的选择。

5.2 安装porteden-email

从ClawHub安装邮件技能:

npx clawhub@latest install porteden-email --force

但在调用时,AI一直提示“porteden CLI未安装”。查看技能描述,发现它依赖一个外部命令行工具porteden,需要单独安装。

5.3 下载porteden.exe遇阻

去GitHub下载porteden.exe,但发现只有arm64版本,而我的电脑是x86_64,无法运行。询问社区,得知该工具对Windows支持不完善。

5.4 替代方案:msmtp + himalaya

转向经典Linux邮件工具组合:

  • msmtp:发送邮件
  • himalaya:接收邮件

安装msmtp:

winget install msmtp.msmtp

下载himalaya(找x86_64版本):从GitHub Releases下载himalaya-windows-x86_64.zip,解压到D:\himalaya\,添加到PATH。

配置QQ邮箱授权码(注意不是登录密码),测试:

himalaya --version
# 输出版本号,成功

编写Node.js脚本send_report.js,使用nodemailer发送HTML邮件,附件为本地图片和PDF。

const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({
  host: 'smtp.qq.com',
  port: 465,
  secure: true,
  auth: { user: '*******@qq.com', pass: '授权码' }
});

transporter.sendMail({
  from: '*****@qq.com',
  to: 'market@company.com, strategy@company.com',
  subject: '新能源日报 2026-03-12',
  html: '<h1>...</h1>',
  attachments: [
    { filename: 'policy.pdf', path: './attachments/policy.pdf' },
    { filename: 'price.xlsx', path: './attachments/price.xlsx' }
  ]
});

在Skill中调用此脚本:

// 在Skill的How to use里
node C:\Users\用户名\.openclaw\workspace\send_report.js

教训:选技能要看依赖,优先选择纯JS实现,避免原生模块兼容性问题。


第六章:新能源日报技能——从简单到复杂

6.1 初版:单关键词搜索

我写了第一个Skill:搜索“新能源 最新动态”,返回5条结果。企业微信里@机器人:“生成今日新能源日报”。它真的回复了,虽然只有寥寥几条,但那一刻的成就感爆棚。

6.2 版本迭代:覆盖8大领域,每个领域至少5条

老板看后说:“能不能把光伏、风电、储能、氢能都分开?而且要详细,每个领域多几条。”

于是有了v2.0,在Skill里明确列出每个领域的搜索关键词:

## 搜索策略
- 新能源汽车/锂电池:搜索“比亚迪 宁德时代 动力电池 固态电池 钠电池 装车量”
- 光伏:搜索“硅料 组件 逆变器 招标 装机 价格”
- 风电:搜索“海上风电 陆上风电 主机招标 项目动态”
- 储能:搜索“新型储能 抽水蓄能 容量电价 招标”
- 氢能:搜索“绿氢 氢燃料电池 氢能项目”
- 政策/宏观:搜索“十四五 十五五 补贴政策 电价改革”
- 市场数据:搜索“碳酸锂价格 稀土价格 装机量 产能”
- 企业动态:搜索“财报 扩产 重大项目”

同时规定每个领域至少5条新闻,每条必须带原文链接。

6.3 搜索源扩充:10+垂直网站

为了解决搜索结果不足的问题,我手动添加了多个垂直信源,在Skill的browser动作中列出:

browser({action: "open", url: "https://news.bjx.com.cn/list/"})
browser({action: "open", url: "https://libattery.ofweek.com/"})
browser({action: "open", url: "https://www.cpnn.com.cn/news/"})
browser({action: "open", url: "https://www.xinhuanet.com/energy/"})
browser({action: "open", url: "https://www.in-en.com/"})
browser({action: "open", url: "http://www.escn.com.cn/"})
browser({action: "open", url: "https://www.gg-lb.com/"})
browser({action: "open", url: "https://www.stcn.com/"})

这样AI会依次访问这些网站,提取新闻列表。

6.4 双通道推送:群摘要+邮件完整版

企业微信推送纯文本摘要,每条新闻附短链接;邮件发送HTML完整版,带原文链接和附件。

微信摘要格式:

🌞【新能源每日简报】2026-03-12

🔋【新能源汽车/锂电池】
- 比亚迪第二代刀片电池发布,能量密度提升30% [详情](https://...)
- 宁德时代或将在上海建储能电池工厂 [详情](https://...)
...
📧 完整报告已发送至邮箱,请查收。

邮件HTML模板(带附件说明):

<h1>🌞 新能源每日简报 2026-03-12</h1>
<p>附件包含政策原文PDF、价格数据表格。</p>
...

6.5 定时任务与超时问题

配置每天9点执行:

openclaw-cn cron add --name "新能源日报" --cron "0 9 * * *" --tz "Asia/Shanghai" --message "调用 new-energy-daily-v7 生成今日日报" --channel wecom

第一次执行时,等了2分钟没反应,然后报错:

gateway timeout after 10000ms

原来技能执行时间太长(搜索多个网站耗时超过10秒),网关默认超时10秒。解决方案:采用“立即回复+后台执行”模式。在Skill开头:

收到指令后立即回复:“正在为您生成新能源日报,预计2-3分钟完成,请稍候...”

然后继续执行搜索,完成后主动推送到群。这样网关连接立即释放,不再超时。


第七章:迁移到官方OpenClaw

社区版openclaw-cn有些功能不全(如不支持mcp命令),我决定迁移到官方版。

7.1 备份

Compress-Archive -Path ~/.openclaw -DestinationPath ~/Desktop/openclaw-backup.zip

7.2 卸载旧版

npm uninstall -g openclaw-cn
Remove-Item -Path "C:\Users\用户名\AppData\Roaming\npm\node_modules\openclaw-cn" -Recurse -Force

7.3 安装官方版

npm install -g openclaw@latest

再次遇到node-llama-cpp编译失败,错误码3221225477。这是Windows缺少C++编译工具链。

解决方案:安装Visual Studio Build Tools(勾选“使用C++的桌面开发”),重启电脑,重新安装。

7.4 恢复配置

新安装的官方版生成新的~/.openclaw。我将备份中的openclaw.jsoncredentialsworkspace等手动复制过去(注意不要直接覆盖整个文件夹,以免引入旧版垃圾)。

然后运行:

openclaw doctor --fix

自动修复路径和权限问题。重启网关,一切正常。


第八章:企业级扩展——多Agent协同与未来规划

8.1 当前系统能力

  • 每日日报:自动抓取10+网站,覆盖8大领域,每条新闻带原文链接,早9点准时推送。
  • 邮件归档:HTML完整版+附件(政策PDF、价格表)发送给指定人员。
  • 实时问答:支持@机器人查询特定信息,如“最近碳酸锂价格走势”。
  • 定时任务:支持多任务调度,如每周一发送周报。

8.2 未来规划:多Agent协同

单Agent处理所有任务,容易成为性能瓶颈,且职责不清。未来计划引入多Agent架构:

Agent角色 职责
爬虫Agent 专门负责从各网站抓取原始HTML,去重,存入队列
解析Agent 提取标题、正文、发布时间、链接,结构化存储
分析师Agent 对数据打标签(如“政策”“价格”“技术”),生成摘要
主编Agent 汇总各领域结果,按模板生成日报,决策推送渠道
预警Agent 监控价格波动、政策发布,超过阈值时主动@相关人员

OpenClaw的MCP协议支持Agent间通信,可通过mcp命令实现。

8.3 企业内部系统打通

  • ERP对接:读取公司项目进度、采购价格,融入日报,实现“内外融合”。
  • 知识库建设:将历史日报存入向量数据库,支持语义搜索:“去年三月碳酸锂价格”。
  • 权限管理:不同部门只能看到授权领域,通过企业微信标签实现。

8.4 高可用与监控

  • 使用PM2守护OpenClaw进程,自动重启。
  • 配置健康检查接口,接入公司监控系统。
  • 关键任务失败时,发送告警到运维群。

第九章:踩坑汇总与经验总结

解决方案 涉及知识点
Git SSH认证失败 git config --global url."https://github.com/".insteadOf git@github.com: Git配置
npm全局命令找不到 添加npm prefix路径到PATH 环境变量
防火墙拦截端口 New-NetFirewallRule添加规则 Windows防火墙
内网穿透回调失败 用Cpolar,HTTP地址 内网穿透
企业微信token验证失败 字段名encodingAesKey,非全大写 JSON配置细节
时区导致签名错误 配置timezone: "Asia/Shanghai" 时间处理
porteden无x86版 换msmtp+himalaya 工具选型
技能执行超时 立即回复+后台执行 异步编程
node-llama-cpp编译失败 安装VS Build Tools C++编译环境
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐