GASからLambdaにzendesk_idを渡してzendesk APIのGETで情報取得したい
で取得したデータをスプレッドシートに書き出したくて書いたコードです。
コード.gs
var host = 'SITENAME.zendesk.com'; var endPoint = 'https://API_ID.execute-api.us-east-1.amazonaws.com/default/get_zendesk_ticket'; //これを実行する function getZendeskInfo() { var zendesk_id = 2;// zendesk_idを指定する場合 var response = run(zendesk_id); var objs = JSON.parse(response)["results"]; objsToSheet(objs); } function run(zendesk_id) { //var path = '/api/v2/tickets/' + zendesk_id + '.json';// zendesk_idを指定したい場合 var path = '/api/v2/search.json?page=1&query=created%3E2019-01-01%20type:ticket';// queryで取得したい場合 var payload = { 'data':{ 'host': host, 'path': path, 'zendesk_id': zendesk_id, 'zendesk_api_token_base64': getProp('zendesk_api_token_base64') } } var options = { 'method': 'post', 'headers': get_headers(), 'contentType': 'application/json', 'payload': JSON.stringify(payload) } var response = UrlFetchApp.fetch(endPoint, options); return response; } function get_headers() { var headers = { "x-api-key": getProp('x_api_key') } return headers; } function getProp(key) { return PropertiesService.getScriptProperties().getProperty(key); } //書き込むシート function targetSheet() { var ss_url = 'https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit#gid=0'; var ss = SpreadsheetApp.openByUrl(ss_url); var sheet = ss.getSheets()[0]; return sheet; } //シートに書き込むデータを渡す function objsToSheet(objs) { var sheet = targetSheet(); var obj = objs[0]; var keys = Object.keys(obj); var arrays = [keys];// keysを一行目に入れておく for(var i = 0; i < objs.length; i++) { var obj = objs[i]; var values = []; for(var j = 0; j < keys.length; j++) { var value = obj[keys[j]]; values.push(value); } arrays.push(values); } setDataToSheet(sheet, arrays) } //シートにデータを書き込む function setDataToSheet(sheet, arrays){ var last_row = sheet.getLastRow(); var start_row = last_row + 1; var start_col = 1; var num_rows = arrays.length; var num_cols = arrays[0].length; var range = sheet.getRange(start_row, start_col, num_rows, num_cols); range.setValues(arrays); } //base64tokenを作成する これをスクリプトのプロパティ function get_base64() { var zendesk_api_token = "ZENDESK_API_TOKEN"; var base64Token = Utilities.base64Encode("EMAIL" + '/token:' + zendesk_api_token); Logger.log(base64Token); } |
Lambda側のコード(関連記事のコードと同じ)
index.jsvar https = require('https'); var zendesk_id; var zendesk_api_token_base64; var host; var path; exports.handler = async function(event) { console.log(event); /****** pyloadで受け取る場合 ******/ var body = event['body']; var jobj = JSON.parse(body); host = jobj['data']['host'] path = jobj['data']['path'] zendesk_id = jobj['data']['zendesk_id'] zendesk_api_token_base64 = jobj['data']['zendesk_api_token_base64'] console.log([zendesk_id]); var results = await getData(zendesk_id); //getData()の処理が終わってから次の処理を実行する var json = returnJson(results); return json; } //Promise function getData() { return new Promise(resolveFunc); } //Promise resolved function resolveFunc(arg) { https.get(getOptions(), function(res) { var body = ''; //res.setEncoding('utf8'); res.on('data', function(chunk) { body += chunk; }); res.on('end', function(chunk) { arg(body); }); res.on('error', function(e) { console.log(e.message); arg(e.message); }); }); //ここまでの処理をPromiseでやりたい } function getOptions() { var options = { "method": 'GET', "host": host, "path": path, "headers": { "Content-type": "application/json", "Authorization": " Basic " + zendesk_api_token_base64// Lambda側に設定して読む場合はprocess.env. zendesk_api_token_base64 } }; return options; } //JSONを返す function returnJson(results) { const response = { //body: JSON.stringify(result), body: results, }; return response; } |
関連記事
GASからLambdaにzendesk_idを渡してzendesk APIのGETで情報取得したい