我已经尝试了一切,包括在console.cloud.google.com中启用Google Apps脚本API,在脚本A中设置该项目的项目编号,并确保脚本B的项目ID正确。然而,触发器仍未被设置。我想澄清的是,脚本 B 将始终使用模板脚本 B 的新副本进行更新,并且将使用模板来创建其副本。无需在脚本 B 中手动部署任何内容。一旦在模板中设置了必要的函数,它们将从脚本 A 中自动运行,而无需打开脚本 B。是否有其他方法可以在脚本 A 中运行函数可以使用脚本 ID 在脚本 B 的任何副本中设置基于时间的触发器吗?
脚本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"
}
}
我复制了您的代码来测试和调试您遇到以下错误的原因:
Response Body: {
"error": {
"code": 404,
"message": "Requested entity was not found.",
"status": "NOT_FOUND"
}
}
发生错误的原因是代码中引用的
Script ID
与目标脚本(脚本B)的有效部署不对应。当将脚本 B 部署到可执行 API 期间创建的 Deployment ID
未在调用脚本 (脚本 A) 中正确更新时,通常会发生这种情况。
您可能忘记更新将脚本 B 部署到可执行 API 时创建的部署 ID,或者您可能错过了需要将其部署为 API 可执行文件的部分。您需要复制部署 ID 并替换代码中的脚本 ID。
您可以查看这篇关于 API 可执行文件
的文章更新这部分代码:
const scriptId = "Replace this with the deployment ID of Script B";
更新部署 ID 后,保存更改并运行
callScriptBTriggerFunction
。
它应该返回这样的响应:
Notice
Execution started
Info
Response Code: 200
Info
Response Body:
{
"done": true,
"error": {
"code": 3,
"message": "ScriptError",
"details": [
{
"@type": "type.googleapis.com/google.apps.script.v1.ExecutionError",
"scriptStackTraceElements": [
{
"function": "createTimeTrigger",
"lineNumber": 2
}
],
"errorMessage": "Exception: You do not have permission to call ScriptApp.newTrigger. Required permissions: https://www.googleapis.com/auth/script.scriptapp",
"errorType": "ScriptError"
}
]
}
}
然后您可能会遇到另一条错误消息,指出:
异常:您无权调用 ScriptApp.newTrigger。
不幸的是,目前没有足够的文档来解释为什么此权限受到限制。不过,您可以参考这篇 Stack Overflow 帖子,了解更多见解和潜在的解决方法。
参考文献: