Slackで祝日対応ボットを作る!

ブログメインビジュアル こんにちは、フロントエンドエンジニアの峯です。


業務でSlackボットを活用しているところは多くあるかと思います。
作ったボットを平日のみに動かしたいのに、「祝日にも出ちゃう…」そんな事ないでしょうか?


今回は、Slackの「Incoming Webhook」アプリと「Google Apps Script」を使って、祝日対応したボットを作ってみました。


目次

Slackで「Incomin Webhook」アプリを有効化

まず、Slackでボット用のチャンネルを作成してくだい。


SlackのAppディレクトリから「Incoming Webhook」を検索してSlackに追加します。 incoming webhookをSlackに追加


チャンネル選択画面が表示されるので、ボットのチャンネルを指定してください。
インテグレーションの追加


Webhook URLが発行されます!(キャプチャでは白塗りしてます。)
このURLを使って、ボットに接続します。どこかに控えておきましょう!
Webhook URL画面

設定画面からオプション設定

こちらの設定画面から、ボットアイコンや名前の設定が可能です。
お好みのものを設定してください! Webhook 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で作成したコードを名前をつけて保存したら、プロジェクト一覧のプロジェクト設定オプションを開いて、「トリガー」を選択します。
トリガーを開く

「トリガーを追加」からトリガーを新しく作ります。
トリガー新規作成



実行する、今回作成した関数を選択します。
後は、実行のタイミングを選んでいきます。時間単位か、日単位、月単位などです。
「イベントのソースを選択」でカレンダーを選択すると、自分のカレンダーに応じて実行させることもできます。
トリガー新規作成


設定が完了したら「保存」してボット完成です!

この記事を書いた人 mine 2019年1月 中途入社のゴルフにはまっているフロントエンドエンジニア
COBOL開発経験がありますが平成生まれです。
TOP