---
title: "Airtable コネクタ"
description: "Tajo を介して Airtable のベース、テーブル、レコードを Brevo の連絡先およびリストと同期するための完全な Airtable 統合ガイド。"
url: https://tajo.io/jp/docs/connectors/custom/airtable/
markdown: https://tajo.io/jp/docs/connectors/custom/airtable.md
lang: ja-JP
robots: noindex
---

先行利用を申し込む

お名前と会社のメールアドレスを入力してください。Tajoへのアクセス申請を確認するためのリンクをメールでお送りします。

# Airtable コネクタ

コネクターのステータス: 予定 まだ構築されていません。Tajo は現在このコネクターを実行していません。

| 送信元フィールド | 送信先フィールド | サンプル値 |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Airtable のベースを Brevo に接続して、CRM 同期、製品カタログ管理、Tajo による構造化データを活用したマーケティング自動化ワークフローを実現します。

## 概要

| プロパティ | 値 |
| --- | --- |
| **プラットフォーム** | Airtable |
| **カテゴリ** | カスタム |
| **セットアップの複雑さ** | 簡単 |
| **公式統合** | いいえ |
| **同期データ** | レコード、テーブル、ユーザー |
| **API タイプ** | REST API |
| **認証** | Personal Access Token / OAuth 2.0 |
| **ベース URL** | `https://api.airtable.com/v0/` |

## 機能

- **テーブルからリストへの同期** - Airtable テーブルのレコードを Brevo の連絡先リストに直接同期
- **製品カタログブリッジ** - Airtable テーブルをメールレコメンデーション用の製品カタログとして使用
- **CRM 同期** - Airtable CRM と Brevo 連絡先の双方向同期
- **フォーム送信イベント** - Airtable のフォーム送信を Brevo イベントとして転送
- **ビューベースのフィルタリング** - 特定の Airtable ビューをターゲットの Brevo リストに同期
- **Webhook 自動化** - Airtable のレコードが変更されたときに Brevo キャンペーンをトリガー

## 前提条件

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

1. Airtable アカウント(無料プラン以上)
2. 設定済みの Personal Access Token または OAuth アプリ
3. 同期するベースおよびテーブルへのアクセス権
4. API アクセス可能な Brevo アカウント
5. 有効なサブスクリプションを持つ Tajo アカウント

## 認証

Airtable は Personal Access Tokens と OAuth 2.0 をサポートしています。

### オプション 1: Personal Access Token(推奨)

