NotionのFAQをTipsとしてランダムでSlackに通知させるGAS作成をChatGPTに任せてみた
特定ドメインの知識をつける際には資料を読んだりFAQを読み解くことが重要になってきますが、普段ふとしたタイミングで見かけた特定キーワードに関するTipsが元になり、そのTipsを元に資料やFAQ絞り込みに繋がることもあります。
FAQのある場所を認知してもらうための試みとして、FAQの項目をTipsとしてポストしつつ、そのURLを併記してみることにしました。
今回の要件
凝った作りにしないために、とにかくシンプルです。
- 毎週月曜に動作
- FAQデータベースからランダムで一つピックアップ
- Slackにポスト
前回分のポストについては考慮しません。重複した内容とはいえ、その内容を直近で見たことが解決に繋がる可能性もあります。
実装コード
大体はまとまった要件ですが、言葉として整理できているのかを確認する意味も含めて、ChatGPTに投げてみました。
注意点として、ChatGPT内の集積データは2021年9月時点までとなっており、最新のNotionAPIには追従していません。以下はChatGPTが生成したコードです。
function pickRandomNotionRecordAndPostToSlack() { // Notionデータベースの情報 var apiKey = 'YOUR_NOTION_API_KEY'; var databaseId = 'YOUR_NOTION_DATABASE_ID'; // SlackのWebhook URL var slackWebhookUrl = 'YOUR_SLACK_WEBHOOK_URL'; // Notion APIのエンドポイント var notionEndpoint = 'https://api.notion.com/v1/databases/' + databaseId + '/query'; // Notion APIのリクエストヘッダー var notionHeaders = { 'Authorization': 'Bearer ' + apiKey, 'Notion-Version': '2021-05-13' }; // Notion APIのリクエストパラメータ var notionParams = { 'method': 'GET', 'headers': notionHeaders, }; // Notionからデータを取得 var notionResponse = UrlFetchApp.fetch(notionEndpoint, notionParams); var notionData = JSON.parse(notionResponse.getContentText()); if (notionData.results.length > 0) { // ランダムにレコードを選択 var randomIndex = Math.floor(Math.random() * notionData.results.length); var randomRecord = notionData.results[randomIndex]; // Slackに投稿するメッセージを作成 var slackMessage = { 'text': 'ランダムに選択したNotionレコード:', 'attachments': [ { 'text': JSON.stringify(randomRecord, null, 2) } ] }; // Slackにメッセージを投稿 var slackOptions = { 'method': 'POST', 'contentType': 'application/json', 'payload': JSON.stringify(slackMessage) }; UrlFetchApp.fetch(slackWebhookUrl, slackOptions); } else { Logger.log('データベースにレコードがありません。'); } }
このコードはそのままでは動作しません。明確な修正点は以下の通りです。
- 今回のNotion APIのエンドポイントはPOSTリクエストが必要
- 現在の最新Notion-Versionは2022-06-28
Notionに関しては、直近のアップデートも含んでいるため、差分が発生しても仕方ありませんが、それでもほぼ動作可能なコードとなっています。
なお、今回ChatGPTが提示したSlackへの投稿方法は、SlackBotを介して行うパラメータ構成であるようですが、実際にはWorkflow WebHookを選択しました。その理由は、実装コストを削減するためです。
また、毎週月曜日のタイマー起動については、ChatGPTには伝えていませんが、Google App Scriptのトリガーを利用するために省略しています。
他に必要なこと
このコードを少し書き換えただけでは動作しません。以下の操作が追加で必要になります。
- Notionへインテグレーションを追加
- 対象のデータベースへのコネクトにインテグレーションを追加
- Slackでincoming用のWebHookを発行
あとがき
ChatGPTの蓄積範囲によりますが、パブリックなAPIではなくHeadless Chromeを使用したスクレイピングの処理も提案されることがあります。APIを明確に利用したい場合は生成されるまでRegenerateを試してみましょう。