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

如何通过Google Apps Script从脚本A为脚本B副本创建时间触发器?

问题:通过脚本A为复制生成的脚本B副本创建时间触发器失败,寻求替代方案

我已经尝试了所有常规方法:在console.cloud.google.com启用Google Apps Script API、在脚本A中配置对应项目编号、确认脚本B副本的Script ID正确,但仍无法创建触发器。

补充说明:脚本B均由模板复制生成,无需手动部署,模板配置好函数后,无需打开脚本B即可从脚本A自动运行。现在需要替代方法,通过脚本A调用函数,利用Script ID为任意脚本B副本创建时间触发器。


相关代码

Script A

function callScriptBTriggerFunction() {
  const scriptId = "Copy of Script B ID"; 

  const url = `https://script.googleapis.com/v1/scripts/${scriptId}:run`;

  const requestBody = {
    "function": "createTimeTrigger"
  };

  const fetchOptions = {
    method: "post",
    contentType: "application/json",
    headers: {
      Authorization: "Bearer " + ScriptApp.getOAuthToken()
    },
    payload: JSON.stringify(requestBody),
    muteHttpExceptions: true
  };

  try {
    const response = UrlFetchApp.fetch(url, fetchOptions);
    
    Logger.log("Response Code: " + response.getResponseCode());
    Logger.log("Response Body: " + response.getContentText());
  } catch (err) {
    Logger.log("Error: " + err);
  }
}

任意脚本B副本

function createTimeTrigger() {
  ScriptApp.newTrigger('myFunction')
           .timeBased()
           .everyDays(1)    
           .atHour(23)  
           .create();
}

function myFunction() {
  Logger.log("myFunction ran at: " + new Date());
}

遇到的错误

Response Body: {
  "error": {
    "code": 404,
    "message": "Requested entity was not found.",
    "status": "NOT_FOUND"
  }
}

替代方案与问题排查

1. 404错误核心原因

复制生成的脚本B副本默认处于未初始化状态,项目未完成API访问配置,直接调用scripts.run会触发404。需要先完成脚本B的初始化,或改用高级服务直接操作触发器。

2. 替代方法:用Apps Script高级服务直接创建触发器

无需调用脚本B的函数,直接在脚本A中通过API为脚本B副本创建触发器:

步骤1:启用高级服务

在脚本A编辑器中,点击「资源」>「高级Google服务」,找到「Google Apps Script API」并启用。

步骤2:修改脚本A代码

function createTriggerForScriptB() {
  const scriptId = "Copy of Script B ID";
  const triggerConfig = {
    functionName: "myFunction",
    triggerType: "CLOCK",
    recurrence: {
      type: "DAILY",
      hour: 23
    }
  };

  try {
    // 先验证脚本可访问,再创建触发器
    ScriptApp.getProjectTriggers(scriptId);
    const newTrigger = ScriptApp.createTrigger(scriptId, triggerConfig);
    Logger.log("触发器创建成功:" + JSON.stringify(newTrigger));
  } catch (err) {
    Logger.log("错误信息:" + err.message);
  }
}

3. 权限配置要点

  • 确保脚本A的运行账号拥有脚本B副本的编辑权限(复制生成的脚本默认仅复制者有编辑权)
  • 脚本A需授权https://www.googleapis.com/auth/script.projects和https://www.googleapis.com/auth/script.scriptapp权限
  • 域内应用可通过G Suite管理员批量配置权限

4. 替代方案2:预初始化脚本B模板

在脚本B模板中添加初始化函数,复制后自动完成项目配置:

function initScript() {
  // 触发项目初始化,生成项目ID并启用API访问
  ScriptApp.getProjectKey();
}

复制脚本B后,先通过脚本A调用初始化函数:

function initScriptB() {
  const scriptId = "Copy of Script B ID";
  const url = `https://script.googleapis.com/v1/scripts/${scriptId}:run`;
  const options = {
    method: "post",
    headers: { Authorization: "Bearer " + ScriptApp.getOAuthToken() },
    payload: JSON.stringify({function: "initScript"}),
    muteHttpExceptions: true
  };
  const response = UrlFetchApp.fetch(url, options);
  Logger.log("初始化响应:" + response.getContentText());
}

初始化完成后,再调用原有的createTimeTrigger函数即可避免404错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 23:12:36