Googleカレンダーの今日の予定をSlackに通知してくれるGoogle Apps Scriptです。1日分の予定は朝にまとめて知りたいですよね。SlackのIncoming Webhookを使用しています。
GoogleカレンダーとSlackを使用していることが前提のアプリです。
スプレッドシートのコンテナバインド型スクリプトとして書いていますが、スタンドアロン型でも問題なく動くはずです。
Slackと連携するために、「Incoming Webhook」を使用します。
GASからSlackに投稿するための「入り口」を作ります。
詳しい手順はこちらをご確認ください。
https://myfunc.jp/items/00066/index.html
以下のようなWebhook URLが発行されたら完了です。
なお、Slackの有償プランを契約している場合はワークフロービルダーのIncoming Webhookでもよいかもしれません(手元に環境がないので推測です)。
発行されたWebhook URLと、予定を通知したいカレンダーのメールアドレスをスクリプトの「事前準備」部分にセットしてください。
自分の予定を送るなら自分のGmailアドレスをセットすればOKです。
手動で実行することもできますが、毎朝自動的に実行してほしいのでトリガーをセットします。
毎朝8時〜9時の間に届くよう、以下のようにしてみました。
カレンダーに適当に予定を入れてみました。終日の予定と時間指定の予定などです。
トリガーの発動を待つか、手動で実行すると・・・予定が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);
}
年と月を指定すると、セルにカレンダーが出現するGoogle Apps Scriptです。カレンダーを入れたくなって調べてみたら標準機能にはなく、数式でやるにも結構面倒な感じだったので一発で作ってくれるGASを書いてみました。想像の3倍は面倒でした・・・。
指定した年の12ヶ月分のカレンダーを生成してくれるGoogle Apps Scriptです。前回作成した「指定した月のカレンダーを生成する」スクリプトをベースに、1年分出力するように変更してみました。横3 ✕ 縦4の形式で生成されます。
Googleが用意してくれている祝日カレンダーをもとに、1年間の祝日をスプレッドシートに出力するGoogle Apps Scriptです。 祝日は年によって変わったりするので確認が面倒なのと、国外との取引がある時にその国の祝日がわかれば便利だなと思い作成しました。
Google カレンダーの予定を、スプレッドシートにまとめて出力するGoogle Apps Scriptです。カレンダーIDはダイアログボックスで入力できます。
スプレッドシートに入力した値を元に、カレンダーの予定をまとめて作成することができるGoogle Apps Scriptです。
Googleカレンダーの予定を全て非公開にするGoogle Apps Scriptです。組織内で使っているとカレンダー自体は共有されていますので、隠したい予定は個別に非公開化する必要があります。誤って公開している予定が大量にある時にどうぞ。
GASからSlackに投稿する時に使用する「Incoming Webhook」の設定方法について解説します。コピペで使える投稿用のサンプルコードもあります。
スプレッドシートの不要な行を削除するGoogle Apps Scriptです。行がいつの間にか数万行に増えてしまっている・・・よくありますよね。
Slackに投稿したメッセージをほぼリアルタイムにGoogle スプレッドシートにバックアップするGoogle Apps Scriptです。無償版Slackはデータの保存期間が90日に短縮されるので作ってみました。
Gmailに届いたメールから特定の件名のものをSlackに通知するGoogle Apps Scriptです。Slackが浸透するほどメールをあまり見なくなり、大事なメールを見逃すことが増えてきたので作りました。