10
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【全員必ず】メンバーの誕生日をSlackに通知する【祝ってやる】

Last updated at Posted at 2020-05-06

#これは
Slackワークスペース内のメンバーが誕生日を迎えると、通知が飛ぶようにしました。
スクリーンショット 2020-05-06 13.06.16.png

#きっかけ
中の人はビジネスサイドですが、思いがけず開発部の方からUdemyの講座をいただいたので、そちらの内容を応用して何か作ってみようと思いました。

#使ったもの

  • Slack Incoming Webhook
  • Googleカレンダー
  • Google Apps Script(GAS)

#やったこと
##Slack Incoming Webhook
Slackプロフィール>「その他管理項目」>「ワークスペースをカスタマイズ」

「ワークスペースをカスタマイズ」>「App管理」
スクリーンショット 2020-05-06 14.22.31.png

「App管理」>「カスタムインテグレーション」にIncomong Webhookを追加
スクリーンショット 2020-05-06 14.26.19.png

「カスタムインテグレーション」>「インテグレーションの設定」のWebhook URLを後ほどGASに埋め込みます。
「インテグレーションの設定」では、通知される時の名前やアイコンも編集することができます。

##Googleカレンダー
誕生日用のカレンダーを作成しました。こちらの「設定と共有」を開くと、
スクリーンショット 2020-05-06 14.38.07.png

カレンダーIDが確認できます。こちらも後ほどGASに埋め込みます。
カレンダーID.png

##GAS
###カレンダー情報の取得
ここでカレンダーIDを指定することにより、特定のカレンダー情報を取得します。

function notifySlack() {
  //お誕生日カレンダー情報の取得
  const CALENDAR_ID = 'hogehogehogehogehogehogek@group.calendar.google.com';
  var Calendar = CalendarApp.getCalendarById(CALENDAR_ID);

###取得する情報の詳細

  
  //今日の日付
  var startDate = new Date();
  //「誕生日」を検索文字列に指定
  var optionsforGas = {
    search: '誕生日'    
  }
  var BirthdayEvents = Calendar.getEventsForDay(startDate,optionsforGas);
  var url = 'https://hooks.slack.com/services/hoge/hogehogehogehogehogehoge'
  var title = '';
  for(var i in BirthdayEvents) {
    title = BirthdayEvents[i].getTitle();
  }

###通知の設定
誕生日のメンバーがいる日だけに通知が飛ぶように条件分岐させる(最初はこれをやっていなかったので、「今日は」だけの虚無通知が飛ぶ事態が起きていました)。


if(BirthdayEvents.length != 0){  
  var text = '今日は' 
 
  //Incoming webhookからslackに送信する値
  var payload = {
    'username': '***',
    'text': text += title,
    'channel':'#develop'
  };
  
  var optionsforSlack = {
    'method': 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(payload)
  };
  
   UrlFetchApp.fetch(url, optionsforSlack);
 }
}  

###トリガーを設定する
GAS>編集>「現在のプロジェクトのトリガー」を選択
スクリーンショット 2020-05-06 14.54.59.png

「トリガーを追加」をクリック

イベントソースは、ひとまず「時間主導型」にしましたが、プルダウンで「カレンダーから」も選べるのでそっちでもいいはず(違いはよく分かっていない)。

#学んだこと

ここ、最初は以下のように記述していました。
これだと、誕生日の人がいない場合でも変数が動いてしまうから変数ごとifで囲った方が無駄な処理がなくて良い(らしい)。


  var text = '今日は' 
 
  //Incoming webhookからslackに送信する値
  var payload = {
    'username': '***',
    'text': text += title,
    'channel':'#develop'
  };
  
  var optionsforSlack = {
    'method': 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(payload)
  };
  

   if(BirthdayEvents.length != 0){
   UrlFetchApp.fetch(url, options);
   }

#参考資料

いろんな人に教わりながらとりあえず手を動かしたみたいなところがあるので、また頭を整理して後日追記する予定です。

10
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?