Twilio Flex 커넥터
Twilio Flex 콘택트 센터를 Tajo를 통해 Brevo에 연결하여 통합된 고객 상호작용 기록, 대화 후 마케팅 플로, 지원 기반 참여 분석을 구현하십시오.
개요
| 속성 | 값 |
|---|---|
| 플랫폼 | Twilio Flex |
| 카테고리 | Custom |
| 설정 복잡도 | 고급 |
| 공식 통합 | 아니오 |
| 동기화 데이터 | 고객, 대화, 이벤트 |
| 사용되는 API | Flex API, Conversations API, TaskRouter API |
| 인증 | Account SID + Auth Token / API Key |
| Base 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 Tokencurl -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 대 API Key
Auth Token은 전체 계정 접근 권한을 가집니다. 프로덕션 환경에서는 범위 지정된 API Key를 대신 사용하십시오. API Key는 다른 통합을 방해하지 않고 개별적으로 폐기할 수 있습니다.
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 | 웹 채팅 채널 생성 |
/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는 웹훅 또는 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 Key는 범위 지정 및 개별 폐기 가능
- Event Streams 활용 - 푸시 기반 이벤트가 TaskRouter 폴링보다 효율적
- Flex 플러그인 구축 - UI 플러그인을 사용하여 태스크 완료 이벤트를 실시간으로 캡처
- 채널을 일관되게 매핑 - 음성, SMS, 채팅 데이터를 통합된 Brevo 이벤트로 정규화
- CSAT 점수 추적 - 경험 기반 세그먼테이션을 위해 만족도 데이터를 Brevo에 동기화
- 대기열 지표 모니터링 - 대기 시간 데이터를 사용하여 사전 고객 커뮤니케이션 트리거
보안
- Account SID + Auth Token - 표준 Twilio 인증
- API Keys - 폐기 가능하며 루트가 아닌 프로덕션용 자격 증명
- HTTPS 전용 - 모든 API 통신이 TLS 1.2+를 통해 암호화됨
- 웹훅 검증 -
X-Twilio-Signature로 Twilio 웹훅 서명 확인 - PCI 준수 - Twilio Flex는 PCI DSS Level 1 준수
- 암호화된 저장 - Tajo에서 자격 증명이 저장 시 암호화됨