【全プラン対応】特定のGmailを特定のSlackチャンネルへ連携【GAS】

時間創造

特定条件のメールを決まったSlackチャンネルへ共有したい、というシーンはありますよね。

有料プランであれば簡単なのですが、無料プランだとひと手間が必要です。

有料プランなら【Email】のアプリを利用

有料プランなら難の問題もありません。

SlackのAppディレクトリからメールアプリを検索することができます。

インストールした後は設定画面の通りに入力をすれば完了です。

無料プランはあきらめるべき?

そもそもきちんとSlackを利用するなら有料プランで利用するべきだと思います。
わたしも業務では有料プランを利用しています。

それとは別に家庭内Slackがあります。

本格的には利用しておらず、保育園の情報などの共有のたれ流しです。
このようなゆるい使い道の場合できれば無料プランで運用したい、と思う方もいらっしゃるのではないでしょうか。

しかし、特定のメール特定のチャネルに流したい。
我が家の場合は保育園のメールを保育園のチャネルに通知したいのです。

ほんとうは家庭内Slackも有償プランでガチガチにインテグレーションしたかったのですが、夫が協力的でなかったため情報たれ流し目的で利用しています

無料プランの妥協案:Slackbotへ転送

「特定のチャンネルに」という部分をあきらめれば簡単に実現できます。

環境設定>メッセージ&メディア>Slackへのメールの転送

からSlackBotに転送をするメールアドレスを取得できます。

しかし、Salckbotに通知されるのであり、特定のチャンネルに投稿ができません。
このエントリーに到達された方は、おそらく本設定については求めていないので

メールアプリの設定、Slackbotへの転送については本家ドキュメントを参照してください。

Slack にメールを送信する
Slack を使うと、メールを含む仕事上のコミュニケーションをすべて 1 か所にまとめられます。Slack にメールを送信する方法はいくつかあり、プラBAD+3...

無料プランでも特定チャンネルにメールを転送する方法

3つのステップで説明します。

  1. Gmailでラベルを付与する設定をする
  2. SlackのWebhockを設定する
  3. Google Apps Scriptを作成する

Gmailでラベルを付与する設定をする

すべてのメールを通知したいというケースはおそらく稀でしょう。
特定の条件のメールを通知したいことが多いですよね。
「特定の条件」にあう「ラベル」をGmailで設定しましょう。

Gmailラベル設定くらいは知ってるよ!という方はこのステップは読み飛ばしてください。

ラベルを作成する

利用するラベルを作成してください。

検索条件を設定する

特定の条件を表す検索条件を設定してください。
我が家は少し特殊な環境で、保育園にも幼稚園にも所属しており、どちらかのメールアドレスがfromに含まれていることを検索条件としています。

Gmailの検索で使用できる検索演算子は以下で確認をしてください。

Gmail の検索を絞り込む - Gmail ヘルプ
職場や学校で Google アプリをご活用いただくには、

ラベルをつけるという条件を設定する

つけたいラベルを設定してください。

必要に応じてアーカイブしてもいいでしょう。

ここまででGmail側の設定は完了です。

SlackのWebhockを設定する

Slackで通知をうけとるIncoming Webhookを設定します。

Webhock設定くらいは知ってるよ!という方はこのステップは読み飛ばしてください。

新しいSlackアプリを作成

メッセージを投稿するワークスペースで新しいSlackアプリを作成します。

昔のIncoming Webhookから設定方法が変わっていますので、過去を知っている方はご注意ください。

Slack API: Applications | Slack

ここからは画面キャプチャを中心にご説明します。

新しいアプリを作成します。

名前をつけて投稿するチャンネルを選択します。

Webhooks を選びます。

有効化します。

接続先を選んで許可します。

Webhook URLをコピーして控えておきます。

最低限の設定はここまでで完了です。

お好みでアプリの表示設定をしてアイコンやDescriptionをカスタマイズしてください。

Google Apps Scriptを作成する

メインどころであるGoogle Apps Scriptを準備します。

プロジェクトを作成

Google Apps Script で新しいプロジェクトを作成します。

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)は利用制限があります。
制限の範囲内になるようにトリガー設定を行ってください。

Quotas for Google Services  |  Apps Script  |  Google for Developers

日本語でわかりやすいすてきままとめ。

【GAS】覚えておきたい制限・上限まとめ
Google Apps Script(GAS)は業務効率化に役立つ無料ツールとして有用ですが、無制限に使えるわけではなく利用にあたって様々な制限事項があります。これらの制限に引っか...

まとめ

できあがったものを復習します。

Slack無料プランで特定の条件のメールを特定のチャネルに投稿する機能を実装しました。

有料プランを利用しない場合の代替手段として参考となれば幸いです。

コメント

タイトルとURLをコピーしました