Conector de SendGrid
Conecta tu cuenta de SendGrid con Brevo a través de Tajo para migrar tu infraestructura de email, sincronizar contactos, transferir datos de campaña y unificar la analítica de engagement entre ambas plataformas.
Resumen
| Propiedad | Valor |
|---|---|
| Plataforma | SendGrid (Twilio) |
| Categoría | Marketing |
| Complejidad de configuración | Fácil |
| Integración oficial | Sí |
| Datos sincronizados | Contactos, Campañas, Email transaccional, Eventos |
| URL base de la API | https://api.sendgrid.com/v3 |
Funcionalidades
- Migración de contactos - Migra los contactos de SendGrid Marketing a Brevo con campos personalizados
- Sincronización de email transaccional - Registra los eventos de email transaccional para un reporting unificado
- Datos de campaña - Sincroniza los datos de rendimiento de Single Send y Automation
- Webhooks de eventos - Reenvía los eventos de email (entregado, abierto, clicado, rebotado) a Brevo
- Sincronización de suppressions - Migra las listas de rebotes, bloqueos y bajas para cumplimiento
- Migración de plantillas - Exporta Dynamic Transactional Templates para usarlas en Brevo
- Verificación de remitente - Sincroniza identidades de remitente verificadas y autenticación de dominio
- Sincronización de estadísticas - Importa estadísticas históricas de engagement como atributos de Brevo
Requisitos previos
Antes de empezar, asegúrate de tener:
- Una cuenta de SendGrid (Free, Essentials, Pro o Premier)
- Una clave API de SendGrid con los permisos necesarios
- Una cuenta de Brevo con acceso a la API
- Una cuenta de Tajo
Autenticación
Autenticación con clave API
SendGrid usa autenticación con bearer token.
curl https://api.sendgrid.com/v3/marketing/contacts \ -H "Authorization: Bearer SG.YOUR_API_KEY" \ -H "Content-Type: application/json"Crea claves API en SendGrid Settings > API Keys con niveles de permisos específicos:
- Full Access - Acceso completo a la API
- Restricted Access - Control granular de permisos
- Billing Access - Solo operaciones de facturación
Permisos necesarios
Marketing: Full Access - Contacts (read) - Single Sends (read) - Automations (read)Mail Send: Full Access - Mail Send (read)Stats: Read AccessSuppressions: Read AccessTracking: Read AccessSeguridad de la clave API
Las claves API de SendGrid solo se muestran una vez al crearlas. Guárdalas de forma segura. Si las pierdes, tendrás que crear una nueva clave.
Configuración
Configuración básica
connectors: sendgrid: enabled: true api_key: "${SENDGRID_API_KEY}"
# Data sync options sync: contacts: true campaigns: true transactional: true suppressions: true statistics: true
# List mapping to Brevo list_mapping: "All Contacts": 60 "Newsletter": 61 "Transactional": 62Asignación de campos
Asocia los campos de contacto de SendGrid con los atributos de contacto de Brevo:
Default Mappings
| Parameter | Type | Description |
|---|---|---|
email required | string | Dirección de email del contacto (identificador único) |
first_name optional | string | Se asigna al atributo FIRSTNAME |
last_name optional | string | Se asigna al atributo LASTNAME |
phone_number optional | string | Se asigna al atributo SMS |
city optional | string | Ciudad del contacto |
country optional | string | País del contacto |
custom_fields optional | object | Pares clave-valor de campos personalizados |
list_ids optional | array | Pertenencia a listas de SendGrid |
Asignación de campos personalizados
field_mapping: # Standard fields email: email first_name: FIRSTNAME last_name: LASTNAME phone_number: SMS
# Location fields city: CITY state_province_region: STATE country: COUNTRY postal_code: POSTAL_CODE
# Engagement metrics avg_open_rate: AVG_OPEN_RATE avg_click_rate: AVG_CLICK_RATE
# Custom fields custom_fields.company: COMPANY_NAME custom_fields.plan: PLAN_TYPEEndpoints de la API
Marketing Contacts
| Método | Endpoint | Descripción |
|---|---|---|
PUT | /v3/marketing/contacts | Añadir o actualizar contactos |
POST | /v3/marketing/contacts/search | Buscar contactos |
GET | /v3/marketing/contacts/count | Obtener el número de contactos |
POST | /v3/marketing/contacts/exports | Exportar contactos |
DELETE | /v3/marketing/contacts | Eliminar contactos |
GET | /v3/marketing/lists | Listar todas las listas de contactos |
Email transaccional (Mail Send)
| Método | Endpoint | Descripción |
|---|---|---|
POST | /v3/mail/send | Enviar un email |
GET | /v3/templates | Listar Dynamic Templates |
GET | /v3/templates/{id} | Obtener los detalles de una plantilla |
Campañas (Single Sends)
| Método | Endpoint | Descripción |
|---|---|---|
GET | /v3/marketing/singlesends | Listar Single Sends |
GET | /v3/marketing/singlesends/{id} | Obtener detalles de un Single Send |
GET | /v3/marketing/automations | Listar Automations |
Estadísticas
| Método | Endpoint | Descripción |
|---|---|---|
GET | /v3/stats | Obtener estadísticas globales de email |
GET | /v3/categories/stats | Obtener estadísticas por categoría |
GET | /v3/marketing/stats/singlesends | Obtener estadísticas de Single Send |
Suppressions
| Método | Endpoint | Descripción |
|---|---|---|
GET | /v3/suppression/bounces | Listar emails rebotados |
GET | /v3/suppression/blocks | Listar emails bloqueados |
GET | /v3/suppression/spam_reports | Listar reportes de spam |
GET | /v3/suppression/unsubscribes | Listar bajas globales |
Eventos
Eventos de email (a través del Event Webhook)
| Evento | Disparador | Caso de uso |
|---|---|---|
processed | Email aceptado por SendGrid | Confirmación de envío |
delivered | Email entregado al destinatario | Seguimiento de entrega |
open | Email abierto | Scoring de engagement |
click | Clic en enlace | Seguimiento de intereses |
bounce | Email rebotado | Higiene de la lista |
dropped | Email suprimido | Revisión de cumplimiento |
deferred | Entrega pospuesta | Monitorización de reintentos |
spam_report | Marcado como spam | Gestión de reputación |
unsubscribe | Baja a través del enlace | Sincronizació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 SendGridawait tajo.connectors.connect('sendgrid', { apiKey: process.env.SENDGRID_API_KEY});Migrar contactos a Brevo
// Full contact migration from SendGrid to Brevoawait tajo.connectors.sync('sendgrid', { type: 'full', resources: ['contacts', 'suppressions'], options: { includeCustomFields: true, migrateListMemberships: true, migrateSuppressions: true }});
// Check migration statusconst status = await tajo.connectors.status('sendgrid');console.log(status);// {// connected: true,// lastSync: '2024-01-15T10:30:00Z',// contactsMigrated: 45000,// suppressionsSynced: 3200,// listsMapped: 8// }Reenviar eventos de email
// Handle SendGrid Event Webhookapp.post('/webhooks/sendgrid', async (req, res) => { const signature = req.get('X-Twilio-Email-Event-Webhook-Signature');
// Verify webhook signature (ECDSA) if (!verifySendGridSignature(req.body, signature)) { return res.status(401).send('Unauthorized'); }
// Process batch of events for (const event of req.body) { await tajo.connectors.handleWebhook('sendgrid', { type: event.event, email: event.email, timestamp: event.timestamp, payload: event }); }
res.status(200).send('OK');});Límites de velocidad
Límites de velocidad de la API de SendGrid:
| Endpoint | Límite | Detalles |
|---|---|---|
Mail Send (/v3/mail/send) | Depende del plan | Free: 100/día, Essentials: según el plan |
| Marketing Contacts PUT | 3 peticiones/segundo | Hasta 30.000 contactos por lote |
| Marketing Contacts Search | 50 peticiones/segundo | Por clave API |
| API general | 1.000 peticiones/segundo | Por clave API |
| Event Webhook | Entrega por lotes | Hasta 1.000 eventos por POST |
Límites de Mail Send
Los límites de Mail Send dependen de tu plan de SendGrid. Las cuentas Free están limitadas a 100 emails/día. Consulta los detalles de tu plan para conocer los límites exactos de envío.
Resolución de problemas
Problemas habituales
| Problema | Causa | Solución |
|---|---|---|
| 401 Unauthorized | Clave API no válida | Verifica la clave API en SendGrid Settings |
| 403 Forbidden | Permisos insuficientes de la clave API | Crea una clave nueva con los scopes necesarios |
| Exportación de contactos pendiente | Procesamiento de gran volumen | Haz polling del endpoint de estado de la exportación hasta que finalice |
| Sincronización de suppressions incompleta | Se requiere paginación | Implementa paginación con el parámetro offset |
| Webhook de eventos no recibido | URL sin verificar | Completa la verificación de la URL del webhook en SendGrid |
Modo depuración
Activa el registro detallado:
connectors: sendgrid: debug: true log_level: verbose log_webhooks: trueProbar la conexión
tajo connectors test sendgrid# ✓ API connection successful# ✓ Contacts readable# ✓ Lists accessible# ✓ Statistics readable# ✓ Suppressions accessibleBuenas prácticas
- Migra primero las suppressions - Asegúrate de que los rebotes, bloqueos y bajas están en Brevo antes de enviar
- Usa subidas de contactos por lote - Haz PUT de hasta 30.000 contactos por petición para mayor eficiencia
- Verifica el Event Webhook - Activa los webhooks firmados con verificación ECDSA
- Asocia los campos personalizados - Crea los atributos correspondientes en Brevo antes de la migración de contactos
- Sincroniza datos de engagement - Importa estadísticas históricas para la segmentación en Brevo
- Gestiona las exportaciones asíncronas - Las exportaciones de contactos son asíncronas; haz polling hasta que finalicen
Seguridad
- Autenticación con clave API - Bearer token con niveles de permisos granulares
- Firma del Event Webhook - Verificación de firma ECDSA para los payloads de webhook
- Cifrado TLS - Toda la comunicación con la API se cifra vía HTTPS
- IP Access Management - Restringe el acceso al Dashboard y a la API por IP
- Autenticación de dos factores - 2FA disponible para el acceso a la cuenta