Conector de Intercom
Conecta tu workspace de Intercom con Brevo a través de Tajo para unificar la mensajería con el cliente, el seguimiento de conversaciones y la automatización de marketing basada en la interacción, impulsada por tus datos de soporte y producto.
Resumen
| Propiedad | Valor |
|---|---|
| Plataforma | Intercom |
| Categoría | Soporte |
| Complejidad de configuración | Media |
| Integración oficial | Sí |
| Datos sincronizados | Contactos, Conversaciones, Empresas, Eventos |
| URL base de la API | https://api.intercom.io |
Funcionalidades
- Sincronización de contactos - Sincronización bidireccional de usuarios y leads de Intercom con contactos de Brevo
- Seguimiento de conversaciones - Sincroniza los datos de conversación para la segmentación basada en soporte
- Mapeo de empresas - Asocia contactos con empresas para flujos basados en cuentas
- Atributos personalizados - Asocia atributos personalizados de Intercom con campos de contacto de Brevo
- Seguimiento de eventos - Sincroniza eventos personalizados y actividades del usuario para segmentación por comportamiento
- Sincronización de etiquetas - Asocia las etiquetas de Intercom con la pertenencia a listas o atributos de Brevo
- Datos de Messenger - Registra la interacción con la mensajería in-app y los chats
- Integración con agentes IA - Sincroniza los resultados de las conversaciones con agentes IA en Brevo
Requisitos previos
Antes de empezar, asegúrate de tener:
- Un workspace de Intercom (plan Starter, Pro o Premium)
- Una app de Intercom con access token (app privada) o OAuth configurado (app pública)
- Una cuenta de Brevo con acceso a la API
- Una cuenta de Tajo
Autenticación
Access Token (app privada)
Para integraciones privadas que acceden a los datos de tu propio workspace.
- Ve a Developer Hub > Your Apps > Create new app
- Asóciala con tu workspace de Intercom
- Copia el access token
curl https://api.intercom.io/contacts \ -H "Authorization: Bearer {access_token}" \ -H "Content-Type: application/json" \ -H "Intercom-Version: 2.11"OAuth 2.0 (app pública)
Para integraciones que acceden a los datos de Intercom de otros clientes.
# Authorization URLhttps://app.intercom.com/oauth?client_id={client_id}&state={state}
# Token exchangecurl -X POST https://api.intercom.io/auth/eagle/token \ -d "client_id={client_id}" \ -d "client_secret={client_secret}" \ -d "code={auth_code}"Versionado de la API
Incluye siempre la cabecera Intercom-Version en tus peticiones. Tajo usa la versión 2.11 de la API por defecto. Consulta el changelog de Intercom para detectar cambios incompatibles.
Configuración
Configuración básica
connectors: intercom: enabled: true access_token: "${INTERCOM_ACCESS_TOKEN}" api_version: "2.11"
# Data sync options sync: contacts: true conversations: true companies: true events: true tags: true
# Sync direction direction: intercom_to_brevo
# Brevo list assignment lists: all_users: 35 active_conversations: 36 leads: 37Asignación de campos
Asocia los datos de contacto de Intercom con atributos de contacto de Brevo:
Asignaciones predeterminadas
| Parameter | Type | Description |
|---|---|---|
email required | string | Dirección de email del contacto (identificador único) |
name optional | string | Nombre completo, dividido en FIRSTNAME/LASTNAME |
phone optional | string | Se asocia al atributo SMS para WhatsApp/SMS |
role optional | string | Tipo de contacto: user o lead |
company.name optional | string | Nombre de la empresa asociada |
signed_up_at optional | timestamp | Fecha de registro del usuario |
last_seen_at optional | timestamp | Marca de tiempo de la última actividad |
custom_attributes optional | object | Pares clave-valor de atributos personalizados |
Asignación de atributos personalizados
field_mapping: # Standard fields email: email name: FULLNAME phone: SMS
# Engagement fields signed_up_at: SIGNUP_DATE last_seen_at: LAST_ACTIVE session_count: SESSION_COUNT unsubscribed_from_emails: UNSUBSCRIBED
# Company fields company.name: COMPANY_NAME company.plan: COMPANY_PLAN company.size: COMPANY_SIZE
# Custom attributes custom_attributes.plan_tier: PLAN_TIER custom_attributes.feature_usage: FEATURE_USAGEEndpoints de la API
API de contactos
| Método | Endpoint | Descripción |
|---|---|---|
GET | /contacts | Listar todos los contactos |
POST | /contacts | Crear un contacto |
PUT | /contacts/{id} | Actualizar un contacto |
GET | /contacts/{id} | Obtener un contacto |
POST | /contacts/search | Buscar contactos |
DELETE | /contacts/{id} | Archivar un contacto |
API de conversaciones
| Método | Endpoint | Descripción |
|---|---|---|
GET | /conversations | Listar conversaciones |
GET | /conversations/{id} | Obtener una conversación |
POST | /conversations | Crear una conversación |
POST | /conversations/{id}/reply | Responder a una conversación |
POST | /conversations/{id}/parts | Añadir una parte a la conversación |
API de empresas
| Método | Endpoint | Descripción |
|---|---|---|
GET | /companies | Listar empresas |
POST | /companies | Crear o actualizar una empresa |
GET | /companies/{id} | Obtener una empresa |
GET | /companies/{id}/contacts | Listar los contactos de una empresa |
API de eventos
| Método | Endpoint | Descripción |
|---|---|---|
POST | /events | Enviar un evento |
GET | /events?type=user&intercom_user_id={id} | Listar eventos de un usuario |
Eventos
Eventos de conversación
| Evento | Disparador | Caso de uso |
|---|---|---|
conversation.created | Nueva conversación iniciada | Alerta de ticket de soporte |
conversation.closed | Conversación resuelta | Disparador de encuesta CSAT |
conversation.rating.added | Valoración enviada | Seguimiento de satisfacción |
conversation.snoozed | Conversación pospuesta | Programación de seguimiento |
Eventos de contacto
| Evento | Disparador | Caso de uso |
|---|---|---|
contact.created | Nuevo contacto añadido | Secuencia de bienvenida |
contact.updated | Datos del contacto modificados | Sincronización de atributos |
contact.deleted | Contacto archivado | Limpieza |
contact.tag.created | Etiqueta añadida al contacto | Actualización de segmento |
Eventos de usuario
| Evento | Disparador | Caso de uso |
|---|---|---|
user.created | Nuevo usuario registrado | Flujo de onboarding |
user.email.updated | Email cambiado | Fusión de contactos |
user.unsubscribed | Cancelación de suscripción a emails | Actualización de preferencias |
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});
// Connect Intercomawait tajo.connectors.connect('intercom', { accessToken: process.env.INTERCOM_ACCESS_TOKEN, apiVersion: '2.11'});Sincronizar contactos y conversaciones
// Full sync of contacts and conversation dataawait tajo.connectors.sync('intercom', { type: 'full', resources: ['contacts', 'conversations', 'companies'], since: '2023-01-01'});
// Check sync statusconst status = await tajo.connectors.status('intercom');console.log(status);// {// connected: true,// lastSync: '2024-01-15T10:30:00Z',// contactsSynced: 14200,// conversationsSynced: 28400,// companiesSynced: 2100// }Gestionar webhooks de Intercom
import crypto from 'crypto';
app.post('/webhooks/intercom', async (req, res) => { const signature = req.get('X-Hub-Signature'); const expectedSig = 'sha1=' + crypto .createHmac('sha1', process.env.INTERCOM_CLIENT_SECRET) .update(JSON.stringify(req.body)) .digest('hex');
if (signature !== expectedSig) { return res.status(401).send('Unauthorized'); }
await tajo.connectors.handleWebhook('intercom', { topic: req.body.topic, data: req.body.data });
res.status(200).send('OK');});Límites de velocidad
Intercom aplica límites de velocidad según tu plan:
| Plan | Límite de velocidad | Detalles |
|---|---|---|
| Starter | 20 peticiones/10 segundos | Por app |
| Pro | 50 peticiones/10 segundos | Por app |
| Premium | 100 peticiones/10 segundos | Por app |
| Endpoint de búsqueda | 1 petición/segundo | Por app |
| Endpoint de scroll | 1 petición/minuto | Por app |
Límites adicionales:
- Operaciones en lote: 15 contactos por petición en lote
- Envíos de eventos: 500 eventos/segundo por workspace
- Entrega de webhooks: Reintento automático durante 24 horas
- Exportación de datos: 1 exportación simultánea
Respuesta de límite de velocidad
Intercom devuelve 429 Too Many Requests con una cabecera Retry-After. Implementa backoff exponencial y respeta la ventana de reintento.
Resolución de problemas
Problemas habituales
| Problema | Causa | Solución |
|---|---|---|
| 401 Unauthorized | Token no válido o expirado | Regenera el access token en Developer Hub |
| Contacto no sincronizado | Campo de email ausente | Los leads de Intercom pueden carecer de email; filtra por role |
| Datos de conversación vacíos | La app no tiene el scope de conversación | Vuelve a autorizar con permisos de lectura de conversaciones |
| Webhook no recibido | Webhook no registrado | Configura los webhooks en los ajustes de Developer Hub |
| Desajuste de versión de API | Cambios incompatibles en la nueva versión | Fija la versión de la API con la cabecera Intercom-Version |
Modo depuración
Habilita el registro detallado:
connectors: intercom: debug: true log_level: verbose log_webhooks: trueProbar la conexión
tajo connectors test intercom# ✓ API connection successful# ✓ Contacts readable# ✓ Conversations readable# ✓ Companies readable# ✓ Webhooks registeredBuenas prácticas
- Fija la versión de la API - Especifica siempre
Intercom-Versionpara evitar cambios incompatibles - Usa la API de búsqueda con eficiencia - Usa filtros y paginación para reducir la transferencia de datos
- Sincroniza usuarios y leads - Captura todo el funnel en Brevo
- Asocia etiquetas de conversación - Usa las etiquetas de conversación para segmentos de marketing posventa
- Registra eventos personalizados - Envía los eventos clave de producto a Intercom para segmentación por comportamiento
- Gestiona las fusiones de contactos - Implementa lógica de fusión para contactos duplicados
Seguridad
- Access Token - Autenticación con Bearer token para apps privadas
- OAuth 2.0 - Autorización delegada para apps públicas con client secret
- Verificación de webhooks - Validación de firma HMAC SHA-1 mediante
X-Hub-Signature - Cifrado TLS - Toda la comunicación con la API se cifra vía HTTPS
- Controles de acceso a datos - Acceso granular a los datos según la configuración de la app