1. [airtable.com/create/tokens](https://airtable.com/create/tokens) にアクセス
2. **Create new token** をクリック
3. 「Tajo Integration」と名前を付ける
4. スコープを追加:

```
data.records:read
data.records:write
data.recordComments:read
schema.bases:read
webhook:manage
```

5. 特定のベースまたは全ベースへのアクセスを追加
6. **Create token** をクリック

### オプション 2: OAuth 2.0

マルチユーザー統合には OAuth 2.0 フローを使用します。

1. [airtable.com/create/oauth](https://airtable.com/create/oauth) で統合を登録
2. リダイレクト URI を設定: `https://app.tajo.io/callbacks/airtable`
3. 上記と同じスコープをリクエスト

トークンスコープ

Personal Access Tokens は特定のベースにスコープできます。セキュリティのため、「All current and future bases」を選択するのではなく、統合に必要なベースにのみアクセスを付与してください。

### Tajo への接続

```bash
tajo connectors install airtable \
  --token $AIRTABLE_TOKEN
```

## 設定

### 基本セットアップ

```yaml
connectors:
  airtable:
    enabled: true

    sync:
      records: true
      comments: false

    tables:
      - base_id: "appXXXXXXXXXXXXXX"
        table_name: "Customers"
        view: "Active Customers"
        sync_to_list: 28
      - base_id: "appXXXXXXXXXXXXXX"
        table_name: "Products"
        sync_as: "catalog"
```

### フィールドマッピング

Airtable のフィールドを Brevo の連絡先属性にマッピングします。

```yaml
field_mapping:
  # Airtable フィールド -> Brevo 属性
  Name: FIRSTNAME
  Email: email
  Phone: SMS
  Company: COMPANY
  Status: LEAD_STATUS
  Revenue: TOTAL_REVENUE
  "Last Contact": LAST_CONTACT_DATE
  Tags: TAGS
  Notes: NOTES
  "Created Time": SIGNUP_DATE
```

### ビューベースの同期

```yaml
views:
  - base_id: "appXXXXXXXXXXXXXX"
    table_name: "Customers"
    view: "High Value"
    sync_to_list: 29
    filter_by_view: true

  - base_id: "appXXXXXXXXXXXXXX"
    table_name: "Customers"
    view: "Churned"
    sync_to_list: 30
    filter_by_view: true
```

## API エンドポイント

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

| エンドポイント | メソッド | 目的 |
| --- | --- | --- |
| `/v0/{baseId}/{tableIdOrName}` | GET | テーブル内のレコードを一覧取得 |
| `/v0/{baseId}/{tableIdOrName}` | POST | レコードを作成 |
| `/v0/{baseId}/{tableIdOrName}` | PATCH | レコードを更新 |
| `/v0/{baseId}/{tableIdOrName}` | DELETE | レコードを削除 |
| `/v0/{baseId}/{tableIdOrName}/{recordId}` | GET | 単一レコードを取得 |
| `/v0/meta/bases` | GET | アクセス可能なベースを一覧取得 |
| `/v0/meta/bases/{baseId}/tables` | GET | ベース内のテーブルを一覧取得 |
| `/v0/{baseId}/{tableIdOrName}/listRecordComments` | GET | レコードコメントを一覧取得 |
| `/v0/bases/{baseId}/webhooks` | POST | Webhook を作成 |
| `/v0/bases/{baseId}/webhooks` | GET | Webhook を一覧取得 |

## コード例

### コネクタの初期化

```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('airtable', {
  token: process.env.AIRTABLE_TOKEN
});
```

### テーブルを Brevo に同期

```javascript
// Airtable テーブルを Brevo リストに同期
await tajo.connectors.sync('airtable', {
  type: 'full',
  resources: ['records'],
  baseId: 'appXXXXXXXXXXXXXX',
  tableName: 'Customers',
  view: 'Active Customers',
  targetList: 28
});

const status = await tajo.connectors.status('airtable');
console.log(status);
// {
//   connected: true,
//   lastSync: '2024-03-15T15:00:00Z',
//   recordsSynced: 2340,
//   tablesMonitored: 2,
//   basesConnected: 1
// }
```

### Webhook の処理

```javascript
// Airtable Webhook は変更を通知します。カーソルで詳細を取得します
app.post('/webhooks/airtable', async (req, res) => {
  const { base, webhook, timestamp } = req.body;

  // Webhook カーソルを使用して変更されたレコードを取得
  const changes = await tajo.connectors.getWebhookPayloads('airtable', {
    baseId: base.id,
    webhookId: webhook.id,
    cursor: timestamp
  });

  for (const change of changes) {
    await tajo.connectors.handleEvent('airtable', {
      type: change.actionType,
      payload: change
    });
  }

  res.status(200).send('OK');
});
```

### Brevo からレコードを作成

```javascript
// Brevo 連絡先がコンバートしたときに Airtable レコードを作成
tajo.events.on('contact.attribute_updated', async (event) => {
  if (event.attribute === 'LIFECYCLE_STAGE' && event.value === 'customer') {
    await tajo.connectors.create('airtable', {
      baseId: 'appXXXXXXXXXXXXXX',
      tableName: 'Customers',
      fields: {
        Name: event.contact.name,
        Email: event.contact.email,
        Status: 'Customer',
        'Converted Date': new Date().toISOString().split('T')[0]
      }
    });
  }
});
```

## レート制限

Airtable はベースごとにレート制限を適用します。

| 制限タイプ | 値 |
| --- | --- |
| **API レート制限** | ベースごとに 5 リクエスト/秒 |
| **リクエストあたりのレコード数** | 最大 100 レコード(一覧)、最大 10 レコード(作成/更新) |
| **Webhook ペイロード** | `listWebhookPayloads` 呼び出しあたり 50 ペイロード |
| **リクエストサイズ** | ペイロード最大約 2MB |

バッチ操作

Airtable ではリクエストあたり最大 10 レコードの作成または更新が可能です。Tajo はより大きな操作を複数のリクエストに自動的にバッチ処理し、レート制限を遵守します。

## トラブルシューティング

### 一般的な問題

| 問題 | 原因 | 解決策 |
| --- | --- | --- |
| 401 Unauthorized | トークンが無効または期限切れ | Personal Access Token を再生成 |
| 403 Forbidden | トークンにベースアクセス権がない | トークンのスコープにベースを追加 |
| 404 Not Found | 無効なベースまたはテーブル ID | ベース ID とテーブル名を確認 |
| 422 Invalid Request | フィールドタイプの不一致 | Airtable のフィールドタイプがデータと一致するか確認 |
| レート制限超過 | ベースあたり 5 req/s を超過 | 同期頻度を下げるか、ベース同期を分散 |

### デバッグモード

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

### 接続テスト

```bash
tajo connectors test airtable
# ✓ API 認証に成功
# ✓ ベースアクセスを確認
# ✓ テーブルスキーマ読み取り可能
# ✓ レコード一覧操作可能
# ✓ Webhook 登録が利用可能
```

## ベストプラクティス

1. **トークンを特定のベースにスコープする** - 必要な場合を除き、すべてのベースへのアクセスを付与しない
2. **フィルタ同期にはビューを使用する** - データ量を減らすため、完全なテーブルではなく特定のビューを同期
3. **レコード操作をバッチ処理する** - 作成と更新を 10 件単位でグループ化
4. **ページネーションを処理する** - Airtable はページあたり 100 レコードを返します。`offset` で反復処理
5. **リアルタイムには Webhook を使用する** - ポーリングの代わりに Webhook を登録して変更を検知
6. **フィールドタイプを正確にマッピングする** - Airtable のフィールドタイプ(select、number、date)を Brevo 属性タイプに一致させる

## セキュリティ

- **Personal Access Tokens** - 特定のベースと操作にスコープ
- **OAuth 2.0** - リフレッシュトークンを使用した安全な認可フロー
- **HTTPS のみ** - すべての API 通信は TLS 1.2 以上で暗号化
- **ベースレベルのアクセス制御** - トークンは個別のベースにスコープ
- **暗号化されたストレージ** - トークンは Tajo で保存時に暗号化
- **Webhook HMAC 検証** - Webhook 通知の真正性を検証

## 関連リソース

- [Notion コネクタ](https://tajo.io/jp/docs/connectors/custom/notion)
- [GitHub コネクタ](https://tajo.io/jp/docs/connectors/custom/github)
- [顧客同期スキル](https://tajo.io/jp/docs/skills/data-sync/customer-sync)
- [Brevo Contacts API](https://tajo.io/jp/docs/contact-management)
