notion-deglacerはprivateなNotionリンクがSlackに投稿された際に、それを展開してくれるSlack Appです。以下の機能を備えています。
- Notionの記事タイトル展開
- Notion APIのIntegrationsをInternal integrationsで作成し、tokenを取得
- Slack App作成
- notion-deglacerのデプロイ
- 2で作ったappに、3のURLを登録する
- Slack Appのbotユーザーをチャンネルに招待する
- 展開したいページでIntegrationを許可する
- https://www.notion.so/my-integrations の New integration からインテグレーションを作成
- Basic Informationを記入し、Submit
- Name, Associated workspaceを指定
- Content Capabilities は Read content にチェック
- User Capabilities は No user information
- Internal Integration Token をクリップボードにコピー(
NOTION_TOKEN
)
- https://api.slack.com/apps の Create New App からアプリ作成
- 左メニュー OAuth & Permissions を開き、Scopesでlink:writeを追加
- 左メニュー Event Subscriptions を開き、Enable EventsをOnに変更
- App unfurl domains を展開し、 Add Domain で、
www.notion.so
を入力し、Save Changes
- App unfurl domains を展開し、 Add Domain で、
- 左メニュー Install App を開き、 Install App to Workspace -> Allow
- OAuth Access Token が表示されるのでクリップボードにコピー (
SLACK_TOKEN
) - Basic Information を開き App CredentialsのSigning Secretをクリップボードにコピー (
SLACK_SIGNING_SECRET
)
※後で戻ってくるので、Slack Appの管理画面は開いたままにしておく。
deglacerはGoで書かれたWebアプリケーションなので、任意の場所で簡単に動かせますが、render.comやGoogle App Engineを利用するのがより簡単でしょう。動作のためには以下の環境変数が必要です。
NOTION_TOKEN
: 手順1で取得したNotionのアクセストークンSLACK_TOKEN
: 手順2-5で取得したSlack AppのトークンSLACK_SIGNING_SECRET
: 手順2-6で取得したリクエスト署名検証secret
以下のボタンからデプロイできます。
- 左メニュー Event Subscriptions を開き、 Request URL に 3でデプロイしたdeglacerのURLを入力
- Verified と表示されたら Enable Events を On にして Save Changes
Bot名は、左メニューのApp Homeから確認してください。
API経由でのアクセスをするためには、そのページでIntegrationを許可する必要があります。
現状ワークスペースレベルで全てのページを許可することはできないようです。
とはいえ親ページで許可をすれば子孫のページでも適用されるため、サイドバーの各ページで許可をすれば面倒ですが解決は可能です。
これで準備完了です。
notion-deglacerはSongmuさんのリポジトリをフォークして作られています。
https://github.com/Songmu/deglacer
Webサーバーの処理、Slackへの送信処理の大半をそのまま利用させていただいています。この場をお借りして御礼申し上げます。ありがとうございました!