Conector de Twilio Flex
Conecta tu contact center de Twilio Flex con Brevo para unificar el historial de interacciones con el cliente, activar flujos de marketing posteriores a la conversación y obtener analíticas de engagement basadas en soporte a través de Tajo.
Resumen
| Propiedad | Valor |
|---|---|
| Plataforma | Twilio Flex |
| Categoría | Personalizada |
| Complejidad de configuración | Avanzada |
| Integración oficial | No |
| Datos sincronizados | Clientes, Conversaciones, Eventos |
| APIs utilizadas | Flex API, Conversations API, TaskRouter API |
| Autenticación | Account SID + Auth Token / API Key |
| URL base | https://flex-api.twilio.com |
Funcionalidades
- Sincronización de conversaciones - Reenvía interacciones de voz, SMS, WhatsApp y chat al timeline de Brevo
- Enriquecimiento del perfil de cliente - Sincroniza datos de cliente de Flex con atributos de contacto de Brevo
- Campañas post-interacción - Activa workflows de Brevo al finalizar conversaciones de soporte
- Seguimiento de eventos CSAT - Sincroniza los resultados de encuestas de satisfacción como eventos de Brevo
- Datos de actividad del agente - Rastrea las métricas de rendimiento de los agentes para el reporting operativo
- Analítica de colas - Reenvía datos de tiempo de espera y abandono para optimizar la experiencia
Requisitos previos
Antes de empezar, asegúrate de tener:
- Una cuenta de Twilio con Flex habilitado
- Tu Twilio Account SID y Auth Token
- Una instancia de Flex con canales activos (voz, SMS, chat o WhatsApp)
- Un workspace de TaskRouter configurado
- Una cuenta de Brevo con acceso a la API
- Una cuenta de Tajo con suscripción activa
Autenticación
Twilio Flex usa los métodos de autenticación estándar de Twilio.
Credenciales de cuenta
# 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 (recomendada para producción)
- Ve a Twilio Console > Account > API keys & tokens
- Haz clic en Create API Key
- Selecciona el tipo de clave Standard
- Guarda el SID y el Secret de forma segura
curl -X GET "https://flex-api.twilio.com/v1/Configuration" \ -u "$TWILIO_API_KEY_SID:$TWILIO_API_KEY_SECRET"Auth Token vs API Key
Tu Auth Token tiene acceso total a la cuenta. Para producción, usa API Keys con alcance limitado. Las API Keys se pueden revocar individualmente sin afectar a otras integraciones.
Conectar con Tajo
tajo connectors install twilio-flex \ --account-sid $TWILIO_ACCOUNT_SID \ --auth-token $TWILIO_AUTH_TOKEN \ --flex-flow-sid $TWILIO_FLEX_FLOW_SIDConfiguración
Configuración básica
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 - webchatAsignación de campos
Asocia los datos de clientes e interacciones de Flex con los atributos de 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_IDAsignación de eventos
event_mapping: task.created: SUPPORT_REQUESTED task.completed: SUPPORT_RESOLVED task.canceled: SUPPORT_ABANDONED conversation.ended: CONVERSATION_ENDED survey.completed: CSAT_SUBMITTEDEndpoints de la API
Tajo se integra con los siguientes endpoints de Twilio Flex y APIs relacionadas:
| Endpoint | Método | API | Propósito |
|---|---|---|---|
/v1/Configuration | GET | Flex | Obtener la configuración de Flex |
/v1/Interactions | GET | Flex | Listar interacciones |
/v1/Channels | GET | Flex | Listar canales de Flex |
/v1/WebChannels | POST | Flex | Crear un canal de chat web |
/v1/Conversations | GET | Conversations | Listar conversaciones |
/v1/Conversations/{sid}/Messages | GET | Conversations | Listar mensajes de una conversación |
/v1/Conversations/{sid}/Participants | GET | Conversations | Listar participantes |
/v1/Workspaces/{sid}/Tasks | GET | TaskRouter | Listar tasks |
/v1/Workspaces/{sid}/Workers | GET | TaskRouter | Listar workers (agentes) |
/v1/Workspaces/{sid}/TaskQueues | GET | TaskRouter | Listar colas de tasks |
/v1/Workspaces/{sid}/Events | GET | TaskRouter | Listar eventos del workspace |
Ejemplos de código
Inicializar el conector
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});Sincronizar el historial de conversaciones
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 de campaña post-conversación
// 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');});Integración con 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 }) }); }); }}Límites de velocidad
Twilio aplica límites de velocidad en sus APIs:
| API | Límite de velocidad | Notas |
|---|---|---|
| Flex API | 100 peticiones/segundo | Por cuenta |
| Conversations API | 100 peticiones/segundo | Por cuenta |
| TaskRouter API | 30 lecturas/segundo | Por workspace |
| TaskRouter Events | 20 peticiones/segundo | Por workspace |
Event Streams
Para procesar eventos de alto volumen, considera usar Twilio Event Streams en lugar de hacer polling de los eventos de TaskRouter. Event Streams envía los eventos en tiempo real mediante webhooks o Kinesis.
Resolución de problemas
Problemas habituales
| Problema | Causa | Solución |
|---|---|---|
| 401 Unauthorized | SID o token no válidos | Verifica Account SID y Auth Token en la Twilio Console |
| 403 Forbidden | Flex no habilitado | Asegúrate de que Flex esté activado en tu cuenta de Twilio |
| Conversaciones ausentes | Rango de fechas incorrecto | Amplía el rango de sincronización o comprueba el estado de la conversación |
| Tasks no rastreadas | Workspace de TaskRouter incorrecto | Verifica que el SID del workspace sea correcto |
| El plugin no se dispara | Listener no registrado | Comprueba que el Flex plugin esté desplegado y activo |
Modo depuración
connectors: twilio_flex: debug: true log_level: verbose log_api_calls: trueProbar la conexión
tajo connectors test twilio-flex# ✓ Flex API connection successful# ✓ Conversations API accessible# ✓ TaskRouter workspace found# ✓ Agent list readable# ✓ Queue configuration loadedBuenas prácticas
- Usa API Keys en lugar de Auth Tokens - Las API Keys se pueden limitar y revocar individualmente
- Aprovecha Event Streams - Los eventos push son más eficientes que hacer polling de TaskRouter
- Crea un Flex Plugin - Usa un UI plugin para capturar eventos de finalización de tasks en tiempo real
- Asigna los canales de forma coherente - Normaliza los datos de voz, SMS y chat en eventos unificados de Brevo
- Rastrea las puntuaciones CSAT - Sincroniza los datos de satisfacción con Brevo para segmentar por experiencia
- Monitoriza las métricas de cola - Usa los datos de tiempo de espera para activar comunicación proactiva con el cliente
Seguridad
- Account SID + Auth Token - Autenticación estándar de Twilio
- API Keys - Credenciales no-root revocables para uso en producción
- Solo HTTPS - Toda la comunicación con la API se cifra vía TLS 1.2+
- Validación de webhooks - Verifica las firmas de webhook de Twilio con
X-Twilio-Signature - Cumplimiento PCI - Twilio Flex cumple con PCI DSS Nivel 1
- Almacenamiento cifrado - Credenciales cifradas en reposo en Tajo