如何将Drive中的GAS脚本转为Add-On?Manifest文件创建疑问
把现有Google Apps Script转成Gmail附加组件?看这篇就够了
嘿,我明白你看官方文档时的困惑——Manifest文件确实是入门附加组件的第一个坎,我帮你把整个流程拆得明明白白,从创建Manifest到适配你的Drive脚本,一步一步来:
先搞懂Manifest到底是什么
简单说,appsscript.json就是你的附加组件的"身份证+说明书":它告诉Google这个附加组件叫什么、能在Gmail的哪个位置显示、需要哪些权限访问你的数据,还有触发它的入口函数是什么。之前的独立脚本可能没用到它,但转成附加组件必须要有。
第一步:在编辑器里启用Manifest文件
你现在的脚本编辑器里可能看不到这个文件,先把它调出来:
- 点右上角的齿轮图标(设置)
- 勾选「显示appsscript.json清单文件」
- 回到编辑器左侧,就能看到
appsscript.json文件了,接下来我们要给它填内容
第二步:写一个适配你Drive脚本的基础Manifest模板
我给你一个最实用的模板,你可以直接替换里面的参数,适配你的需求:
{ "timeZone": "Asia/Shanghai", // 换成你所在的时区,比如"America/Los_Angeles" "dependencies": {}, "exceptionLogging": "STACKDRIVER", "oauthScopes": [ "https://www.googleapis.com/auth/gmail.addons.execute", "https://www.googleapis.com/auth/gmail.readonly", // 这里加你原脚本用到的Drive权限,比如只读就加下面这个,需要修改就换对应的权限 "https://www.googleapis.com/auth/drive.readonly" ], "gmail": { "name": "我的Drive工具", // 改成你的附加组件名字 "logoUrl": "https://your-logo-link.com/logo.png", // 可选,放个图标链接,没有就先删掉这行 "primaryColor": "#4285F4", // 自定义主色调,比如Google蓝 "secondaryColor": "#34A853", // 自定义次色调 "contextualTriggers": [ { "unconditional": {}, "onTriggerFunction": "buildAddOnUI" // 这个是附加组件启动时要跑的函数,后面要写 } ], "openLinkUrlPrefixes": [ "https://drive.google.com/" // 如果你的脚本要打开Drive链接,必须加这个 ] } }
第三步:把你的Drive脚本适配成附加组件逻辑
原脚本是独立运行的,现在要让它在Gmail的附加组件面板里工作,得做两个关键修改:
1. 写启动时生成UI的函数
就是Manifest里指定的buildAddOnUI,它负责在Gmail侧边栏生成你的附加组件界面:
function buildAddOnUI(e) { // 先建一个卡片,这是附加组件的核心UI单元 const mainCard = CardService.newCardBuilder() .setHeader(CardService.newCardHeader().setTitle("我的Drive文件助手")) .addSection(CardService.newCardSection() .addWidget(CardService.newTextButton() .setText("查看我的Drive文件") .setOnClickAction(CardService.newAction() .setFunctionName("getMyDriveFiles")))) // 点击按钮就调用你原有的Drive逻辑函数 .build(); // 返回卡片,这样Gmail侧边栏就能显示了 return [mainCard]; }
2. 改造你的Drive操作函数
把原有的Drive文件处理逻辑改成能在附加组件里返回UI的形式,比如:
function getMyDriveFiles() { // 这里复制你原脚本里获取Drive文件的逻辑 const files = DriveApp.getFiles(); let fileList = ""; let count = 0; while (files.hasNext() && count < 10) { // 限制显示10个,避免太长 const file = files.next(); fileList += `- ${file.getName()} (${file.getUrl()})\n`; count++; } // 建一个新卡片显示文件列表 const resultCard = CardService.newCardBuilder() .setHeader(CardService.newCardHeader().setTitle("最近的Drive文件")) .addSection(CardService.newCardSection() .addWidget(CardService.newTextParagraph().setText(fileList))) .build(); // 返回这个卡片,让附加组件跳转到结果页面 return CardService.newActionResponseBuilder() .setNavigation(CardService.newNavigation().pushCard(resultCard)) .build(); }
第四步:测试和部署
- 先点编辑器右上角的「测试部署」,选择「测试为Gmail附加组件」,然后打开Gmail,就能在侧边栏看到你的附加组件了
- 如果要正式发布,点「部署」->「部署为附加组件」,按照提示填好信息就行
几个关键提醒
- 权限一定要对应:Manifest里的
oauthScopes必须包含所有你脚本用到的权限,少了会直接报错 - 只能用
CardService做UI:附加组件不能用原脚本的HtmlService,除非是通过链接打开外部页面 - 触发条件可以自定义:如果不想让附加组件在所有邮件里显示,可以把
contextualTriggers改成基于邮件内容的触发(比如包含特定关键词的邮件)
内容的提问来源于stack exchange,提问作者Dan Goldenberg
相关产品推荐
相关产品推荐

