@clisbot/channels-googlechat (英语)
在repo Google Chat频道垂直(目标分类账切片14). 从
extensions/googlechat/src@5d8067a4483 看到了吗 upstream-sync.json 联 合 国
逐个文件映射, 偏差( n)D-GC-0xx)和省略的内容.
第三方的SDK是上游的, 在上游的版本: google-auth-library
11.0.2。上游手卷其 Chat API 客户端结束 fetch 而不是说
取决于 googleapis; 该客户端( e)api.ts页:1.
枢纽接线器在后续片中落地. HUB-WIRING.MD (英语) 这是
交接文件是用Hub方面拥有的东西制作的,并保留着记录;
../../../docs/features/channels/README.md 描述平台为已建. 入境
通过 Cloud Pub/ Sub 拉出, 不需要公共 URL; 移植的 HTTP
webhook 被 Hub 拒绝, 直至结束
(单位:千美元)HUB-WIRING.md 第6节a) (中文(简体) ).
运算符设置地址 public-docs/hub/channels/googlechat.md。 。 。 .
现场测试需要什么
自己提供这些,放回原地 .env。这个软件包永远不会
读取 .env 而这里没有价值是真正的证明——只有名字.
谷歌云/ 工作空间设置
- 在谷歌云项目中,创建 服务账户 并下载其 JSON 键。 该文件是完整的证书;没有博特标志.
- 启用 谷歌聊天 API 在项目.
- 下 谷歌聊天 API — 配置,创建 Chat 应用程序:设置名称并 avatar, 启用 接收 1:1 个消息 财务报告和审定财务报表 加入空格和组合 对话选择 应用 URL 作为与您的连接设置 公共HTTPS终点.
- 说明 观众 请求核查:
audienceType: "app-url"→audience同一个应用程序 URL,和appPrincipal是该应用程序的数值 OAuth 2.0 客户端 id (21 位数,而不是一个) email),所以添加的符号可以被绑入.audienceType: "project-number"→audience是 Cloud 项目编号.
- 将该应用程序发布到您的工作空间域( 或特定测试者) — a 工作空间管理员必须先批准后才能加入空间.
- 将应用程序添加到测试空间,并用它启动一个DM.
试验表面
| 新闻 var | 一定是这样 |
|---|---|
GOOGLECHAT_SERVICE_ACCOUNT_JSON_PATH | 服务账户 JSON 密钥的路径 。 从不提交文件. |
GOOGLECHAT_SUBSCRIPTION | projects/<project>/subscriptions/<name>,拉订阅,用于Pub/Sub快递. |
GOOGLECHAT_PROJECT_NUMBER | 云项目号,用于 audienceType: "project-number"。 。 。 . |
GOOGLECHAT_APP_URL | 在 Chat app 上配置的公共 HTTPS 端点, 用于 audienceType: "app-url"。 。 。 . |
GOOGLECHAT_APP_PRINCIPAL | 该应用的数值为OAuth 2.0客户端id (21位数). 仅限 app-url。 。 。 . |
GOOGLECHAT_PUBLIC_URL | 公开的 URL Google 贴出(通常与 GOOGLECHAT_APP_URL) (中文(简体) ). |
GOOGLECHAT_TEST_SPACE_ID | spaces/<id> 的空格. |
GOOGLECHAT_TEST_DM_USER_ID | users/<id> 人类测试者 应用打开一个DM. |
GOOGLECHAT_TEST_BOT_USER_ID | users/<id> 在应用程序本身,用于引用标记和自带信息过滤器. |
GOOGLECHAT_DRIVER_ACCOUNT | A 类 人类 用作外部发送器的工作空间账户 。 从不开车带应用程序本身. |
驱动程序 / app- under- test 拆分是相同的规则
(CLAUDE.md,"需要的Slack和Telegram E2E角色"):一个直接的 sendText 是一个
仅限外出抽烟测试. 所需要的证明是外部发送者 + 网页hook →
代理翻转 ~ 在同一空格中回复, 然后读取 REST
(单位:千美元)GET /v1/spaces/{space}/messages)匹配返回的消息资源名称.
Pub/Sub不需要公共端点,所以E2E在dev Hub上运行
GOOGLECHAT_SUBSCRIPTION (单位:千美元)projects/<project>/subscriptions/<name>) 上 时 间
连接。 网路在公共端点上被屏蔽
(单位:千美元)HUB-WIRING.md 第6节) (中文(简体) ).
最小账户配置
channel: googlechat
accountId: main
connectionId: <hub connection id>
transport: { mode: pubsub }
config:
botUser: "<GOOGLECHAT_TEST_BOT_USER_ID>"
routes:
- audience: [{ who: { anyone: true }, where: { dm: true } }]
agent: <agent>
environment: <environment>
服务账户文件和订阅在Hub连接的现场
全权证书serviceAccount 或者说 serviceAccountFile,以及 subscription(没有)
在此文件中。 网页浏览账户的使用 transport: { mode: webhook } 与
audienceType, (中文(简体) ), audience 财务报告和审定财务报表 webhookUrl 下级 config。 。 。 .
今天获得支持
入境 (Cloud Pub/Sub拉出或HTTP webhook:) MESSAGE 空格、 分组聊天和模式模式; 领先
/verb 分类为a command· ; CARD_CLICKED 作为 callback 携带
按钮的动作代号、其参数值和点击用户;
ADDED_TO_SPACE 编号 : REMOVED_FROM_SPACE 作为 member 事件。 提及检测
读取 USER_MENTION 说明 反对 users/app 并配置
botUser。瓶装和被应用信件被过滤,除非
allowBots 已经设定.
请求认证为上游, 不变: 无记名 JWT 被验证
对所配置的听众——用于 app-url
(包括工作空间加注的发行者 appPrincipal)和a 数据
与 Google 聊天证书进行认证
project-number —— 说 在此之前 请求的正文读取在 auth 前大小
盖. 两百块是久已入会的
进取队列; 失败的录取回答 503 所以Google 重新删除, a
错误的信封回答400 所以它不会.
出境:带有上游Google Chat标记下渲染器(粗体/斜体/)的文本
罢工/代码, <href|label> 页:1
和它的字节键;线条响应
倒转到新线程选项; 消息编辑( n)cardsV2 支持更新
路径); 删除消息; DM 打开通过 spaces:findDirectMessage; 空间
检查和账户探针.
信件工具动作数字 : send, (中文(简体) ), edit, (中文(简体) ), delete。 。 。 .
尚未支持
命名于此, 上面没有比它更多的内容 .
- 附件上传 – Google Chat的媒体上传端点为用户-Outh
; 服务账户应用程序不能使用 .
sendMedia显示 通知和报告mediaPosted: false(D-GC-016),和send行动大声拒绝附着物,而不是放弃附着物. - 进入媒体下载 - 信封的吗
attachment阵列已解析,但 未获取此文件, 因此拒绝只保存附件的信件 空无体相. 上游的下载生活于省略monitor.ts。 。 。 . - 本地核准卡 - 整个
approval-*家庭被忽略( 它坐落于 openClaw的审批网关运行时间). 纸牌 点击 仍然到达枢纽 入境callback由Hub自己的批准政策采取行动. - 打字指标 上游员额a
_… is typing…_信件并编辑其内容 进入答案monitor.ts。反应模式 上游也提供需要的用户 OAuth 而不为服务账户工作 完全应用. - 反应、针头、回放、情感发现、民调 没有服务账户 API
在这个频道.
supportsAction拒绝他们,所以枢纽回答unsupported_action而不是运输错误. - Pub/Sub推送 ——推再需要公共URL;垂直拉.
- Auth 传输的代理支持 - 上游路线 -- -- 谷歌 -- -- 通过
OpenClaw 的被绑放的堆栈,它尊重明确/env代理和
客户端 TLS 证书 。 联合警卫接受
dispatcherPolicy却无视它 (D-GC-005) (中文(简体) ). - 设置/ 医生表面 — OpenClaw 向导和
doctor树是 省略; Hub 拥有上载.
版式
src/
api.ts auth.ts google-auth.runtime.ts ← upstream Chat REST + service-account auth
accounts.ts targets.ts format.ts ← upstream account/target/format closure
actions.ts message-tool-api.ts ← upstream message-tool adapter
monitor-event.ts monitor-webhook.ts ← upstream envelope parser + request handler
channel-actions.ts outbound.ts ← Fusion: Hub drive surface
lifecycle/start-account.ts ← Fusion: L4 account lifecycle
fusion/ ← Fusion: every boundary, one per D-GC-0xx
account-config.ts Hub account carrier → upstream account resolution
admission.ts durable admission before the webhook 200
inbound-adapter.ts envelope → ChannelInboundEvent (kind + facts)
webhook-session.ts the owned node:http listener
ssrf-fetch.ts the guarded-fetch boundary
secret-file.ts the credential-file reader
runtime.ts HostRuntime → the ported PluginRuntime