はじめに
Connpassの通知、いい加減メール以外にも対応してほしい...。
Slackとまでは言わないからせめてLINEも選択肢としてとれるようにしてほしい...
そんな欲求、ありますよね?
はい、例によって例のごとくGASで作りました。
このスクリプトでは、
こんな感じのボタンが含まれているメールを
逆に言うと例のボタンが含まれてないやつは対象外になるので注意してください。
(そんなのは嫌だ!って人はスクリプトをいじってください)
Gmailの設定をしよう
といってもやることは2つだけ
- connpassのラベルを作る
- フィルタ機能でconnpassから来たメールは受信トレイをスキップしてconnpassのラベルつけて既読にする
フィルタ具体的な設定は↓のような感じ
これで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の部分)をコピーして、Const
のspreadSheetId
にセットする
https://docs.google.com/spreadsheets/d/XXXXXXXXXXXXXXXXXX/edit#gid=0
Incoming Webhookで発行したurlをConst
のwebhookurl
に貼り付ける
スクリプトの定期実行を設定する
「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件を対象にしている。
終わりに
全て設定が終われば、イベントが発生するとこんな感じで通知が来る。