<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
  
  <title>Massiv Tech Blog</title>
  <subtitle>Massiv のエンジニアリングチームが、技術・AI 活用・運用設計の知見を書き残すブログです。</subtitle>
  <link href="https://tech.massiv.jp/feed.xml" rel="self" />
  <link href="https://tech.massiv.jp/" />
  <updated>2026-07-31T09:50:00Z</updated>
  <id>https://tech.massiv.jp/</id>
  <author>
    <name>Massiv</name>
  </author>
  <entry>
    <title>NotionボタンからNotion Workersを呼び出して、APIで複雑なテンプレート処理を実行する</title>
    <link href="https://tech.massiv.jp/posts/2026-07-31-notion-workers-webhook-button/" />
    <updated>2026-07-31T09:50:00Z</updated>
    <id>https://tech.massiv.jp/posts/2026-07-31-notion-workers-webhook-button/</id>
    <content type="html">&lt;p&gt;Notionボタンを押したときにWebhookを送り、Notion Workers上のTypeScriptを実行する仕組みを作ったので紹介します。&lt;/p&gt;
&lt;p&gt;この仕組みを使うと、Notionの標準テンプレートだけでは表現しにくい「別のデータベースを条件で検索し、見つかったページごとに複数のページを作成する」といった処理を、Notion APIで実装できます。&lt;/p&gt;
&lt;p&gt;今回作ったのは、ステータスが「検証中」の仮説を検索し、それぞれに今週分のPlanningとReviewを作成するボタンです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://tech.massiv.jp/posts/2026-07-31-notion-workers-webhook-button/images/6f5b9e8d-06c8-4f6e-a034-6e24df77c0d4.webp&quot; alt=&quot;NotionボタンからWebhookを送信する設定。Webhook URLは非表示にしている&quot;&gt;&lt;/p&gt;
&lt;h2&gt;Notion Workersとは&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.notion.com/workers/get-started/overview&quot;&gt;Notion Workers&lt;/a&gt;は、Node.jsとTypeScriptで書いた小さなプログラムをNotion上で動かす仕組みです。Notionが実行環境を提供するため、Webhookを受け取るためのサーバーを別に用意する必要はありません。&lt;/p&gt;
&lt;p&gt;Workerには、外部データを同期するSync、Custom Agentから呼び出すTool、HTTPリクエストを受け取るWebhookという機能があります。この記事ではWebhookを使います。2026年7月31日時点ではベータ版です。提供状況は&lt;a href=&quot;https://www.notion.com/releases/2026-07-24&quot;&gt;Notionのリリース情報&lt;/a&gt;で確認できます。&lt;/p&gt;
&lt;p&gt;処理の流れは次のようになります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Notionボタンを押す&lt;/li&gt;
&lt;li&gt;ボタンがNotion WorkerのWebhook URLへPOSTリクエストを送る&lt;/li&gt;
&lt;li&gt;Notion WorkerがTypeScriptの処理を実行する&lt;/li&gt;
&lt;li&gt;WorkerがNotion APIで対象ページを検索する&lt;/li&gt;
&lt;li&gt;条件を満たすページごとにPlanningとReviewを作成する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&quot;https://www.notion.com/en-gb/help/webhook-actions&quot;&gt;NotionのWebhookアクション&lt;/a&gt;は、通常のボタン、データベースボタン、データベースオートメーションから利用できます。そのため、手動のボタンだけではなく、データベースの更新をきっかけに同じWorkerを呼び出す構成にもできます。&lt;/p&gt;
&lt;h2&gt;仮説検証のPlanningとReviewをまとめて作る&lt;/h2&gt;
&lt;p&gt;Massivでは、仮説を管理するデータベースと、仮説ごとの検証を管理するデータベースを分けています。&lt;/p&gt;
&lt;p&gt;週の始めには、ステータスが「検証中」の仮説ごとにPlanningを作り、週の終わりに振り返るためのReviewも用意します。作成するページには、元の仮説へのRelation、1週間の期間、PlanningまたはReviewというステータスを設定します。&lt;/p&gt;
&lt;p&gt;この処理で必要なのは、次のような操作です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;別のデータベースから「検証中」の仮説をすべて検索する&lt;/li&gt;
&lt;li&gt;検索結果の件数に合わせて繰り返す&lt;/li&gt;
&lt;li&gt;1つの仮説につきPlanningとReviewの2ページを作る&lt;/li&gt;
&lt;li&gt;作成したページと元の仮説をRelationで結ぶ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Notionの標準ボタンやテンプレートは、決まったページを作る処理には向いています。一方で、検索結果の件数が毎回変わる処理は、1つのボタン設定だけでは表現しにくくなります。&lt;/p&gt;
&lt;p&gt;そこで、ボタンは処理の開始だけを担当し、検索や作成のロジックはWorkerへ移しました。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://tech.massiv.jp/posts/2026-07-31-notion-workers-webhook-button/images/b6c37caf-787f-4a1a-a071-cbab422a3e09.webp&quot; alt=&quot;仮説データベースから仮説検証データベースへPlanningとReviewを作成する流れ。社内情報は非表示にしている&quot;&gt;&lt;/p&gt;
&lt;h2&gt;Webhookを登録する&lt;/h2&gt;
&lt;p&gt;Workerでは、&lt;code&gt;worker.webhook()&lt;/code&gt;でWebhookを登録します。次のコードは、実際の実装から主要部分を抜き出したものです。&lt;/p&gt;
&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Worker &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@notionhq/workers&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; worker &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Worker&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; worker&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

