NotionのAPIを使ってSlack上のフロー情報をストックする仕組みを作ってみた
こんにちは。クラッソーネでプロジェクトマネージャーをしている田原(@shogocat)です。
最近ケーブル配線トレーやケーブルホルダーを購入し、机周りの配線をスッキリできたので気分が上がっています。
皆さま、今話題のNotionというツールをご存知でしょうか。
ドキュメント管理やタスク管理など、あらゆることを1つのアプリで行える夢のようなツールです。
利用者は世界で1,000万人を超えていて、日本でも続々と企業で導入されています。
(参考: Notion ユーザー事例)
2021年、Notionは2つの大きなアップデートが予定されています。API公開と日本語化です。
先月5月、待望のNotionのAPIが公開されました。
そこで今回は、NotionのAPIを実際に触ってみて、SlackとNotionを連携する仕組みを作ってみました。
NotionのAPI
NotionのAPI公式情報はこちらに載っています。
APIを通してページの追加やデータベースのコンテンツ追加などができるようになります。
ナレッジマネジメント
API活用の話に入る前に、ナレッジマネジメントについても少しお話しします。
企業の生産性を高める手法として、ナレッジマネジメントはとても重要です。
ナレッジマネジメント(英語: knowledge management)とは、企業が保持している情報・知識と、個人が持っているノウハウや経験などの知的資産を共有して、創造的な仕事につなげることを目指す経営管理手法。 Wikipedia
個人の持つ暗黙知を形式知に変換することで業務の属人化を防いだり、ナレッジを共有することで業務の効率化に繋がるといったメリットがあります。
昨今のリモートワーク環境において、ナレッジマネジメントの重要性はますます高まっていると言われています。
フロー情報とストック情報
ナレッジマネジメントに関連して、「フロー情報」「ストック情報」というキーワードにも触れておきます。
- フロー情報:流れ去ってしまう情報
- ストック情報:蓄積される情報
例えば、業務の中でわからないことに遭遇した場合、Slackで誰かに聞いて解決することがよくあるかと思います。
Slack上のやり取りはフロー情報のため、情報が流れていってしまいます。
情報が流れてしまった結果、時間が経ってから再度同じ問題に遭遇してわからなくなったり、別の人が同じ質問をしてしまうことはあるあるだと思います。
そうならないために、知見を適切にストック情報へと変換させることが重要です。
Slack上のフロー情報をNotionにストックする仕組みを作る
さて、ここからが本題です。
今回、Slack上でやり取りした情報(フロー情報)をNotionの社内FAQ(ストック情報)に蓄積するための仕組みを作ります。
[手順1] NotionにFAQデータベース作成
Notion上でFAQのデータベースを作成します。
プロパティとしてQuestion
, Answer
を含めておきます。
後で必要になるので、データベースのIDを確認しておきましょう。
データベースの右上メニューからCopy link
を押します。
取得したURLの内、notion.so/
と?v=
の間の文字列がこのデータベースのIDとなります。
[手順2] NotionのIntegration作成
NotionのSettings & Members
を開き、左下のIntegrations
メニューからDevelop your own integrations
を押します。
ブラウザでIntegration管理画面が開かれたら、New integration
から新規作成します。
Name
にIntegrationの名前(今回は「StockKnowledge」としました)を入れ、Logo
に画像をアップしてから画面右下のSubmit
を押します。
これでIntegrationの作成が完了です。
画面に表示されるトークンは後ほど使用します。
[手順3] Integrationの権限設定
Integration経由で更新したいページ(今回は「社内FAQ」ページ)の画面右上にあるShare
ボタンを押し、Invite
ボタンを押します。
手順2で作成したIntegrationを選択し、Invite
ボタンを押します。
Share対象にIntegrationが含まれていたら、権限設定完了です。
[手順4] Googleスプレッドシートを用意
SlackとNotionの中継地点として、スプレッドシートを用意します。
1行目にquestion
, answer
という見出しを付けておきます。
[手順5] Slackワークフローを作成
Slackワークフローを作成し、スタンプが押されたら情報をスプレッドシートに情報を溜めるようにします。
ワークフロービルダーを作成します。
ワークフローを開始する方法を選択します。今回は絵文字リアクションをトリガーにします。
ワークフローにその後のステップを追加していきます。
スレッドにカスタムフォーム送信、スプレッドシートに行を追加、スレッドにメッセージを投稿という流れにします。
最終的に、このようなワークフローが出来上がります。
[手順6] Google Apps Scriptを作成
手順4で作成したGoogleスプレッドシートに新しい行が追加されたらNotionのデータベースにデータを登録するGoogle Apps Scriptを作成します。
function myOnEdit(e) {
const mySheet = SpreadsheetApp.getActiveSheet();
const latestEntryRow = mySheet.getLastRow();
const question = mySheet.getRange(latestEntryRow, 1).getValue();
const answer = mySheet.getRange(latestEntryRow, 2).getValue();
const payload = createFaq(question, answer);
postNotion(payload);
}
function postNotion(payload){
const MY_NOTION_TOKEN = "手順2で取得したNotionのInternal Integration Tokenを入れる";
const url = "https://api.notion.com/v1/pages";
const options = {
"method" : "POST",
"headers": {
"Content-type": "application/json",
"Authorization": "Bearer " + MY_NOTION_TOKEN,
"Notion-Version": "2021-05-13",
},
"payload" : JSON.stringify(payload)
};
UrlFetchApp.fetch(url, options);
}
function createFaq(question, answer) {
const DATABASE_ID = "手順1で取得したFAQのデータベースIDを入れる";
payload = {
"parent": {
"database_id": DATABASE_ID
},
"properties": {
"Question": {
"title": [
{
"text": {
"content": question
}
}
]
},
"Answer": {
"rich_text": [
{
"text": {
"content": answer
}
}
]
}
}
}
return payload;
}
スクリプトが完成したらトリガーを設定します。
これで全ての準備が完了です。
デモ
まとめ
NotionのAPIを活用して、Slack上でのフロー情報をNotionの社内FAQにストックする仕組みを作ることができました。
Slackで会話した内容をその場でNotionに蓄積することができるようになりました。
NotionのAPIを活用してどんなこと実現できるのか、今後もアイデアを膨らませて楽しみたいと思います。
最後に
Notionを使い倒したい方、ナレッジマネジメントが大切だと感じる方、ぜひクラッソーネで一緒に働きませんか。