Gmail Pub/Sub -> OpenClaw
目标:Gmail 监听 -> Pub/Sub 推送 ->gog gmail watch serve -> OpenClaw webhook。
前提条件
- 已安装并登录
gcloud(安装指南)。 - 已安装并授权 Gmail 账户的
gog(gogcli)(gogcli.sh)。 - 启用 OpenClaw 钩子(见Webhook)。
- 已登录
tailscale(tailscale.com)。支持的配置使用 Tailscale Funnel 作为公用 HTTPS 端点。 其他隧道服务可用,但为自助/不支持,且需要手动配置。 目前支持的是 Tailscale。
deliver 及可选的 channel/to:
channel + to。
否则 channel: "last" 使用最后的发送路径(默认回退到 WhatsApp)。
若希望为 Gmail 运行强制使用更便宜的模型,设置映射中的 model
(provider/model 或别名)。若已设置 agents.defaults.models,需包含该模型。
想为 Gmail 钩子单独设置默认模型和思考级别,可以在配置里添加
hooks.gmail.model / hooks.gmail.thinking:
- 映射内每个钩子的
model/thinking仍覆盖以上默认设置。 - 回退顺序:
hooks.gmail.model→agents.defaults.model.fallbacks→ 主模型(授权/限流/超时)。 - 若设置了
agents.defaults.models,则 Gmail 所用模型必须在白名单内。 - Gmail 钩子内容默认包裹外部内容安全边界。
若要禁用(危险),设置
hooks.gmail.allowUnsafeExternalContent: true。
hooks.mappings 或在
~/.openclaw/hooks/transforms 下编写 JS/TS 转换模块(参见Webhook)。
向导(推荐)
使用 OpenClaw 辅助工具自动连接所有环节(macOS 上通过 brew 安装依赖):- 使用 Tailscale Funnel 作为公共推送端点。
- 写入
hooks.gmail配置供openclaw webhooks gmail run使用。 - 启用 Gmail 钩子预设(
hooks.presets: ["gmail"])。
tailscale.mode 时,OpenClaw 自动设置
hooks.gmail.serve.path 为 / ,公共路径保留为
hooks.gmail.tailscale.path(默认为 /gmail-pubsub),因 Tailscale 在代理前会移除路径前缀。
如需后端接收带前缀路径,设置
hooks.gmail.tailscale.target(或 --tailscale-target)为完整 URL,如
http://127.0.0.1:8788/gmail-pubsub,并匹配 hooks.gmail.serve.path。
想要自定义端点?请使用 --push-endpoint <url> 或关闭 tailscale:--tailscale off。
平台提示:macOS 下向导通过 Homebrew 安装 gcloud、gogcli 和 tailscale;
Linux 则需自行安装。
网关自动启动(推荐):
- 当设置
hooks.enabled=true且配置了hooks.gmail.account, 网关会在启动时运行gog gmail watch serve并自动续订监听。 - 设定环境变量
OPENCLAW_SKIP_GMAIL_WATCHER=1可跳过此步骤(适合手动运行守护进程)。 - 请勿同时手动运行守护进程,否则出现
listen tcp 127.0.0.1:8788: bind: address already in use错误。
gog gmail watch serve 并自动续订):
一次性设置
- 选择拥有
gog使用的 OAuth 客户端的 GCP 项目:
- 启用 API:
- 创建主题:
- 允许 Gmail 推送发布:
启动监听
history_id(用于调试)。
运行推送处理器
本地示例(共享令牌认证):--token用于保护推送端点(通过x-gog-token头或 URL 参数?token=)。--hook-url指向 OpenClaw 的/hooks/gmail(经过映射;独立运行 + 汇总到主进程)。--include-body和--max-bytes控制发送到 OpenClaw 的正文摘要大小。
openclaw webhooks gmail run,它封装同样流程并自动续订监听。
暴露处理器(高级,不支持)
若需非 Tailscale 隧道,手动连接并在推送订阅中使用公网 URL(不支持且无保护):测试
向监听的收件箱发送邮件:故障排查
Invalid topicName:项目不匹配(主题不在 OAuth 客户端项目内)。User not authorized:缺少主题的roles/pubsub.publisher权限。- 消息为空:Gmail 推送只提供
historyId,需通过gog gmail history拉取消息。