Konektor Twilio Flex
Hubungkan contact center Twilio Flex Anda ke Brevo untuk riwayat interaksi pelanggan yang terpadu, alur pemasaran pasca-percakapan, dan analitik engagement berbasis dukungan melalui Tajo.
Ikhtisar
| Properti | Nilai |
|---|---|
| Platform | Twilio Flex |
| Kategori | Custom |
| Kompleksitas setup | Lanjutan |
| Integrasi resmi | Tidak |
| Data yang disinkronkan | Pelanggan, percakapan, event |
| API yang digunakan | Flex API, Conversations API, TaskRouter API |
| Autentikasi | Account SID + Auth Token / API Key |
| Base URL | https://flex-api.twilio.com |
Fitur
- Sinkronisasi percakapan - Teruskan interaksi suara, SMS, WhatsApp, dan chat ke timeline Brevo
- Pengayaan profil pelanggan - Sinkronkan data pelanggan Flex ke atribut kontak Brevo
- Kampanye pasca-interaksi - Picu alur kerja Brevo setelah percakapan dukungan berakhir
- Pelacakan event CSAT - Sinkronkan hasil survei kepuasan sebagai event Brevo
- Data aktivitas agen - Lacak metrik performa agen untuk pelaporan operasional
- Analitik antrean - Teruskan data waktu tunggu dan pengabaian untuk optimalisasi pengalaman
Prasyarat
Sebelum memulai, pastikan Anda memiliki:
- Akun Twilio dengan Flex yang sudah aktif
- Account SID dan Auth Token Twilio Anda
- Instance Flex dengan channel aktif (suara, SMS, chat, atau WhatsApp)
- Workspace TaskRouter yang sudah dikonfigurasi
- Akun Brevo dengan akses API
- Akun Tajo dengan langganan aktif
Autentikasi
Twilio Flex menggunakan metode autentikasi standar Twilio.
Kredensial akun
# 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 (direkomendasikan untuk produksi)
- Buka Twilio Console > Account > API keys & tokens
- Klik Create API Key
- Pilih tipe key Standard
- Simpan SID dan Secret dengan aman
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 Anda memiliki akses penuh ke akun. Untuk produksi, gunakan API Key yang tercakup sebagai gantinya. API Key dapat dicabut satu per satu tanpa mengganggu integrasi lain.
Menghubungkan ke Tajo
tajo connectors install twilio-flex \ --account-sid $TWILIO_ACCOUNT_SID \ --auth-token $TWILIO_AUTH_TOKEN \ --flex-flow-sid $TWILIO_FLEX_FLOW_SIDKonfigurasi
Setup dasar
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 - webchatPemetaan field
Petakan data pelanggan dan interaksi Flex ke atribut 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_IDPemetaan event
event_mapping: task.created: SUPPORT_REQUESTED task.completed: SUPPORT_RESOLVED task.canceled: SUPPORT_ABANDONED conversation.ended: CONVERSATION_ENDED survey.completed: CSAT_SUBMITTEDEndpoint API
Tajo terintegrasi dengan endpoint API Twilio Flex dan API terkait berikut:
| Endpoint | Metode | API | Tujuan |
|---|---|---|---|
/v1/Configuration | GET | Flex | Mengambil konfigurasi Flex |
/v1/Interactions | GET | Flex | Menampilkan interaksi |
/v1/Channels | GET | Flex | Menampilkan channel Flex |
/v1/WebChannels | POST | Flex | Membuat channel web chat |
/v1/Conversations | GET | Conversations | Menampilkan percakapan |
/v1/Conversations/{sid}/Messages | GET | Conversations | Menampilkan pesan percakapan |
/v1/Conversations/{sid}/Participants | GET | Conversations | Menampilkan peserta |
/v1/Workspaces/{sid}/Tasks | GET | TaskRouter | Menampilkan task |
/v1/Workspaces/{sid}/Workers | GET | TaskRouter | Menampilkan worker (agen) |
/v1/Workspaces/{sid}/TaskQueues | GET | TaskRouter | Menampilkan antrean task |
/v1/Workspaces/{sid}/Events | GET | TaskRouter | Menampilkan event workspace |
Contoh kode
Inisialisasi konektor
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});Menyinkronkan riwayat percakapan
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// }Pemicu kampanye pasca-percakapan
// 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');});Integrasi plugin Flex
// 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 }) }); }); }}Batas rate
Twilio menerapkan batas rate di seluruh API-nya:
| API | Batas rate | Catatan |
|---|---|---|
| Flex API | 100 permintaan/detik | Per akun |
| Conversations API | 100 permintaan/detik | Per akun |
| TaskRouter API | 30 permintaan baca/detik | Per workspace |
| TaskRouter Events | 20 permintaan/detik | Per workspace |
Event Streams
Untuk pemrosesan event bervolume tinggi, pertimbangkan menggunakan Twilio Event Streams daripada melakukan polling event TaskRouter. Event Streams mengirimkan event secara real-time melalui webhook atau Kinesis.
Pemecahan masalah
Masalah umum
| Masalah | Penyebab | Solusi |
|---|---|---|
| 401 Unauthorized | SID atau token tidak valid | Periksa Account SID dan Auth Token di Twilio Console |
| 403 Forbidden | Flex belum aktif | Pastikan Flex sudah diaktifkan pada akun Twilio Anda |
| Percakapan hilang | Rentang tanggal salah | Perluas rentang tanggal sinkronisasi atau periksa status percakapan |
| Task tidak terlacak | Workspace TaskRouter tidak cocok | Pastikan SID workspace yang digunakan sudah benar |
| Plugin tidak terpicu | Event listener belum terdaftar | Pastikan plugin Flex sudah di-deploy dan aktif |
Mode debug
connectors: twilio_flex: debug: true log_level: verbose log_api_calls: trueMenguji koneksi
tajo connectors test twilio-flex# ✓ Flex API connection successful# ✓ Conversations API accessible# ✓ TaskRouter workspace found# ✓ Agent list readable# ✓ Queue configuration loadedPraktik terbaik
- Gunakan API Key daripada Auth Token - API Key dapat dicakup dan dicabut satu per satu
- Manfaatkan Event Streams - Event berbasis push lebih efisien daripada polling TaskRouter
- Bangun plugin Flex - Gunakan plugin UI untuk menangkap event penyelesaian task secara real-time
- Petakan channel secara konsisten - Normalkan data suara, SMS, dan chat menjadi event Brevo yang terpadu
- Lacak skor CSAT - Sinkronkan data kepuasan ke Brevo untuk segmentasi berbasis pengalaman
- Pantau metrik antrean - Gunakan data waktu tunggu untuk memicu komunikasi pelanggan yang proaktif
Keamanan
- Account SID + Auth Token - Autentikasi standar Twilio
- API Key - Kredensial non-root yang dapat dicabut untuk penggunaan produksi
- Hanya HTTPS - Seluruh komunikasi API dienkripsi via TLS 1.2+
- Validasi webhook - Verifikasi tanda tangan webhook Twilio dengan
X-Twilio-Signature - Kepatuhan PCI - Twilio Flex bersertifikat PCI DSS Level 1
- Penyimpanan terenkripsi - Kredensial dienkripsi saat disimpan di Tajo