特定条件のメールを決まったSlackチャンネルへ共有したい、というシーンはありますよね。
有料プランであれば簡単なのですが、無料プランだとひと手間が必要です。
有料プランなら【Email】のアプリを利用
有料プランなら難の問題もありません。
SlackのAppディレクトリからメールアプリを検索することができます。
インストールした後は設定画面の通りに入力をすれば完了です。
無料プランはあきらめるべき?
そもそもきちんとSlackを利用するなら有料プランで利用するべきだと思います。
わたしも業務では有料プランを利用しています。
それとは別に家庭内Slackがあります。
本格的には利用しておらず、保育園の情報などの共有のたれ流しです。
このようなゆるい使い道の場合できれば無料プランで運用したい、と思う方もいらっしゃるのではないでしょうか。
しかし、特定のメールを特定のチャネルに流したい。
我が家の場合は保育園のメールを保育園のチャネルに通知したいのです。
ほんとうは家庭内Slackも有償プランでガチガチにインテグレーションしたかったのですが、夫が協力的でなかったため情報たれ流し目的で利用しています
無料プランの妥協案:Slackbotへ転送
「特定のチャンネルに」という部分をあきらめれば簡単に実現できます。
環境設定>メッセージ&メディア>Slackへのメールの転送
からSlackBotに転送をするメールアドレスを取得できます。
しかし、Salckbotに通知されるのであり、特定のチャンネルに投稿ができません。
このエントリーに到達された方は、おそらく本設定については求めていないので
メールアプリの設定、Slackbotへの転送については本家ドキュメントを参照してください。
無料プランでも特定チャンネルにメールを転送する方法
3つのステップで説明します。
- Gmailでラベルを付与する設定をする
- SlackのWebhockを設定する
- Google Apps Scriptを作成する
Gmailでラベルを付与する設定をする
すべてのメールを通知したいというケースはおそらく稀でしょう。
特定の条件のメールを通知したいことが多いですよね。
「特定の条件」にあう「ラベル」をGmailで設定しましょう。
Gmailラベル設定くらいは知ってるよ!という方はこのステップは読み飛ばしてください。
ラベルを作成する
利用するラベルを作成してください。
検索条件を設定する
特定の条件を表す検索条件を設定してください。
我が家は少し特殊な環境で、保育園にも幼稚園にも所属しており、どちらかのメールアドレスがfromに含まれていることを検索条件としています。
Gmailの検索で使用できる検索演算子は以下で確認をしてください。
ラベルをつけるという条件を設定する
つけたいラベルを設定してください。
必要に応じてアーカイブしてもいいでしょう。
ここまででGmail側の設定は完了です。
SlackのWebhockを設定する
Slackで通知をうけとるIncoming Webhookを設定します。
Webhock設定くらいは知ってるよ!という方はこのステップは読み飛ばしてください。
新しいSlackアプリを作成
メッセージを投稿するワークスペースで新しいSlackアプリを作成します。
昔のIncoming Webhookから設定方法が変わっていますので、過去を知っている方はご注意ください。
ここからは画面キャプチャを中心にご説明します。
新しいアプリを作成します。
名前をつけて投稿するチャンネルを選択します。
Webhooks を選びます。
有効化します。
接続先を選んで許可します。
Webhook URLをコピーして控えておきます。
最低限の設定はここまでで完了です。
お好みでアプリの表示設定をしてアイコンやDescriptionをカスタマイズしてください。
Google Apps Scriptを作成する
メインどころであるGoogle Apps Scriptを準備します。
プロジェクトを作成
Google Apps Script で新しいプロジェクトを作成します。
スクリプトを作成
スクリプトを作成します。
名前をまずはつけましょう。
スクリプトはコピペ利用してください。
Webhock URLとGmail検索条件だけ変更すればとりあえず利用できます。
// 初期設定
const HOOK_URL = 'https://hooks.slack.com/services/*******/*****************'; // 取得したWebHooks URL
function main() {
// 検索条件
var searchTarget = 'label:***** is:unread';
GmailApp
.search(searchTarget)
.forEach(function (thread) {
thread.getMessages().forEach(function (message) {
send(message);
});
thread.markRead();
});
}
function send(message) {
var sendText = '【件名】\n' + message.getSubject()
+ '\n【本文】\n' + message.getPlainBody();
var jsonData = {
"username" : message.getFrom(),
"text" : sendText
};
var options = {
"method" : "post",
"contentType" : "application/json",
"payload" : JSON.stringify(jsonData)
};
UrlFetchApp.fetch(HOOK_URL, options);
}
スクリプトを用意したらデプロイしてみましょう。
実行ボタンをクリックすることで実際に投稿できるかの動作確認ができます。
トリガー(定期実行するスケジュール)を作成する
定期的にスクリプトを実行するべく、トリガーを設定しましょう。
わたしは15分おきに起動するようにしています。
Google Apps Script(GAS)は利用制限があります。
制限の範囲内になるようにトリガー設定を行ってください。
日本語でわかりやすいすてきままとめ。
まとめ
できあがったものを復習します。
Slack無料プランで特定の条件のメールを特定のチャネルに投稿する機能を実装しました。
有料プランを利用しない場合の代替手段として参考となれば幸いです。
コメント