worker&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;webhook&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;createWeeklyHypothesisValidations&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  title&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Create Weekly Hypothesis Validations&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  description&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&quot;Creates this week&#39;s Planning and Review records for hypotheses under validation&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token function-variable function&quot;&gt;execute&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;events&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; notion &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; event &lt;span class=&quot;token keyword&quot;&gt;of&lt;/span&gt; events&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; week &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getTokyoWeek&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; store &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;NotionHypothesisValidationStore&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;notion&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; config&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;createWeeklyHypothesisValidations&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;store&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; week&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

      &lt;span class=&quot;token builtin&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;token constant&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          deliveryId&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; event&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;deliveryId&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
          week&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;result&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;デプロイすると、Workerに対するWebhook URLが発行されます。&lt;code&gt;ntn workers webhooks list&lt;/code&gt;でWebhook URLを確認し、Notionボタンの「Webhookを送信する」に設定します。&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ntn login
ntn workers deploy &lt;span class=&quot;token parameter variable&quot;&gt;--name&lt;/span&gt; weekly-hypothesis-validations
ntn workers webhooks list&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.notion.com/workers/guides/webhooks&quot;&gt;Notion WorkersのWebhook&lt;/a&gt;はリクエストを受け取ると&lt;code&gt;202 Accepted&lt;/code&gt;を返し、Workerを非同期で実行します。そのため、ボタンを押した画面で処理結果を同期的に返す用途ではなく、ページ作成などの後続処理を開始する用途に向いています。&lt;/p&gt;
&lt;h2&gt;検索結果ごとにページを作成する&lt;/h2&gt;
&lt;p&gt;検索した仮説ごとに、PlanningとReviewを作成します。ページ作成時にRelation、ステータス、週の期間をまとめて設定できるのは、Notion APIへ処理を移す利点です。&lt;/p&gt;
&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; notion&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;pages&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  parent&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;data_source_id&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    data_source_id&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; validationsDataSourceId&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  properties&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    検証&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      title&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          mention&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            date&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; start&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; titleDate &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; text&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; content&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;hypothesis&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;title&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    仮説&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      relation&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; id&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; hypothesis&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    ステータス&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      select&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; name&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; stage &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    週&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      date&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        start&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; week&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;start&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        end&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; week&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;end&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Planningの日付は週の開始日、Reviewの日付はその4日後にしています。Planningには元の仮説に書かれた「検証方法」もコピーします。Reviewは週末に結果を書く場所なので、作成時点では空欄です。&lt;/p&gt;
&lt;h2&gt;Notion APIの認証を設定する&lt;/h2&gt;
&lt;p&gt;Webhookの&lt;code&gt;execute&lt;/code&gt;で&lt;code&gt;notion&lt;/code&gt;を使う場合、Notion APIの認証情報は自動では設定されません。&lt;a href=&quot;https://developers.notion.com/workers/guides/api-client&quot;&gt;WorkerからNotion APIを使う方法&lt;/a&gt;に従い、Personal Access TokenまたはInternal Integration Tokenを&lt;code&gt;NOTION_API_TOKEN&lt;/code&gt;として設定します。&lt;/p&gt;
&lt;p&gt;Internal Integration Tokenを使う場合は、読み取るデータベースと書き込むデータベースの両方へIntegrationを接続します。必要な範囲だけを許可できるため、Workerの用途が限定されている場合はこちらが扱いやすいです。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;NotionボタンとNotion WorkersのWebhookを組み合わせると、ボタンをTypeScriptで書いた処理の起点にできます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ボタンからNotion WorkerへPOSTリクエストを送れる&lt;/li&gt;
&lt;li&gt;WorkerからNotion APIを使い、検索、繰り返し、Relationの設定、複数ページを作成できる&lt;/li&gt;
&lt;li&gt;ボタンの入力は開始の合図だけにして、最新状態はNotion APIから取得できる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;今回はボタンからリクエストを送り、週次の仮説検証を作成しました。Notionのデータベースオートメーションでも「Webhookを送信する」アクションを利用できるため、特定の条件を満たしたときにWorkerを起動する構成にもできます。&lt;/p&gt;
&lt;p&gt;承認フローの初期化、条件に応じた関連ページの作成、複数データベースをまたぐ更新などにも同じ構成を使えます。Notionの標準アクションでは表現しにくい処理を、別のサーバーを運用せずに補う方法として、Notion Workersは利用できます。&lt;/p&gt;
</content>
  </entry>
</feed>