---
title: "Twilio Flex 连接器"
description: "完整的 Twilio Flex 集成指南，通过 Tajo 将联络中心互动、坐席活动和客户会话与 Brevo 同步。"
url: https://tajo.io/zh-cn/docs/connectors/custom/twilio-flex/
markdown: https://tajo.io/zh-cn/docs/connectors/custom/twilio-flex.md
lang: zh-CN
robots: noindex
---

申请抢先体验

请输入您的名字和公司电子邮箱地址。我们会发送确认 Tajo 访问申请的链接。

# Twilio Flex 连接器

连接器状态: 计划中 尚未构建。Tajo 目前不运行此连接器。

| 来源字段 | 目标字段 | 示例值 |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

通过 Tajo 将您的 Twilio Flex 联络中心连接到 Brevo，实现统一的客户互动历史、会话后营销流程和支持驱动的互动分析。

## 概览

| 属性 | 值 |
| --- | --- |
| **平台** | Twilio Flex |
| **类别** | 自定义 |
| **设置复杂度** | 高级 |
| **官方集成** | 否 |
| **同步数据** | 用户、会话、事件 |
| **使用的 API** | Flex API、Conversations API、TaskRouter API |
| **认证方式** | Account SID + Auth Token / API 密钥 |
| **基础 URL** | `https://flex-api.twilio.com` |

## 功能

- **会话同步** - 将语音、短信、WhatsApp 和聊天互动转发到 Brevo 时间线
- **客户档案富化** - 将 Flex 客户数据同步到 Brevo 联系人属性
- **会话后活动** - 支持会话结束后触发 Brevo 工作流
- **CSAT 事件跟踪** - 将满意度调查结果作为 Brevo 事件同步
- **坐席活动数据** - 追踪坐席绩效指标，用于运营报告
- **队列分析** - 转发等待时间和放弃数据，用于体验优化

## 前提条件

开始之前，请确保您已具备：

1. 已启用 Flex 的 Twilio 账户
2. Twilio Account SID 和 Auth Token
3. 具有活跃频道（语音、短信、聊天或 WhatsApp）的 Flex 实例
4. 已配置 TaskRouter 工作区
5. 具有 API 访问权限的 Brevo 账户
6. 具有有效订阅的 Tajo 账户

## 认证

Twilio Flex 使用 Twilio 的标准认证方式。

### 账户凭据

```bash
# Basic Auth: Account SID as username, Auth Token as password
curl -X GET "https://flex-api.twilio.com/v1/Configuration" \
  -u "$TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN"
```

### API 密钥（推荐用于生产环境）

1. 前往 **Twilio 控制台** > **账户** > **API 密钥和令牌**
2. 点击**创建 API 密钥**
3. 选择**标准**密钥类型
4. 安全存储 SID 和密钥

```bash
curl -X GET "https://flex-api.twilio.com/v1/Configuration" \
  -u "$TWILIO_API_KEY_SID:$TWILIO_API_KEY_SECRET"
```

Auth Token 与 API 密钥

您的 Auth Token 具有完整账户访问权限。生产环境请使用范围化的 API 密钥。API 密钥可单独撤销，不会影响其他集成。

### 连接到 Tajo

```bash
tajo connectors install twilio-flex \
  --account-sid $TWILIO_ACCOUNT_SID \
  --auth-token $TWILIO_AUTH_TOKEN \
  --flex-flow-sid $TWILIO_FLEX_FLOW_SID
```

## 配置

### 基础设置

```yaml
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 属性：

```yaml
field_mapping:
  # Customer fields
  identity: FLEX_IDENTITY
  friendly_name: FIRSTNAME
  attributes.email: email
  attributes.phone: SMS

  # Interaction metrics
  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

  # Custom attributes
  customer_tier: VIP_TIER
  account_id: ACCOUNT_ID
```

### 事件映射

```yaml
event_mapping:
  task.created: SUPPORT_REQUESTED
  task.completed: SUPPORT_RESOLVED
  task.canceled: SUPPORT_ABANDONED
  conversation.ended: CONVERSATION_ENDED
  survey.completed: CSAT_SUBMITTED
