Conector de Customer.io
Conecta tu plataforma de mensajería Customer.io con Brevo para unificar los datos de cliente, coordinar campañas entre plataformas y consolidar la analítica de engagement.
Resumen
| Propiedad | Valor |
|---|---|
| Plataforma | Customer.io |
| Categoría | Marketing |
| Complejidad de configuración | Moderada |
| Integración oficial | No |
| Datos sincronizados | Personas, Eventos, Campañas, Segmentos |
| APIs utilizadas | Track API, App API, Pipelines API |
| Autenticación | Site ID + clave API / clave API de App |
| URLs base | track.customer.io, api.customer.io |
Funcionalidades
- Sincronización de personas - Sincronización bidireccional de perfiles de cliente con contactos de Brevo
- Reenvío de eventos - Registra eventos conductuales y reenvíalos a Brevo como triggers de automatización
- Analítica de campañas - Sincroniza métricas de rendimiento de campañas para un reporting unificado
- Datos de workflow - Replica los estados de workflow de Customer.io en atributos de contacto de Brevo
- Replicación de segmentos - Replica los segmentos de Customer.io como listas de Brevo
- Sincronización de objetos - Sincroniza objetos distintos de personas y datos de relación
Requisitos previos
Antes de empezar, asegúrate de tener:
- Una cuenta de Customer.io con acceso a la API
- Tu Site ID y Track API Key (en Settings > API Credentials)
- Una App API Key para leer datos de campañas y segmentos
- Una cuenta de Brevo con acceso a la API
- Una cuenta de Tajo con suscripción activa
Autenticación
Customer.io usa dos APIs separadas con métodos de autenticación diferentes:
Track API (datos conductuales)
Se usa para enviar personas, eventos y datos de dispositivo. Se autentica con Site ID y clave API mediante Basic Auth.
# Basic Auth: Site ID as username, API Key as passwordcurl -X POST https://track.customer.io/api/v1/customers/user123 \ -u "$SITE_ID:$API_KEY" \ -H "Content-Type: application/json" \App API (lectura de datos)
Se usa para obtener campañas, segmentos y datos de clientes. Se autentica con un token Bearer.
curl -X GET https://api.customer.io/v1/campaigns \ -H "Authorization: Bearer $APP_API_KEY"Separación de claves API
La clave de la Track API y la clave de la App API son credenciales distintas. La Track API Key se usa para escribir datos, mientras que la App API Key se usa para leer datos. Ambas son necesarias para una integración completa con Tajo.
Conectar con Tajo
tajo connectors install customerio \ --site-id $CIO_SITE_ID \ --track-api-key $CIO_TRACK_API_KEY \ --app-api-key $CIO_APP_API_KEYConfiguración
Configuración básica
connectors: customerio: enabled: true region: "us" # or "eu" for EU data center
sync: people: true events: true campaigns: true segments: true objects: false
lists: all_contacts: 12 active_subscribers: 13 churned: 14Asignación de campos
Asocia los atributos de persona de Customer.io con los atributos de contacto de Brevo:
field_mapping: # Standard fields id: CIO_ID email: email first_name: FIRSTNAME last_name: LASTNAME phone: SMS
# Engagement metrics created_at: SIGNUP_DATE last_activity: LAST_ACTIVE plan: PLAN_NAME
# Custom attributes company: COMPANY role: JOB_TITLE mrr: MONTHLY_REVENUE lifecycle_stage: LIFECYCLE_STAGEAsignación de eventos
event_mapping: # Customer.io event -> Brevo event purchase_completed: ORDER_PLACED subscription_started: SUBSCRIPTION_START feature_activated: FEATURE_USED support_ticket_opened: SUPPORT_REQUESTEndpoints de la API
Tajo se integra con los siguientes endpoints de la API de Customer.io:
| Endpoint | Método | API | Propósito |
|---|---|---|---|
/api/v1/customers/{id} | PUT | Track | Crear o actualizar una persona |
/api/v1/customers/{id}/events | POST | Track | Registrar un evento de una persona |
/api/v1/events | POST | Track | Registrar eventos anónimos |
/api/v2/entity | POST | Track | Crear o actualizar personas/objetos (Pipelines) |
/v1/campaigns | GET | App | Listar campañas |
/v1/campaigns/{id}/metrics | GET | App | Métricas de rendimiento de campaña |
/v1/segments | GET | App | Listar segmentos |
/v1/segments/{id}/membership | GET | App | Obtener miembros de un segmento |
/v1/customers/{id}/attributes | GET | App | Obtener atributos de un cliente |
/v1/customers/{id}/activities | GET | App | Obtener el log de actividad de un cliente |
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('customerio', { siteId: process.env.CIO_SITE_ID, trackApiKey: process.env.CIO_TRACK_API_KEY, appApiKey: process.env.CIO_APP_API_KEY, region: 'us'});Sincronizar personas con Brevo
// Incremental sync of Customer.io peopleawait tajo.connectors.sync('customerio', { type: 'incremental', resources: ['people'], since: '2024-01-01', batchSize: 100});
const status = await tajo.connectors.status('customerio');console.log(status);// {// connected: true,// lastSync: '2024-03-15T14:20:00Z',// peopleCount: 32500,// campaignsTracked: 18,// eventsProcessed: 87000// }Reenviar eventos
// Forward Customer.io reporting webhook events to Brevoapp.post('/webhooks/customerio', async (req, res) => { const events = req.body;
for (const event of events) { await tajo.connectors.handleEvent('customerio', { type: event.metric, payload: { customerId: event.data.customer_id, campaignId: event.data.campaign_id, timestamp: event.timestamp } }); }
res.status(200).send('OK');});Exportar un segmento
const result = await tajo.connectors.exportSegment('customerio', { segmentId: 42, targetList: 13, includeAttributes: ['email', 'first_name', 'last_name', 'plan']});
console.log(`Exported ${result.count} people to Brevo list 13`);Límites de velocidad
Customer.io aplica límites de velocidad distintos por cada API:
| API | Límite de velocidad | Notas |
|---|---|---|
| Track API | ~100 peticiones/segundo | Por workspace |
| App API | 10 peticiones/segundo | Por clave API |
| Pipelines API | 100 peticiones/segundo | Recomendada para datos en volumen |
| Endpoint batch | 1.000 personas por petición | Payload máx. 500 KB |
Usa los endpoints batch
Para grandes sincronizaciones, Tajo usa el endpoint batch de Customer.io para enviar hasta 1.000 personas por petición, reduciendo significativamente el volumen de llamadas a la API.
Resolución de problemas
Problemas habituales
| Problema | Causa | Solución |
|---|---|---|
| 401 Unauthorized | Site ID o clave API no válidos | Verifica las credenciales en Customer.io Settings > API |
| Personas no se sincronizan | Falta el identificador | Asegúrate de que cada persona tiene un id o email |
| Eventos no se registran | Tipo de clave API incorrecta | Usa la Track API Key para eventos, no la App API Key |
| Datos de la UE no accesibles | Región mal configurada | Configura la región como eu para workspaces en la UE |
| Errores de límite de velocidad | Demasiadas llamadas a la App API | Reduce la frecuencia de polling para datos de campañas |
Modo depuración
connectors: customerio: debug: true log_level: verbose log_api_calls: trueProbar la conexión
tajo connectors test customerio# ✓ Track API connection successful# ✓ App API connection successful# ✓ People accessible# ✓ Campaigns readable# ✓ Segments listableBuenas prácticas
- Usa la Pipelines API para datos en volumen - La nueva Pipelines API está optimizada para ingestión de alto volumen
- Configura reporting webhooks - Reenvía los eventos de email de Customer.io a Tajo en tiempo real
- Asocia las etapas del ciclo de vida - Sincroniza la pertenencia a segmentos de Customer.io con atributos de Brevo
- Usa identificadores coherentes - Haz coincidir los campos
identre Customer.io y Brevo - Sincroniza de forma incremental - Evita exportaciones completas; aprovecha los timestamps de
last_activity - Monitoriza la entrega de webhooks - Configura alertas para entregas fallidas de webhook
Seguridad
- Basic Auth - La Track API se autentica con Site ID y clave API
- Token Bearer - La App API usa tokens bearer estilo OAuth
- Solo HTTPS - Toda la comunicación con la API se cifra vía TLS 1.2+
- Centros de datos regionales - Opción de centro de datos en la UE para cumplimiento con el RGPD
- Almacenamiento cifrado - Todas las credenciales se cifran en reposo en Tajo
- Firmas de webhook - Verifica los payloads de webhook con firmas HMAC