Freshdesk コネクター
Freshdesk を Tajo 経由で Brevo に接続し、サポートとマーケティングのデータを統合します。顧客サポートチケット、コンタクトプロファイル、満足度スコアを同期して、サポートでのやり取りに基づくターゲットコミュニケーションを実現できます。
概要
| 項目 | 値 |
|---|---|
| プラットフォーム | Freshdesk |
| カテゴリー | サポート |
| セットアップ難易度 | 簡単 |
| 公式統合 | なし |
| 同期データ | チケット、コンタクト、エージェント、カンパニー |
| 利用可能なスキル | 6 |
機能
- コンタクト同期 - Freshdesk コンタクトを Brevo コンタクトリストに双方向同期
- チケットイベント追跡 - チケットの作成、更新、解決イベントを Brevo へ転送
- CSAT 同期 - 顧客満足度スコアを Brevo のコンタクト属性として同期
- カンパニー同期 - Freshdesk カンパニーを Brevo のコンタクトセグメンテーションにマッピング
- エージェントデータ - 内部ワークフロー自動化のためにエージェント割り当てを追跡
- カスタムフィールド - Freshdesk のカスタムチケット・コンタクトフィールドを Brevo 属性にマッピング
前提条件
開始する前に、以下をご用意ください。
- 管理者アクセス権付きの Freshdesk アカウント
- Freshdesk API キー (プロファイル設定で確認可能)
- Freshdesk ドメイン (例:
yourcompany.freshdesk.com) - API アクセス付きの Brevo アカウント
- API 認証情報を持つ Tajo アカウント
認証
API キー認証
Freshdesk は HTTP Basic 認証で API キー認証を行います。API キーをユーザー名として使用し、パスワードには任意の文字列 (通常は X) を設定します。
curl -u "YOUR_API_KEY:X" \ https://yourcompany.freshdesk.com/api/v2/ticketsまたは Authorization ヘッダーで Base64 エンコードを使用します。
curl https://yourcompany.freshdesk.com/api/v2/tickets \ -H "Authorization: Basic BASE64_ENCODED_API_KEY:X" \ -H "Content-Type: application/json"API キーの確認方法
- Freshdesk アカウントにログイン
- 右上のプロファイル画像をクリック
- プロファイル設定へ移動
- 右側に API キーが表示されます
設定
基本セットアップ
connectors: freshdesk: enabled: true domain: "yourcompany.freshdesk.com" api_key: "your-freshdesk-api-key"
# Data sync options sync: contacts: true tickets: true companies: true satisfaction_ratings: true
# Brevo list assignment lists: all_support_contacts: 30 open_tickets: 31 resolved_tickets: 32コンタクトフィールドマッピング
Freshdesk コンタクトフィールドを Brevo 属性にマッピングします。
contact_mapping: email: email name: FULLNAME phone: SMS company_id: COMPANY job_title: JOB_TITLE twitter_id: TWITTER language: LANGUAGE time_zone: TIMEZONE
# Support metrics total_tickets: TICKET_COUNT open_tickets: OPEN_TICKETS avg_csat: CSAT_SCORE last_ticket_date: LAST_SUPPORT_DATE
# Custom fields custom_fields.account_type: ACCOUNT_TYPE custom_fields.subscription_tier: PLANチケットイベントマッピング
Freshdesk チケットイベントを Brevo オートメーショントリガーにマッピングします。
ticket_events: ticket_created: "support_ticket_created" ticket_updated: "support_ticket_updated" ticket_resolved: "support_ticket_resolved" ticket_closed: "support_ticket_closed" ticket_reopened: "support_ticket_reopened" satisfaction_rated: "csat_submitted" note_added: "support_note_added"API エンドポイント
| メソッド | エンドポイント | 説明 |
|---|---|---|
GET | /api/v2/tickets | 全チケット一覧 |
POST | /api/v2/tickets | チケットを作成 |
GET | /api/v2/tickets/{id} | 特定のチケットを取得 |
PUT | /api/v2/tickets/{id} | チケットを更新 |
DELETE | /api/v2/tickets/{id} | チケットを削除 |
GET | /api/v2/contacts | 全コンタクト一覧 |
POST | /api/v2/contacts | コンタクトを作成 |
PUT | /api/v2/contacts/{id} | コンタクトを更新 |
GET | /api/v2/companies | 全カンパニー一覧 |
GET | /api/v2/agents | 全エージェント一覧 |
GET | /api/v2/surveys/satisfaction_ratings | CSAT 評価一覧 |
GET | /api/v2/search/tickets?query= | チケット検索 |
コード例
Freshdesk コネクターの初期化
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Connect Freshdesk accountawait tajo.connectors.connect('freshdesk', { domain: 'yourcompany.freshdesk.com', apiKey: process.env.FRESHDESK_API_KEY});コンタクトを Brevo に同期
// Fetch Freshdesk contacts and sync to Brevoconst response = await fetch( 'https://yourcompany.freshdesk.com/api/v2/contacts?page=1&per_page=100', { headers: { 'Authorization': 'Basic ' + btoa(`${API_KEY}:X`), 'Content-Type': 'application/json' } });
const contacts = await response.json();// Each contact:// {// "id": 12345,// "name": "Jane Kim",// "email": "[email protected]",// "phone": "+15551234567",// "company_id": 678,// "job_title": "Product Manager",// "created_at": "2024-01-15T10:30:00Z"// }チケットイベントを追跡
// Set up Freshdesk webhook to forward ticket events// Configure in Freshdesk Admin > Automations > Webhook
// Webhook handlerapp.post('/webhooks/freshdesk', async (req, res) => { const { ticket, event_type } = req.body;
await tajo.connectors.handleWebhook('freshdesk', { topic: event_type, payload: { ticketId: ticket.id, subject: ticket.subject, status: ticket.status, priority: ticket.priority, requesterEmail: ticket.requester.email, createdAt: ticket.created_at } });
res.status(200).send('OK');});顧客別のチケット検索
// Search for all tickets from a specific customerconst response = await fetch( `https://yourcompany.freshdesk.com/api/v2/search/tickets?query=${query}`, { headers: { 'Authorization': 'Basic ' + btoa(`${API_KEY}:X`) } });
const { results, total } = await response.json();レート制限
| プラン | 制限 | 詳細 |
|---|---|---|
| Sprout | 50 リクエスト/分 | 無料プラン |
| Blossom | 200 リクエスト/分 | スタータープラン |
| Garden | 400 リクエスト/分 | グロースプラン |
| Estate | 700 リクエスト/分 | プロプラン |
| Forest | 1,000 リクエスト/分 | エンタープライズプラン |
その他の制限:
| リソース | 制限 |
|---|---|
| リストエンドポイント | 1 クエリあたり 30 ページ |
| 1 ページあたり | 最大 100 レコード |
| Search API | 2 リクエスト/秒 |
| バルク操作 | 1 リクエストあたり 10 レコード |
レート制限ヘッダー
Freshdesk はレスポンスヘッダーにレート制限情報を返します。X-RateLimit-Remaining を監視し、上限に近づいた際はバックオフを実装してください。
トラブルシューティング
| 問題 | 原因 | 解決策 |
|---|---|---|
401 Unauthorized | API キーが無効 | Freshdesk プロファイル設定で API キーを確認 |
403 Forbidden | 権限不足 | API キーが管理者アカウントに属していることを確認 |
| コンタクトが同期されない | メールフィールド欠落 | Freshdesk コンタクトにはメールアドレスが必須 |
| チケットが表示されない | ドメインが誤り | Freshdesk のドメイン URL が正しいことを確認 |
| 検索結果が空 | クエリ構文エラー | Freshdesk の検索クエリ構文でダブルクォートを使用 |
429 Too Many Requests | レート制限超過 | プラン階層に合わせたレート制限を実装 |
| カスタムフィールドが欠落 | フィールドが有効化されていない | Freshdesk 管理画面でカスタムフィールドを有効化 |
ベストプラクティス
- リアルタイム同期には Webhook を使用 - Freshdesk オートメーションを設定してチケットイベント発生時に Webhook をトリガー
- CSAT スコアを同期 - セグメンテーション用に顧客満足度評価を Brevo 属性として追跡
- チケットステータスをリストにマッピング - チケットステータスに応じてコンタクトを Brevo リスト間で自動移動
- サポートメトリクスを追跡 - コンタクトごとのチケット数、平均応答時間、解決率を同期
- Search API の使用は控えめに - Search API は厳しいレート制限があるため、可能な限り結果をキャッシュ
- 大規模エクスポートはページング - 初期同期では
pageとper_pageパラメータでページネーションを使用
セキュリティ
- API キー認証 - API キーによるシンプルな HTTP Basic 認証
- HTTPS 限定 - すべての API 通信で TLS 暗号化が必須
- IP ホワイトリスト - Estate および Forest プランで利用可能
- ロールベースアクセス - API キーの権限はエージェントロールに紐づく
- SOC 2 Type II - Freshdesk は SOC 2 Type II 認証取得済み
- GDPR 準拠 - データのエクスポートおよび削除リクエストをサポート