```

## API 端点

Tajo 集成以下 Twilio Flex 及相关 API 端点：

| 端点 | 方法 | API | 用途 |
| --- | --- | --- | --- |
| `/v1/Configuration` | GET | Flex | 获取 Flex 配置 |
| `/v1/Interactions` | GET | Flex | 列出互动 |
| `/v1/Channels` | GET | Flex | 列出 Flex 频道 |
| `/v1/WebChannels` | POST | Flex | 创建网页聊天频道 |
| `/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 | 列出工作区事件 |

## 代码示例

### 初始化连接器

```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('twilio-flex', {
  accountSid: process.env.TWILIO_ACCOUNT_SID,
  authToken: process.env.TWILIO_AUTH_TOKEN,
  flexFlowSid: process.env.TWILIO_FLEX_FLOW_SID
});
```

### 同步会话历史

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

### 会话后活动触发

```javascript
// Trigger a Brevo follow-up after a support conversation ends
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 插件集成

```javascript
// Inside a Flex UI Plugin - send data to Tajo
import { FlexPlugin } from '@twilio/flex-plugin';

class TajoPlugin extends FlexPlugin {
  init(flex, manager) {
    flex.Actions.addListener('afterCompleteTask', async (payload) => {
      await fetch('https://api.example.com/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
        })
      });
    });
  }
}
```

Caution

上面的 `example.com` 地址是占位值，在 Tajo 端点可用之前仅作示例。

## 速率限制

Twilio 跨其 API 实施速率限制：

| API | 速率限制 | 说明 |
| --- | --- | --- |
| **Flex API** | 100 请求/秒 | 每账户 |
| **Conversations API** | 100 请求/秒 | 每账户 |
| **TaskRouter API** | 30 读取请求/秒 | 每工作区 |
| **TaskRouter 事件** | 20 请求/秒 | 每工作区 |

事件流

对于高流量事件处理，考虑使用 Twilio 事件流而非轮询 TaskRouter 事件。事件流通过 Webhook 或 Kinesis 实时推送事件。

## 故障排除

### 常见问题

| 问题 | 原因 | 解决方案 |
| --- | --- | --- |
| 401 Unauthorized | SID 或令牌无效 | 在 Twilio 控制台中验证 Account SID 和 Auth Token |
| 403 Forbidden | Flex 未启用 | 确保您的 Twilio 账户已激活 Flex |
| 会话缺失 | 日期范围错误 | 扩展同步日期范围或检查会话状态 |
| 任务未追踪 | TaskRouter 工作区不匹配 | 验证正确的工作区 SID |
| 插件未触发 | 事件监听器未注册 | 检查 Flex 插件是否已部署并激活 |

### 调试模式

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

### 测试连接

```bash
tajo connectors test twilio-flex
# ✓ Flex API connection successful
# ✓ Conversations API accessible
# ✓ TaskRouter workspace found
# ✓ Agent list readable
# ✓ Queue configuration loaded
```

## 最佳实践

1. **使用 API 密钥而非 Auth Token** - API 密钥可范围化且可单独撤销
2. **利用事件流** - 基于推送的事件比轮询 TaskRouter 更高效
3. **构建 Flex 插件** - 使用 UI 插件实时捕获任务完成事件
4. **一致映射频道** - 将语音、短信和聊天数据规范化为统一的 Brevo 事件
5. **追踪 CSAT 评分** - 将满意度数据同步到 Brevo 用于体验驱动的细分
6. **监控队列指标** - 使用等待时间数据触发主动客户通信

## 安全

- **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 中静态加密

## 相关资源

- [Gorgias 连接器](https://tajo.io/zh-cn/docs/connectors/support/gorgias)
- [Jira 连接器](https://tajo.io/zh-cn/docs/connectors/custom/jira)
- [客户同步技能](https://tajo.io/zh-cn/docs/skills/data-sync/customer-sync)
- [Brevo 联系人 API](https://tajo.io/zh-cn/docs/contact-management)
