connpass で勉強会を主催している皆様へ

connpass で勉強会を主催している皆様へ

connpass で勉強会を主催している皆様へ、運営しているconnpassのグループに対する 参加, キャンセル, お問い合わせ のアクションがあった場合にSlackに通知するGAS(Google Apps Script)を書いてOSSにしたのでご報告申し上げます。

https://github.com/bannzai/connpass-notification

なぜつくったのか

僕はDXELという勉強会の主催をやっており、connpassを使って参加者の募集を行っています。connpassでイベントの運営メンバーだと参加者の 参加キャンセルお問い合わせ などのアクションが発生した場合にメールで通知を受け取ることができます。しかし、(僕は)メールってあまり見ないし、connpassのこういった内容はGmailのラベルを付けてGmailからの通知の対象から外してしまっていたりしています。
とはいえ、こういった動きがあった場合状況をなんとなく把握したいな。お問い合わせもSlackのpublicなチャンネルに通知されれば自分ができない場合も誰かが対応してくれるだろう。 そういった要望が内外であったのでconnpass-notificationをつくりました。

connpass-notification

connpass-notification は比較的汎用的に作りました。
なので、connpassで会を主催する方でそれ専用のSlackのworkspaceがある方には使えるツールになっているかと思います。このツールを使いたいモチベーションはおそらく僕と一緒なようなモチベーションを持って導入するのだろうと予想しています。このツールを使える人の前提があります。

  • Gmailアドレスを使用してconnpassのアカウントを作っている。
    • たぶんFacebookログインでFacebookアカウントの登録メアドが Gmail とかの場合でも大丈夫。他のSNSアカウントでも同じことが言える。
  • Slack使っている。
    • イベント専用の Slack の workspace があるとなおよし

上記が必須条件かと思います。

つけくわえるとするならconnpass-notification は汎用的に使っていると言いましたが、自分たちが使っている GmailSlack に対する設定を行う必要があります。また、 このツールを実際に稼働させるためにGoogleが提供している clasp というツールも用います。

これらの手順はgithubに手順書としてREADMEに記載があります。
設定に関しては Configureセクション
ツールの稼働に関してはDeployセクション に記載してあります。
こちらを見ながら自分で動かせる人である。そういう人が身の回りにいる。必要があります。

実際に動かしている感じ

下の画像は運営しているイベントへの 参加キャンセル が発生した場合のSlackです。

この画像は運営しているイベントへの お問い合わせ が発生した場合のSlackです。

絵文字や色についてはEventsで定義してあるのでこちらもカスタマイズしたい場合は自由に変更できます。よくみるとところどころリンクがあるので、仮にユーザーページ見たいな(あまりないとは思うけど)とか、送られてきた Gmail のリンク開いてメッセージの全文みたいな。ってなった場合は比較的楽にアクセスできると思います。本文を流すことも考えたのですが、最初はコンパクトな通知で運用していこうと思ってこうしています。課題に感じたら本文も流そうかと。

DXELでの運用形式

設定

READMEのConfigureを見るとわかるのですが、設定ファイルに各アクション(参加・キャンセル・お問い合わせ)に対してそれぞれ別のChannelに通知ができるような設定ファイルになっています。もちろん同じチャンネルにも通知ができます。

function settings(): _Settings {
  return {
    'appName': 'Gmail',
    'searchWord': 'from: no-reply@connpass.com',
    'registerWebHookURL': 'https://hooks.slack.com/services/XXXXXXXXX/YYYYYYYYY/ZZZZZZZZZZZZZZZZZZZZZZZZ',
    'registerNotificationChannel': '#registerOrCancel-channel',
    'cancelWebHookURL': 'https://hooks.slack.com/services/XXXXXXXXX/YYYYYYYYY/ZZZZZZZZZZZZZZZZZZZZZZZZ',
    'cancelNotificationChannel': '#registerOrCancel-channel',
    'contactWebHookURL': 'https://hooks.slack.com/services/XXXXXXXXX/YYYYYYYYY/ZZZZZZZZZZZZZZZZZZZZZZZZ',
    'contactNotificationChannel': '#contact-channel'
  }

registerXXXXcancelXXXXcontactXXXX がそれぞれ 参加キャンセルお問い合わせ に対応しています。
別チャンネルにした場合は個別に WebHook URL を用意したりすればおkです。

DXELではお問い合わせだけは別チャンネルにしています。 参加・キャンセルはそんなに重要じゃないというかなんとなく流れて把握できればいいな。とは思うのですが、お問い合わせは見逃しにくい状態が好ましいなと思い(僕が勝手に)そうしました。お問い合わせは公開日に一気に登録や開催前にキャンセルが発生する傾向にあるわけでもないので、自分の未読管理もしやすく専用チャンネルによってメンバーもそこには注目しやすくなるはずです。

自動化

connpass-notificationGoogle Apps Script(GAS) で作成しました。 細かく言うなら clasptypescript を使用して作ったものを gs に変換して使っているといった具合です。 GAS には一定間隔で定期実行してくれる設定があるのでWebページからその設定を行います。DXEL では無料プランの枠に留まる数分程度の間隔で適当にやっているのでリアルタイムの通知とまでいえるほどの頻度では実行はしていないです。 とはいえ、普段よく使っている Slack に自動で流れてるのはとても嬉しいですね。

注意点

connpass-notification の細かい注意点として Slack に通知された Gmail のメール(正確にはスレッド)は既読状態にしています。
つまり、たとえば Gmail のサービスでメールを実際開いてなくても Slack に通知されたあとだとすでに読んだ状態になっているので未読のものでフィルタリングとかかけている場合はひっかからなくなります。
connpass-notification では、等間隔で定期実行するユースケースを想定して設計してあります。 通知までの原理は単純でGmail の検索にひっかかったものを Slack に通知します。その場合に前回通知したものからの差分で更新ということができたら理想なのですが、やれるかどうかいまいちわからなかったので、メールの既読・未読で判断することにしています。 未読のものは通知する必要があって、既読のものは通知がする必要がない。と言った判断基準にしています。

何かいい案(というかそういう機能がある)場合は GitHubissue や、 bannzaiTwitterアカウントとかにでも連絡していただけると嬉しいです。

最後に

connpass-notificationDXEL でも使い始めたばかりです。実際良かったよ。と言った話はまだできないのですが、同じような要望がある方はぜひ使ってください。
PR・issue 等もお待ちしております。

僕が一番欲しいのはスターなので、スターください

おしまい \(^o^)/