---
title: "Notion Connector"
description: "คู่มือการผสานรวม Notion ฉบับสมบูรณ์สำหรับการซิงค์ databases หน้า และเนื้อหา workspace กับ Brevo ผ่าน Tajo"
url: https://tajo.io/th/docs/connectors/custom/notion/
markdown: https://tajo.io/th/docs/connectors/custom/notion.md
lang: th-TH
robots: noindex
---

ขอสิทธิ์ใช้งานล่วงหน้า

กรอกชื่อและที่อยู่อีเมลที่ทำงานของคุณ เราจะส่งลิงก์เพื่อยืนยันคำขอเข้าใช้งาน Tajo ทางอีเมล

# Notion Connector

สถานะตัวเชื่อม: วางแผนไว้ ยังไม่ได้สร้าง ปัจจุบัน Tajo ยังไม่ได้ใช้งานตัวเชื่อมนี้

| ฟิลด์ต้นทาง | ฟิลด์ปลายทาง | ค่าตัวอย่าง |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

เชื่อมต่อ 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

## ข้อกำหนดเบื้องต้น

ก่อนเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมี:

1. Notion workspace ที่มีสิทธิ์ผู้ดูแลระบบ
2. Notion internal integration หรือ OAuth app
3. หน้า database ที่แชร์กับ integration
4. บัญชี Brevo ที่มีสิทธิ์เข้าถึง API
5. บัญชี Tajo ที่มีการสมัครสมาชิกที่ใช้งานอยู่

## การยืนยันตัวตน

Notion รองรับวิธีการยืนยันตัวตนสองแบบ

### ตัวเลือกที่ 1: Internal Integration (แนะนำสำหรับ workspace เดียว)

1. ไปที่ [notion.so/my-integrations](https://www.notion.so/my-integrations)
2. คลิก **New integration**
3. ตั้งชื่อว่า “Tajo Integration”
4. เลือก workspace ของคุณ
5. ตั้งค่าความสามารถ:

```
Content Capabilities:
  Read content: ✓
  Update content: ✓
  Insert content: ✓

User Capabilities:
  Read user information: ✓
```

6. คัดลอก **Internal Integration Secret** (เริ่มต้นด้วย `ntn_`)

ต้องแชร์หน้า

Internal integrations สามารถเข้าถึงเฉพาะหน้าและ databases ที่แชร์กับพวกเขาอย่างชัดเจน แชร์แต่ละ database เป้าหมายกับ integration ของคุณผ่าน ”…” เมนู > “Connections” > เลือก integration ของคุณ

### ตัวเลือกที่ 2: OAuth 2.0 (Public integrations)

สำหรับการผสานรวมที่ให้บริการหลาย workspaces ใช้ OAuth 2.0 flow:

1. ลงทะเบียน integration ของคุณเป็น public integration
2. เปลี่ยนเส้นทางผู้ใช้ไปที่: `https://api.notion.com/v1/oauth/authorize?client_id=...`
3. แลกเปลี่ยน code สำหรับ access token ที่ `/v1/oauth/token`

### เชื่อมต่อกับ Tajo

```bash
tajo connectors install notion \
  --token $NOTION_TOKEN
```

## การกำหนดค่า

### การตั้งค่าพื้นฐาน

```yaml
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:

```yaml
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: TAGS
```

## API 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

```javascript
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

```javascript
// Sync a Notion database to a Brevo list
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
// }
```

### Query และกรอง

```javascript
// Query Notion database with filters
const results = await tajo.connectors.query('notion', {
  databaseId: 'abc123def456',
  filter: {
    property: 'Status',
    select: { equals: 'Active' }
  },
  sorts: [
    { property: 'Last Contact', direction: 'descending' }
  ]
});
```

### สร้างหน้าจากเหตุการณ์ Brevo

```javascript
// Create a Notion page when a Brevo contact reaches a milestone
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 ใช้ขีดจำกัดอัตราต่อ 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

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

### ทดสอบการเชื่อมต่อ

```bash
tajo connectors test notion
# ✓ API authentication successful
# ✓ Database access verified
# ✓ User list accessible
# ✓ Search operational
# ✓ Page creation available
```

## แนวทางปฏิบัติที่ดีที่สุด

1. **แชร์ databases อย่างชัดเจน** - Internal integrations เห็นเฉพาะเนื้อหาที่แชร์
2. **ใช้ database queries แทนการค้นหา** - Queries เร็วกว่าและเชื่อถือได้มากกว่าสำหรับ databases ที่รู้จัก
3. **แมปประเภทคุณสมบัติอย่างระมัดระวัง** - Notion มีประเภทคุณสมบัติมากมาย จับคู่กับประเภทแอตทริบิวต์ Brevo
4. **จัดการ pagination** - วนซ้ำผ่านทุกหน้า cursor เสมอสำหรับข้อมูลที่สมบูรณ์
5. **ซิงค์แบบเพิ่มทีละน้อย** - ใช้ตัวกรอง `last_edited_time` เพื่อซิงค์เฉพาะรายการที่เปลี่ยนแปลง
6. **ตั้งค่าตารางการ 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 เดียว

## แหล่งข้อมูลที่เกี่ยวข้อง

- [Airtable Connector](https://tajo.io/th/docs/connectors/custom/airtable)
- [GitHub Connector](https://tajo.io/th/docs/connectors/custom/github)
- [Linear Connector](https://tajo.io/th/docs/connectors/custom/linear)
- [Brevo Contacts API](https://tajo.io/th/docs/contact-management)
