Notion コネクタ

Notion ワークスペースを Brevo に接続し、Tajo を介してコンテンツ駆動型マーケティングワークフロー、CRM データベース同期、自動通知を実現します。

概要

プロパティ
プラットフォームNotion
カテゴリカスタム
セットアップの複雑さ簡単
公式統合いいえ
同期データデータベース、ページ、ユーザー
API タイプREST API
認証Internal Integration Token / OAuth 2.0
ベース URLhttps://api.notion.com
API バージョン2022-06-28(Notion-Version ヘッダー経由)

機能

  • データベース同期 - Notion データベースのエントリを Brevo 連絡先およびリストに同期
  • CRM ブリッジ - Notion データベースを軽量 CRM として使用し Brevo に同期
  • コンテンツ通知 - Notion ページが公開されたときに Brevo キャンペーンをトリガー
  • プロパティマッピング - Notion データベースのプロパティを Brevo 連絡先属性にマッピング
  • ページ監視 - ページ更新をトラッキングして Brevo イベントとして転送
  • ユーザーディレクトリ同期 - Notion ワークスペースのメンバーを Brevo 連絡先に同期

前提条件

開始する前に、以下を準備してください。

  1. 管理者アクセス権を持つ Notion ワークスペース
  2. Notion の内部統合または OAuth アプリ
  3. 統合と共有されているデータベースページ
  4. API アクセス可能な Brevo アカウント
  5. 有効なサブスクリプションを持つ Tajo アカウント

認証

Notion は 2 つの認証方法をサポートしています。

オプション 1: 内部統合(単一ワークスペース向け推奨)

  1. notion.so/my-integrations にアクセス
  2. New integration をクリック
  3. 「Tajo Integration」と名前を付ける
  4. ワークスペースを選択
  5. 機能を設定:
Content Capabilities:
Read content: ✓
Update content: ✓
Insert content: ✓
User Capabilities:
Read user information: ✓
  1. Internal Integration Secret をコピー(ntn_ で始まる)

ページ共有が必要

内部統合は、明示的に共有されたページおよびデータベースのみにアクセスできます。各対象データベースを「…」メニュー > 「Connections」 > 統合を選択 から統合と共有してください。

オプション 2: OAuth 2.0(パブリック統合)

複数のワークスペースを対象とする統合の場合、OAuth 2.0 フローを使用します。

  1. 統合をパブリック統合として登録
  2. ユーザーを次にリダイレクト: https://api.notion.com/v1/oauth/authorize?client_id=...
  3. コードを /v1/oauth/token でアクセストークンと交換

Tajo への接続

Terminal window
tajo connectors install notion \
--token $NOTION_TOKEN

設定

基本セットアップ

connectors:
notion:
enabled: true
api_version: "2022-06-28"
sync:
databases: true
pages: false
users: true
databases:
- id: "abc123def456"
name: "Customers"
sync_to_list: 25
- id: "ghi789jkl012"
name: "Leads"
sync_to_list: 26

フィールドマッピング

Notion データベースのプロパティを Brevo 連絡先属性にマッピングします。

field_mapping:
# Notion プロパティ -> Brevo 属性
Name:
type: title
target: FIRSTNAME
Email:
type: email
target: email
Phone:
type: phone_number
target: SMS
Company:
type: rich_text
target: COMPANY
Status:
type: select
target: LEAD_STATUS
Deal Value:
type: number
target: DEAL_VALUE
Last Contact:
type: date
target: LAST_CONTACT_DATE
Tags:
type: multi_select
target: TAGS

API エンドポイント

Tajo は以下の Notion API エンドポイントと統合します。

エンドポイントメソッド目的
/v1/databases/{id}/queryPOSTデータベースエントリをクエリ
/v1/databases/{id}GETデータベーススキーマを取得
/v1/pagesPOST新しいページを作成
/v1/pages/{id}GETページプロパティを取得
/v1/pages/{id}PATCHページプロパティを更新
/v1/blocks/{id}/childrenGETブロックの子要素を取得
/v1/usersGETすべてのワークスペースユーザーを一覧取得
/v1/users/{id}GETユーザーを取得
/v1/searchPOSTワークスペース全体を検索

コード例

コネクタの初期化

