こんにちは、TIMの情報システム部門に所属している t_oikawa です。
情シスの役割として、誰がどのサービスを利用しているか把握できるようにしておくことが大切です。従来はNotionデータベースを使ってユーザー管理台帳を作成し、新入社員が入ったタイミングで手動で管理をしていました。
ある日、「社員が入社したタイミングで、業務で利用するサービスにアクセスできたかの確認をGoogleフォームで回答してもらい、その結果をNotionデータベースに自動で追加できたら楽なのでは?」と思い、少し調べてみたところ、Notion API というキーワードに出会いました。
今回は Notion API を使ってGoogleフォームの回答結果をNotionデータベースに自動追加するしくみを作ってみたので紹介します。
はじめに、Notionインテグレーションを準備します。Notion my Integration のページへアクセスし、 「新しいインテグレーションを作成する」を選択し、インテグレーションを作成します。
用途がわかりやすい名前をつけ、適切なNotionワークスペースを選択できていれば、それ以外の設定項目はデフォルトのままで大丈夫です。
インテグレーション作成後にAPIトークンが表示されますので、メモアプリ等に控えておいてください。
次に、Notionインテグレーションと連携するデータベースを開きます。(データベースに表示されている名前、所属部署名は一部実在のものと異なります。)
右上にある「・・・」を選択します。次に下部にある「コネクトの追加」にカーソルを合わせると、コネクト一覧が表示されるので、スクロールして先程作成したインテグレーションを選択します。
データベースとインテグレーションの連携ができると、このような表示になります。
旧バージョンのNotionでは、連携をする際に画面上部の「共有」からインテグレーションを追加する〜という手順だったようなのですが、現バージョンでは連携方法が変わっているのでご注意ください。(気づくのに時間がかかり一番ハマったポイントでした)
また、データベースのURLからデータベースIDをコピーし、控えておきます。
(以下に挙げる例のxxxxxxxxx…がデータベースIDとなります)
https://www.notion.so/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx?v=...
続いて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連携を試して業務効率化していきたいと思います。