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 DashboardNetworksTunnels,看隧道状态是否为 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 开发者后台配置

  1. 进入 Lark Developer
  2. 你的 App → Event Subscriptions
  3. Request URL 填写:
    https://openclark.yourdomain.com/webhook/event
    (具体路径看 OpenClaw 的 Lark 插件文档)

  4. Encrypt KeyVerification 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:18990192.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 部分的配置?