Twilio Flex コネクタ
Twilio Flex コンタクトセンターを Brevo に接続し、Tajo を介して統合された顧客インタラクション履歴、会話後のマーケティングフロー、サポート駆動のエンゲージメント分析を実現します。
概要
| プロパティ | 値 |
|---|---|
| プラットフォーム | Twilio Flex |
| カテゴリ | カスタム |
| セットアップの複雑さ | 上級 |
| 公式統合 | いいえ |
| 同期データ | 顧客、会話、イベント |
| 使用する API | Flex API、Conversations API、TaskRouter API |
| 認証 | Account SID + Auth Token / API Key |
| ベース URL | https://flex-api.twilio.com |
機能
- 会話の同期 - 音声、SMS、WhatsApp、チャットのやり取りを Brevo タイムラインに転送
- 顧客プロファイルのエンリッチメント - Flex の顧客データを Brevo 連絡先属性に同期
- インタラクション後のキャンペーン - サポート会話終了後に Brevo ワークフローをトリガー
- CSAT イベントトラッキング - 満足度調査結果を Brevo イベントとして同期
- エージェント活動データ - 運用レポート用にエージェントのパフォーマンスメトリクスをトラッキング
- キュー分析 - エクスペリエンス最適化のために待機時間と放棄データを転送
前提条件
開始する前に、以下を準備してください。
- Flex が有効化された Twilio アカウント
- Twilio Account SID と Auth Token
- アクティブなチャンネル(音声、SMS、チャット、または WhatsApp)を持つ Flex インスタンス
- 設定済みの TaskRouter ワークスペース
- API アクセス可能な Brevo アカウント
- 有効なサブスクリプションを持つ Tajo アカウント
認証
Twilio Flex は Twilio の標準認証方法を使用します。
アカウント資格情報
# Basic Auth: Account SID をユーザー名、Auth Token をパスワードとして使用curl -X GET "https://flex-api.twilio.com/v1/Configuration" \ -u "$TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN"API Key(本番環境で推奨)
- Twilio Console > Account > API keys & tokens に移動
- Create API Key をクリック
- Standard キータイプを選択
- SID と Secret を安全に保存
curl -X GET "https://flex-api.twilio.com/v1/Configuration" \ -u "$TWILIO_API_KEY_SID:$TWILIO_API_KEY_SECRET"Auth Token vs API Key
Auth Token には完全なアカウントアクセス権があります。本番環境では、代わりにスコープ付きの API キーを使用してください。API キーは他の統合を中断せずに個別に取り消せます。
Tajo への接続
tajo connectors install twilio-flex \ --account-sid $TWILIO_ACCOUNT_SID \ --auth-token $TWILIO_AUTH_TOKEN \ --flex-flow-sid $TWILIO_FLEX_FLOW_SID設定
基本セットアップ
connectors: twilio_flex: enabled: true account_sid: "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" flex_flow_sid: "FOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
sync: conversations: true tasks: true customers: true csat: true agent_activity: false
lists: support_contacts: 32 csat_respondents: 33
channels: - voice - sms - whatsapp - webchatフィールドマッピング
Flex の顧客およびインタラクションデータを Brevo 属性にマッピングします。
field_mapping: # 顧客フィールド identity: FLEX_IDENTITY friendly_name: FIRSTNAME attributes.email: email attributes.phone: SMS
# インタラクションメトリクス last_conversation_date: LAST_SUPPORT_DATE total_conversations: SUPPORT_TICKET_COUNT avg_wait_time: AVG_WAIT_TIME last_csat_score: CSAT_SCORE preferred_channel: PREFERRED_CHANNEL
# カスタム属性 customer_tier: VIP_TIER account_id: ACCOUNT_IDイベントマッピング
event_mapping: task.created: SUPPORT_REQUESTED task.completed: SUPPORT_RESOLVED task.canceled: SUPPORT_ABANDONED conversation.ended: CONVERSATION_ENDED survey.completed: CSAT_SUBMITTEDAPI エンドポイント
Tajo は以下の Twilio Flex および関連 API エンドポイントと統合します。
| エンドポイント | メソッド | API | 目的 |
|---|---|---|---|
/v1/Configuration | GET | Flex | Flex 設定を取得 |
/v1/Interactions | GET | Flex | インタラクションを一覧取得 |
/v1/Channels | GET | Flex | Flex チャンネルを一覧取得 |
/v1/WebChannels | POST | Flex | Web チャットチャンネルを作成 |
/v1/Conversations | GET | Conversations | 会話を一覧取得 |
/v1/Conversations/{sid}/Messages | GET | Conversations | 会話メッセージを一覧取得 |
/v1/Conversations/{sid}/Participants | GET | Conversations | 参加者を一覧取得 |
/v1/Workspaces/{sid}/Tasks | GET | TaskRouter | タスクを一覧取得 |
/v1/Workspaces/{sid}/Workers | GET | TaskRouter | ワーカー(エージェント)を一覧取得 |
/v1/Workspaces/{sid}/TaskQueues | GET | TaskRouter | タスクキューを一覧取得 |
/v1/Workspaces/{sid}/Events | GET | TaskRouter | ワークスペースイベントを一覧取得 |
コード例
コネクタの初期化
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('twilio-flex', { accountSid: process.env.TWILIO_ACCOUNT_SID, authToken: process.env.TWILIO_AUTH_TOKEN, flexFlowSid: process.env.TWILIO_FLEX_FLOW_SID});会話履歴を同期
await tajo.connectors.sync('twilio-flex', { type: 'incremental', resources: ['conversations'], since: '2024-01-01', channels: ['voice', 'sms', 'whatsapp']});
const status = await tajo.connectors.status('twilio-flex');console.log(status);// {// connected: true,// lastSync: '2024-03-15T16:00:00Z',// conversationsTracked: 12400,// customersLinked: 8900,// agentsMonitored: 45// }会話後のキャンペーントリガー
// サポート会話終了後に Brevo フォローアップをトリガーapp.post('/webhooks/flex/task-complete', async (req, res) => { const task = req.body;
await tajo.connectors.handleEvent('twilio-flex', { type: 'task.completed', payload: { taskSid: task.TaskSid, customerEmail: task.TaskAttributes?.email, channel: task.TaskChannelUniqueName, duration: task.Age, queueName: task.TaskQueueFriendlyName } });
res.status(200).send('OK');});Flex プラグイン統合
// Flex UI プラグイン内 - Tajo にデータを送信import { FlexPlugin } from '@twilio/flex-plugin';
class TajoPlugin extends FlexPlugin { init(flex, manager) { flex.Actions.addListener('afterCompleteTask', async (payload) => { await fetch('https://api.tajo.io/webhooks/flex/task-complete', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ TaskSid: payload.task.sid, TaskAttributes: payload.task.attributes, TaskChannelUniqueName: payload.task.taskChannelUniqueName, Age: payload.task.age }) }); }); }}レート制限
Twilio は API 全体でレート制限を適用します。
| API | レート制限 | 備考 |
|---|---|---|
| Flex API | 100 リクエスト/秒 | アカウント単位 |
| Conversations API | 100 リクエスト/秒 | アカウント単位 |
| TaskRouter API | 30 読み取りリクエスト/秒 | ワークスペース単位 |
| TaskRouter Events | 20 リクエスト/秒 | ワークスペース単位 |
Event Streams
大量のイベント処理には、TaskRouter イベントをポーリングする代わりに Twilio Event Streams の使用を検討してください。Event Streams は Webhook または Kinesis を介してリアルタイムでイベントをプッシュします。
トラブルシューティング
一般的な問題
| 問題 | 原因 | 解決策 |
|---|---|---|
| 401 Unauthorized | SID またはトークンが無効 | Twilio Console で Account SID と Auth Token を確認 |
| 403 Forbidden | Flex が有効化されていない | Twilio アカウントで Flex が有効化されているか確認 |
| 会話の欠落 | 日付範囲が間違っている | 同期日付範囲を拡大するか会話の状態を確認 |
| タスクがトラッキングされない | TaskRouter ワークスペースの不一致 | 正しいワークスペース SID を確認 |
| プラグインが発火しない | イベントリスナーが登録されていない | Flex プラグインがデプロイされアクティブか確認 |
デバッグモード
connectors: twilio_flex: debug: true log_level: verbose log_api_calls: true接続テスト
tajo connectors test twilio-flex# ✓ Flex API 接続成功# ✓ Conversations API にアクセス可能# ✓ TaskRouter ワークスペースが見つかりました# ✓ エージェントリスト読み取り可能# ✓ キュー設定がロードされましたベストプラクティス
- Auth Token よりも API Key を使用する - API キーはスコープ付きで個別に取り消せます
- Event Streams を活用する - プッシュベースのイベントは TaskRouter のポーリングよりも効率的
- Flex プラグインを構築する - UI プラグインを使用してタスク完了イベントをリアルタイムでキャプチャ
- チャンネルを一貫してマッピングする - 音声、SMS、チャットデータを統一された Brevo イベントに正規化
- CSAT スコアをトラッキングする - エクスペリエンス駆動のセグメンテーションのため満足度データを Brevo に同期
- キューメトリクスを監視する - 待機時間データを使用してプロアクティブな顧客コミュニケーションをトリガー
セキュリティ
- Account SID + Auth Token - 標準的な Twilio 認証
- API キー - 本番使用向けの取り消し可能な非ルート資格情報
- HTTPS のみ - すべての API 通信は TLS 1.2 以上で暗号化
- Webhook 検証 -
X-Twilio-Signatureで Twilio Webhook 署名を検証 - PCI コンプライアンス - Twilio Flex は PCI DSS Level 1 準拠
- 暗号化されたストレージ - 資格情報は Tajo で保存時に暗号化