概要
サポートや問い合わせ用のチーム共有メール(Gmail)をSlackに通知する方法です
有料プランだとメール転送という手段が使えるが、残念ながら無料プランのため自力で頑張るしかない
実装概要
仕組みはGoogle App ScriptでGmailをタイマー付きで監視し、メールが来たらSlackに通知する流れ
仕様
Google App ScriptでGmailをタイマー(分、時間、日、月、年)で監視し、
監視間隔内に来たメール(迷惑メール、削除済みメール、チャットを除く)をすべてSlackに通知する
例えば、タイマーで1分間隔に設定していた場合は、1分前から現在(実行時)に来たメールを通知する
手順
以下の手順ではこちらのソースをもとに解説します
- Slack Web hooks urlの取得
- 通知させたいGoogleユーザでログイン
- 新規Google App Scriptを作成
- プロジェクト名は任意の名前を入力
- コードには、Main.gsの内容を張り付け
-
以下の箇所を修正してください
var postUrl = "<slack incoming webhooks url>"; // 手順0で取得したIncoming Webhooks url var postChannel = "<#chanel name>"; // #チャンネル名 var dateSpanMin = 1; // 監視期間(分単位) 後述のスクリプトタイマーで設定する値(分単位で)と同じにしてください var userName = 'Gmail'; // Slackに表示される投稿者名(Slackに実在しなくてもOK)
-
Slackで受信する際のアイコンを設定する場合は以下を修正してください(任意)
"icon_emoji": ":email:"
ちょっとしたハマりポイント
gmailをdatetimeでクエリする際に、unixtimeじゃないと絞れない
また、unixtimeは10桁でなければないことがハマりポイントでした
var nowDate = new Date(); // 開始時間
var unixNowTime = nowDate.getTime(); // unixtimeに変換
var pastTime = unixNowTime - (dateSpanMin * 60 * 1000); // n分前のunixtime
// 10桁のみ使用
var q = "before:" + String(unixNowTime).substring(0, 10) + " after:" + String(pastTime).substring(0, 10);
// Gmailをクエリ
var threads = GmailApp.search(q);