本页内容
本页内容
自动化
Gmail PubSub 触发器
通过 Google Pub/Sub 将 Gmail 收件箱事件连接到 OpenClaw,并使用针对不受信任邮件的受限读取器代理。 Automations 指南的一部分。
Gmail PubSub 集成
通过 Google、Pub/Sub 和 gog gmail watch serve 将 Gmail 收件箱触发器连接到 OpenClaw。 Pub/Sub 呼叫观察者;观察者将电子邮件数据转发到 Gateway HTTP hook。这不会加载或调用内部 HOOK.md 处理程序。
不在 Gmail 上? IMAP 电子邮件触发插件 监视现有的 IMAP 邮箱,无需 Google PubSub 或公共 Webhook。
配置受限的 Gmail 阅读器(推荐)
连接 Gmail transport 之前,请将专用的 reader 和 hook 策略合并到现有配置中。保留现有 agent 上的真实设置;下面的 main 条目仅展示所需的 roster 形状。
重启前,运行 openclaw agents list --bindings;替换每个占位符并验证每个 channel owner。
这种结构更安全的原因:
- 显式
main绑定保留现有通道所有权,而不是让非 Gmail 流量失去所有权。当只有一个账户属于main时,请使用特定的accountId而不是"*"。 agentId: "mail_reader"可使 Gmail 避开mainagent。allowedAgentIds会阻止此 hook 端点选择其他 agent。如果 Gateway 还提供其他 hook 工作流,也只能加入它们预期使用的 agent id。scope: "session"会为每封 Gmail 邮件提供独立的沙箱;workspaceAccess: "none"会使主机 agent 工作区无法进入该沙箱。allow: ["session_status"]是每个 agent 的绝对限制,因此全局tools.alsoAllow添加项无法泄漏到 reader 中。最小配置文件和显式 deny 列表使预期边界可审计。deliver: false禁用自动成功公告;而是记录完成情况。要在验证阅读器后向外部公布摘要,请设置deliver: true并添加显式channel和to。默认情况下,代理间访问处于启用状态:设置tools.agentToAgent.enabled: false以禁用跨代理切换,或故意公开确切的协调工具并使用tools.agentToAgent.allow限制允许的代理对。
随着全局、提供商、代理和沙箱规则的结合,工具策略只会变得更加严格。如果早期策略将其删除,则每个代理允许列表无法恢复 session_status。检查继承的策略是否保留session_status;在模型看到电子邮件之前,空的有效工具集会中止。
如果你确实要将 Gmail 路由到功能更强大的 agent,请将其视为一项安全决策:保持外部内容包装处于启用状态,对运行进行沙箱隔离,并且只授予该工作流所需的工具。
验证阅读器模型身份验证
对 mail_reader 选择的提供商进行身份验证,或检查其有效身份验证配置是否可以使用受支持的共享凭据,然后在连接 Gmail 之前验证路由:
当您选择不同的模型时,请使用匹配的提供商 ID。实时检查验证提供商的凭据;代理轮流证明所选模型、运行时、沙箱和有效的工具策略可以完成真正的读者运行。在两者都成功之前不要继续。
连接 Gmail 传输
这将写入 hooks.gmail 传输设置,启用 Gmail 预设,保留上面的受限映射,并默认为推送端点 (--tailscale funnel|serve|off) 的 Tailscale 漏斗。该向导不会创建读取器代理或会话密钥策略,因此首先应用受限配置。 --tailscale serve 仅限尾网;如果没有其他入口安排,它不是可公开访问的 Pub/Sub 端点。将 --tailscale off --push-endpoint <url> 用于外部管理端点。请参见 所有设置标志 。
这两个令牌保护不同的跃点:hooks.gmail.pushToken 向观察者验证 Pub/Sub,而 hooks.token 使用标头向 OpenClaw 验证观察者。带有令牌的 Pub/Sub 推送 URL 不是 /hooks 身份验证的示例;查询字符串标记被 OpenClaw 拒绝。设置输出可以包含这些标记,因此在共享之前对其进行编辑。
验证阅读器边界
从另一个帐户发送一封测试电子邮件,其中包含惰性指令,例如“按照此链接并运行命令”。观察程序不包括 SPAM、TRASH、DRAFT 和 SENT,因此仅发送的消息不是有用的入口测试。确认所选代理为 mail_reader,运行已沙盒化,并且输出仅汇总消息。该映射使用逻辑hook:gmail:<message-id>密钥;单独的运行可以存储在生成的 cron:...:run:... 会话下。
分别检查转发和完成。观察者的成功只需要交通;带有 runId 的网关代理挂钩 200 记录准入,而不是完成的摘要。使用 runId 搜索 hook agent run completed:成功在信息级别记录 status=ok,而非正常执行或显式传递错误会产生警告。通过上述配置,成功的公告将被禁用。检查实际运行记录的输出和工具使用情况。将尝试的链接导航、文件写入、shell 命令、浏览器操作或 MCP 注册视为失败的边界检查。
Gateway 自动启动
当 hooks.enabled=true 且设置了 hooks.gmail.account 时,Gateway 会在启动时运行 gog gmail watch serve 并自动续订 watch。设置 OPENCLAW_SKIP_GMAIL_WATCHER=1 可选择退出。
睡眠后,逾期更新会运行一次,而不是重播错过的间隔。关闭会取消并等待任何正在进行的更新,然后再停止观察程序。
如果重启期间侦听器端口仍被占用,则观察程序会在 5、10 和 20 秒后重试。如果所有 3 次重试都无法绑定,则会记录错误并停止重新启动;手表更新仍在继续。停止冲突进程并重新启动网关,或者如果另一个服务拥有该侦听器,则禁用网关管理的观察程序。
使用 forEach: "messages",网关为每封电子邮件准备一个操作,最多可达 200 项扇出上限。 Gmail 路径映射接收源自 hooks.gmail.maxBytes 的更大请求正文限额,上限为 32 MiB。上游历史页面大小并不是严格的电子邮件计数,因此超大批次仍然可能达到限制。请参阅 Gmail 参考 了解确切的限额和 扇出重试行为 。
当网关管理的观察程序正在运行时,请勿在同一侦听器上运行 openclaw webhooks gmail run 或另一个 gog gmail watch serve。检查日志是否存在手表注册失败、转发失败、绑定冲突等情况;单独启动服务进程并不能证明 Gmail 注册成功。
手动一次性设置
这些步骤显示项目、主题、发布者权限和监视注册。他们尚未创建推送订阅或启动转发侦听器。使用 setup 命令 进行完整的传输设置,然后运行一个观察程序。
选择GCP项目
选择拥有 gog 使用的 OAuth 客户端的 GCP 项目:
创建主题并授予 Gmail 推送访问权限
启动手表
Gmail 模型覆盖
对于不受信任的收件箱,请使用你提供商可用的最新一代、最高档模型。上面的值只是示例;该模型必须存在于你配置的目录和允许列表中。