Notionに「Webhook」が追加されたと聞きまして

ばるす

ばるす

おいおい、Notion神じゃん

どーもばるすです。

NotionがWebhookアクションを新たにリリースしました。

全人類が待望していたWebhookです。

何ができるようになったのか。なぜばるすがこんなに興奮しているのかも添えて解説します。

Webhookとは?

Webhookとは、特定のイベントが発生した時に、自動的に他のシステムへ通知を送る仕組みです。

NotionのWebhookアクションを使用すると、データベースの更新やボタンのクリックをトリガーとして、外部システムと連携できるようになります。

Webhookアクションの特徴

  • POSTリクエストによる外部システムとの連携
  • makeWorkatoなどの自動化ツールとの統合が可能
  • データベースの項目やプロパティ値を送信可能
  • カスタムヘッダーの追加に対応

要はNotion側での操作をきっかけに色々できるようになったってことなんです。

これがアチチなんですわ…!!!

例えばこういうことができるようになる

Case1: 商談管理の自動化

営業担当者が商談データベースのステータスを「受注」に変更したら…

  1. Salesforceの商談レコードを自動更新
  2. Slackの営業チャンネルに受注報告を自動投稿

受注処理の工数を大幅に削減し、情報の即時共有が可能になる!

Case2: 社内システムアカウント作成の自動化

入社者DBに新規メンバーが追加されたら…

  1. Google Workspaceのアカウントを自動作成
  2. 初期パスワードを人事部門へSlack DM
  3. 各種システムの招待メールを自動送信

これにより、各システムでのユーザー情報の整合性を保ち、管理工数を削減できる!!

Case3: 承認ワークフローの自動化

承認申請データベースで申請ステータスが「申請中」になったら…

  1. 承認者へSlackでDM自動送信
  2. 承認者がNotion上のボタンをクリックして承認/却下を選択
  3. 却下の場合:申請者へ自動で差し戻し通知
  4. 承認の場合:申請完了として申請者へ自動通知

承認フローを自動化することで、申請から承認までのリードタイム短縮につながる!!!

Webhookアクションを設定してみる

データベースのメニュー:「オートメーション」をクリック

新規トリガーをクリック

条件を設定

商談ステータスが「受注」に変わったら を条件にしています
商談ステータスが「受注」に変わったら を条件にしています

「Webhookを送信する」を選択

連携先システムのWebhook URLを入力

必要に応じてカスタムヘッダーを追加

送信するプロパティを選択

「作成」をクリックして完了

リクエストの内容を確認してみる

こういう感じで来るみたい

JsonSample

{
  "source": {
    "type": "automation",
    "automation_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "action_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "event_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "attempt": 1
  },
  "data": {
    "object": "page",
    "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "created_time": "2024-12-08T16:10:00.000Z",
    "last_edited_time": "2024-12-08T16:39:00.000Z",
    "created_by": {
      "object": "user",
      "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    },
    "last_edited_by": {
      "object": "user",
      "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    },
    "cover": null,
    "icon": null,
    "parent": {
      "type": "database_id",
      "database_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    },
    "archived": false,
    "in_trash": false,
    "properties": {
      "担当者": {
        "id": "xxxx",
        "type": "people",
        "people": [
          {
            "object": "user",
            "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "name": "xxxx",
            "avatar_url": "https://xxxxxxxxxxxx/xxxx.jpg",
            "type": "person",
            "person": {
              "email": "xxxx@xxxx.xxx"
            }
          }
        ]
      },
      "商談ステータス": {
        "id": "xxxx",
        "type": "select",
        "select": {
          "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "name": "受注",
          "color": "yellow"
        }
      },
      "取引先名": {
        "id": "xxxx",
        "type": "rich_text",
        "rich_text": [
          {
            "type": "text",
            "text": {
              "content": "株式会社テスト",
              "link": null
            },
            "annotations": {
              "bold": false,
              "italic": false,
              "strikethrough": false,
              "underline": false,
              "code": false,
              "color": "default"
            },
            "plain_text": "株式会社テスト",
            "href": null
          }
        ]
      },
      "SalesforceID": {
        "id": "xxxx",
        "type": "rich_text",
        "rich_text": [
          {
            "type": "text",
            "text": {
              "content": "xxxxxxxxxxxxxxxxxx",
              "link": null
            },
            "annotations": {
              "bold": false,
              "italic": false,
              "strikethrough": false,
              "underline": false,
              "code": false,
              "color": "default"
            },
            "plain_text": "xxxxxxxxxxxxxxxxxx",
            "href": null
          }
        ]
      },
      "名前": {
        "id": "title",
        "type": "title",
        "title": [
          {
            "type": "text",
            "text": {
              "content": "株式会社テスト:コンサル提案中",
              "link": null
            },
            "annotations": {
              "bold": false,
              "italic": false,
              "strikethrough": false,
              "underline": false,
              "code": false,
              "color": "default"
            },
            "plain_text": "株式会社テスト:コンサル提案中",
            "href": null
          }
        ]
      },
      "関連見積": {
        "id": "xxxx",
        "type": "rich_text",
        "rich_text": []
      }
    },
    "url": "https://www.notion.so/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "public_url": null,
    "request_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
  }
}

iPaaS側の処理をささっと作る

最近イチオシのmakeで作成します。

Webhookトリガーを設定

Salesforceのモジュールを追加してパラメータをそれぞれ設定

Slackのモジュールを追加して通知先チャンネル、通知内容を設定

作成完了!

動かしてみる

ね?神でしょ?

とはいえ微妙なところもある

トリガーで設定できるのはDBのプロパティを手動で変更したときのみ
いやーこれ、変更日時とか数式プロパティとかAI要約プロパティも条件に入れられたらもっと良かったんだけどね…
できることも無限大だけど、リクエスト件数も無限大に増えそうだから仕方ない。

ページの追加はトリガー設定できるが、削除はない
いずれ来てほしい。

管理者側で一元管理が難しい
利用者視点では嬉しい機能ですが、Notion管理者としてはだいぶ管理統制が厳しい機能が追加されちゃいましたね。
監査ログの項目に一応ありますけど、これ見て確認していくのはマジでしんどいと思います。
テナント設定のところに「有効なWebhook」とかの項目できたら管理しやすいでしょうけどね。
リクエスト上げておきますね。

えー?これ見てチェックしなきゃいけないのぉ…??
えー?これ見てチェックしなきゃいけないのぉ…??

そのほかの留意事項

  • 有料プランのユーザーのみ利用可能
  • POSTリクエストのみ対応
    • まあWebhookだし
  • ワークスペースレベルでの利用は現在準備中
    • 来たらもっとアツい
  • エンタープライズプランではワークスペース単位で無効化可能
    • ここです↓

終わりに

Notion Webhookは激アツ

Webhook機能のおかげで、Notion上の操作をきっかけに色々自動化ができる下地ができました。

iPaaSがある会社さんや、GAS/Lambdaに自信がある方であればNotion活用度がさらに向上できそうです。

今後のNotionAPIの拡充にも期待できそう!ワクワクしてくるぞ!

他にも作ってみた系記事を書こうと思いますのでよしなによろしくですー

以上、ばるすでした。

この記事をシェア