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

Google Apps Script调用Asana Events API始终返回无效同步令牌

问题根源

你的代码核心问题在于:Asana Events API要求sync作为URL查询参数传递,但你错误地将其放在了UrlFetchApp的options对象中。Google Apps Script的UrlFetchApp.fetch不会自动把options里的自定义属性(比如sync)转换为URL的查询参数,导致实际请求中并没有正确携带sync参数,因此API返回令牌无效。

修复代码

修改asanaEventCall函数,将sync参数拼接到URL末尾作为查询参数:

function asanaEventCall() {
  var syncToken = userProps.getProperty('syncToken');
  // 把sync参数拼接到URL的查询字符串中
  var url = asanaBaseUrl + '/projects/' + asanaProject + '/events?sync=' + encodeURIComponent(syncToken);

  var headers = {
    'Authorization': 'Bearer ' + asanaPAT
  };

  var options = {
    'method': 'GET',
    'headers': headers,
    'muteHttpExceptions': true
  };
  
  var r = UrlFetchApp.fetch(url, options);
  var data = JSON.parse(r.getContentText());
  
  // 每次调用后更新同步令牌,用于下一次请求
  if (data.sync) {
    userProps.setProperty('syncToken', data.sync);
  }
  
  return data;
}
额外注意事项
  • 使用encodeURIComponent()对syncToken编码,避免令牌中的特殊字符导致URL解析失败。
  • 初始调用getSyncToken的逻辑是正确的:即使API返回"invalid token"错误,返回的data.sync是有效的初始同步令牌,可以正常用于后续请求。
  • 每次调用成功后必须更新存储的同步令牌,确保下一次请求使用最新的令牌。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:56:06