Twilio Flex Connector
เชื่อมต่อ Twilio Flex contact center กับ Brevo เพื่อประวัติการโต้ตอบลูกค้าที่รวมกัน เวิร์กโฟลว์การตลาดหลังการสนทนา และ analytics การมีส่วนร่วมที่ขับเคลื่อนด้วยการสนับสนุนผ่าน Tajo
ภาพรวม
| คุณสมบัติ | ค่า |
|---|---|
| แพลตฟอร์ม | Twilio Flex |
| หมวดหมู่ | แบบกำหนดเอง |
| ความซับซ้อนในการตั้งค่า | ขั้นสูง |
| การผสานรวมอย่างเป็นทางการ | ไม่ |
| ข้อมูลที่ซิงค์ | ลูกค้า การสนทนา เหตุการณ์ |
| APIs ที่ใช้ | Flex API, Conversations API, TaskRouter API |
| การยืนยันตัวตน | Account SID + Auth Token / API Key |
| Base URL | https://flex-api.twilio.com |
ฟีเจอร์
- การซิงค์การสนทนา - ส่งต่อการโต้ตอบทางเสียง SMS WhatsApp และแชทไปยัง timelines ของ Brevo
- การเพิ่มความสมบูรณ์โปรไฟล์ลูกค้า - ซิงค์ข้อมูลลูกค้า Flex กับแอตทริบิวต์ผู้ติดต่อ Brevo
- แคมเปญหลังการโต้ตอบ - ทริกเกอร์เวิร์กโฟลว์ Brevo หลังจากการสนทนาสนับสนุนสิ้นสุด
- การติดตามเหตุการณ์ CSAT - ซิงค์ผลการสำรวจความพึงพอใจเป็นเหตุการณ์ Brevo
- ข้อมูลกิจกรรมเจ้าหน้าที่ - ติดตาม performance metrics ของเจ้าหน้าที่สำหรับรายงานการดำเนินงาน
- Queue analytics - ส่งต่อข้อมูลเวลารอและการละทิ้งสำหรับการปรับปรุงประสบการณ์
ข้อกำหนดเบื้องต้น
ก่อนเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมี:
- บัญชี Twilio ที่เปิดใช้งาน Flex
- Twilio Account SID และ Auth Token ของคุณ
- Flex instance ที่มี channels ที่ใช้งานอยู่ (เสียง SMS แชท หรือ WhatsApp)
- TaskRouter workspace ที่กำหนดค่าแล้ว
- บัญชี Brevo ที่มีสิทธิ์เข้าถึง API
- บัญชี Tajo ที่มีการสมัครสมาชิกที่ใช้งานอยู่
การยืนยันตัวตน
Twilio Flex ใช้วิธีการยืนยันตัวตนมาตรฐานของ Twilio
ข้อมูลประจำตัวบัญชี
# Basic Auth: Account SID as username, Auth Token as passwordcurl -X GET "https://flex-api.twilio.com/v1/Configuration" \ -u "$TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN"API Key (แนะนำสำหรับ Production)
- ไปที่ Twilio Console > Account > API keys & tokens
- คลิก Create API Key
- เลือกประเภท 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 ของคุณมีสิทธิ์เข้าถึงบัญชีทั้งหมด สำหรับ production ใช้ scoped API Keys แทน API Keys สามารถถูกเพิกถอนแยกกันโดยไม่รบกวนการผสานรวมอื่น
การเชื่อมต่อกับ 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: # 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การแมปเหตุการณ์
event_mapping: task.created: SUPPORT_REQUESTED task.completed: SUPPORT_RESOLVED task.canceled: SUPPORT_ABANDONED conversation.ended: CONVERSATION_ENDED survey.completed: CSAT_SUBMITTEDAPI Endpoints
Tajo ผสานรวมกับ Twilio Flex และ API endpoints ที่เกี่ยวข้องต่อไปนี้:
| Endpoint | เมธอด | API | จุดประสงค์ |
|---|---|---|---|
/v1/Configuration | GET | Flex | ดูการกำหนดค่า Flex |
/v1/Interactions | GET | Flex | แสดงรายการ interactions |
/v1/Channels | GET | Flex | แสดงรายการ Flex channels |
/v1/WebChannels | POST | Flex | สร้าง web chat channel |
/v1/Conversations | GET | Conversations | แสดงรายการการสนทนา |
/v1/Conversations/{sid}/Messages | GET | Conversations | แสดงรายการข้อความการสนทนา |
/v1/Conversations/{sid}/Participants | GET | Conversations | แสดงรายการผู้เข้าร่วม |
/v1/Workspaces/{sid}/Tasks | GET | TaskRouter | แสดงรายการ tasks |
/v1/Workspaces/{sid}/Workers | GET | TaskRouter | แสดงรายการ workers (เจ้าหน้าที่) |
/v1/Workspaces/{sid}/TaskQueues | GET | TaskRouter | แสดงรายการ task queues |
/v1/Workspaces/{sid}/Events | GET | TaskRouter | แสดงรายการเหตุการณ์ workspace |
ตัวอย่างโค้ด
เริ่มต้น Connector
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// }ทริกเกอร์แคมเปญหลังการสนทนา
// Trigger a Brevo follow-up after a support conversation endsapp.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 Plugin
// Inside a Flex UI Plugin - send data to Tajoimport { 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 บังคับใช้ rate limits ในทุก APIs:
| API | ขีดจำกัดอัตรา | หมายเหตุ |
|---|---|---|
| Flex API | 100 คำขอ/วินาที | ต่อบัญชี |
| Conversations API | 100 คำขอ/วินาที | ต่อบัญชี |
| TaskRouter API | 30 คำขออ่าน/วินาที | ต่อ workspace |
| TaskRouter Events | 20 คำขอ/วินาที | ต่อ workspace |
Event Streams
สำหรับการประมวลผลเหตุการณ์ปริมาณสูง ควรพิจารณาใช้ Twilio Event Streams แทนการ polling TaskRouter events Event Streams ส่ง push events แบบเรียลไทม์ผ่าน webhooks หรือ Kinesis
การแก้ไขปัญหา
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | วิธีแก้ |
|---|---|---|
| 401 Unauthorized | SID หรือ token ไม่ถูกต้อง | ตรวจสอบ Account SID และ Auth Token ใน Twilio Console |
| 403 Forbidden | Flex ไม่ได้เปิดใช้งาน | ตรวจสอบว่า Flex ถูกเปิดใช้งานบนบัญชี Twilio ของคุณ |
| การสนทนาหายไป | ช่วงวันที่ไม่ถูกต้อง | ขยาย sync date range หรือตรวจสอบสถานะการสนทนา |
| Tasks ไม่ถูกติดตาม | TaskRouter workspace ไม่ตรงกัน | ตรวจสอบ workspace SID ที่ถูกต้อง |
| Plugin ไม่ทำงาน | Event listener ไม่ได้ลงทะเบียน | ตรวจสอบว่า Flex plugin ถูก deploy และใช้งานอยู่ |
โหมด Debug
connectors: twilio_flex: debug: true log_level: verbose log_api_calls: trueทดสอบการเชื่อมต่อ
tajo connectors test twilio-flex# ✓ Flex API connection successful# ✓ Conversations API accessible# ✓ TaskRouter workspace found# ✓ Agent list readable# ✓ Queue configuration loadedแนวทางปฏิบัติที่ดีที่สุด
- ใช้ API Keys แทน Auth Tokens - API Keys สามารถกำหนดขอบเขตและเพิกถอนแยกกันได้
- ใช้ Event Streams - เหตุการณ์แบบ push มีประสิทธิภาพมากกว่าการ polling TaskRouter
- สร้าง Flex Plugin - ใช้ UI plugin เพื่อจับเหตุการณ์การสำเร็จงานแบบเรียลไทม์
- แมป channels อย่างสม่ำเสมอ - ปรับมาตรฐานข้อมูลเสียง SMS และแชทเป็นเหตุการณ์ Brevo ที่รวมกัน
- ติดตามคะแนน CSAT - ซิงค์ข้อมูลความพึงพอใจกับ Brevo สำหรับการแบ่งกลุ่มตามประสบการณ์
- ตรวจสอบ queue metrics - ใช้ข้อมูลเวลารอเพื่อทริกเกอร์การสื่อสารกับลูกค้าเชิงรุก
ความปลอดภัย
- Account SID + Auth Token - การยืนยันตัวตน Twilio มาตรฐาน
- API Keys - ข้อมูลประจำตัวที่ไม่ใช่ root สามารถเพิกถอนได้สำหรับ production
- HTTPS เท่านั้น - การสื่อสาร API ทั้งหมดเข้ารหัสผ่าน TLS 1.2+
- การตรวจสอบ Webhook - ตรวจสอบลายเซ็น webhook ของ Twilio ด้วย
X-Twilio-Signature - ความสอดคล้องกับ PCI - Twilio Flex สอดคล้องกับ PCI DSS Level 1
- การจัดเก็บที่เข้ารหัส - ข้อมูลประจำตัวเข้ารหัสที่เก็บใน Tajo