如何将Project Number动态关联到Google Apps Script脚本
按需创建谷歌表单时自动绑定标准GCP项目的问题
我正在按需创建谷歌表单,需要为表单配置触发器。如果直接在负责表单创建的主AppsScript脚本上配置所有触发器,很快就会触达20个触发器的配额上限,因此我决定为每个表单绑定一个关联对应parentID的专属脚本,避免超出配额。
我遇到的问题是:添加触发器时收到权限拒绝报错,原因是每个表单生成的专属脚本默认使用GCP默认项目,而OAuth要求必须使用标准GCP项目。
手动添加项目编号的操作会破坏按需自动生成谷歌表单的需求,完全违背了自动化的初衷。
我希望能将新创建的脚本自动关联到已完成配置的标准GCP项目,但在Google官方文档中没有找到相关实现方案,希望有遇到过同款问题的开发者能提供解决方案。
我当前使用的触发器如下:
onFormSubmit:获取表单提交的响应数据并发送到我的后端服务端点onOpen:校验编辑器未删除默认配置(仅当协作者以编辑模式打开表单时触发)
下图为我所指的GCP项目编号操作界面截图
解决方案
方案一:调整架构用云原生能力规避绑定需求(优先推荐)
你遇到的20个可安装触发器限制是普通Apps Script用户的固定配额,完全没必要硬磕脚本绑定GCP项目的操作,直接换架构绕开限制即可:
- 先在你已经配置好的标准GCP项目里启用Google Forms API、Cloud Pub/Sub API
- 每次新表单创建完成后,调用Forms API的
forms.watches.create接口,把表单的提交事件绑定到你提前建好的Pub/Sub主题 - 不管是用Cloud Function还是你自己的后端服务,直接消费Pub/Sub里的表单提交消息就能实现原来
onFormSubmit的转发逻辑 - 你需要的
onOpen属于简单触发器,不需要安装、也不需要OAuth权限,主脚本生成表单的时候直接把onOpen的校验代码写入表单绑定的默认脚本就行,完全不会占用触发器配额,也不需要改GCP项目配置
这个方案全程自动化,所有资源都在你已经配置好的标准GCP项目里,不需要动任何脚本的GCP绑定设置,也不会触发配额限制。
方案二:用Apps Script API自动修改项目绑定(仅Workspace域账号可用)
如果你必须保留单表单单脚本的架构,只要你用的是企业版Google Workspace账号,就可以通过API实现自动绑定:
- 在你的标准GCP项目里创建服务账号,配置域范围委派权限,同时启用Apps Script API
- 生成新表单的绑定脚本后,拿到脚本的项目ID
- 调用Apps Script API的
projects.updateDeploymentConfig接口,传入你的标准GCP项目编号,就能自动完成脚本和GCP项目的绑定,全程不需要手动操作
普通个人Google账号没有域范围委派权限,无法使用这个方案。
内容的提问来源于stack exchange,提问作者Cristian Llorente
相关产品推荐
相关产品推荐

