Gmailに届いたメールから特定の件名のものをSlackに通知するGoogle Apps Scriptです。Slackが浸透するほどメールをあまり見なくなり、大事なメールを見逃すことが増えてきたので作りました。
特にありません。
スプレッドシートのコンテナバインド型スクリプトとして作成していますが、スタンドアロン型で実装いただいても構いません。
Slackと連携するために、「Incoming Webhook」を使用します。
GASからSlackに投稿するための「入り口」を作ります。
詳しい手順はこちらをご確認ください。
https://myfunc.jp/items/00066/index.html
Webhook URLが発行されたら完了です。このURLをスクリプトの事前設定エリアにある「slack_webhook_url」にセットしましょう。
他にもチェックする間隔や、拾いたいメールのキーワードを登録します。
キーワードは何個でもOKです。必要なだけ配列に追加してください。
サンプルとしてクレジットカードの利用通知と宅配便の配達通知を拾ってみます。
事前設定が終わったら関数「onOpen」を一度実行して権限の承認をしておきましょう。
スプレッドシートに戻るとメニューが増えているはずです。
上のメニューにある「スクリプト実行」から「特定のメールが来たらSlackに通知する」を実行します。
Incoming Webhookを設定したチャンネルにメッセージが届いていれば成功です。
差出人と件名が記載されているので要件がなんとなくわかりますね。
動作に問題がなければトリガーをセットしましょう。
サンプルでは24時間以内のメールをチェックしていたのでトリガーも1日1回とします。
もっと頻繁にチェックしたい場合はスクリプトの事前設定エリアを書き換えて、トリガーもその時間間隔に合わせてください。
/**
* このスクリプトの説明、使い方はこちら。
* https://myfunc.jp/items/00131/index.html
*/
function onOpen() {
// スプレッドシートを開いたときに実行される関数
// UIの取得
const ui = SpreadsheetApp.getUi()
// メニューの表示名
const menu = ui.createMenu('スクリプト実行');
// メニューに追加するボタン
menu.addItem('特定のメールが来たらSlackに通知する', 'send_notification_to_slack_when_mail_arrived');
// メニューを画面に追加する
menu.addToUi();
}
function send_notification_to_slack_when_mail_arrived() {
// ######### 事前設定ここから ########
// SlackのWebhook URLを入力してください
const slack_webhook_url = 'https://hooks.slack.com/services/*******************';
// 過去何時間のメールを検索するか指定してください(24なら過去24時間以内に届いたメールが対象になります);
const hours = 24;
// 通知したいメールの件名(部分一致)を指定してください(配列で複数可)。
const keywords = ['家族カードご利用明細のお知らせ', 'お荷物お届けのお知らせ'];
// ######### 事前設定ここまで ########
// 検索期間を指定するための日付を取得する
let date = new Date(); // 現在の日時を取得
// メール検索条件に使うため、UNIX時に変換する
let unixtime = Math.floor(date.getTime() / 1000);
// 事前設定で指定された時間分、マイナスして検索の開始時間にする
unixtime = unixtime - (hours * 3600);
// メールを検索するための条件文を作る
const query = 'Subject:"' + keywords.join(' OR ') + '" after:' + unixtime;
// Gmailからメールを取得する
const threads = GmailApp.search(query);
if (threads.length == 0) {
// スレッド(メール)が1つも見つからない場合は処理を終了する
return;
}
// メールから必要な部分を抜き出して格納するための配列を宣言する
let result = [];
// スレッドを1つずつ処理する
for (let i = 0; i < threads.length; i++) {
// 1スレッドに複数のメッセージ(=メール)が入っているので取得
let messages = threads[i].getMessages();
// メールを1通ずつ処理していく
for (let j = 0; j < messages.length; j++) {
// メールの差出人を取得する
let mail_from = messages[j].getFrom();
// メールの件名を取得する
let mail_subject = messages[j].getSubject();
// 結果用の配列に、差出人と件名を連結して追加する
result.push(mail_from + ':' + mail_subject);
}
}
// 結果の配列を改行で連結し、Slack投稿用テキストとする
const text = result.join('
');
// SlackのWebhook URLに投稿するデータをまとめる
const json =
{
'username': '大事なメールが届きました',
'icon_emoji': ':exclamation:',
'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カレンダーの今日の予定をSlackに通知してくれるGoogle Apps Scriptです。1日分の予定は朝にまとめて知りたいですよね。SlackのIncoming Webhookを使用しています。
スプレッドシートの不要な行を削除するGoogle Apps Scriptです。行がいつの間にか数万行に増えてしまっている・・・よくありますよね。
トリガーで実行されたスクリプトが失敗したときに送信されるエラー通知メールを、Slackに転送するGoogle Apps Scriptです。メールはトリガーの設定者にしか飛ばないため、他のメンバーに共有したいときにどうぞ。
Slackに投稿したメッセージをほぼリアルタイムにGoogle スプレッドシートにバックアップするGoogle Apps Scriptです。無償版Slackはデータの保存期間が90日に短縮されるので作ってみました。
Gmailに届いた特定のメールに対し、自動的に定型文を返すGoogle Apps Scriptです。お問い合わせの受付完了通知などにどうぞ。