Cloudflare Tunnel
- frp: 需要一台有公网IP的云服务器作为中转站。优点是完全自主可控,可以自定义更多高级设置。
- Cloudflare Tunnel: 不需要公网IP服务器,直接利用 Cloudflare 的全球网络。优点是配置简单、安全性高、免费额度大。
域名集成: 无缝集成你的域名,可以直接用 your.domain.com 访问内网服务。
检查 cloudflared 运行状态的几种方法:
1. 查看服务状态(Windows)
# 查看 cloudflared 服务状态
Get-Service cloudflared
# 详细状态
sc query cloudflared
2. 查看运行中的隧道
# 列出所有隧道
cloudflared tunnel list
# 查看特定隧道详情
cloudflared tunnel info <隧道名称或ID>
3. 查看实时日志
# 如果作为服务运行,查看日志
cloudflared service logs
# 或者手动运行看实时输出(调试用)
cloudflared tunnel run <隧道名称>
4. 快速健康检查
# 检查 cloudflared 进程是否在运行
Get-Process cloudflared -ErrorAction SilentlyContinue
# 检查本地端口监听(看 tunnel 是否建立了本地连接)
netstat -an | findstr "18990"
5. 通过 Cloudflare Dashboard 确认
登录 Cloudflare Zero Trust Dashboard → Networks → Tunnels,看隧道状态是否为 Healthy 🟢
你现在 tunnel 创建了吗? 还是只安装了 cloudflared 客户端?
如果还没创建隧道,需要运行:
cloudflared tunnel create openclaw
然后配置 config.yml 指向你的 192.168.33.66:18990。
是的,了解这个情况。
国际版 Lark vs 国内飞书 的区别
| 特性 | 国内飞书 (feishu.cn) | 国际版 Lark (larksuite.com) |
|---|---|---|
| 事件订阅 | 支持 WebSocket 长连接 | 仅支持 HTTP 回调 |
| Bot 消息接收 | 长连接实时推送 | 需要公网可访问的回调 URL |
| 部署难度 | 简单(内网即可) | 需要公网地址或内网穿透 |
国际版 Lark 的解决方案
国际版 Lark 不支持 WebSocket,必须通过 HTTP/HTTPS 回调与你的 Bot 通信。
方案对比
| 方案 | 稳定性 | 复杂度 | 适用场景 |
|---|---|---|---|
| Cloudflare Tunnel | ⭐⭐⭐ 高 | 中等 | 推荐 ✅ |
| ngrok | ⭐⭐ 中 | 简单 | 临时测试 |
| frp | ⭐⭐⭐ 高 | 较高 | 自建服务器 |
| 云服务器部署 | ⭐⭐⭐ 高 | 中等 | 无本地硬件 |
使用 Cloudflare Tunnel 的具体步骤
1. 创建 Tunnel
cloudflared tunnel create openclaw-lark
记下输出的 Tunnel ID(类似 xxxxx-yyyy-zzzz)
2. 配置 config.yml
文件路径:%USERPROFILE%\.cloudflared\config.yml
tunnel: <你的 Tunnel ID>
credentials-file: C:\Users\25515\.cloudflared\<Tunnel ID>.json
ingress:
# Lark 回调路径 - 指向本地 OpenClaw
- hostname: openclark.yourdomain.com
service: http://192.168.33.66:18990
# 或者如果 OpenClaw 只开 WS,需要额外 HTTP 端口
- service: http_status:404
3. 绑定域名
# 将 tunnel 绑定到你的域名
cloudflared tunnel route dns openclaw-lark openclark.yourdomain.com
4. 启动 Tunnel
# 测试运行
cloudflared tunnel run openclaw-lark
# 确认无误后安装为服务
cloudflared service install
cloudflared service start
在 Lark 开发者后台配置
- 进入 Lark Developer
- 你的 App → Event Subscriptions
-
Request URL 填写:
https://openclark.yourdomain.com/webhook/event
(具体路径看 OpenClaw 的 Lark 插件文档) -
Encrypt Key 和 Verification Token 从 OpenClaw 配置中获取
关键问题 ⚠️
OpenClaw 的 Lark 插件 需要支持 HTTP 模式(不是 WebSocket)。
检查你的 OpenClaw 版本和配置:
- 国内版 openclaw-cn:可能只支持飞书 WebSocket
- 国际版 openclaw:应该支持 Lark HTTP 回调
你的 OpenClaw 是哪个版本?需要我帮你确认配置吗?
OpenClaw 应该支持 Lark HTTP 回调。
检查 OpenClaw Lark 插件配置
1. 查看当前配置
openclaw config get
或查看配置文件:
type %USERPROFILE%\.openclaw\openclaw.json
2. 关键配置项
确保有 Lark 相关的 HTTP 配置:
{
"channels": {
"lark": {
"app_id": "cli_xxxxxxxxxx",
"app_secret": "xxxxxxxxxx",
"encrypt_key": "xxxxxxxxxx",
"verification_token": "xxxxxxxxxx",
"mode": "http", // ← 必须是 http,不是 websocket
"webhook_port": 18990, // ← HTTP 回调端口
"webhook_path": "/webhook/lark"
}
}
}
3. 设置/修改配置
如果缺少这些项,用命令设置:
# 设置 HTTP 模式(关键!)
openclaw config set channels.lark.mode http
# 设置回调端口(和你之前改的 18990 一致)
openclaw config set channels.lark.webhook_port 18990
# 设置回调路径
openclaw config set channels.lark.webhook_path /webhook/lark
4. 重启网关
openclaw gateway restart
验证 HTTP 监听
netstat -an | findstr "18990"
应该看到 0.0.0.0:18990 或 192.168.33.66:18990 在监听。
Cloudflare Tunnel 最终配置
config.yml:
tunnel: <你的 Tunnel ID>
credentials-file: C:\Users\25515\.cloudflared\<Tunnel ID>.json
ingress:
# Lark 回调入口
- hostname: openclaw-lark.yourdomain.com
service: http://192.168.33.66:18990
- service: http_status:404
Lark 后台填写
| 字段 | 值 |
|---|---|
| Request URL | https://openclaw-lark.yourdomain.com/webhook/lark |
| Verification Token | 从 OpenClaw 配置中获取 |
| Encrypt Key | 从 OpenClaw 配置中获取(如果有) |
运行 openclaw config get 给我看输出,确认 Lark 部分的配置?