Conector de Zendesk
Conecta tu instancia de Zendesk Support con Brevo a través de Tajo para unificar los datos de soporte al cliente, segmentar por tickets, puntuar la satisfacción y automatizar marketing activado por soporte.
Resumen
| Propiedad | Valor |
|---|---|
| Plataforma | Zendesk |
| Categoría | Soporte |
| Complejidad de configuración | Media |
| Integración oficial | Sí |
| Datos sincronizados | Tickets, Usuarios, Organizaciones, Eventos |
| URL base de la API | https://{subdomain}.zendesk.com/api/v2 |
Funcionalidades
- Sincronización de usuarios - Sincroniza los usuarios finales y agentes de Zendesk con los contactos de Brevo
- Seguimiento de tickets - Sincroniza los datos de ticket para una segmentación de marketing consciente del soporte
- Mapeo de organizaciones - Asocia contactos con organizaciones para flujos B2B
- Puntuaciones de satisfacción - Sincroniza datos de CSAT y NPS como atributos de Brevo
- Eventos de tickets - Registra la creación, resolución y escalado de tickets como disparadores de automatización
- Integración con help center - Registra las visitas a artículos y el comportamiento de búsqueda
- Soporte multicanal - Sincroniza datos de email, chat, voz y canales de mensajería
- Campos personalizados - Asocia campos personalizados de tickets y usuarios de Zendesk con Brevo
Requisitos previos
Antes de empezar, asegúrate de tener:
- Una cuenta de Zendesk Support (Team, Professional o Enterprise)
- Acceso de administrador a tu instancia de Zendesk
- Un token de API o una app OAuth configurada
- Una cuenta de Brevo con acceso a la API
- Una cuenta de Tajo
Autenticación
Autenticación con token de API
Usa la autenticación con email/token para una configuración rápida.
curl https://{subdomain}.zendesk.com/api/v2/users.json \ -u {email}/token:{api_token} \ -H "Content-Type: application/json"Genera un token de API desde Zendesk Admin > Apps and Integrations > APIs > Zendesk API.
OAuth 2.0
Usa OAuth para integraciones multiinstancia con acceso delegado del usuario.
# Authorization URLhttps://{subdomain}.zendesk.com/oauth/authorizations/new? response_type=code& client_id={client_id}& redirect_uri={redirect_uri}& scope=read%20writeScopes requeridos
read # Read access to all resourceswrite # Write access to all resourcestickets:read # Read tickets (granular)users:read # Read users (granular)organizations:read # Read organizations (granular)Configuración
Configuración básica
connectors: zendesk: enabled: true subdomain: "yourcompany" auth: api_token: "${ZENDESK_API_TOKEN}"
# Data sync options sync: users: true tickets: true organizations: true satisfaction_ratings: true
# Brevo list assignment lists: all_customers: 30 active_tickets: 31 satisfied_customers: 32Asignación de campos
Asocia los campos de usuario de Zendesk con atributos de contacto de Brevo:
Asignaciones predeterminadas
| Parameter | Type | Description |
|---|---|---|
email required | string | Dirección de email del usuario (identificador único) |
name optional | string | Nombre completo, dividido en FIRSTNAME/LASTNAME |
phone optional | string | Se asocia al atributo SMS para WhatsApp/SMS |
organization_id optional | integer | Organización asociada para el mapeo B2B |
role optional | string | Rol de usuario (end-user, agent, admin) |
tags optional | array | Etiquetas de usuario de Zendesk |
ticket_restriction optional | string | Nivel de acceso a tickets |
custom_fields optional | object | Valores de campos de usuario personalizados |
Asignación de campos personalizados
field_mapping: # Standard fields email: email name: FULLNAME phone: SMS
# Support metrics open_tickets: OPEN_TICKETS total_tickets: TOTAL_TICKETS avg_satisfaction: CSAT_SCORE last_ticket_date: LAST_SUPPORT_DATE
# Organization fields organization.name: COMPANY_NAME organization.tags: COMPANY_TAGS
# Custom fields user_fields.customer_type: CUSTOMER_TYPE user_fields.account_tier: ACCOUNT_TIEREndpoints de la API
API de ticketing
| Método | Endpoint | Descripción |
|---|---|---|
GET | /api/v2/tickets | Listar tickets |
POST | /api/v2/tickets | Crear un ticket |
PUT | /api/v2/tickets/{id} | Actualizar un ticket |
GET | /api/v2/tickets/{id} | Mostrar un ticket |
GET | /api/v2/search.json?query={query} | Buscar tickets |
API de usuarios
| Método | Endpoint | Descripción |
|---|---|---|
GET | /api/v2/users | Listar usuarios |
POST | /api/v2/users | Crear un usuario |
PUT | /api/v2/users/{id} | Actualizar un usuario |
GET | /api/v2/users/{id} | Mostrar un usuario |
GET | /api/v2/users/search.json?query={query} | Buscar usuarios |
API de organizaciones
| Método | Endpoint | Descripción |
|---|---|---|
GET | /api/v2/organizations | Listar organizaciones |
POST | /api/v2/organizations | Crear una organización |
GET | /api/v2/organizations/{id}/users | Listar miembros de una organización |
API de valoraciones de satisfacción
| Método | Endpoint | Descripción |
|---|---|---|
GET | /api/v2/satisfaction_ratings | Listar valoraciones de satisfacción |
GET | /api/v2/satisfaction_ratings/{id} | Mostrar una valoración |
Eventos
Eventos de tickets
| Evento | Disparador | Caso de uso |
|---|---|---|
ticket.created | Nuevo ticket enviado | Acuse de recibo de soporte |
ticket.updated | Cambio de estado del ticket | Notificación de estado |
ticket.solved | Ticket marcado como resuelto | Disparador de encuesta CSAT |
ticket.reopened | Ticket resuelto reabierto | Alerta de escalado |
Eventos de usuario
| Evento | Disparador | Caso de uso |
|---|---|---|
user.created | Nuevo usuario registrado | Bienvenida al soporte |
user.updated | Perfil de usuario modificado | Sincronización de atributos |
user.merged | Usuarios fusionados | Deduplicación |
Eventos de satisfacción
| Evento | Disparador | Caso de uso |
|---|---|---|
satisfaction_rating.created | CSAT enviado | Procesamiento de feedback |
satisfaction_rating.bad | Valoración negativa | Contacto de recuperación |
satisfaction_rating.good | Valoración positiva | Campañas de promotores |
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 Zendeskawait tajo.connectors.connect('zendesk', { subdomain: 'yourcompany', apiToken: process.env.ZENDESK_API_TOKEN});Sincronizar usuarios y tickets
// Full sync of users and ticket dataawait tajo.connectors.sync('zendesk', { type: 'full', resources: ['users', 'tickets', 'organizations'], since: '2023-01-01'});
// Check sync statusconst status = await tajo.connectors.status('zendesk');console.log(status);// {// connected: true,// lastSync: '2024-01-15T10:30:00Z',// usersSynced: 8400,// ticketsSynced: 34200,// organizationsSynced: 1200// }Gestionar webhooks de Zendesk
app.post('/webhooks/zendesk', async (req, res) => { const signature = req.get('X-Zendesk-Webhook-Signature');
// Verify webhook signature if (!verifyZendeskSignature(req.body, signature)) { return res.status(401).send('Unauthorized'); }
await tajo.connectors.handleWebhook('zendesk', { type: req.body.type, ticketId: req.body.ticket_id, userId: req.body.user_id, payload: req.body });
res.status(200).send('OK');});Límites de velocidad
Los límites de velocidad de Zendesk varían según el plan:
| Plan | Límite de velocidad | Detalles |
|---|---|---|
| Team | 200 peticiones/minuto | Por token de API |
| Professional | 400 peticiones/minuto | Por token de API |
| Enterprise | 700 peticiones/minuto | Por token de API |
| High Volume Add-on | 2.500 peticiones/minuto | Por token de API |
Límites adicionales:
- API de búsqueda: 6 peticiones/minuto para anónimas, 100/minuto para autenticadas
- Exportaciones incrementales: 10 peticiones/minuto
- API en lote: 100 registros por petición en lote
- Entrega de webhooks: Reintento automático con backoff exponencial
Cabeceras de límite de velocidad
Monitoriza las cabeceras X-Rate-Limit-Remaining y Retry-After para gestionar tu uso de la API.
Resolución de problemas
Problemas habituales
| Problema | Causa | Solución |
|---|---|---|
| 401 Unauthorized | Token de API no válido | Regenera el token en Zendesk Admin |
| 403 Forbidden | Permisos insuficientes | Comprueba los requisitos de rol de agente o administrador |
| Usuario no sincronizado | El usuario es un agente, no un usuario final | Filtra por role en la configuración de sincronización |
| Webhook no recibido | Trigger/target no configurado | Configura el destino del webhook en Zendesk Admin |
| La búsqueda devuelve vacío | Retraso en la indexación | Espera de 1 a 2 minutos a que se actualice el índice de búsqueda |
Modo depuración
Habilita el registro detallado:
connectors: zendesk: debug: true log_level: verbose log_webhooks: trueProbar la conexión
tajo connectors test zendesk# ✓ API connection successful# ✓ Users readable# ✓ Tickets readable# ✓ Organizations readable# ✓ Webhooks configuredBuenas prácticas
- Usa exportaciones incrementales - Usa la API incremental para la sincronización de datos a gran escala
- Filtra solo usuarios finales - Excluye agentes y administradores de la sincronización de contactos de Brevo
- Sincroniza los datos CSAT - Usa las puntuaciones de satisfacción para segmentar por salud del cliente
- Mapea organizaciones - Aprovecha los datos de organización para campañas de marketing B2B
- Implementa reintentos de webhook - Gestiona los fallos temporales con elegancia
- Usa side-loading - Incluye registros relacionados en las respuestas de la API para reducir el número de peticiones
Seguridad
- Autenticación con token de API - Acceso basado en token ligado al email del administrador
- OAuth 2.0 - Acceso delegado basado en token con control de scopes
- Firma de webhooks - Verificación de firma HMAC para los payloads de webhook
- Cifrado TLS - Toda la comunicación con la API se cifra vía HTTPS
- Lista blanca de IP - Restringe el acceso a la API por rango de IP