Notion Connector
Verbinde deinen Notion-Workspace über Tajo mit Brevo für inhaltsbasierte Marketing-Workflows, CRM-Datenbank-Synchronisierung und automatisierte Benachrichtigungen.
Überblick
| Eigenschaft | Wert |
|---|---|
| Plattform | Notion |
| Kategorie | Custom |
| Einrichtungsaufwand | Einfach |
| Offizielle Integration | Nein |
| Synchronisierte Daten | Datenbanken, Seiten, Nutzer:innen |
| API-Typ | REST API |
| Authentifizierung | Internes Integrationstoken / OAuth 2.0 |
| Basis-URL | https://api.notion.com |
| API-Version | 2022-06-28 (über Notion-Version-Header) |
Funktionen
- Datenbank-Synchronisierung - Synchronisiere Notion-Datenbankeinträge mit Brevo-Kontakten und -Listen
- CRM-Bridge - Nutze Notion-Datenbanken als leichtgewichtiges CRM, synchronisiert mit Brevo
- Inhaltsbenachrichtigungen - Löse Brevo-Kampagnen aus, wenn Notion-Seiten veröffentlicht werden
- Eigenschaftszuordnung - Ordne Notion-Datenbank-Eigenschaften Brevo-Kontaktattributen zu
- Seitenüberwachung - Verfolge Seiten-Updates und leite sie als Brevo-Events weiter
- Synchronisierung des Nutzer:innen-Verzeichnisses - Synchronisiere Mitglieder des Notion-Workspace mit Brevo-Kontakten
Voraussetzungen
Bevor du beginnst, stelle sicher, dass du Folgendes hast:
- Einen Notion-Workspace mit Admin-Zugriff
- Eine interne Notion-Integration oder OAuth-App
- Datenbankseiten, die mit der Integration geteilt sind
- Ein Brevo-Konto mit API-Zugriff
- Ein Tajo-Konto mit aktivem Abonnement
Authentifizierung
Notion unterstützt zwei Authentifizierungsmethoden.
Option 1: Interne Integration (Empfohlen für einzelne Workspaces)
- Gehe zu notion.so/my-integrations
- Klicke auf New integration
- Benenne sie mit “Tajo Integration”
- Wähle deinen Workspace aus
- Setze Fähigkeiten:
Content Capabilities: Read content: ✓ Update content: ✓ Insert content: ✓
User Capabilities: Read user information: ✓- Kopiere das Internal Integration Secret (beginnt mit
ntn_)
Seitenfreigabe erforderlich
Interne Integrationen können nur auf Seiten und Datenbanken zugreifen, die explizit mit ihnen geteilt wurden. Teile jede Ziel-Datenbank mit deiner Integration über das ”…”-Menü > “Verbindungen” > wähle deine Integration aus.
Option 2: OAuth 2.0 (öffentliche Integrationen)
Für Integrationen, die mehrere Workspaces bedienen, nutze den OAuth-2.0-Flow:
- Registriere deine Integration als öffentliche Integration
- Leite Nutzer:innen weiter zu:
https://api.notion.com/v1/oauth/authorize?client_id=... - Tausche den Code gegen ein Zugriffstoken unter
/v1/oauth/tokenein
Verbindung zu Tajo herstellen
tajo connectors install notion \ --token $NOTION_TOKENKonfiguration
Grundeinrichtung
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: 26Feldzuordnung
Ordne Notion-Datenbank-Eigenschaften Brevo-Kontaktattributen zu:
field_mapping: # Notion property -> Brevo attribute 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: TAGSAPI-Endpunkte
Tajo integriert die folgenden Notion-API-Endpunkte:
| Endpunkt | Methode | Zweck |
|---|---|---|
/v1/databases/{id}/query | POST | Datenbankeinträge abfragen |
/v1/databases/{id} | GET | Datenbank-Schema abrufen |
/v1/pages | POST | Neue Seite erstellen |
/v1/pages/{id} | GET | Seiten-Eigenschaften abrufen |
/v1/pages/{id} | PATCH | Seiten-Eigenschaften aktualisieren |
/v1/blocks/{id}/children | GET | Block-Children abrufen |
/v1/users | GET | Alle Workspace-Nutzer:innen auflisten |
/v1/users/{id} | GET | Eine:n Nutzer:in abrufen |
/v1/search | POST | Im Workspace suchen |
Code-Beispiele
Connector initialisieren
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});Datenbank mit Brevo synchronisieren
// Sync a Notion database to a Brevo listawait 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// }Abfragen und Filtern
// Query Notion database with filtersconst results = await tajo.connectors.query('notion', { databaseId: 'abc123def456', filter: { property: 'Status', select: { equals: 'Active' } }, sorts: [ { property: 'Last Contact', direction: 'descending' } ]});Seite aus Brevo-Event erstellen
// Create a Notion page when a Brevo contact reaches a milestonetajo.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() } } } }); }});Ratenbegrenzungen
Notion erzwingt Ratenbegrenzungen pro Integration:
| Limit-Typ | Wert |
|---|---|
| Rate-Limit | 3 Anfragen pro Sekunde pro Integration |
| Burst-Limit | Kurze Bursts erlaubt, danach gedrosselt |
| Seitengröße | Max. 100 Einträge pro paginierter Anfrage |
Cursor-basierte Paginierung
Notion verwendet cursorbasierte Paginierung. Tajo handhabt dies automatisch, indem alle Seiten über den next_cursor-Parameter iteriert werden, bis has_more false zurückgibt.
Notion liefert 429 Too Many Requests mit einem Retry-After-Header zurück, wenn Rate-Limits überschritten werden.
Fehlerbehebung
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
| 401 Unauthorized | Ungültiges oder abgelaufenes Token | Integrationstoken neu generieren |
| 403 Forbidden | Seite nicht mit Integration geteilt | Seite/Datenbank über Verbindungen mit der Integration teilen |
| 404 Object not found | Datenbank-ID falsch oder nicht geteilt | Datenbank-ID und Freigabeeinstellungen prüfen |
| Eigenschaften fehlen | Schema passt nicht | Datenbank-Schema neu synchronisieren und Feldzuordnung aktualisieren |
| Rate-Limit überschritten | Zu viele schnelle Anfragen | Synchronisierungsfrequenz oder Batch-Größe reduzieren |
Debug-Modus
connectors: notion: debug: true log_level: verbose log_api_calls: trueVerbindung testen
tajo connectors test notion# ✓ API authentication successful# ✓ Database access verified# ✓ User list accessible# ✓ Search operational# ✓ Page creation availableBest Practices
- Datenbanken explizit teilen - Interne Integrationen sehen nur geteilte Inhalte
- Datenbank-Abfragen gegenüber Suche bevorzugen - Queries sind bei bekannten Datenbanken schneller und zuverlässiger
- Eigenschaftstypen sorgfältig zuordnen - Notion hat viele Eigenschaftstypen; passe sie an Brevo-Attributtypen an
- Paginierung handhaben - Iteriere stets durch alle Cursor-Seiten für vollständige Daten
- Inkrementell synchronisieren - Nutze
last_edited_time-Filter, um nur geänderte Einträge zu synchronisieren - Polling-Zeitplan einrichten - Notion unterstützt keine nativen Webhooks; polle in regelmäßigen Abständen
Sicherheit
- Bearer-Token-Authentifizierung - Integrations-Secrets und OAuth-Tokens
- Nur HTTPS - Die gesamte API-Kommunikation ist per TLS 1.2+ verschlüsselt
- Scope-basierter Zugriff - Integrationen greifen nur auf explizit geteilte Inhalte zu
- OAuth 2.0 - Sicherer Autorisierungs-Flow für öffentliche Integrationen
- Verschlüsselte Speicherung - Tokens werden in Tajo verschlüsselt gespeichert
- Workspace-Isolation - Jede Integration ist auf einen einzelnen Workspace beschränkt