こんにちは。チョコレート大好き斉藤です。そうですね。バレンタインですね。
高校の頃、自分でチョコレートのロールケーキなんか作ってたのは良き思い出です。
何はともあれ、鼻血に注意しましょう。
前回は「Post Reminders ~~~ an event」の設定の部分で予定が最高でも2日前までしか通知できなくてちょっと不便だなぁということでした。
なんかいい方法はないかと色々調べていたところ、良さげなサイトがあったので参考にさせていただきました。
まずSlackで用意するのはIncoming WebHooksです。
こちらのサイトを参考にさせていただきました。
Incoming WebHooksとはなんなのかというと、
Slackが発行するURLへPOSTするとSlackにメッセージが投稿される (チャンネル・ユーザ名・アイコン画像の指定可能)というもので、
簡単にいうとその発行したURLを使って外部のシステムからSlackに投稿できるみたいな感じです。
前回でもやったように「Apps & integrations」からsearchしましょう。
Add Configurationして投稿したいchannelを選択してAddしたらURLが発行されます。
これを使っていきます。
次にGoogle Apps Scriptライブラリを利用します。
スプレッドシートのツールからスクリプトエディタを開き、
そこにプログラムを実装していきます。
ここで必要なのはpostしたいgoogleカレンダーのIDです。
これはgoogleカレンダーを開いて、左側にマイカレンダーとあるのでそこにある各々の項目の右側の▼マークをクリックして、カレンダー設定を選択します。
そこのカレンダーのアドレスというところにあるのがgoogleカレンダーのIDです。
これを使います。
今回はSSLの更新用のBotを作りました。
googleカレンダーの内容を2週間前にSlackにpostするといったものです。
var postUrl = 'https://hooks.slack.com/services/〜';(先ほど発行したURL)
var postChannel = '#channel名';
var username = 'SSL更新お知らせ';
var days = 14; // 何日前からリマインドするか?
function postToSlack() {
var calendarId = '〜@group.calendar.google.com';(googleカレンダーのID)
var calendar = CalendarApp.getCalendarById(calendarId);
var targetDate = new Date();
targetDate.setDate(targetDate.getDate()+days);
var events = calendar.getEventsForDay(targetDate);
var count = events.length;
if(events){
for(var i = 0; i < count; i++){
var title = events[i].getTitle();
var start = events[i].getStartTime();
var start_month = start.getMonth()+1;
var WeekChars = [ "日", "月", "火", "水", "木", "金", "土" ];
var start_day = WeekChars[start.getDay()]; // 曜日
var start_date = start.getDate(); //日
var message = '次の' + title + 'は' + start_month.toString() + '月' +
start_date.toString() + '日(' + start_day + ')です。';
message = message + 'よろしくお願いします。';
sendHttpPost(message, username);
}
}
}
function sendHttpPost(message, username){
var jsonData =
{
"channel" : postChannel,
"username" : username,
"text" : message,
"link_names": 1
};
var payload = JSON.stringify(jsonData);
var options =
{
"method" : "post",
"contentType" : "application/json",
"payload" : payload
};
UrlFetchApp.fetch(postUrl, options);
}
function pad(n){return n<10 ? '0'+n : n}
あとはリソースの現在のプロジェクトのトリガーで実行する時間を設定すればOKです。
これでやれば何日前とか全部好きなように決められるのでもう少し自由度が増すと思います。
以上!!!