チケット情報をGoogleスプレッドシートに出力する(GASコード付き)
はじめに
この記事では、Google Apps Script(GAS)を使用して、kickflowで直近1週間に申請されたチケット情報をGoogleスプレッドシートに自動で取得する方法をご紹介します。
これにより、チケットの申請状況を簡単に把握したり、データ分析ができます。
利用方法
GASスクリプトの設定方法
- Googleスプレッドシートを作成し、シート名を「チケット情報」にします
- Googleスプレッドシートで「拡張機能」>「Apps Script」を選択します
- GASのエディタが開いたら、以下のコードをコピー&ペーストします
/**
* @OnlyCurrentDoc
*/
// kickflow APIのエンドポイント
const KICKFLOW_API_BASE_URL = 'https://api.kickflow.com';
// ここにあなたのPersonal Access Tokenを設定してください
// kickflowの管理画面から発行できます
const KICKFLOW_ACCESS_TOKEN = '*****';
// *** ここにあなたのkickflowテナントIDを設定してください ***
// 例: あなたのkickflowのURLが https://yourcompany.kickflow.com の場合、'yourcompany' を設定します。
const KICKFLOW_TENANT_ID = '*****'; // ←ここをあなたのテナント名に修正してください
// チケット情報を書き込むスプレッドシートのシート名
const SPREADSHEET_SHEET_NAME = 'チケット情報';
/**
* 直近1週間に申請されたkickflowのチケット情報を取得し、スプレッドシートに書き込みます。
*/
function getRecentKickflowTickets() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SPREADSHEET_SHEET_NAME);
if (!sheet) {
Logger.log(`シート「${SPREADSHEET_SHEET_NAME}」が見つかりません。シート名を確認してください。`);
Browser.msgBox('エラー', `シート「${SPREADSHEET_SHEET_NAME}」が見つかりません。シート名を確認してください。`, Browser.Buttons.OK);
return;
}
// ヘッダー行をクリアして設定
sheet.clearContents();
sheet.appendRow(['チケットタイトル', 'チケットURL', '申請日時']);
// 直近1週間の開始日時を計算
const now = new Date();
const oneWeekAgo = new Date(now.setDate(now.getDate() - 7));
const createdAtStart = oneWeekAgo.toISOString(); // ISO 8601形式 (YYYY-MM-DDTHH:mm:ss.sssZ)
let allTickets = [];
let page = 1;
const perPage = 100; // 1ページあたりの取得件数(最大100)
// 指定したいステータスを配列で定義
const statuses = ['in_progress', 'completed', 'rejected', 'denied', 'archived'];
Logger.log(`直近1週間の開始日時: ${createdAtStart}`);
while (true) {
// statusパラメータをURLエンコードして繰り返し追加
let statusParams = statuses.map(s => `status[]=${encodeURIComponent(s)}`).join('&');
const url = `${KICKFLOW_API_BASE_URL}/v1/tickets?page=${page}&perPage=${perPage}&openedAtStart=${encodeURIComponent(createdAtStart)}&${statusParams}`;
const options = {
'method': 'GET',
'headers': {
'Authorization': `Bearer ${KICKFLOW_ACCESS_TOKEN}`,
'Content-Type': 'application/json',
},
'muteHttpExceptions': true // エラー時に例外を発生させない
};
Logger.log(`Fetching URL: ${url}`);
const response = UrlFetchApp.fetch(url, options);
const responseCode = response.getResponseCode();
const responseBody = response.getContentText();
if (responseCode === 200) {
const tickets = JSON.parse(responseBody);
Logger.log(`Page ${page}: Fetched ${tickets.length} tickets`);
if (tickets.length === 0) {
break; // チケットがこれ以上ない場合、ループを終了
}
allTickets = allTickets.concat(tickets);
page++;
} else {
Logger.log(`APIエラー: ステータスコード ${responseCode}, レスポンス: ${responseBody}`);
Browser.msgBox('APIエラー', `チケット情報の取得中にエラーが発生しました。\nステータスコード: ${responseCode}\n詳細: ${responseBody}`, Browser.Buttons.OK);
return;
}
// APIレート制限に配慮し、少し待機する
Utilities.sleep(500); // 500ミリ秒待機
}
Logger.log(`合計取得チケット数: ${allTickets.length}`);
if (allTickets.length === 0) {
sheet.appendRow(['直近1週間に申請されたチケットはありません。']);
Logger.log('直近1週間に申請されたチケットはありません。');
return;
}
// スプレッドシートにチケット情報を書き込む
const data = [];
allTickets.forEach(ticket => {
const ticketUrl = `https://${KICKFLOW_TENANT_ID}.kickflow.com/dashboard/tickets/${ticket.id}`; // kickflowのチケットURLの形式
data.push([ticket.title || 'タイトルなし', ticketUrl, ticket.openedAt ? new Date(ticket.openedAt).toLocaleString() : 'N/A']);
});
if (data.length > 0) {
sheet.getRange(sheet.getLastRow() + 1, 1, data.length, data[0].length).setValues(data);
Logger.log('チケット情報がスプレッドシートに書き込まれました。');
} else {
Logger.log('書き込むデータがありませんでした。');
}
Browser.msgBox('完了', '直近1週間のチケット情報がスプレッドシートに書き込まれました。', Browser.Buttons.OK);
}
/**
* GASのメニューにカスタムメニューを追加します。
*/
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('kickflow連携')
.addItem('直近1週間のチケットを取得', 'getRecentKickflowTickets')
.addToUi();
}
- コード内の 'KICKFLOW_ACCESS_TOKEN' の部分を、ご自身のkickflowのアクセストークンに書き換えます
- コード内の 'KICKFLOW_TENANT_ID' の部分を、自社のテナントIDに書き換えます
- ファイルを保存します(画面上部のフロッピーディスクアイコンをクリック)
アクセストークンの取得方法
REST-APIを使用するをご参照ください。
スクリプトの実行方法
- スクリプトを保存した後、Googleスプレッドシートに戻ります
- 画面上部に「kickflow連携」というメニューが追加されていることを確認します
- 「kickflow連携」>「直近1週間のチケットを取得」をクリックします
- 初回実行時は権限の承認が必要なため、画面の指示に従って承認します。
- スクリプトが実行され、直近1週間のチケット情報がスプレッドシートに表示されます
取得できる情報
このスクリプトで取得できる情報は以下の通りです
- チケットタイトル
- チケットURL(クリックするとkickflowのチケット詳細画面に移動できます)
- 申請日時
注意事項
- アクセストークンは第三者に漏れないよう、適切に管理してください
- 大量のチケットがある場合、APIの呼び出し回数制限に達する可能性があります
- スクリプトを実行すると、「チケット情報」シートの既存のデータはすべて消去されます
- チケット情報の取得には、適切なAPI権限が必要です
補足
このスクリプトは、以下のようなユースケースで活用できます:
- 週次のチケット申請状況の確認
- チケットデータの分析や集計
- チケット申請傾向の把握
- 必要に応じて、コード内の statuses 配列を編集することで、特定のステータスのチケットのみを取得できます。また、openedAtStart パラメータを変更することで、取得期間を調整も可能です。
より詳細な情報や、他のkickflow API活用方法については、kickflow開発者ドキュメントをご参照ください。