2022/04/08に更新

【GASで便利に】本日の予定をまとめてSlackに通知する

SlackAPI

Googleカレンダーの今日の予定をSlackに通知してくれるGoogle Apps Scriptです。1日分の予定は朝にまとめて知りたいですよね。SlackのIncoming Webhookを使用しています。

こんな悩みを解決します


  • 当日の予定を毎朝確認しているが、Googleカレンダーを見に行くのは面倒なので自動化したい
  • 予定の10分前に通知されても手遅れな場合があるので、当日朝にスケジュールをまとめて確認したい

用意するもの


GoogleカレンダーとSlackを使用していることが前提のアプリです。
スプレッドシートのコンテナバインド型スクリプトとして書いていますが、スタンドアロン型でも問題なく動くはずです。

このスクリプトで出来ること


  • Googleカレンダーの当日の予定をまとめてSlackに通知することができます。
  • 通知する時間はトリガーに依存するので希望の時間、頻度で送信可能です。

使い方


1.事前準備

Slackと連携するために、「Incoming Webhook」を使用します。
GASからSlackに投稿するための「入り口」を作ります。
詳しい手順はこちらをご確認ください。

https://myfunc.jp/items/00066/index.html

以下のようなWebhook URLが発行されたら完了です。
なお、Slackの有償プランを契約している場合はワークフロービルダーのIncoming Webhookでもよいかもしれません(手元に環境がないので推測です)。

発行されたWebhook URLと、予定を通知したいカレンダーのメールアドレスをスクリプトの「事前準備」部分にセットしてください。
自分の予定を送るなら自分のGmailアドレスをセットすればOKです。

2.トリガーの設定

手動で実行することもできますが、毎朝自動的に実行してほしいのでトリガーをセットします。
毎朝8時〜9時の間に届くよう、以下のようにしてみました。

  • 実行する関数: send_today_schedule_to_slack
  • 実行するデプロイ: HEAD
  • イベントのソース: 時間主導型
  • 時間ベースのトリガーのタイプ: 日付ベースのタイマー
  • 時刻を選択: 8時〜9時

3.動作の確認

カレンダーに適当に予定を入れてみました。終日の予定と時間指定の予定などです。

トリガーの発動を待つか、手動で実行すると・・・予定がSlackに届きました!

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00065/index.html
 */

function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('今日の予定をSlackに通知する', 'send_today_schedule_to_slack');

  // メニューを画面に追加する
  menu.addToUi();
}

function send_today_schedule_to_slack() {

  // ######### 事前設定ここから ########

  // カレンダーを取得するメールアドレスを入力してください
  const mail_address = '*************@gmail.com';

  // SlackのWebhook URLを入力してください
  const slack_webhook_url = 'https://hooks.slack.com/services/*****************';

  // ######### 事前設定ここまで ########


  // Googleカレンダーを取得する
  const calendar = CalendarApp.getCalendarById(mail_address);

  // カレンダー取得期間を設定する。実行した日の0:00〜23:59を対象とする
  const date_start = new Date();
  date_start.setHours(0);
  date_start.setMinutes(0);
  date_start.setSeconds(0);

  const date_end = new Date();
  date_end.setHours(23);
  date_end.setMinutes(59);
  date_end.setSeconds(59);

  // カレンダーからイベントを取得する
  const events = calendar.getEvents(date_start, date_end);

  // イベントがない日は何もせずにスクリプトを終了する
  if (events.length == 0) {
    return;
  }

  // 送信するメッセージを格納する変数
  let message = [];

  // カレンダーイベントを1件ずつループ
  for (let i = 0; i < events.length; i++) {

    // メッセージに使う値を取得する
    let title = events[i].getTitle(); //タイトル
    let time_start = events[i].getStartTime(); //開始時間
    time_start = Utilities.formatDate(time_start, 'Asia/Tokyo', 'HH:mm'); //日付のフォーマットを整形
    let location = events[i].getLocation(); //場所

    // 場所情報が空欄の場合は未定の文字列を入れる
    if (location == '') {
      location = '場所未定';
    }

    // 終日の予定の場合は時間の代わりに「終日」とする
    if (events[i].isAllDayEvent()) {
      time_start = '終日';
    }

    // 1行に1つのイベント情報をまとめる
    message.push(time_start + '〜 ' + title + ' @' + location);

  }

  // イベント情報を改行で連結し、Slack投稿用テキストとする
  const text = message.join('\n');

  // SlackのWebhook URLに投稿するデータをまとめる
  const json =
  {
    'username': '本日の予定をお知らせします',
    'icon_emoji': ':calendar:',
    'text': text
  };

  // SlackのWebhook URLに送信するデータをJSONに変換する
  const payload = JSON.stringify(json);

  // UrlFetchAppで使用するメソッドやコンテントタイプを指定
  const options =
  {
    'method': 'post',
    'contentType': 'application/json',
    'payload': payload
  };

  // Slackに送信
  UrlFetchApp.fetch(slack_webhook_url, options);

}

