こんにちは、フロントエンドエンジニアの峯です。
業務でSlackボットを活用しているところは多くあるかと思います。
作ったボットを平日のみに動かしたいのに、「祝日にも出ちゃう…」そんな事ないでしょうか?
今回は、Slackの「Incoming Webhook」アプリと「Google Apps Script」を使って、祝日対応したボットを作ってみました。
目次
Slackで「Incomin Webhook」アプリを有効化
まず、Slackでボット用のチャンネルを作成してくだい。
SlackのAppディレクトリから「Incoming Webhook」を検索してSlackに追加します。
チャンネル選択画面が表示されるので、ボットのチャンネルを指定してください。
Webhook URLが発行されます!(キャプチャでは白塗りしてます。)
このURLを使って、ボットに接続します。どこかに控えておきましょう!
設定画面からオプション設定
こちらの設定画面から、ボットアイコンや名前の設定が可能です。
お好みのものを設定してください!
GASでボットの設定
GAS(Google Appps Script)を使う事で「いつ、何時」など決まった時間に処理させる事ができます!
「新しいプロジェクト」を作成してプログラムを書いていきます。
プログラムの中で先ほど生成したWebHook URLを読み込んでSlackボットと接続を行います。
月曜日から金曜日の間、ボットを送信するプログラムです。
function overtime(){
// Webhook URL
var WebhookUrl =
"https://hooks.slack.com/XXX..XX/..../..../XXXXX";
var date = new Date();
// 曜日を取得
var day = date.getDay();
// 月曜日から金曜日の間実行する
if ( 0 < day && day < 6 ) {
// Slackに送信する内容
var payload = {
username: "ボットの名前",
text: "投稿する内容を記述します",
link_names: 1
};
// Slackに送信
UrlFetchApp.fetch(WebhookUrl, {
method: "POST",
payload: JSON.stringify(payload)
});
}
}
上記のでは、月曜日が祝日の場合でもボットが動いてしまいます。
そこで、GoogleカレンダーのAPIを使います!
Googleカレンダー「日本の祝日」
Googleカレンダーにはいろいろ用意されていて、こいつが優秀です。
今回は、祝日を取得したいので、Googleカレンダー「日本の祝日」を使うことにしました。
以下のプログラムが、日本の祝日からイベント取得して、予定が設定してある場合(祝日)は処理をしないようにしています。
function overtime(){
function overtime(){
// Webhook URL
var WebhookUrl =
"https://hooks.slack.com/XXX..XX/..../..../XXXXX";
var date = new Date();
// 曜日を取得
var day = date.getDay();
// Googleカレンダーより日本の祝日を取得
var calendars = CalendarApp.getCalendarsByName("日本の祝日");
var holidays = calendars[0];
var events = holidays.getEventsForDay(date);
// 月曜日から金曜日かつ祝日イベントが存在しない場合処理
if ( 0 < day && day < 6 && events.length === 0 ) {
// Slackに送信する内容
var payload = {
username: "ボットの名前",
text: "投稿する内容を記述します",
link_names: 1
};
// Slackに送信
UrlFetchApp.fetch(WebhookUrl, {
method: "POST",
payload: JSON.stringify(payload)
});
}
}
優雅な祝日にボットを受け取る必要がなくなりました。
さすがGoogle先生です。
トリガーの設定
最後に、トリガーの設定を行います。
作成したボットの実行スケジュールを設定します。
GASで作成したコードを名前をつけて保存したら、プロジェクト一覧のプロジェクト設定オプションを開いて、「トリガー」を選択します。
「トリガーを追加」からトリガーを新しく作ります。
実行する、今回作成した関数を選択します。
後は、実行のタイミングを選んでいきます。時間単位か、日単位、月単位などです。
「イベントのソースを選択」でカレンダーを選択すると、自分のカレンダーに応じて実行させることもできます。
設定が完了したら「保存」してボット完成です!