Googleフォームの回答結果をNotionデータベースへ自動追加するしくみの作成(Notion API)


2023年 03月 23日

こんにちは、TIMの情報システム部門に所属している t_oikawa です。

情シスの役割として、誰がどのサービスを利用しているか把握できるようにしておくことが大切です。従来はNotionデータベースを使ってユーザー管理台帳を作成し、新入社員が入ったタイミングで手動で管理をしていました。
ある日、「社員が入社したタイミングで、業務で利用するサービスにアクセスできたかの確認をGoogleフォームで回答してもらい、その結果をNotionデータベースに自動で追加できたら楽なのでは?」と思い、少し調べてみたところ、Notion API というキーワードに出会いました。

今回は Notion API を使ってGoogleフォームの回答結果をNotionデータベースに自動追加するしくみを作ってみたので紹介します。

利用するもの

  • Notionアカウントおよびワークスペース(フリープランでもOK)
  • Notionデータベース
  • Notionインテグレーション
  • Googleフォーム

Notionインテグレーションの準備

はじめに、Notionインテグレーションを準備します。Notion my Integration のページへアクセスし、 「新しいインテグレーションを作成する」を選択し、インテグレーションを作成します。
用途がわかりやすい名前をつけ、適切なNotionワークスペースを選択できていれば、それ以外の設定項目はデフォルトのままで大丈夫です。

インテグレーション作成後にAPIトークンが表示されますので、メモアプリ等に控えておいてください。

Notionインテグレーションとデータベースの連携

次に、Notionインテグレーションと連携するデータベースを開きます。(データベースに表示されている名前、所属部署名は一部実在のものと異なります。)
右上にある「・・・」を選択します。次に下部にある「コネクトの追加」にカーソルを合わせると、コネクト一覧が表示されるので、スクロールして先程作成したインテグレーションを選択します。

データベースとインテグレーションの連携ができると、このような表示になります。
旧バージョンのNotionでは、連携をする際に画面上部の「共有」からインテグレーションを追加する〜という手順だったようなのですが、現バージョンでは連携方法が変わっているのでご注意ください。(気づくのに時間がかかり一番ハマったポイントでした)

また、データベースのURLからデータベースIDをコピーし、控えておきます。
(以下に挙げる例のxxxxxxxxx…がデータベースIDとなります)

https://www.notion.so/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx?v=...

Googleフォームの準備

続いてGoogleフォームを用意します。Googleフォームの回答や選択肢は、データベースの列並びと揃えておくとわかりやすいです。

右上の「︙」を選択し、「スクリプトエディタ」を開き、スクリプトを作成します。

スクリプトのコードは以下のとおりです。
{NOTION_TOKEN}{DATABASE_ID} は、控えておいたものをコピペしてください。

function submitForm(e){
  var itemResponses = e.response.getItemResponses();
  var Name = itemResponses[0].getResponse();
  var Mail = e.response.getRespondentEmail();
  var Division = itemResponses[1].getResponse();
  var Service = itemResponses[2].getResponse();
  var GWorkspace = false;
  var Slack = false;
  var Backlog = false;
  var GitHub = false;
  for (var i = 0; i < Service.length; i++) {
    switch (Service[i]) {
      case "Google Workspace":
        GWorkspace = true;
        break
      case "Slack":
        Slack = true;
        break
      case "Backlog":
        Backlog = true;
        break
      case "GitHub":
        GitHub = true;
        break 
    }
  }

  var url = 'https://api.notion.com/v1/pages';
  var notion_token = '{NOTION_TOKEN}';
  var database_id = '{DATABASE_ID}';
  var headers = {
    'Content-Type' : 'application/json; charset=UTF-8',
    'Authorization': 'Bearer ' + notion_token,
    'Notion-Version': '2022-06-28',
  };

  var post_data = {
    'parent': {'database_id': database_id},
    'properties': {
      '名前': {
        'title': [
          {
            'text': {
              'content': Name
            }
          }
        ]
      },
      'メールアドレス': {
            'email': Mail
      },
      '所属部署': {
        'select': {
          'name': Division
        }
      },
      'Google Workspace': {
            'checkbox': GWorkspace
        },
      'Slack': {
            'checkbox': Slack
      },
      'Backlog': {
            'checkbox': Backlog
      },
      'GitHub': {
            'checkbox': GitHub
      }
    }
  };

  var options = {
    "method" : "post",
    "headers" : headers,
    "payload" : JSON.stringify(post_data)
  };

  return UrlFetchApp.fetch(url, options);  

}

トリガーの設定

最後にトリガーを設定します。スクリプトエディタの画面左にある「トリガー」を開き、「トリガーの追加」を選択します。以下の内容で設定をし、保存します。

実行する関数を選択:関数名(ここでは submitForm)
イベントのソースを選択:フォームから
イベントの種類を選択:フォーム送信時

テスト

以上で一通り準備ができましたので、正常に動くかテストします。

Googleフォームで回答を送信すると・・・

Notionデータベースが更新されました!!

最後に

今回は、Notion APIを使ってGoogleフォームの回答結果をNotionデータベースに自動追加する方法を試してみました。Notion以外のサービスでもAPIが公開されているものは多数あるので、気になるものがあったらAPI連携を試して業務効率化していきたいと思います。