gas
gmail
Slack
connpass

Gmailに来るConnpass通知をいい感じにSlackに通知する

はじめに

Connpassの通知、いい加減メール以外にも対応してほしい...。
Slackとまでは言わないからせめてLINEも選択肢としてとれるようにしてほしい...

そんな欲求、ありますよね?

はい、例によって例のごとくGASで作りました。

このスクリプトでは、
こんな感じのボタンが含まれているメールを
スクリーンショット 2018-06-20 15.53.45.png

こんな感じでSlackに通知します。
スクリーンショット 2018-06-20 15.52.11.png

逆に言うと例のボタンが含まれてないやつは対象外になるので注意してください。
(そんなのは嫌だ!って人はスクリプトをいじってください)

Gmailの設定をしよう

といってもやることは2つだけ

  • connpassのラベルを作る
  • フィルタ機能でconnpassから来たメールは受信トレイをスキップしてconnpassのラベルつけて既読にする

フィルタ具体的な設定は↓のような感じ

スクリーンショット 2018-06-20 15.20.42.png

スクリーンショット 2018-06-20 15.21.19.png

これでGmail側は準備完了

SlackのIncoming Webhooks設定をする

「Slack Incoming Webhook」でググれば情報出て来るので詳細は割愛。
ここで通知したいチャンネル、BOTの名前、アイコンを適当に設定する。
ちなみにアイコンは公式がAPIの一部として公開してるので使うといいかも。
https://connpass.com/about/api/

発行されたWebhookのURLはあとで使うのでコピーしておくなり、タブを開いておくなりする。

GASを使って定期チェックのスクリプトを作る

GoogleDriveにGASプロジェクトを作る

そのまんま。名前は任意に。
次にここにスクリプトがあるのでmain.gsをコピーして貼り付ける
https://github.com/kiuchikeisuke/ConnpassNotifier

Constの定義を書く

データ格納用のスプレッドシートを1つ作る。シート名をdataにする
スプレッドシートのURLのId(↓のXXXの部分)をコピーして、ConstspreadSheetIdにセットする
https://docs.google.com/spreadsheets/d/XXXXXXXXXXXXXXXXXX/edit#gid=0

Incoming Webhookで発行したurlをConstwebhookurlに貼り付ける

スクリプトの定期実行を設定する

「GAS 定期実行」でググれば出て来るので詳細は割愛。
定期実行に指定する関数はtimer()。だいたい1時間おきくらいでいいかも。

技術的なお話

と言ってもGmailのアクセスはGASがデフォルトでできてしまうので、ほぼソースを読めば(多分)わかるレベル。
ボタンの部分を判定してる処理はメールのBodyから正規表現で該当するテキスト部分を抽出してる感じ。具体的には以下の部分

      var messages = thread.getMessages();
      var message = messages[0];
      var subject = message.getSubject();
      var body = message.getBody();

      var url = body.match(/<a href="https:\/\/.+\.connpass\.com\/event\/.+\/.+utm_content=detail_btn"/);
      if(url != null) {
        url = url[0].substring('<a href="'.length, url[0].lastIndexOf('/') + 1);

        var msg = "*" + subject + "* \n" + url;
        postToSlack(msg);
      }

また、全部のメールを判定対象にすると重くなることが予想されたので、前回チェックから今回チェックの間に受信したメール20件を対象にしている。

終わりに

全て設定が終われば、イベントが発生するとこんな感じで通知が来る。

スクリーンショット 2018-06-20 15.52.11.png