ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

OpenClaw从入门到应用——频道:Google Chat 接入与 Webhook 配置

OpenClaw从入门到应用——频道:Google Chat 接入与 Webhook 配置 1. OpenClaw 接入 Google Chat 频道到底在解决什么问题OpenClaw 是一个可以自托管的 AI 助手网关它把不同聊天平台的消息统一收进来再交给背后的模型处理。Google Chat 频道接入说白了就是让 Google Chat 里的私聊和空间消息能通过 Webhook 打到你的 OpenClaw 网关上网关解析后调用模型再把回复发回 Google Chat。整条链路跑通之后你在 Google Chat 里发一句「Hello」机器人就能回你这就是第一个闭环。这件事能帮到谁如果你在团队里用 Google Workspace又想让 AI 助手直接出现在 Google Chat 的私聊或群组空间里而不是单独开一个网页去对话那这套接入就是刚需。它适合三类人一是想给自己搭一个私有 AI 助手的个人开发者二是需要在内部群组里挂一个问答机器人的小团队三是已经在用 OpenClaw 接其他频道想再补上 Google Chat 这一路的同学。但这条链路有几个容易卡住的点。第一Google Chat API 的启用和服务账号密钥的创建步骤分散在 Google Cloud 控制台的不同页面新手容易漏掉「应用状态」那一步导致机器人搜不到。第二Google Chat 要求 Webhook 必须是公共 HTTPS 端点而 OpenClaw 网关通常跑在内网或本机这就需要一个安全的暴露方案。第三Webhook 的受众校验audience如果配错请求会被拒日志里只看到一个 401 或 405很难定位。我试过把这套流程完整走一遍踩过的坑主要集中在「公共 URL 怎么给」和「audience 怎么对」这两块。下面我会按顺序把 Google Cloud 配置、Tailscale 暴露、OpenClaw 配置、验证请求、排障这几段拆开讲每一步都给可复制的命令和配置片段。你跟着做基本能在一个小时内跑通首个频道消息闭环。在开始之前先明确一个概念OpenClaw 的网关默认监听 18789 端口Webhook 路径默认是/googlechat。Google Chat 会把 POST 请求发到这个路径请求头里带Authorization: Bearer token。OpenClaw 会先校验这个 token再解析消息体。理解这个顺序后面排障会轻松很多。另外如果你在配置过程中需要查 OpenClaw 的模型接入信息可以顺手打开 TaoToken 模型对话 页面确认一下模型 ID 和调用方式避免后面配置模型时对不上号。这个页面只是用来核对模型信息的和 Google Chat 接入本身不冲突。2. TaoToken 前置准备与 Google Cloud 项目创建在动 Google Cloud 之前先把 OpenClaw 这边的模型通道准备好。OpenClaw 本身不绑定特定模型供应商它通过配置里的模型 ID 去调用。你需要提前拿到一个可用的 API Key 和对应的 Base URL。如果你还没定好用哪个模型可以先到 TaoToken API Keys 生成一个 Key再到 TaoToken 接入文档 看一下 Base URL 的写法。这两样东西后面会写进 OpenClaw 的配置文件里。准备好模型侧之后进入 Google Cloud 控制台。第一步是创建一个项目。打开控制台顶部项目选择器里点「新建项目」名字随便起比如openclaw-chat-demo。创建完成后确保当前选中的就是这个项目。第二步启用 Google Chat API。在控制台搜索栏输入「Google Chat API」进入后点「启用」。如果之前没启用过这里会有一个明显的启用按钮。启用之后左侧菜单会出现「配置」和「凭据」等选项。第三步创建服务账号。进入「凭据」页面点「创建凭据」「服务账号」。名字填openclaw-chat权限保持为空直接点「继续」主体访问权限也保持为空点「完成」。这一步不需要给任何角色因为 Google Chat 的 Webhook 校验走的是服务账号密钥签名不是 IAM 角色。第四步创建并下载 JSON 密钥。在服务账号列表里点进刚创建的那个账号切到「密钥」选项卡点「添加密钥」「创建新密钥」选择 JSON点「创建」。浏览器会下载一个 JSON 文件。把这个文件放到 OpenClaw 网关主机上比如~/.openclaw/googlechat-service-account.json。这个路径后面要写进配置别放错地方。第五步配置 Google Chat 应用。回到 Google Chat API 的「配置」页面填写应用信息应用名称填OpenClaw头像 URL 可以填https://openclaw.ai/logo.png描述填「个人 AI 助手」。然后启用「交互功能」。在「功能」下勾选「加入空间和群组对话」。在「连接设置」下选择「HTTP 端点 URL」。在「触发器」下选择「所有触发器使用同一个公共 HTTP 端点 URL」先填一个占位地址比如https://example.com/googlechat等 Tailscale 配好后再回来改成真实地址。在「可见性」下勾选「使此 Chat 应用可供 中的特定个人和群组使用」文本框里填你自己的邮箱比如userexample.com。点「保存」。第六步启用应用状态。保存后刷新页面找到「应用状态」部分把状态改成「已上线 - 可供用户使用」再点一次「保存」。这一步很多人会漏漏了之后在 Google Chat 里搜不到机器人。到这里Google Cloud 侧的准备工作就完成了。你手里应该有一个 JSON 密钥文件、一个应用名称、一个待填的 Webhook URL。接下来处理公共 URL 的问题。3. 可复制的 Webhook 暴露配置与 OpenClaw 频道配置Google Chat 要求 Webhook 是公共 HTTPS 端点但 OpenClaw 网关通常只监听本机或内网。最省事的方案是用 Tailscale Funnel它能把指定路径暴露到公网同时把仪表板留在私有网络里。下面给出完整步骤。先检查网关绑定的地址ss -tlnp | grep 18789记下输出里的 IP。如果是127.0.0.1或0.0.0.0说明只监听本机如果是100.x.x.x说明绑到了 Tailscale IP。两种情况命令略有不同。仅向 tailnet 暴露仪表板端口用 8443# 绑定到 localhost 时 tailscale serve --bg --https 8443 http://127.0.0.1:18789 # 仅绑定到 Tailscale IP 时 tailscale serve --bg --https 8443 http://100.106.161.80:18789仅公开暴露 Webhook 路径# 绑定到 localhost 时 tailscale funnel --bg --set-path /googlechat http://127.0.0.1:18789/googlechat # 仅绑定到 Tailscale IP 时 tailscale funnel --bg --set-path /googlechat http://100.106.161.80:18789/googlechat如果提示需要授权节点访问 Funnel按输出里的 URL 去 tailnet 策略里启用。然后验证tailscale serve status tailscale funnel status你的公共 Webhook URL 就是https://your-tailnet.ts.net/googlechat私有仪表板是https://your-tailnet.ts.net:8443/。回到 Google Cloud 的 Chat 应用配置把 HTTP 端点 URL 改成这个公共地址注意不带:8443。如果你不用 Tailscale也可以用 Caddy 反向代理只代理特定路径your-domain.com { reverse_proxy /googlechat* localhost:18789 }这样your-domain.com/会返回 404只有/googlechat被路由到 OpenClaw。Cloudflare Tunnel 同理入站规则里把/googlechat指向http://localhost:18789/googlechat默认规则设成 HTTP 404。公共 URL 搞定后写 OpenClaw 配置。配置文件里加上channels.googlechat段{ channels: { googlechat: { enabled: true, serviceAccountFile: /path/to/service-account.json, audienceType: app-url, audience: https://gateway.example.com/googlechat, webhookPath: /googlechat, botUser: users/1234567890, dm: { policy: pairing, allowFrom: [users/1234567890] }, groupPolicy: allowlist, groups: { spaces/AAAA: { allow: true, requireMention: true, users: [users/1234567890], systemPrompt: 仅简短回答。 } }, actions: { reactions: true }, typingIndicator: message, mediaMaxMb: 20 } } }几个关键字段说明。serviceAccountFile指向你下载的 JSON 密钥路径。audienceType和audience必须和 Google Chat 应用配置匹配如果选app-urlaudience就是你的公共 Webhook URL如果选project-numberaudience就是 Cloud 项目编号。webhookPath不填默认就是/googlechat。botUser填应用的用户资源名称有助于提及检测。dm.policy设为pairing时未知发送者会收到配对码需要用openclaw pairing approve googlechat code批准。groupPolicy设为allowlist只有groups里列出的空间才响应。如果你不想用文件路径也可以用serviceAccountRef引用环境变量或文件 SecretRef或者用serviceAccount直接内联 JSON 字符串。多账号场景下可以在channels.googlechat.accounts.accountId.serviceAccountRef下分别配置。配置写完后重启网关openclaw gateway restart然后检查频道状态openclaw channels status正常应该显示Google Chat default: enabled, configured。如果显示 disabled检查plugins.entries.googlechat.enabled是否为 true。4. 验证请求与消息收发闭环配置就绪后先确认 Webhook 路径能被外部访问。用 curl 模拟一次 POSTcurl -X POST https://your-tailnet.ts.net/googlechat \ -H Authorization: Bearer test-token \ -H Content-Type: application/json \ -d {type:MESSAGE,message:{text:Hello}}如果返回 401说明 token 校验没过这是正常的因为test-token不是有效令牌。但至少说明路径通了请求到达了网关。如果返回 405说明 Webhook 处理程序没注册回到排障部分检查配置。接下来在 Google Chat 里实测。确保你的邮箱已经加进可见性列表且应用状态是「已上线」。打开 Google Chat点「私聊」旁边的加号在搜索栏输入你在 Google Cloud 里配置的应用名称OpenClaw。注意机器人不会出现在 Marketplace 浏览列表里因为它是私有应用必须按名称搜索。从结果里选中机器人点「添加」或「聊天」开始一对一对话。发送Hello。如果一切正常机器人会回复。第一次对话时因为dm.policy是pairing未知发送者会收到一个配对码。你需要在网关主机上执行openclaw pairing approve googlechat code批准后再发一条消息就能收到正常回复了。群组空间默认需要 提及且只有在groups白名单里的空间才响应。如果你想看请求是否到达网关开一个终端跑openclaw logs --follow然后发消息观察日志里有没有 Webhook 请求进来。消息按空间路由私聊用会话键agent::googlechat:direct:userId空间用agent::googlechat:group:spaceId。目标标识符方面私聊推荐用users/userId空间用spaces/spaceId。原始邮箱nameexample.com是可变的只有在channels.googlechat.dangerouslyAllowNameMatching: true时才用于直接允许列表匹配。如果你在验证过程中需要确认模型侧是否正常可以到 TaoToken 模型对话 页面发一条测试消息确认模型 ID 和 Key 没问题。模型侧通了Google Chat 侧的消息闭环才有意义。5. 本篇常见错误排查405 Method Not Allowed如果 Google Cloud 日志浏览器显示status code: 405, reason phrase: HTTP error response: HTTP/1.1 405 Method Not Allowed说明 Webhook 处理程序未注册。常见原因有三个。一是配置文件里缺少channels.googlechat段用openclaw config get channels.googlechat验证如果返回Config path not found就补上配置。二是插件未启用用openclaw plugins list | grep googlechat检查如果显示 disabled在配置里加plugins.entries.googlechat.enabled: true。三是网关没重启加完配置后执行openclaw gateway restart再用openclaw channels status确认显示enabled, configured。401 Unauthorized401 通常是 audience 配置不匹配。检查audienceType和audience是否和 Google Chat 应用配置一致。如果audienceType是app-urlaudience必须是完整的公共 Webhook URL包括https://和路径/googlechat。如果audienceType是project-numberaudience是 Cloud 项目编号。另外Google Workspace 插件请求会在正文里带authorizationEventObject.systemIdTokenOpenClaw 会用更严格的预认证正文预算处理这类请求的校验路径和普通请求不同。local proxy failed这个报错通常出现在 Tailscale Funnel 或反向代理层。先跑tailscale funnel status确认 Funnel 是否正常再检查tailscale serve status。如果 Funnel 没授权按提示去 tailnet 策略里启用。用 Caddy 的话检查reverse_proxy的路径匹配是否正确/googlechat*的通配符不能少。reading choices 报错如果日志里出现reading choices相关错误说明消息已经到达模型调用层但模型返回格式不对。检查模型配置里的 Base URL 和模型 ID 是否正确可以到 TaoToken 接入文档 核对。另外确认mediaMaxMb设置是否合理附件过大也会导致解析失败。OAuth 相关报错typingIndicator设为reaction时需要用户 OAuth如果你没配 OAuth改成message或none。actions.reactions启用后表情回应通过 reactions 工具和 channels action 使用不需要额外 OAuth但 typing indicator 的 reaction 模式需要。消息不到达如果发消息后没有任何反应先跑openclaw channels status --probe检查认证错误或缺失的受众配置。确认 Chat 应用的 Webhook URL 和事件订阅是否正确。如果提及门控阻止了回复把botUser设为应用的用户资源名称并验证requireMention。用openclaw logs --follow看请求是否到达网关。如果日志里完全没有请求说明 Google Chat 侧没发出来检查应用状态是否「已上线」可见性列表是否包含你的邮箱。机器人搜不到机器人不会出现在 Marketplace 浏览列表里必须按名称搜索。如果搜不到检查应用状态是否为「已上线」可见性是否勾选了「特定个人和群组」并填了你的邮箱。保存后刷新页面确认状态生效。6. 长期运行与 CTA跑通首个消息闭环之后接下来要考虑的是长期运行的稳定性。Tailscale Funnel 的配置在重启后仍然有效不需要每次重新设置。如果哪天想移除执行tailscale funnel reset和tailscale serve reset即可。OpenClaw 的配置建议用版本管理尤其是channels.googlechat段和模型配置改之前先备份。如果你打算把这个机器人长期挂在团队空间里建议把dm.policy从pairing改成更严格的策略或者维护好allowFrom列表。群组空间用allowlist加requireMention避免机器人在无关对话里乱插话。systemPrompt可以按空间定制比如某个空间只让它简短回答另一个空间让它详细展开。模型侧如果要做长期编码或 Agent 场景可以了解一下 TaoToken Coding Plan它适合需要持续调用模型的场景。日常排障和接入核对用 TaoToken API Keys 和 TaoToken 接入文档 就够了。控制台在 TaoToken Console需要看用量和配额时去那里。最后提醒一句Webhook 只暴露/googlechat路径仪表板和其他敏感端点留在私有网络里。这是安全底线别图省事把整个网关暴露出去。配置改完后记得openclaw gateway restart然后用openclaw channels status确认状态。跑通之后你可以在 Google Chat 里直接和 AI 助手对话也可以把它拉进团队空间让同事一起用。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进