掃除当番などで使えそうなので、平日の特定の時間帯に当番の人へ通知するBOTを作成してみました。
目次
Chatworkで平日の特定の時間帯に当番の人へ通知する方法
Google Apps Script(GAS)のコードです。
特定の時間ぴったりに投稿されるように修正しました。
function notifyDuty() {
var date = new Date();
if(isBusinessDay(date)){
deleteTrigger();
sendChatwork();
}else{
Logger.log('休日です');
}
}
// その日の10時00分にトリガーを設定
function setTrigger() {
var triggerDay = new Date();
triggerDay.setHours(10);
triggerDay.setMinutes(00);
ScriptApp.newTrigger("Touban").timeBased().at(triggerDay).create();
}
// その日のトリガーを削除する関数(消さないと残る)
function deleteTrigger() {
var triggers = ScriptApp.getProjectTriggers();
for(var i=0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() == "Touban") {
ScriptApp.deleteTrigger(triggers[i]);
}
}
}
//営業日の判断をする関数
function isBusinessDay(date){
if (date.getDay() == 0 || date.getDay() == 6) {
return false;
}
var calJa = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com');
if(calJa.getEventsForDay(date).length > 0){
return false;
}
return true;
}
// chatworkにブログ当番関連の情報を送信する
function sendChatwork(){
var obj = new Object();
// 必要な情報をセットする
obj = setInfos(obj);
// chatworkへメッセージを送信
sendMessage(obj);
// chatworkへタスクを追加
addTask(obj);
}
// 必要な情報をセットする
function setInfos(obj){
// APIトークン
obj.token = 'ChatWorkのAPIトークン';
// ルームID
obj.roomId = 'ルームID';
// タスク内容
obj.task = 'タスク名';
// 期限
var date = new Date();
date = new Date(date.setDate(date.getDate()+4));
obj.limit = date.getTime()/1000;
// スプレットシートから情報を取得
// 宛先のシート情報を取得
var mySheet=SpreadsheetApp.openById("スプレッドシートのID");
// シートの開始行番号、開始列番号を取得
var startRow = 2;
var startCol = 1;
// シートの最終行番号、最終列番号を取得
var endRow = mySheet.getLastRow() - 1; // 最初の行は不要なためマイナス1とする
var endCol = mySheet.getLastColumn();
// シートの範囲を指定して情報を取得
var sheetdata = mySheet.getSheetValues(startRow, startCol, endRow, endCol);
var dataCount = sheetdata.length;
//Logger.log('sheetdata:'+sheetdata);
// 送信内容のシート情報を取得
var subSheet = mySheet.getSheetByName("シート2");
var submitContent = subSheet.getRange(2, 1).getValue();
// ブログ担当者を変数に抜出し
var strName = '';
for(var i = 0; i < dataCount; i++){
if(sheetdata[i][2] == 1.0){
strName = '"'+ sheetdata[i][0] + '"';
}
}
for(var i = 0; i < dataCount; i++){
// To
if(sheetdata[i][2] == 1.0){
obj.toIds = sheetdata[i][1];
}
// ブログ当番の順番を更新する
var y = i + 2;
if(sheetdata[i][2] == 1.0){
mySheet.getRange("C"+ y).setValue(dataCount);
} else {
var setNumber = sheetdata[i][2] - 1.0;
mySheet.getRange("C"+ y).setValue(setNumber);
}
}
// ブログ当番の名前を置換して挿入
var member = getMember(obj);
obj.body = "[To:" + obj.toIds.toFixed() + "]"+ member + "さん\n";
obj.body += submitContent.replace(/{NAME1}/,strName);
return obj;
}
// chatworkのルームからブログ当番の名前を取得
function getMember(obj){
var params = {
headers : {"X-ChatWorkToken" : obj.token},
method : "get",
};
var url = "https://api.chatwork.com/v2/rooms/" + obj.roomId + "/members"
var response = UrlFetchApp.fetch(url, params);
// jsonをテキスト形式に変換
var json=JSON.parse(response.getContentText());
for(var i = 0; i < json.length; i++){
if(json[i]['account_id'].toFixed() == obj.toIds.toFixed()){
obj.name = json[i]['name'];
}
}
return obj.name;
}
// chatworkへブログの当番のメッセージを通知する
function sendMessage(obj){
var params = {
headers : {"X-ChatWorkToken" : obj.token},
method : "post",
payload : {
body : obj.body
}
};
var url = "https://api.chatwork.com/v2/rooms/" + obj.roomId + "/messages";
UrlFetchApp.fetch(url, params);
}
// chatworkへブログの当番のタスクを追加する
function addTask(obj){
var params = {
headers : {"X-ChatWorkToken" : obj.token},
method : 'post',
payload : {
body : obj.task,
limit : obj.limit.toFixed(),
to_ids : obj.toIds.toFixed()
}
};
var url = "https://api.chatwork.com/v2/rooms/" + obj.roomId + "/tasks";
UrlFetchApp.fetch(url, params);
}
備考
GASの基本操作はこちらの記事を参考にしてください。
Chatwork│GASを使った投稿方法 4選
Chatworkに予約投稿機能はまだありません。 ですのでチャットワークAPIとGAS(Google Apps Script)を使っての予約投稿を試してみました。 【でチャットワークに予約投…
- スプレッドシートを作成
- シート1に名前とChatworkのID、通知順番を入力
- シート2に送信内容を記述
- コードにAPIトークン、スプレッドシートのID、ルームID、タスク名を入力
- Google Apps Script(GAS)を開いて、コードをペースト、notifyDuty()を実行してちゃんと投稿されるかテスト
- うまく行っていたら、編集>現在のプロジェクトのトリガーから、setTriggerのコマンドを通知したい時間帯の少し前の時間に指定すればすればOK
こんな感じで通知されます。
参考
2つの参考サイトを組み合わせただけです。
株式会社まめぞうデザイン| 徳島と大阪と台湾のWeb制作・システム開発・オフショア開発会社
徳島県美波町に本社のサテライトオフィスがあり大阪、台湾と3拠点でWEBサイト制作、コンテンツ制作、システム開発、プロモーションを行う会社です。コーヒースタンドやアパ…
ずっと使える!Google Apps Scriptで営業日を判定する関数の作り方
Google Apps Scriptで業務系のツールを作る場合、けっこうな頻度で営業日かどうかの判定が必要になります。今回は、Googleの日本の祝日カレンダーを利用した営業日を判定す…
まとめ
平日(営業日に)、何かしら通知できる仕組みはとても便利なので、今後もこれをベースに改良していく予定。