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.
。所以,当你想使用更多的数据时,请修改上面的脚本。请注意这一点。
如果出现错误,请再次检查users
、user
和pwd
的值。
参考:
首先我要说的是,知道如何做某事却永远无法完成,这非常令人沮丧;这是我的另一个项目。
场景:使用 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.
。所以,当你想使用更多的数据时,请修改上面的脚本。请注意这一点。如果出现错误,请再次检查
users
、user
和pwd
的值。