Google Apps Script定时触发器调用API报错:Invalid argument: http://[object%20Object]
问题分析
报错里的http://[object%20Object]说明你传入API的URL参数实际是一个对象,而非字符串格式的有效URL。手动运行正常但定时触发器失败,核心原因是定时触发器的运行环境和手动/UI触发的环境存在差异:
- 手动运行时,脚本可能依赖了UI交互(比如侧边栏输入、菜单触发时初始化的变量)来获取正确的URL;
- 定时触发器属于无头执行环境,没有UI上下文,那些依赖UI初始化的变量会变成空对象或未定义,最终导致URL拼接错误。
解决方案
修正URL获取逻辑,脱离UI依赖
别从UI元素(比如侧边栏输入框)或仅手动运行时才初始化的全局变量里拿URL,改用更稳定的存储方式:// 推荐用脚本属性存储API地址,定时环境也能正常读取 const apiUrl = PropertiesService.getScriptProperties().getProperty('API_ENDPOINT');你可以在脚本编辑器的「项目设置」→「脚本属性」里添加
API_ENDPOINT键值对,把实际的API地址填进去。检查URL拼接代码,避免直接传入对象
打开accessProtectedResource函数第43行,确认你传入的是字符串格式的URL,而非某个对象。比如别写fetch(apiConfig),要改成fetch(apiConfig.endpoint),确保取到的是对象里的URL属性值。加日志定位变量状态
在getAllInvoicesFromExact函数开头加日志,看看定时运行时URL的实际值:function getAllInvoicesFromExact() { const targetUrl = // 你的URL获取逻辑 console.log('定时触发时的API地址:', targetUrl); // 后续代码 }触发定时任务后,去脚本编辑器的「查看」→「日志」里看输出,就能明确URL是没获取到还是变成了对象。
确认授权状态
手动运行时你已经完成授权,但定时触发器可能需要重新确认权限。手动执行一次定时任务对应的函数,确保OAuth授权流程走完(如果API需要授权的话)。
内容的提问来源于stack exchange,提问作者Orneslat
相关产品推荐
相关产品推荐

