##やりたいこと
ChatWorkのグループチャットが多くなってきて返信漏れが出てきたので返信していないものをリスト化したい
おおまかな流れ
- gasでChatWorkから1週間以内に更新があったグループチャットを取得する※
- 取得したグループチャットの最後に送信されたチャット情報を取得する
- チャット情報から必要な情報を取り出す
- 取り出した情報をスプレッドシートにセットする
※ChatWorkのAPIの制限を考慮して1週間にした
コード
sample.js
function notRepliedCheck() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
const lastRow = sheet.getLastRow();
//フィルターがセットされていれば削除する
if (sheet.getFilter() !== null) {
sheet.getFilter().remove();
}
//スプレッドシートの値をクリアする
sheet.getRange(2, 1, lastRow, 6).clear();
// APIトークンをプロパティストアから取得
const token = PropertiesService.getScriptProperties().getProperty('CW_TOKEN');
const now = new Date();
// 1週間前のタイムスタンプを変数にセット
const oneWeekAgo = Math.floor(new Date(now - (1000 * 60 * 60 * 168) ) / 1000);
const headers = {
'X-ChatWorkToken': token
};
const options = {
"headers": headers,
"method": "get",
};
const url = "https://api.chatwork.com/v2/rooms";
// グループチャットを全件取得
const res = UrlFetchApp.fetch(url, options);
const resArr = JSON.parse(res.getContentText());
let dataArr = [];
// 1週間以内に更新があったグループチャットのグループチャットの名前とルームIDをdataArrに格納
for (let i = 0; i < resArr.length; i++) {
if (resArr[i].last_update_time > oneWeekAgo) {
dataArr.push([resArr[i].name, resArr[i].room_id]);
}
}
// dataArrに含まれるグループチャットの最終メッセージを取得
for (let j = 0; j < dataArr.length; j++) {
let messages = UrlFetchApp.fetch(url + "/" + dataArr[j][1] + "/messages?force=1", options);
messages = JSON.parse(messages.getContentText());
let lsatMessageIndex = messages.length - 1;
let sendTime = messages[lsatMessageIndex].send_time * 1000;
sendTime = new Date(sendTime);
// 最終メッセージからスプレッドシートに書き出したい情報をdataArrに追加する
dataArr[j].push(messages[lsatMessageIndex].account.name);
dataArr[j].push(Utilities.formatDate(sendTime, 'Asia/Tokyo', 'yyyy/MM/dd'));
dataArr[j].push(messages[lsatMessageIndex].body);
dataArr[j][1] = "https://www.chatwork.com/#!rid" + dataArr[j][1];
}
sheet.getRange(2, 1, dataArr.length, 6).setValues(dataArr);
//フィルターをセットする
sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).createFilter();
}