関連するアプリ


【GASで時短】指定した月のカレンダーを生成する

年と月を指定すると、セルにカレンダーが出現するGoogle Apps Scriptです。カレンダーを入れたくなって調べてみたら標準機能にはなく、数式でやるにも結構面倒な感じだったので一発で作ってくれるGASを書いてみました。想像の3倍は面倒でした・・・。

【GASで時短】指定した年の12ヶ月分のカレンダーを生成する

指定した年の12ヶ月分のカレンダーを生成してくれるGoogle Apps Scriptです。前回作成した「指定した月のカレンダーを生成する」スクリプトをベースに、1年分出力するように変更してみました。横3 ✕ 縦4の形式で生成されます。

【GASで時短】様々な国の「国民の祝日」を取得する

Googleが用意してくれている祝日カレンダーをもとに、1年間の祝日をスプレッドシートに出力するGoogle Apps Scriptです。 祝日は年によって変わったりするので確認が面倒なのと、国外との取引がある時にその国の祝日がわかれば便利だなと思い作成しました。

【GASで時短】カレンダーの予定をスプレッドシートに出力する

Google カレンダーの予定を、スプレッドシートにまとめて出力するGoogle Apps Scriptです。カレンダーIDはダイアログボックスで入力できます。

【GASで時短】カレンダーの予定を一括で作成する

スプレッドシートに入力した値を元に、カレンダーの予定をまとめて作成することができるGoogle Apps Scriptです。

【GASで時短】予定をすべて非公開にする

Googleカレンダーの予定を全て非公開にするGoogle Apps Scriptです。組織内で使っているとカレンダー自体は共有されていますので、隠したい予定は個別に非公開化する必要があります。誤って公開している予定が大量にある時にどうぞ。

【GAS - Slack連携】Incoming Webhookの設定をする

GASからSlackに投稿する時に使用する「Incoming Webhook」の設定方法について解説します。コピペで使える投稿用のサンプルコードもあります。

【GASで時短】シートの不要な行を削除する

スプレッドシートの不要な行を削除するGoogle Apps Scriptです。行がいつの間にか数万行に増えてしまっている・・・よくありますよね。

【GASで保全】Slackのデータをリアルタイムでスプレッドシートにバックアップする

Slackに投稿したメッセージをほぼリアルタイムにGoogle スプレッドシートにバックアップするGoogle Apps Scriptです。無償版Slackはデータの保存期間が90日に短縮されるので作ってみました。

【GASで便利に】特定のメールが来たらSlackに通知する

Gmailに届いたメールから特定の件名のものをSlackに通知するGoogle Apps Scriptです。Slackが浸透するほどメールをあまり見なくなり、大事なメールを見逃すことが増えてきたので作りました。

タグ一覧

最新のアプリ

人気のアプリ

ページトップに戻る
myfunc.jp