You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);
   }
  }
}

错误原因

  1. 权限范围未覆盖:ScriptApp.newTrigger()需要https://www.googleapis.com/auth/script.scriptapp权限,当前脚本未申请该权限。自定义函数运行在受限环境,无需全权限,但创建触发器属于高权限操作,必须明确授权。
  2. 触发环境权限受限:onOpen()属于Google Apps Script的「简单触发」,运行时权限上限极低,无法调用创建触发器这类需要完整授权的方法。
  3. 与API安全设置无关:该错误由Google Apps Script的权限机制导致,和你调用的WP API安全配置没有关联。

解决方法

  1. 替换简单触发为可安装触发:
    • 删除onOpen()中调用teste()的逻辑,手动运行一次teste(),此时会弹出授权请求,确认后脚本将获得创建触发器的权限。
    • 或者在脚本编辑器中创建「可安装的打开触发器」,直接绑定到teste()函数,替代默认的onOpen()简单触发。
  2. 明确声明权限:在脚本的appsscript.json文件中添加权限声明(打开方式:脚本编辑器→查看→显示清单文件):
    {
      "oauthScopes": [
        "https://www.googleapis.com/auth/script.scriptapp",
        "https://www.googleapis.com/auth/spreadsheets",
        "https://www.googleapis.com/auth/script.external_request"
      ]
    }
    
  3. 优化触发器逻辑:每次运行teste()前先删除旧触发器,避免生成大量重复的定时触发器。

内容的提问来源于stack exchange,提问作者Golipz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 22:32:20