Notion-connector
Verbind je Notion-workspace met Brevo voor contentgedreven marketingworkflows, CRM-databasesynchronisatie en geautomatiseerde notificaties via Tajo.
Overzicht
| Eigenschap | Waarde |
|---|---|
| Platform | Notion |
| Categorie | Custom |
| Setupcomplexiteit | Eenvoudig |
| Officiële integratie | Nee |
| Gesynchroniseerde data | Databases, Pagina’s, Gebruikers |
| API-type | REST API |
| Authenticatie | Internal Integration Token / OAuth 2.0 |
| Base URL | https://api.notion.com |
| API-versie | 2022-06-28 (via Notion-Version-header) |
Functies
- Databasesynchronisatie - Synchroniseer Notion database-entries naar Brevo-contacten en lijsten
- CRM-bridge - Gebruik Notion-databases als lichtgewicht CRM, gesynchroniseerd met Brevo
- Contentnotificaties - Trigger Brevo-campagnes wanneer Notion-pagina’s worden gepubliceerd
- Property-mapping - Map Notion database-properties naar Brevo-contactattributen
- Pagina-monitoring - Volg pagina-updates en stuur deze door als Brevo-events
- Synchronisatie van gebruikerslijsten - Synchroniseer Notion-workspace-leden naar Brevo-contacten
Vereisten
Voordat je begint, zorg dat je beschikt over:
- Een Notion-workspace met admin-toegang
- Een Notion internal integration of OAuth-app
- Database-pagina’s gedeeld met de integratie
- Een Brevo-account met API-toegang
- Een Tajo-account met een actief abonnement
Authenticatie
Notion ondersteunt twee authenticatiemethoden.
Optie 1: Internal Integration (aanbevolen voor één workspace)
- Ga naar notion.so/my-integrations
- Klik op New integration
- Geef de naam “Tajo Integration”
- Selecteer je workspace
- Stel de capabilities in:
Content Capabilities: Read content: ✓ Update content: ✓ Insert content: ✓
User Capabilities: Read user information: ✓- Kopieer het Internal Integration Secret (begint met
ntn_)
Pagina delen vereist
Internal integrations hebben alleen toegang tot pagina’s en databases die expliciet met hen gedeeld zijn. Deel elke doeldatabase met je integratie via het ”…”-menu > “Connections” > selecteer je integratie.
Optie 2: OAuth 2.0 (publieke integraties)
Voor integraties die meerdere workspaces bedienen, gebruik je de OAuth 2.0-flow:
- Registreer je integratie als publieke integratie
- Verwijs gebruikers door naar:
https://api.notion.com/v1/oauth/authorize?client_id=... - Wissel de code in voor een access token op
/v1/oauth/token
Verbinden met Tajo
tajo connectors install notion \ --token $NOTION_TOKENConfiguratie
Basisinstelling
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: 26Veldmapping
Map Notion database-properties naar Brevo-contactattributen:
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-endpoints
Tajo integreert met de volgende Notion API-endpoints:
| Endpoint | Method | Doel |
|---|---|---|
/v1/databases/{id}/query | POST | Database-entries queryen |
/v1/databases/{id} | GET | Database-schema ophalen |
/v1/pages | POST | Een nieuwe pagina aanmaken |
/v1/pages/{id} | GET | Pagina-properties ophalen |
/v1/pages/{id} | PATCH | Pagina-properties bijwerken |
/v1/blocks/{id}/children | GET | Block-children ophalen |
/v1/users | GET | Alle workspace-gebruikers opvragen |
/v1/users/{id} | GET | Eén gebruiker ophalen |
/v1/search | POST | Zoeken binnen workspace |
Codevoorbeelden
Connector initialiseren
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});Database synchroniseren naar Brevo
// 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// }Queryen en filteren
// 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' } ]});Pagina aanmaken vanuit Brevo-event
// 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() } } } }); }});Rate limits
Notion hanteert rate limits per integratie:
| Limiettype | Waarde |
|---|---|
| Rate limit | 3 requests per seconde per integratie |
| Burst limit | Korte bursts toegestaan, daarna throttling |
| Page size | Max 100 items per gepagineerd request |
Cursor-gebaseerde paginering
Notion gebruikt cursor-gebaseerde paginering. Tajo regelt dit automatisch en doorloopt alle pagina’s via de next_cursor-parameter totdat has_more false retourneert.
Notion retourneert 429 Too Many Requests wanneer rate limits worden overschreden, met een Retry-After-header.
Probleemoplossing
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
| 401 Unauthorized | Ongeldig of verlopen token | Regenereer het integration token |
| 403 Forbidden | Pagina niet gedeeld met integratie | Deel pagina/database met integratie via Connections |
| 404 Object not found | Database-ID onjuist of niet gedeeld | Verifieer database-ID en deelinstellingen |
| Properties ontbreken | Schema-mismatch | Synchroniseer database-schema opnieuw en update veldmapping |
| Rate limit overschreden | Te veel snelle requests | Verlaag synchronisatiefrequentie of batchgrootte |
Debugmodus
connectors: notion: debug: true log_level: verbose log_api_calls: trueVerbinding testen
tajo connectors test notion# ✓ API authentication successful# ✓ Database access verified# ✓ User list accessible# ✓ Search operational# ✓ Page creation availableBest practices
- Deel databases expliciet - Internal integrations zien alleen gedeelde content
- Gebruik database-queries boven search - Queries zijn sneller en betrouwbaarder voor bekende databases
- Map property-types zorgvuldig - Notion heeft veel property-types; match ze met Brevo-attribuuttypes
- Behandel paginering - Doorloop altijd alle cursor-pagina’s voor volledige data
- Synchroniseer incrementeel - Gebruik
last_edited_time-filters om alleen gewijzigde entries te synchroniseren - Stel een polling-schema in - Notion ondersteunt webhooks niet native; poll op regelmatige intervallen
Beveiliging
- Bearer Token-authenticatie - Integration secrets en OAuth-tokens
- Alleen HTTPS - Alle API-communicatie versleuteld via TLS 1.2+
- Gescoopte toegang - Integraties hebben alleen toegang tot expliciet gedeelde content
- OAuth 2.0 - Veilige autorisatieflow voor publieke integraties
- Versleutelde opslag - Tokens versleuteld in rust binnen Tajo
- Workspace-isolatie - Elke integratie is gescoped op één workspace