Notion Connector
เชื่อมต่อ Notion workspace กับ Brevo สำหรับเวิร์กโฟลว์การตลาดที่ขับเคลื่อนด้วยเนื้อหา การซิงค์ CRM database และการแจ้งเตือนอัตโนมัติผ่าน Tajo
ภาพรวม
| คุณสมบัติ | ค่า |
|---|---|
| แพลตฟอร์ม | Notion |
| หมวดหมู่ | แบบกำหนดเอง |
| ความซับซ้อนในการตั้งค่า | ง่าย |
| การผสานรวมอย่างเป็นทางการ | ไม่ |
| ข้อมูลที่ซิงค์ | Databases หน้า ผู้ใช้ |
| ประเภท API | REST API |
| การยืนยันตัวตน | Internal Integration Token / OAuth 2.0 |
| Base URL | https://api.notion.com |
| เวอร์ชัน API | 2022-06-28 (ผ่าน Notion-Version header) |
ฟีเจอร์
- การซิงค์ database - ซิงค์รายการ Notion database กับผู้ติดต่อและรายการ Brevo
- CRM bridge - ใช้ Notion databases เป็น CRM แบบ lightweight ที่ซิงค์กับ Brevo
- การแจ้งเตือนเนื้อหา - ทริกเกอร์แคมเปญ Brevo เมื่อหน้า Notion ถูกเผยแพร่
- การแมปคุณสมบัติ - แมปคุณสมบัติ Notion database กับแอตทริบิวต์ผู้ติดต่อ Brevo
- การตรวจสอบหน้า - ติดตามการอัปเดตหน้าและส่งต่อเป็นเหตุการณ์ Brevo
- การซิงค์ directory ผู้ใช้ - ซิงค์สมาชิก Notion workspace กับผู้ติดต่อ Brevo
ข้อกำหนดเบื้องต้น
ก่อนเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมี:
- Notion workspace ที่มีสิทธิ์ผู้ดูแลระบบ
- Notion internal integration หรือ OAuth app
- หน้า database ที่แชร์กับ integration
- บัญชี Brevo ที่มีสิทธิ์เข้าถึง API
- บัญชี Tajo ที่มีการสมัครสมาชิกที่ใช้งานอยู่
การยืนยันตัวตน
Notion รองรับวิธีการยืนยันตัวตนสองแบบ
ตัวเลือกที่ 1: Internal Integration (แนะนำสำหรับ workspace เดียว)
- ไปที่ notion.so/my-integrations
- คลิก New integration
- ตั้งชื่อว่า “Tajo Integration”
- เลือก workspace ของคุณ
- ตั้งค่าความสามารถ:
Content Capabilities: Read content: ✓ Update content: ✓ Insert content: ✓
User Capabilities: Read user information: ✓- คัดลอก Internal Integration Secret (เริ่มต้นด้วย
ntn_)
ต้องแชร์หน้า
Internal integrations สามารถเข้าถึงเฉพาะหน้าและ databases ที่แชร์กับพวกเขาอย่างชัดเจน แชร์แต่ละ database เป้าหมายกับ integration ของคุณผ่าน ”…” เมนู > “Connections” > เลือก integration ของคุณ
ตัวเลือกที่ 2: OAuth 2.0 (Public integrations)
สำหรับการผสานรวมที่ให้บริการหลาย workspaces ใช้ OAuth 2.0 flow:
- ลงทะเบียน integration ของคุณเป็น public integration
- เปลี่ยนเส้นทางผู้ใช้ไปที่:
https://api.notion.com/v1/oauth/authorize?client_id=... - แลกเปลี่ยน code สำหรับ access token ที่
/v1/oauth/token
เชื่อมต่อกับ Tajo
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 database กับแอตทริบิวต์ผู้ติดต่อ Brevo:
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 ผสานรวมกับ Notion API endpoints ต่อไปนี้:
| Endpoint | เมธอด | จุดประสงค์ |
|---|---|---|
/v1/databases/{id}/query | POST | Query รายการ database |
/v1/databases/{id} | GET | ดึง database schema |
/v1/pages | POST | สร้างหน้าใหม่ |
/v1/pages/{id} | GET | ดึงคุณสมบัติหน้า |
/v1/pages/{id} | PATCH | อัปเดตคุณสมบัติหน้า |
/v1/blocks/{id}/children | GET | ดึง children ของ block |
/v1/users | GET | แสดงรายการผู้ใช้ workspace ทั้งหมด |
/v1/users/{id} | GET | ดึงผู้ใช้ |
/v1/search | POST | ค้นหาทั่ว workspace |
ตัวอย่างโค้ด
เริ่มต้น Connector
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 กับ 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// }Query และกรอง
// 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' } ]});สร้างหน้าจากเหตุการณ์ Brevo
// 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() } } } }); }});ขีดจำกัดอัตรา
Notion ใช้ขีดจำกัดอัตราต่อ integration:
| ประเภทขีดจำกัด | ค่า |
|---|---|
| ขีดจำกัดอัตรา | 3 คำขอต่อวินาทีต่อ integration |
| ขีดจำกัด Burst | อนุญาต burst สั้นๆ จากนั้นถูกจำกัด |
| ขนาดหน้า | สูงสุด 100 รายการต่อคำขอแบบ paginated |
Cursor-Based Pagination
Notion ใช้ cursor-based pagination Tajo จัดการสิ่งนี้โดยอัตโนมัติ วนซ้ำผ่านทุกหน้าโดยใช้พารามิเตอร์ next_cursor จนกระทั่ง has_more ส่งคืน false
Notion ส่งคืน 429 Too Many Requests เมื่อเกินขีดจำกัดอัตรา พร้อม header Retry-After
การแก้ไขปัญหา
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | วิธีแก้ |
|---|---|---|
| 401 Unauthorized | Token ไม่ถูกต้องหรือหมดอายุ | สร้าง integration token ใหม่ |
| 403 Forbidden | หน้าไม่ได้แชร์กับ integration | แชร์หน้า/database กับ integration ผ่าน Connections |
| 404 Object not found | Database ID ไม่ถูกต้องหรือไม่ได้แชร์ | ตรวจสอบ database ID และการตั้งค่าการแชร์ |
| คุณสมบัติหายไป | Schema ไม่ตรงกัน | ซิงค์ database schema ใหม่และอัปเดตการแมปฟิลด์ |
| เกินขีดจำกัดอัตรา | คำขอรวดเร็วมากเกินไป | ลดความถี่การซิงค์หรือขนาด batch |
โหมด Debug
connectors: notion: debug: true log_level: verbose log_api_calls: trueทดสอบการเชื่อมต่อ
tajo connectors test notion# ✓ API authentication successful# ✓ Database access verified# ✓ User list accessible# ✓ Search operational# ✓ Page creation availableแนวทางปฏิบัติที่ดีที่สุด
- แชร์ databases อย่างชัดเจน - Internal integrations เห็นเฉพาะเนื้อหาที่แชร์
- ใช้ database queries แทนการค้นหา - Queries เร็วกว่าและเชื่อถือได้มากกว่าสำหรับ databases ที่รู้จัก
- แมปประเภทคุณสมบัติอย่างระมัดระวัง - Notion มีประเภทคุณสมบัติมากมาย จับคู่กับประเภทแอตทริบิวต์ Brevo
- จัดการ pagination - วนซ้ำผ่านทุกหน้า cursor เสมอสำหรับข้อมูลที่สมบูรณ์
- ซิงค์แบบเพิ่มทีละน้อย - ใช้ตัวกรอง
last_edited_timeเพื่อซิงค์เฉพาะรายการที่เปลี่ยนแปลง - ตั้งค่าตารางการ polling - Notion ไม่รองรับ webhooks ในแบบ native ต้อง poll ที่ช่วงเวลาปกติ
ความปลอดภัย
- การยืนยันตัวตน Bearer Token - Integration secrets และ OAuth tokens
- HTTPS เท่านั้น - การสื่อสาร API ทั้งหมดเข้ารหัสผ่าน TLS 1.2+
- การเข้าถึงแบบกำหนดขอบเขต - Integrations เข้าถึงเฉพาะเนื้อหาที่แชร์อย่างชัดเจน
- OAuth 2.0 - โฟลว์การอนุญาตที่ปลอดภัยสำหรับ public integrations
- การจัดเก็บที่เข้ารหัส - Tokens เข้ารหัสที่เก็บใน Tajo
- การแยก Workspace - แต่ละ integration กำหนดขอบเขตกับ workspace เดียว