💘

Notion記事のいいねをノーコードでSlackに通知する

2022/08/31に公開

まえおき

Notion にはいいねボタンがありません。
検索するといいねボタンを付けるためのソリューションはいくつか見つかるものの、組織内で運用するにはあまり現実的でない方法でしか実現されていません。

組織で運用するためのひとつの解として Chrome拡張を組織単位で導入することによって社内の多くの人がNotion上でいいねボタンを使えるようにする という方法があります。
現状Notionで いいね を組織的に運用する上では、これがベストプラクティスだと感じています。

https://timetreeapp.com/intl/ja/newsroom/blog/2022-02-07/notion
https://zenn.dev/fujikky/articles/4e1471cd79ded9

ですがこれだけだと、記事を書いたメンバーが いいね が付いたことを知るには書いた記事を自分で見に行く必要があります。
自分に付いた いいね に気づけないと、効果は半減とも言えます。

そこで、書いた記事に いいね があったらSlackに通知してくれる機能をノーコードサービスを利用して実現しています。

これにより、組織内の全員がいいね通知をSlackで受け取ることができるようになります。
今回は、その概要を紹介します。

利用しているもの

make.com を利用しています。以前はIntegromatという名称でした。
https://www.make.com/

その他設定が必要なもの

  • Notionの設定
    https://zenn.dev/fujikky/articles/4e1471cd79ded9#notion-側の設定
    上記で設定する Notion Integration を使って make.com の Connection を設定します。
  • Slackアプリの設定
    make.com と Slackを連携させる必要がありますが、そのまま進めると Integromat というSlackアプリを利用して連携することになります。

大まかな処理の流れ

  1. 指定したNotionデータベースのいいね付き更新記事をAPIから取得
  2. 各記事ごとに現在のいいねユーザーリストを作る
  3. 各記事ごとに過去のいいねユーザーリストをData Storeから取得する
  4. 2で生成したユーザーごとに3に含まれるかチェックし、記事ごとに新規いいねユーザーリストを作る
  5. 記事の作成者に、4で作ったユーザーリストを使ってSlack通知
  6. 2のユーザーリストをData Storeに保存する

上記の処理を定期実行しています。

処理のポイント

処理数を減らすためAPIの取得条件をミニマムに

make.com では、処理数に応じた従量課金が行われます。
そのため、1で取得する条件を「いいね付きの更新記事のみ」としています。
この仕様にすると「Aさんが元々1人だけいいねしていた記事があり、Aさんがそのいいねを取り消し、再度いいねをした場合」は対応できなくなりますが、ほぼ影響がないのでこのようにしています。

ちなみに、今のところ通知は1日1回の頻度でしか行っていないこともあり、Core Plan (10,000 operations/month)のサブスクリプションで収まっています。

IteratorとAggregatorをそのまま並べるだけでは出力の整形ができない

APIから取得できた「いいね」のフィールドにメンバーの配列が入っています。その配列から必要な情報だけを抜き出して配列にマッピングするためにはIteratorとAggregatorモジュールを利用します。

しかし、このモジュールをただ並べるだけだと、AggregatorでAPIレスポンスのフィールド値からそのまま抜き出すことしかできず、出力する配列の中身を自由に整形できません。

公式ではこういった場合、JSONモジュールをAggregatorの後ろに置き、そのData structureに合わせてAggregatorからマッピングするという方法が紹介されています。
https://www.make.com/en/help/tools/flow-control#array-aggregator

この方法でも可能なのですが、今回は直感的に「IteratorとAggregatorの間にText parserを置く」という方法で実現しています。
ただし残念ながら、この方がJSONモジュールにマッピングするよりも処理数が多くなってしまいますので、課金額が気になる場合はJSONモジュールを使ってマッピングする方法を試してみてください。

エラーで処理を止めないためにIgnoreを設置

処理の5でSlackユーザーに通知する際、メールアドレスを利用してSlack APIに対してUserIDを問い合わせています。
このとき、Notion記事を作成したユーザーがSlackで検索しても見つからない場合があり得ます(例えば退職済みのユーザーの記事へのいいねなど)。
そのため、この部分についてはちゃんとエラーハンドラーとしてIgnoreモジュールを入れてあげる必要があります。
これを行わないと、Routerで分岐しているData Storeへの書き込み処理も止まってしまいます。

まとめ

make.com を使って、Notionの いいね をSlackに通知する方法について紹介しました。
一時的なデータ処理だけでなくデータ保存にも対応しているため、AWSやGCPなどにインフラリソースをわざわざ用意しなくても make.com の中だけで処理を完結させられるのはメリットですね。触ったことがないと整形などの細かい処理をノーコードでどうやればいいかわからず苦労する部分はありますが、やってみると勘所が少しずつ掴めてきます。

「ここ間違ってるよ」「うちではこんな方法でやっています!」などのフィードバックがあれば、コメント欄にいただけると嬉しいです。
また、直接なにかお聞きしたいことがあれば TwitterのDM にいただければ何かしら回答したいと思います。

Podcastでも解説中

この記事に書かれていることの背景についてはPodcastで補足しています。
もう少し知りたい方は、そちらもぜひ聴いてみてください。
https://open.spotify.com/episode/2Icau3cyClPUtAMhvYFa97

TimeTree Tech Blog

Discussion