使用Google Apps Script调用Clockify API修改项目预估报Duration解析错误
接口解析报错根因
报错触发的核心原因是提交的项目预估payload存在3处格式/类型不匹配,后端无法将对应值解析为合法的Duration对象:
estimate字段类型不符合要求:接口要求该字段为数值类型的秒数整数,既不接受带单位的时间格式字符串,也不接受字符串包裹的数字值。你当前传入的'3000'是字符串类型,后端序列化时无法完成Duration转换,直接抛出解析失败,这也是你测试'3000s'格式依然报错的原因——该字段根本不接受带单位的字符串值。active字段类型错误:接口要求该字段为布尔值true/false,你传入的是字符串类型的"true",不符合结构定义。resetOption字段格式错误:你传入的是字符串格式的"null",该字段为可选配置,不需要传带引号的空值。
可直接落地的修复步骤
- 调整
estimate参数格式
直接使用数值类型的秒数整数作为值,不要加单位、不要用引号包裹:比如要设置50分钟的时间预估,直接写数值3000,不要传'3000'、'3000s'这类带类型的字符串值。 - 修正payload结构匹配接口要求
调整所有字段的类型为接口规定的格式,修复后的示例代码如下:// 修复后的Step2逻辑 var estimate = 3000; // 数值类型,单位为秒,无引号 var payload = JSON.stringify({ "timeEstimate": { "estimate": estimate, "type": "MANUAL", "active": true, // 布尔值,无引号 "resetOption": null // JSON原生null,无引号;不需要该配置可直接删除字段 } }); - 排查代码内的拼写不一致问题
检查全局配置变量名:Step1中请求头使用的是cifyHeader,Step2中请求头用的是cifyHeaders,两处变量名不一致会导致鉴权请求失败,需保证全局配置的变量名完全统一。
对接电子表格读取的适配方案
后续恢复M3单元格的读取逻辑时,注意两点:
- 直接读取单元格的数值类型值,不要手动转成字符串:
var estimate = sheet.getRange("M3").getValue(); // 自动识别为数值类型 - 确保M3单元格的存储内容为纯数字秒数,如果单元格存的是小时数,可直接做数值计算转成秒(如读取的小时值 * 3600),不要拼接带单位的文本字符串。
内容的提问来源于stack exchange,提问作者Databoy2k
相关产品推荐
相关产品推荐

