ScriptApp.newTrigger权限报错:自动化API数据获取触发失败求助
问题:创建触发器时出现权限错误
自定义公式=ListPlugins("https://example1.wpengine.com")可正常在表格中获取数据,但通过触发器自动化执行时,抛出以下错误:
Exception: You do not have permission to call ScriptApp.newTrigger. Required permissions: https://www.googleapis.com/auth/script.scriptapp
相关代码
ListPlugins函数(可正常运行)
function ListPlugins(url) { let sheet_name = 'apps and plugins' var options = { "async": true, "crossDomain": true, "method" : "GET", "headers" : { "Token" : TOKEN_HERE, "cache-control": "no-cache" } }; var urlEncoded = encodeURI(url) let api_url = urlEncoded + "/wp-json/bd/v1/public/plugin-list/" var jsondata = UrlFetchApp.fetch(api_url,options) var object = JSON.parse(jsondata.getContentText()) return object; }
自动化逻辑代码
function onOpen(e) { return teste() } function teste() { var all_data = getDataFromPluginList() /*return all_data [ { first_cell: 'A2', last_cell: 'I9', first_row: 2, last_row: 9, total_row: 8, url: 'https://example1.wpengine.com/' }, { first_cell: 'A10', last_cell: 'I15', first_row: 10, last_row: 15, total_row: 6, url: 'https://example2.wpengine.com/' } ] */ for (var i = 0; i < all_data.length; i++) { trigger_(all_data[i].url); } } function trigger_(url) { var new_trigger = ScriptApp.newTrigger(writePluginData).timeBased().everyMinutes(1).create(); var trigger_id = new_trigger.getUniqueId(); PropertiesService.getUserProperties().setProperty(trigger_id, url); } function writePluginData(event) { var trig = ScriptApp.getProjectTriggers(); let sheet_name = 'trigger_result'; let lowest_row = lowestRow(sheet_name); for(var i =0; i<trig.length; i++) { if(trig[i].getUniqueId()== event.triggerUid ) { var urlParam = PropertiesService.getUserProperties().getProperty(event.triggerUid); urlParam = urlParam.split(","); var url = urlParam[0]; var ss = SpreadsheetApp.getActive().getSheetByName(sheet_name); // change accordingly var data = ListPlugins(URL); /*return listPlugins [ [ "Escape Room", "https://example.com/", "Advanced Custom Fields PRO", "advanced-custom-fields-pro", "5.12.3", "6.0.7", false, 6, "2023-01-30 10:57 AM" ], [ "", "", "Classic Editor", "classic-editor", "1.6.2", "1.6.2", true, "" ], ..., ] */ var target = "A"+ (lowest_row + 1) Logger.log(data); ss.getRange(target).setValue(data); } } }
错误原因
- 权限范围未覆盖:
ScriptApp.newTrigger()需要https://www.googleapis.com/auth/script.scriptapp权限,当前脚本未申请该权限。自定义函数运行在受限环境,无需全权限,但创建触发器属于高权限操作,必须明确授权。 - 触发环境权限受限:
onOpen()属于Google Apps Script的「简单触发」,运行时权限上限极低,无法调用创建触发器这类需要完整授权的方法。 - 与API安全设置无关:该错误由Google Apps Script的权限机制导致,和你调用的WP API安全配置没有关联。
解决方法
- 替换简单触发为可安装触发:
- 删除
onOpen()中调用teste()的逻辑,手动运行一次teste(),此时会弹出授权请求,确认后脚本将获得创建触发器的权限。 - 或者在脚本编辑器中创建「可安装的打开触发器」,直接绑定到
teste()函数,替代默认的onOpen()简单触发。
- 删除
- 明确声明权限:在脚本的
appsscript.json文件中添加权限声明(打开方式:脚本编辑器→查看→显示清单文件):{ "oauthScopes": [ "https://www.googleapis.com/auth/script.scriptapp", "https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/script.external_request" ] } - 优化触发器逻辑:每次运行
teste()前先删除旧触发器,避免生成大量重复的定时触发器。
内容的提问来源于stack exchange,提问作者Golipz
相关产品推荐
相关产品推荐

