I share this blog with my thoughts and creations from my daily programming, knowledge, and technology updates.
Apps Scriptリファレンス: Apps Script Reference
|障害・課題追跡: IssueTracker
|Google Workspace: Status Dashboard
- Summary
2019年4月30日火曜日
マウスの座標をリアルタイムで取得したい(e.pageX, e.pageY)
マウスのポインタの位置をリアルタイムで取得したい
デモ
コード.gs
function doGet() { return HtmlService.createHtmlOutputFromFile("index"); } |
意訳この機能がやること 指定したHTMLファイルを表示する |
index.html
<!DOCTYPE html> <html> <body> <label>X</label><input type="text" id="posX"> <br> <label>Y</label><input type="text" id="posY"> <script> window.onmousemove = mousePos; function mousePos(e) { document.getElementById("posX").value = e.pageX; document.getElementById("posY").value = e.pageY; } </script> </body> </html> |
意訳X座標のラベルとテキストボックス 改行 Y座標のラベルとテキストボックス マウスが動いたらmousePosを実行する この機能がやること idがposXの要素にX座標の数値を入れる idがposYの要素にY座標の数値を入れる |
参考
MouseEvent.pageX
MouseEvent.pageY
MouseEvent.pageX
MouseEvent.pageY
Googleドライブ内のフォルダをフォルダ名で並べ替えて取得したい
Googleドライブ内のファイルをファイル名で並べ替えて取得したい
のフォルダ版
特定のフォルダ内のフォルダをフォルダ名で並べ替えます
コード.gs
/************************************ フォルダ内のフォルダを取得して フォルダ名で昇順に並べ替えて フォルダ名とIDの配列を返す ************************************/ function getFolderArray() { var parentFolderId = "ID"; var folderArray = []; var folders = getFolders(parentFolderId); for(var i = 0; i < folders.length; i++) { var name = folders[i]['name']; var id = folders[i]['id']; folderArray.push([name, id]); } Logger.log(folderArray); } /************************************ フォルダ内のフォルダを取得して 昇順にして返す ************************************/ function getFolders(parentFolderId) { var folderProps = []; var parentFolder = DriveApp.getFolderById(parentFolderId); var contents = parentFolder.getFolders(); while(contents.hasNext()) { var folder = contents.next(); var name = folder.getName(); var id = folder.getId(); var obj = {}; obj["name"] = name; obj["id"] = id; folderProps.push(obj); } var sorted = objSort(folderProps); return folderProps; } /************************************ 並べ替える ************************************/ function objSort(fileProps) { var ascending = fileProps.sort(asc); return ascending; } /************************************ nameで昇順に並べ替える ************************************/ function asc(a, b){ var A = a.name; var B = b.name; if(A > B){ return 1; }else if(A < B ){ return -1; }else{ return 0; } } |
正規表現で英数以外のテキストの間にある半角スペースを削除したい
今回試した正規表現
/(?<![a-zA-Z0-9!?])[\s ](?![a-zA-Z0-9])/g
Good morning! お は よ!
を
Good morning! おはよ!
にする
コード.gs
function doGet() { return HtmlService.createHtmlOutputFromFile("index"); } |
意訳この機能がやること 指定したHTMLファイルを表示する |
index.html
<!DOCTYPE html> <html> <body> <script> myFunction(); function myFunction() { var text = 'Good morning! お は よ!'; text = text.replace(/(?<![a-zA-Z0-9!?])[\s ](?![a-zA-Z0-9!?])/g, ""); console.log(text); } </script> </body> </html> |
補足
.gs側では「SyntaxError: 量指定子 ? は無効です。」と出て ? は使えないようなので、.htmlでやっています。
テキスト画像をOCR化したときに改行が半角スペースになることがあり、その半角スペースを消したくて書きました。
var text = 'Good morning! お は よ!';
text = text.replace(/(?<![a-zA-Z0-9])[\s ](?![a-zA-Z0-9])/g, "");
=> Good morning!おはよ!
これだと ! のあとの半角スペースも消えるので
!と?も対象にして
/(?<![a-zA-Z0-9!?])[\s ](?![a-zA-Z0-9])/g,
としたのが今回試した正規表現です。
.gs側では「SyntaxError: 量指定子 ? は無効です。」と出て ? は使えないようなので、.htmlでやっています。
テキスト画像をOCR化したときに改行が半角スペースになることがあり、その半角スペースを消したくて書きました。
var text = 'Good morning! お は よ!';
text = text.replace(/(?<![a-zA-Z0-9])[\s ](?![a-zA-Z0-9])/g, "");
=> Good morning!おはよ!
これだと ! のあとの半角スペースも消えるので
!と?も対象にして
/(?<![a-zA-Z0-9!?])[\s ](?![a-zA-Z0-9])/g,
としたのが今回試した正規表現です。
2019年4月29日月曜日
Googleドライブの特定のフォルダに新規フォルダを作成したい
一発でやる方法がわからないのでシートでやったときと同じ手順で
- マイフォルダの中に作成して
- 特定のフォルダの中に追加して
- マイフォルダの中から削除する
コード.gs
var TARGET_FOLDER_ID = "ID"; function createFolder() { var newFolder = DriveApp.createFolder('New Folder'); var folderId = newFolder.getId(); addFolder(folderId) removeFolder(folderId); } function addFolder(folderId) { var folder = DriveApp.getFolderById(folderId); var targetFolder = DriveApp.getFolderById(TARGET_FOLDER_ID); targetFolder.addFolder(folder); } function removeFolder(folderId){ var folder = DriveApp.getFolderById(folderId); var parentFolder = folder.getParents().next(); parentFolder.removeFolder(folder); } |
参考
createFolder(name)
https://developers.google.com/apps-script/reference/drive/drive-app#createFolder(String)
createFolder(name)
https://developers.google.com/apps-script/reference/drive/drive-app#createFolder(String)
Googleドライブのフォルダ内でファイル名が一致するドキュメントのテキストを取得したい
Googleドライブのフォルダ内のドキュメントからテキストを取得したい(並べ替える)
ではフォルダ内のすべてのファイルを対象にしましたが
ここでは
フォルダ内に存在するすべてのファイルを取得してから
その中でファイル名が一致するものだけを抽出する
というコードを書きました
以下の変数内の値は各自で設定します
- folder の ID
- files のファイル名を特定する文字列
コード.gs
function getFilesBySearch0() { var folder = DriveApp.getFolderById("ID"); var files = folder.searchFiles('title contains "ファイル名を特定する文字列"'); var fileProps = []; while (files.hasNext()) { var file = files.next(); var id = file.getId(); var name = file.getName(); var text = getDocText(id); var obj = {} obj['id'] = id; obj['name'] = name; obj['text'] = text; fileProps.push(obj); } objSort(fileProps); Logger.log(fileProps); console.log(fileProps); } /************************************ ドキュメントのテキストを取得する ************************************/ function getDocText(id) { var doc = DocumentApp.openById(id); var text = doc.getBody().getText(); return text; } /************************************ 並べ替える ************************************/ function objSort(fileProps) { var ascending = fileProps.sort(asc); return ascending; } /************************************ nameで昇順に並べ替える ************************************/ function asc(a, b){ var A = a.name; var B = b.name; if(A > B){ return 1; }else if(A < B ){ return -1; }else{ return 0; } } |
補足
フォルダ内のファイル数が多いとその分時間がかかります
関連記事
Googleドライブ内の特定のフォルダ内でファイルを探したい(スクリプトで)
Googleドライブのフォルダ内のドキュメントからテキストを取得したい(並べ替える)
Googleドライブのフォルダ内のドキュメントからテキストを取得したい(並べ替える)
Googleドライブのフォルダ内のドキュメントからテキストを取得したい
ではシンプルに取得するコードを書きたくて並べ替えまではやりませんでしたが、ここでは並び替えるところまで書きました。
コード.gs
/************************************ フォルダ内のファイルを取得して ファイル名で昇順に並べ替えて ファイルIDたちの配列を返す ************************************/ function getFileArray() { var folderId = "ID"; var fileArray = []; var files = getFiles(folderId); for(var i = 0; i < files.length; i++) { var name = files[i]['name']; var id = files[i]['id']; var text = files[i]['text']; fileArray.push([name, id, text]); } Logger.log(fileArray); } /************************************ フォルダ内のファイルを取得して 昇順にして返す ************************************/ function getFiles(folderId) { var fileProps = []; var folder = DriveApp.getFolderById(folderId); var contents = folder.getFiles(); while(contents.hasNext()) { var file = contents.next(); var name = file.getName(); var id = file.getId(); var text = getDocText(id); var obj = {}; obj["name"] = name; obj["id"] = id; obj["text"] = text; fileProps.push(obj); } var sorted = objSort(fileProps); return fileProps; } /************************************ ドキュメントのテキストを取得する ************************************/ function getDocText(id) { var doc = DocumentApp.openById(id); var text = doc.getBody().getText(); return text; } /************************************ 並べ替える ************************************/ function objSort(fileProps) { var ascending = fileProps.sort(asc); return ascending; } /************************************ nameで昇順に並べ替える ************************************/ function asc(a, b){ var A = a.name; var B = b.name; if(A > B){ return 1; }else if(A < B ){ return -1; }else{ return 0; } } |
関連記事
Googleドライブのフォルダ内のドキュメントからテキストを取得したい
Googleドライブ内のファイルをファイル名で並べ替えて取得したい
Googleドライブ内のファイルをファイル名で並べ替えて取得したい
Googleドライブのフォルダの中にいくつかファイルが入っていて
ファイル名を昇順で並び替えて、IDと一緒に配列に入れて
このように取得したい
[
[日本語1, 1e0K3aBV5xxx],
[日本語2, 1OYdKFXVqxxx],
[英語1, 162f0ghDw63xxx],
[英語2, 1xHV36sf4A5xxx]
]
ということを実現したくて書いたコードです
コード.gs/************************************ フォルダ内のファイルを取得して ファイル名で昇順に並べ替えて ファイル名とIDの配列を返す ************************************/ function getFileArray() { var folderId = "ID"; var fileArray = []; var files = getFiles(folderId); for(var i = 0; i < files.length; i++) { var name = files[i]['name']; var id = files[i]['id']; fileArray.push([name, id]); } Logger.log(fileArray); } /************************************ フォルダ内のファイルを取得して 昇順にして返す ************************************/ function getFiles(folderId) { var fileProps = []; var folder = DriveApp.getFolderById(folderId); var contents = folder.getFiles(); while(contents.hasNext()) { var file = contents.next(); var name = file.getName(); var id = file.getId(); var obj = {}; obj["name"] = name; obj["id"] = id; fileProps.push(obj); } var sorted = objSort(fileProps); return fileProps; } /************************************ 並べ替える ************************************/ function objSort(fileProps) { var ascending = fileProps.sort(asc); return ascending; } /************************************ nameで昇順に並べ替える ************************************/ function asc(a, b){ var A = a.name; var B = b.name; if(A > B){ return 1; }else if(A < B ){ return -1; }else{ return 0; } } | 意訳この機能がやること フォルダIDを指定して 配列を用意して フォルダ内のファイルを取得して ファイルの数だけ繰り返す 一つずつファイル名を取得して IDも取得して 配列に追加して ログに出す この機能がやること 配列を用意して ドライブの中のフォルダを取得して フォルダ内のファイルを取得して 次のファイルがなくなるまで 次のファイルを取得して ファイル名を取得して ファイルIDを取得して オブジェクトを用意して nameを入れて idを入れて 配列に追加する 並べ替えて 返す この機能がやること 昇順で並べ替えて 返す この機能がやること 引数の1つ目のnameを取得して 引数の2つ目のnameを取得して AがBより大きければ 1を返して (A を B の後ろに並べる) AがBより小さければ -1を返して (A を B の前に並べる) それ以外なら 0を返す(A と B の並びを変えない) |
関連記事
Googleドライブで指定したフォルダ内にあるファイルidを取得したい
参考
Array.prototype.sort()
Googleドライブのフォルダ内のドキュメントからテキストを取得したい
この記事のコード.gsでやること
Googleドライブで
複数のドキュメントファイルが入ったフォルダがあって
そのフォルダIDを指定して
ドキュメントのテキストを配列で取得する
やらないこと
ファイル名で並べ替えることはここではやらない
並べ替えるコードはこちら
コード.gs
function getDocTexts() { var folderId = 'ID'; var folder = DriveApp.getFolderById(folderId); var ids = getFileIds(folderId); var textArray = []; for(var i = 0; i < ids.length; i++) { var text = getDocText(ids[i]); textArray.push(text); } Logger.log(textArray); } function getDocText(id) { var doc = DocumentApp.openById(id); var text = doc.getBody().getText(); return text; } function getFileIds(folderId) { var ids = []; var folder = DriveApp.getFolderById(folderId); var contents = folder.getFiles(); while(contents.hasNext()) { var file = contents.next(); var id = file.getId(); ids.push(id); } return ids; } |
関連記事
Googleドライブで指定したフォルダ内にあるファイルidを取得したい
Googleドキュメントのテキストをプレーンテキストで取得したい
こういうドキュメントがあって
入力されているテキストをスクリプトで取得してログに出してみる
今回ドキュメントに書いたテキスト
Googleドキュメントのテキストを取得したい。
スクリプトでドキュメントを取得して、プレーンテキストにしてログに出してみる。
コード.gs
function getDocText() { var id = "1oMMKqivcIXq6etXJT-8Jq84RU-5Bt955_b3o9BCdGlQ"; var doc = DocumentApp.openById(id); var body = doc.getBody().getText(); Logger.log(body); } |
意訳この機能がやること ファイルIDを指定して そのドキュメントを取得して テキストを取得して ログに出す |
実行結果
参考
Document Service
https://developers.google.com/apps-script/reference/document/
Class DocumentApp
https://developers.google.com/apps-script/reference/document/document-app
Class Body
https://developers.google.com/apps-script/reference/document/body
getText()
https://developers.google.com/apps-script/reference/document/body#getText()
2019年4月28日日曜日
JSON.stringify()で見やすいログを出したい
こういうオブジェクトがあって
var obj = { 'id': 12345, 'name': 'ooo', 'email': 'ooo@gmail.com', 'city': 'tokyo' }
以下のような3つのログを出してみる
ログ1:普通に出す
{"id":12345,"name":"ooo","email":"ooo@gmail.com","city":"tokyo"}
|
ログ2:スペースで字下げして見やすく出す
{
"id": 12345,
"name": "ooo",
"email": "ooo@gmail.com",
"city": "tokyo"
}
|
ログ3:name, emailだけを出す
{
"name": "ooo",
"email": "ooo@gmail.com"
}
|
ログ1:普通に出すコード.gs
コード.gsfunction myFunction() { var obj = { 'id': 12345, 'name': 'ooo', 'email': 'ooo@gmail.com', 'city': 'tokyo' } var json = JSON.stringify(obj); Logger.log(json); } |
実行結果
ログ2:スペースで字下げして出すコード2.gs
コード2.gs
function myFunction() { var obj = { 'id': 12345, 'name': 'ooo', 'email': 'ooo@gmail.com', 'city': 'tokyo' } var space = 2; var json = JSON.stringify(obj, null, space); Logger.log(json); } |
実行結果
ログ3:name, email をスペースで字下げして出すコード3.gs
コード3.gsfunction myJSON() { var obj = { 'id': 12345, 'name': 'ooo', 'email': 'ooo@gmail.com', 'city': 'tokyo' } var replacer = ['name', 'email']; var space = 2; var json = JSON.stringify(obj, replacer, space); Logger.log(json); } |
実行結果
LiveChatでチャット終了後のタグ更新をwebhookでキャッチしたい
LiveChatで利用できるWebhookのイベントは6つある
- chat starts
- chat ends
- chat changed
- visitor is queued
- ticket is created
- canned response changed
前提
- chat ends はチャットが終わったときにデータを送る
- chat changed はタグが更新されたときにデータを送る
今回欲しいのは
- chat ends 後の chat changed の情報
何があれば取得できそう?
- chat changed で送られたデータの中に「チャットが終わっている」という情報があるといい(例えば chat_ended: true みたいな)
調べてみた結果
- チャット中と終了後にタグを更新したログを見ると ended_timestamp がある
- けれど
- チャット中にタグを更新した時にも値が入る(ここがnullなら使えた)
- チャット終了時に値が更新される
- なので使えない
- チャットが終了していない場合は、chat の中に events が存在しない
- 1の情報は使えないので使えるとしたらこれ
2でやってみる
コード.gs
function doPost(e) { var contents = e.postData.contents console.log(contents); var jobj = JSON.parse(contents); var isEnded = judgeEnded(jobj); if(isEnded) { var chatId = jobj['chat']['id']; var tags = jobj['chat']['tags']; doSomething(chatId, tags); } else { console.log('not ended'); } } function judgeEnded(jobj) { var events = jobj['chat']['events']; if(events === undefined) { return false; } return true; } function doSomething(chatId, tags) { console.log(["ended!", chatId, tags]); } |
意訳この機能がやること 送られてきたデータからcontentsを取得して ログに出す JSONからJavaScriptのオブジェクトに変換する chatが終わっているかどうかtrue/falseで判定する chatが終わっていたら idを取得して tagsを取得して それを使って任意の処理をする chatが終わっていなければ not endedをログに出す この機能がやること 受け取ったデータの中の events を取得する eventsが見つからなければ falseを返す 見つかれば trueを返す この機能がやること 受け取ったchatId, tagsをログに出す |
関連記事
LiveChatのwebhookを使ってみる
LiveChatのwebhookを使ってみる(チャット終了後にタグを更新する)
LiveChatのwebhookを使ってみる(チャット中と終了後にタグを更新したログ)
参考
Building webhook integration
https://developers.livechatinc.com/docs/build-integration/
node-zendeskでカスタムフィールドの値が一致するチケットを更新する(search.query, tickets.updateMany)
この記事では
node-zendeks の search.query と tickets.updateMany で
カスタムフィールドの値(一意)を検索して
一致したチケットを更新するコードを書いて実行するところまで行きます
node-zendesk を使ったことがない場合はまず Example を試しましょう
node-zendeskを使ってみる(Example)
以下3つの記事の合わせ技です
- node-zendeskでカスタムフィールドの値を検索してみる(search.query)
- node-zendeskでタグを更新してみる(tickets.updateMany)
- node-zendeskでカスタムフィールドの値を更新してみる(tickets.update)
STEP
- index.jsを書いて保存する
- index.jsを実行する
STEP1:index.jsを書いて保存します
- username, token, remoteUri は各自の環境に応じたものを入れます
- query の fieldValue: に検索したい値を入れます
- additional_tags, custom_fields の id, value を設定します
index.js var zendesk = require('node-zendesk'); var client = zendesk.createClient({ username: 'Email', token: 'API TOKEN', remoteUri: 'https://NAME.zendesk.com/api/v2' }); /************************************ チケットを探索する *************************************/ var query = "fieldValue:issue-00001"; client.search.query(query, function(err, req, result) { if (err) return handleError(err); console.log(JSON.stringify(result, null, 2, true)); var ticketId = result[0]['id']; console.log(ticketId); updateTicket(ticketId); }); function handleError(err) { console.log(err); process.exit(-1); } /************************************ チケットを更新する *************************************/ var updateTicket = function(ticketId) { client.tickets.updateMany(ticketId, ticket, function(err, req, result) { if (err) return handleError(err); console.log(JSON.stringify(result, null, 2, true)); }); } var ticket = { "ticket": { "additional_tags": ["test4"], "custom_fields": [{ "id": 360018428654, "value": "みかん" }] } }; function handleError(err) { console.log(err); process.exit(-1); } |
STEP2:実行してみる
ターミナル
ターミナル
index.jsが入っているディレクトリ $ node index.js
|
zendeskの対象チケットの情報が、このように返ってきました
MacBook-Air-8:nodezendeskTest NAME$ node index.js
[
{
"url": "https://NAME.zendesk.com/api/v2/tickets/16.json",
"id": 16,
"external_id": null,
"via": {
"channel": "api",
"source": {
"from": {},
"to": {},
"rel": null
}
},
"created_at": "DATETIME",
"updated_at": "DATETIME",
"type": null,
"subject": "テストタイトルです!",
"raw_subject": "テストタイトルです!",
"description": "本文です",
"priority": null,
"status": "open",
"recipient": null,
"requester_id": ID,
"submitter_id": ID,
"assignee_id": ID,
"organization_id": ID,
"group_id": ID,
"collaborator_ids": [],
"follower_ids": [],
"email_cc_ids": [],
"forum_topic_id": null,
"problem_id": null,
"has_incidents": false,
"is_public": true,
"due_at": null,
"tags": [
"test1",
"test2",
"test3",
"test4",
"みかん"
],
"custom_fields": [
{
"id": 360018014474,
"value": "めろん"
},
{
"id": 360018442253,
"value": ""
},
{
"id": 360018495613,
"value": "issue-00001"
},
{
"id": 360017830594,
"value": ""
},
{
"id": 360018428654,
"value": "みかん"
}
],
"satisfaction_rating": null,
"sharing_agreement_ids": [],
"fields": [
{
"id": 360018014474,
"value": "めろん"
},
{
"id": 360018442253,
"value": ""
},
{
"id": 360018495613,
"value": "issue-00001"
},
{
"id": 360017830594,
"value": ""
},
{
"id": 360018428654,
"value": "みかん"
}
],
"followup_ids": [],
"brand_id": ID,
"allow_channelback": false,
"allow_attachments": true,
"result_type": "ticket"
}
]
16
{
"job_status": {
"id": "ID",
"url": "https://NAME.zendesk.com/api/v2/job_statuses/ID.json",
"total": null,
"progress": null,
"status": "queued",
"message": null,
"results": null
}
}
|
関連記事
- node-zendeskでカスタムフィールドの値を検索してみる(search.query)
- node-zendeskでタグを更新してみる(tickets.updateMany)
- node-zendeskでカスタムフィールドの値を更新してみる(tickets.update)
参考
node-zendesk / ReadMe.md / search / query
https://github.com/blakmatrix/node-zendesk#search
How to search tickets by using custom field?
node-zendesk / ReadMe.md / search / query
https://github.com/blakmatrix/node-zendesk#search
search-query.js
https://github.com/blakmatrix/node-zendesk/blob/master/examples/search-query.jsnode-zendeskでカスタムフィールドの値を検索してみる(search.query)
この記事では
node-zendeks の search.query で
カスタムフィールドの値を検索するコードを書いて実行するところまで行きます
node-zendesk を使ったことがない場合はまず Example を試しましょう
node-zendeskを使ってみる(Example)
STEP
- index.jsを書いて保存する
- index.jsを実行する
STEP1:index.jsを書いて保存します
- username, token, remoteUri は各自の環境に応じたものを入れます
- query の fieldValue: に検索したい値を入れます
index.js var zendesk = require('node-zendesk');
var client = zendesk.createClient({
username: 'Email',
token: 'API TOKEN',
remoteUri: 'https://NAME.zendesk.com/api/v2'
});
var query = "fieldValue:issue-00001";//この例では一意の値
client.search.query(query, function(err, req, result) {
if (err) return handleError(err);
console.log(JSON.stringify(result, null, 2, true));
console.log(result[0]['id']); //チケットIDを取得する
});
function handleError(err) {
console.log(err);
process.exit(-1);
}
|
補足
上のコードの例では
以下のように issue-00001 という値を持つカスタムフィールドがあり
その値は他のフィールドには存在しない一意である想定です
console.log(result[0]['id']) のところで0番目のチケットIDを取得しています
fieldValue で指定した値が一意でない場合は、検索結果の1番目以降のチケット情報も配列に返ってきます
特定のカスタムフィールドを指定して、その値のみを検索する機能は現状では存在しないようです
FYI
- http://www.pre-practice.net/2019/04/zendesk-apifieldvalue.html
- https://support.zendesk.com/hc/en-us/community/posts/209222988-How-to-search-tickets-by-using-custom-field-
STEP2:実行してみる
ターミナル
ターミナル
index.jsが入っているディレクトリ $ node index.js
|
zendeskの対象チケットの情報が、このように返ってきました
MacBook-Air-8:nodezendeskTest NAME$ node index.js
[
{
"url": "https://NAME.zendesk.com/api/v2/tickets/16.json",
"id": 16,
"external_id": null,
"via": {
"channel": "api",
"source": {
"from": {},
"to": {},
"rel": null
}
},
"created_at": "DATETIME",
"updated_at": "DATETIME",
"type": null,
"subject": "テストタイトルです!",
"raw_subject": "テストタイトルです!",
"description": "本文です",
"priority": null,
"status": "open",
"recipient": null,
"requester_id": ID,
"submitter_id": ID,
"assignee_id": ID,
"organization_id": ID,
"group_id": ID,
"collaborator_ids": [],
"follower_ids": [],
"email_cc_ids": [],
"forum_topic_id": null,
"problem_id": null,
"has_incidents": false,
"is_public": true,
"due_at": null,
"tags": [
"test1",
"test2",
"test3",
"りんご"
],
"custom_fields": [
{
"id": 360018014474,
"value": "めろん"
},
{
"id": 360018442253,
"value": ""
},
{
"id": 360018495613,
"value": "issue-00001"
},
{
"id": 360017830594,
"value": ""
},
{
"id": 360018428654,
"value": "りんご"
}
],
"satisfaction_rating": null,
"sharing_agreement_ids": [],
"fields": [
{
"id": 360018014474,
"value": "めろん"
},
{
"id": 360018442253,
"value": ""
},
{
"id": 360018495613,
"value": "issue-00001"
},
{
"id": 360017830594,
"value": ""
},
{
"id": 360018428654,
"value": "りんご"
}
],
"followup_ids": [],
"brand_id": ID,
"allow_channelback": false,
"allow_attachments": true,
"result_type": "ticket"
}
]
16
|
一番下の 16 という数字は、検索結果のチケットのIDです
参考
node-zendesk / ReadMe.md / search / query
https://github.com/blakmatrix/node-zendesk#search
How to search tickets by using custom field?
node-zendesk / ReadMe.md / search / query
https://github.com/blakmatrix/node-zendesk#search
search-query.js
https://github.com/blakmatrix/node-zendesk/blob/master/examples/search-query.jsnode-zendeskでチケット情報を取得してみる(tickets.show)
この記事では
node-zendeks の tickets.show で
指定したチケットの情報を表示するコードを書いて実行するところまで行きます
node-zendesk を使ったことがない場合はまず Example を試しましょう
node-zendeskを使ってみる(Example)
STEP
- index.jsを書いて保存する
- index.jsを実行する
STEP1:index.jsを書いて保存します
- username, token, remoteUri は各自の環境に応じたものを入れます
- ticketId は対象のチケットIDを指定します
index.js var zendesk = require('node-zendesk');
var client = zendesk.createClient({
username: 'Email',
token: 'API TOKEN',
remoteUri: 'https://NAME.zendesk.com/api/v2'
});
var ticketId = 16;
client.tickets.show(ticketId, function(err, req, result) {
if (err) return handleError(err);
console.log(JSON.stringify(result, null, 2, true));
});
function handleError(err) {
console.log(err);
process.exit(-1);
}
|
STEP2:実行してみる
ターミナル
index.jsが入っているディレクトリ $ node index.js
|
zendeskの対象チケットの情報が、このように返ってきました
MacBook-Air-8:nodezendeskTest NAME$ node index.js
{
"url": "https://NAME.zendesk.com/api/v2/tickets/16.json",
"id": 16,
"external_id": null,
"via": {
"channel": "api",
"source": {
"from": {},
"to": {},
"rel": null
}
},
"created_at": "DATETIME",
"updated_at": "DATETIME",
"type": null,
"subject": "テストタイトルです!",
"raw_subject": "テストタイトルです!",
"description": "本文です",
"priority": null,
"status": "open",
"recipient": null,
"requester_id": ID,
"submitter_id": ID,
"assignee_id": ID,
"organization_id": 3 ID,
"group_id": ID,
"collaborator_ids": [],
"follower_ids": [],
"email_cc_ids": [],
"forum_topic_id": null,
"problem_id": null,
"has_incidents": false,
"is_public": true,
"due_at": null,
"tags": [
"test1",
"test2",
"test3",
"りんご"
],
"custom_fields": [
{
"id": 360018014474,
"value": "めろん"
},
{
"id": 360018442253,
"value": ""
},
{
"id": 360018495613,
"value": ""
},
{
"id": 360017830594,
"value": ""
},
{
"id": 360018428654,
"value": "りんご"
}
],
"satisfaction_rating": null,
"sharing_agreement_ids": [],
"fields": [
{
"id": 360018014474,
"value": "めろん"
},
{
"id": 360018442253,
"value": ""
},
{
"id": 360018495613,
"value": ""
},
{
"id": 360017830594,
"value": ""
},
{
"id": 360018428654,
"value": "りんご"
}
],
"followup_ids": [],
"brand_id": ID,
"allow_channelback": false,
"allow_attachments": true
}
|
参考
node-zendesk / ReadMe.md / tickets / show
https://github.com/blakmatrix/node-zendesk#tickets
Latest post
Googleドライブ内の音声ファイルをiframe内で再生したい
iframe の src にGoogleドライブ内の音声ファイルを埋め込む例です (今回試した音声ファイルはmp3) Code.gs function doGet () { return HtmlService . createTemplateFromFile ( ...