Header image

クラッソーネの開発者がエンジニアリングに関することもそうでないことも綴っています!

NotionのAPIを使ってSlack上のフロー情報をストックする仕組みを作ってみた

NotionのAPIを使ってSlack上のフロー情報をストックする仕組みを作ってみた

こんにちは。クラッソーネでプロジェクトマネージャーをしている田原(@shogocat)です。
最近ケーブル配線トレーやケーブルホルダーを購入し、机周りの配線をスッキリできたので気分が上がっています。

皆さま、今話題のNotionというツールをご存知でしょうか。

https://www.notion.so/

Notion

ドキュメント管理やタスク管理など、あらゆることを1つのアプリで行える夢のようなツールです。
利用者は世界で1,000万人を超えていて、日本でも続々と企業で導入されています。
(参考: Notion ユーザー事例

2021年、Notionは2つの大きなアップデートが予定されています。API公開と日本語化です。
先月5月、待望のNotionのAPIが公開されました

そこで今回は、NotionのAPIを実際に触ってみて、SlackとNotionを連携する仕組みを作ってみました。

NotionのAPI

NotionのAPI公式情報はこちらに載っています。

https://developers.notion.com/

Notion API

APIを通してページの追加やデータベースのコンテンツ追加などができるようになります。

ナレッジマネジメント

API活用の話に入る前に、ナレッジマネジメントについても少しお話しします。

企業の生産性を高める手法として、ナレッジマネジメントはとても重要です。

ナレッジマネジメント(英語: knowledge management)とは、企業が保持している情報・知識と、個人が持っているノウハウや経験などの知的資産を共有して、創造的な仕事につなげることを目指す経営管理手法。 Wikipedia

個人の持つ暗黙知を形式知に変換することで業務の属人化を防いだり、ナレッジを共有することで業務の効率化に繋がるといったメリットがあります。
昨今のリモートワーク環境において、ナレッジマネジメントの重要性はますます高まっていると言われています。

フロー情報とストック情報

ナレッジマネジメントに関連して、「フロー情報」「ストック情報」というキーワードにも触れておきます。

  • フロー情報:流れ去ってしまう情報
  • ストック情報:蓄積される情報

例えば、業務の中でわからないことに遭遇した場合、Slackで誰かに聞いて解決することがよくあるかと思います。
Slack上のやり取りはフロー情報のため、情報が流れていってしまいます。
情報が流れてしまった結果、時間が経ってから再度同じ問題に遭遇してわからなくなったり、別の人が同じ質問をしてしまうことはあるあるだと思います。
そうならないために、知見を適切にストック情報へと変換させることが重要です。

https://twitter.com/shogocat/status/1372466683453997058

Slack上のフロー情報をNotionにストックする仕組みを作る

さて、ここからが本題です。
今回、Slack上でやり取りした情報(フロー情報)をNotionの社内FAQ(ストック情報)に蓄積するための仕組みを作ります。

全体像

[手順1] NotionにFAQデータベース作成

Notion上でFAQのデータベースを作成します。
プロパティとしてQuestion, Answerを含めておきます。

社内FAQ

後で必要になるので、データベースのIDを確認しておきましょう。
データベースの右上メニューからCopy linkを押します。

データベースのURLをコピー

取得したURLの内、notion.so/?v=の間の文字列がこのデータベースのIDとなります。

データベースのIDを確認

[手順2] NotionのIntegration作成

NotionのSettings & Membersを開き、左下のIntegrationsメニューからDevelop your own integrationsを押します。

設定画面

ブラウザでIntegration管理画面が開かれたら、New integrationから新規作成します。

Integration新規作成

NameにIntegrationの名前(今回は「StockKnowledge」としました)を入れ、Logoに画像をアップしてから画面右下のSubmitを押します。

Integration作成

これでIntegrationの作成が完了です。
画面に表示されるトークンは後ほど使用します。

トークン

[手順3] Integrationの権限設定

Integration経由で更新したいページ(今回は「社内FAQ」ページ)の画面右上にあるShareボタンを押し、Inviteボタンを押します。

シェア

手順2で作成したIntegrationを選択し、Inviteボタンを押します。

招待

Share対象にIntegrationが含まれていたら、権限設定完了です。

シェア完了

[手順4] Googleスプレッドシートを用意

SlackとNotionの中継地点として、スプレッドシートを用意します。
1行目にquestion, answerという見出しを付けておきます。

Googleスプレッドシートを用意

[手順5] Slackワークフローを作成

Slackワークフローを作成し、スタンプが押されたら情報をスプレッドシートに情報を溜めるようにします。

ワークフロービルダーを作成します。

ワークフロービルダーを開く
ワークフロー作成
ワークフローに名前を付ける

ワークフローを開始する方法を選択します。今回は絵文字リアクションをトリガーにします。

ワークフローを開始する方法を選択
絵文字リアクションを設定

ワークフローにその後のステップを追加していきます。
スレッドにカスタムフォーム送信、スプレッドシートに行を追加、スレッドにメッセージを投稿という流れにします。

スレッドにカスタムフォーム送信
スプレッドシートに行を追加
スレッドにメッセージを投稿

最終的に、このようなワークフローが出来上がります。

ワークフロー完成

[手順6] Google Apps Scriptを作成

手順4で作成したGoogleスプレッドシートに新しい行が追加されたらNotionのデータベースにデータを登録するGoogle Apps Scriptを作成します。

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;
}

スクリプトが完成したらトリガーを設定します。

Google Apps Scriptのトリガー設定

これで全ての準備が完了です。

デモ

デモ

まとめ

NotionのAPIを活用して、Slack上でのフロー情報をNotionの社内FAQにストックする仕組みを作ることができました。
Slackで会話した内容をその場でNotionに蓄積することができるようになりました。

NotionのAPIを活用してどんなこと実現できるのか、今後もアイデアを膨らませて楽しみたいと思います。

最後に

Notionを使い倒したい方、ナレッジマネジメントが大切だと感じる方、ぜひクラッソーネで一緒に働きませんか。

https://www.crassone.co.jp/recruit/engineer/


起業、エンジニア職、マーケティング職、新規事業立ち上げを経て、現在はクラッソーネでプロダクトマネージャーをしています。ねことスプラトゥーンとNotionが好き。