import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({
apiKey: process.env.TAJO_API_KEY,
brevoApiKey: process.env.BREVO_API_KEY
});
await tajo.connectors.connect('notion', {
token: process.env.NOTION_TOKEN
});

データベースを Brevo に同期

// Notion データベースを Brevo リストに同期
await tajo.connectors.sync('notion', {
type: 'full',
resources: ['databases'],
databaseId: 'abc123def456',
targetList: 25
});
const status = await tajo.connectors.status('notion');
console.log(status);
// {
// connected: true,
// lastSync: '2024-03-15T14:30:00Z',
// databasesSynced: 2,
// pagesTracked: 1450,
// usersCount: 32
// }

クエリとフィルタ

// フィルタ付きで Notion データベースをクエリ
const results = await tajo.connectors.query('notion', {
databaseId: 'abc123def456',
filter: {
property: 'Status',
select: { equals: 'Active' }
},
sorts: [
{ property: 'Last Contact', direction: 'descending' }
]
});

Brevo イベントからページを作成

// Brevo 連絡先がマイルストーンに達したときに Notion ページを作成
tajo.events.on('contact.attribute_updated', async (event) => {
if (event.attribute === 'LIFECYCLE_STAGE' && event.value === 'customer') {
await tajo.connectors.create('notion', {
databaseId: 'ghi789jkl012',
properties: {
Name: { title: [{ text: { content: event.contact.name } }] },
Email: { email: event.contact.email },
'Converted Date': { date: { start: new Date().toISOString() } }
}
});
}
});

レート制限

Notion は統合ごとにレート制限を適用します。

制限タイプ
レート制限統合ごとに 3 リクエスト/秒
バースト制限短いバーストが許可され、その後スロットリング
ページサイズページネーションリクエストごとに最大 100 アイテム

カーソルベースのページネーション

Notion はカーソルベースのページネーションを使用します。Tajo はこれを自動的に処理し、has_morefalse を返すまで next_cursor パラメータを使用してすべてのページを反復処理します。

レート制限を超えると、Notion は Retry-After ヘッダー付きで 429 Too Many Requests を返します。

トラブルシューティング

一般的な問題

問題原因解決策
401 Unauthorizedトークンが無効または期限切れ統合トークンを再生成
403 Forbiddenページが統合と共有されていないConnections 経由でページ/データベースを統合と共有
404 Object not foundデータベース ID が不正または共有されていないデータベース ID と共有設定を確認
プロパティの欠落スキーマの不一致データベーススキーマを再同期してフィールドマッピングを更新
レート制限超過高速すぎるリクエスト同期頻度またはバッチサイズを削減

デバッグモード

connectors:
notion:
debug: true
log_level: verbose
log_api_calls: true

接続テスト

Terminal window
tajo connectors test notion
# ✓ API 認証に成功
# ✓ データベースアクセスを確認
# ✓ ユーザーリストにアクセス可能
# ✓ 検索操作可能
# ✓ ページ作成が利用可能

ベストプラクティス

  1. データベースを明示的に共有する - 内部統合は共有されたコンテンツのみを参照できる
  2. 検索よりもデータベースクエリを使用する - 既知のデータベースに対してはクエリの方が高速で信頼性が高い
  3. プロパティタイプを慎重にマッピングする - Notion は多くのプロパティタイプを持つので、Brevo 属性タイプに一致させる
  4. ページネーションを処理する - 完全なデータのため常にすべてのカーソルページを反復処理
  5. 増分同期を行う - 変更されたエントリのみを同期するため last_edited_time フィルタを使用
  6. ポーリングスケジュールを設定する - Notion はネイティブで Webhook をサポートしないため、定期的にポーリング

セキュリティ

  • ベアラートークン認証 - 統合シークレットと OAuth トークン
  • HTTPS のみ - すべての API 通信は TLS 1.2 以上で暗号化
  • スコープ付きアクセス - 統合は明示的に共有されたコンテンツのみにアクセス
  • OAuth 2.0 - パブリック統合用の安全な認可フロー
  • 暗号化されたストレージ - トークンは Tajo で保存時に暗号化
  • ワークスペース分離 - 各統合は単一のワークスペースにスコープ

関連リソース

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AIアシスタント

こんにちは!ドキュメントについて何でもお聞きください。