Zendesk 更新用户 API 来自 Google 工作表

Zendesk Update Users API From Google Sheets

首先我要说的是,知道如何做某事却永远无法完成,这非常令人沮丧;这是我的另一个项目。

场景:使用 Google Sheet 和 Apps 脚本我正在尝试使用他们的 API.

更新 Zendesk 中的多个用户记录

我想如果正确的话(我当然会被更正)我可能有最多的使用以下脚本但是我无法让它更新任何记录。我怀疑这可能与数组的呈现方式有关(遗憾的是我对这个领域了解不够)。

function updateManyUsers(){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
 var [headers, ...rows] = sheet.getDataRange().getValues();
 var data = {}
 var items = []
 rows.forEach(function(r) {
   var obj={}
   r.forEach(function (c, j) {
     obj[headers[j]] = c
   })
    var data = {}//moved
   data['users'] = obj // moved this inside your loop
   items.push(data) // pushed the object into the items array
 })
 
 Logger.log("Log JSON Stringify Items: " + JSON.stringify(items))
 
 items.forEach(function(i) {   // added this to loop over objects in items
 var url = 'https://itsupportdesk1611575857.zendesk.com/api/v2/users/update_many.json'; //https://developer.zendesk.com/api-reference/ticketing/users/users/#update-user
 var user = 'myemailaddresshere/token';
 var pwd = 'mytoken';
 var options = {
     'method' : 'PUT',
     'headers': {
       'Authorization': "Basic " + Utilities.base64Encode(user + ':' + pwd)
     },
     'payload' : JSON.stringify(i),
     'contentType': 'application/json',
     'muteHttpExceptions': true
 };
 UrlFetchApp.fetch(url, options);
 Logger.log(i)
 var response = UrlFetchApp.fetch(url, options);
   Logger.log(response);
   
})

} 

我已经按照文档进行了尽可能多的检查,我知道我的终点不正确,方法 (?) 也不正确(设置为 Post 而不是 Push)。我浏览了各种我试图采取行动的错误信息,这是我目前的错误信息:

这是我 sheet 中数据的图像

补充:为了在这方面做得更好,我想让自己走上学习之路,但不确定这条路是什么;我的大部分自动化工作和脚本都是使用 Google Apps 脚本完成的,所以人们会推荐 JavaScript 课程吗?我在那个和 Python 之间改变,不知道什么最适合我更好地理解这类问题。

非常感谢。

根据您脚本中的端点,我认为您可能想要使用“批量更新”。 Ref If my understanding is correct, the following sample curl in the official document can be used. Ref

curl https://{subdomain}.zendesk.com/api/v2/users/update_many.json \
  -d '{"users": [{"id": 10071, "name": "New Name", "organization_id": 1}, {"external_id": "123", "verified": true}]}' \
  -H "Content-Type: application/json" -X PUT \
  -v -u {email_address}:{password}

如果使用您的脚本将此示例 curl 命令转换为 Google Apps 脚本,以下修改如何?

修改后的脚本:

function updateManyUsers2() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var [headers, ...rows] = sheet.getDataRange().getDisplayValues();
  var users = rows.map(r => {
    var temp = {};
    headers.forEach((h, j) => {
      if (r[j] != "") temp[h] = r[j];
    });
    return temp;
  });
  var url = 'https://itsupportdesk1611575857.zendesk.com/api/v2/users/update_many.json';
  var user = 'myemailaddresshere/token';
  var pwd = 'mytoken';
  var options = {
    'method': 'PUT',
    'headers': {
      'Authorization': "Basic " + Utilities.base64Encode(user + ':' + pwd)
    },
    'payload': JSON.stringify({ users }),
    'contentType': 'application/json',
    'muteHttpExceptions': true
  };
  var response = UrlFetchApp.fetch(url, options);
  Logger.log(response.getContentText());
}

注:

  • 从官方文档看,是Bulk or batch updates up to 100 users.。所以,当你想使用更多的数据时,请修改上面的脚本。请注意这一点。

  • 如果出现错误,请再次检查usersuserpwd的值。

参考: