はじめに
2023年10月から社内ITとしてお仕事している山下です。早いもので、もうすっかり年の瀬になってしまいました。
新しい部署に異動し、議事録の作成を自動化できないかな と思いやってみた内容です。
少々、Notion APIのPOSTは概念の理解が必要なため、まとめを記載しています。手段だけ知りたい方は実装から読み始めてみてください👼
作るもの
- Google Calendarからスケジュールを週次で取得する
- 任意のフォーマットの議事録を作成する⬅️今回はココ
- スケジュール実施1日前に議事録をチャンネルでメンションする
概念
今回Notion APIを扱ううえで、代表的なオブジェクトを3つ紹介します。
Pages
Databases
Blocks
- Pagesを構成する、部分的なデータです。
- headings, toggles, paragraphs, lists, mediaなどのtypeを持ちます。
実装の前にIntegration作成
- https://developers.notion.com/docs/create-a-notion-integration#give-your-integration-page-permissions
- ページ単位でのIntegration設定ができていないと、
Could not find database with ID: hogehoge
と返ってくる可能性があります。
実装
curlでお試し
それではNotionの概念たちを操作して議事録を作っていきます。
まずは作りたい姿を想像してみましょう。
今回は新規の議事録をただ作るのではなく、そのリンクをPageの子要素にあたるDatabasesにならべます。
結果だけ言うと下記のcurlを実行するとやりたいことができます
curl 'https://api.notion.com/v1/pages' \
-H 'Authorization: Bearer "'$YOUR_TOKEN'"' \
-H "Content-Type: application/json" \
-H "Notion-Version: 2022-06-28" \
--data '{
"parent": { "database_id": "'$TARGET_LIST_ID'" },
"icon": {
"emoji": "🕰️"
},
"cover": {
"external": {
"url": "https://hogehoge/img_dayo/minnna.png"
}
},
"properties": {
"title": [{ "type": "text", "text": { "content": "Minutes1" }]
},
"children": [
{
"object": "block",
"type": "heading_2",
"heading_2": {
"rich_text": [{ "type": "text", "text": { "content": "Minutes1" } }]
}
},
{
"object": "block",
"type": "paragraph",
"paragraph": {
"rich_text": [
{
"type": "text",
"text": {
"content": "Nanikano Link",
"link": { "url": "https://x-bit.co.jp/" }
}
}
]
}
}
]
}'
ポイント
- Pageには下位概念がある
- どの位置の、どのプロパティを更新するか、具体をイメージする必要がある
- イメージできたら、細かくJSONでAPIに教えてあげる
最後に
株式会社クロスビットでは、デスクレスワーカーのためのHR管理プラットフォームを開発しています。
一緒に開発を行ってくれる各ポジションのエンジニアを募集中です。
クリスマスも仕事でしょ…?どうせなら私たちと楽しく仕事しませんか…🎅
https://herp.careers/v1/xbit
https://note.com/xbit_recruit
https://xbit.notion.site/Xbit-Entrance-book-115f8879d36d42b2ae544fbf2fb4eb85
https://speakerdeck.com/xbit/5fen-tewakarukurosuhitutonohurotakutokai-fa-timu