Conector de OpenAI
Conecta OpenAI con Brevo a través de Tajo para aprovechar la generación de contenido con IA, el análisis de sentimiento de clientes, la segmentación inteligente y la analítica predictiva en tus flujos de automatización de marketing.
Resumen
| Propiedad | Valor |
|---|---|
| Plataforma | OpenAI |
| Categoría | IA / ML (Personalizada) |
| Complejidad de configuración | Media |
| Integración oficial | No |
| Datos sincronizados | Contenido, Embeddings, Insights, Predicciones |
| Método de autenticación | API Key (Bearer Token) |
Funcionalidades
- Generación de contenido con IA - Genera asuntos de email, cuerpo y CTAs con modelos GPT
- Análisis de sentimiento de clientes - Analiza tickets de soporte y feedback con puntuación de sentimiento
- Segmentación inteligente - Usa embeddings para agrupar clientes por patrones de comportamiento
- Analítica predictiva - Predice churn, LTV y propensión de compra
- Contenido multilenguaje - Genera contenido de marketing en cualquier idioma admitido
- Generación de imágenes - Crea visuales para campañas con la integración de DALL-E
Requisitos previos
Antes de empezar, asegúrate de tener:
- Una cuenta de OpenAI con acceso a la API
- Una API key desde el panel de OpenAI
- Una cuenta de Brevo con acceso a la API
- Una cuenta de Tajo con permisos de conector
- Créditos suficientes en la API de OpenAI para tu uso previsto
Autenticación
Autenticación con API Key
OpenAI usa autenticación por Bearer token en todas las peticiones a la API:
# Set your API keysexport OPENAI_API_KEY=sk-your-api-keyexport TAJO_API_KEY=your_tajo_api_keyexport BREVO_API_KEY=your_brevo_api_key// All requests require the Authorization headerconst headers = { 'Authorization': `Bearer ${process.env.OPENAI_API_KEY}`, 'Content-Type': 'application/json'};
// For organization-scoped accessconst orgHeaders = { ...headers, 'OpenAI-Organization': process.env.OPENAI_ORG_ID, 'OpenAI-Project': process.env.OPENAI_PROJECT_ID};Seguridad de la API Key
Nunca expongas tu API key de OpenAI en código del lado del cliente. Usa siempre variables de entorno y peticiones del lado del servidor. Rota las claves periódicamente desde el panel de OpenAI.
Configuración
Configuración básica
connectors: openai: enabled: true model: "gpt-4o" embedding_model: "text-embedding-3-small" image_model: "dall-e-3"
features: content_generation: true sentiment_analysis: true smart_segmentation: true predictive_analytics: true
limits: max_tokens_per_request: 4096 max_requests_per_minute: 60 temperature: 0.7Plantillas de generación de contenido
templates: email_subject: model: "gpt-4o" system_prompt: | You are an expert email marketer. Generate compelling subject lines that drive open rates. max_tokens: 100 temperature: 0.8
email_body: model: "gpt-4o" system_prompt: | Generate personalized email content based on customer data and campaign objectives. max_tokens: 2048 temperature: 0.7Endpoints de la API
| Endpoint | Método | Descripción |
|---|---|---|
https://api.openai.com/v1/responses | POST | Crear respuestas de IA (Responses API) |
https://api.openai.com/v1/chat/completions | POST | Generar completions de texto |
https://api.openai.com/v1/embeddings | POST | Crear embeddings de texto |
https://api.openai.com/v1/images/generations | POST | Generar imágenes |
https://api.openai.com/v1/audio/speech | POST | Generación de texto a voz |
https://api.openai.com/v1/audio/transcriptions | POST | Transcripción de voz a texto |
https://api.openai.com/v1/moderations | POST | Moderación de contenido |
https://api.openai.com/v1/models | GET | Listar los modelos disponibles |
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('openai', { apiKey: process.env.OPENAI_API_KEY, defaultModel: 'gpt-4o'});Generar contenido de email
// Generate personalized email subject linesconst response = await fetch('https://api.openai.com/v1/chat/completions', { method: 'POST', headers: { 'Authorization': `Bearer ${process.env.OPENAI_API_KEY}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ model: 'gpt-4o', messages: [ { role: 'system', content: 'Generate 5 compelling email subject lines for a product launch.' }, { role: 'user', content: `Product: ${product.name}. Target: ${segment.description}.` } ], max_tokens: 200, temperature: 0.8 })});
const result = await response.json();const subjectLines = result.choices[0].message.content;Análisis de sentimiento de clientes
// Analyze customer feedback sentimentconst sentimentAnalysis = await fetch( 'https://api.openai.com/v1/chat/completions', { method: 'POST', headers: { 'Authorization': `Bearer ${process.env.OPENAI_API_KEY}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ model: 'gpt-4o', messages: [ { role: 'system', content: 'Analyze sentiment. Return JSON: {score: -1 to 1, label: string, topics: string[]}' }, { role: 'user', content: customerFeedback } ], response_format: { type: 'json_object' }, max_tokens: 150 }) });
const sentiment = await sentimentAnalysis.json();await tajo.contacts.update(email, { attributes: { SENTIMENT_SCORE: JSON.parse(sentiment.choices[0].message.content).score }});Segmentación inteligente con embeddings
// Generate embeddings for customer clusteringconst embeddingResponse = await fetch( 'https://api.openai.com/v1/embeddings', { method: 'POST', headers: { 'Authorization': `Bearer ${process.env.OPENAI_API_KEY}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ model: 'text-embedding-3-small', input: customerDescriptions, dimensions: 256 }) });
const embeddings = await embeddingResponse.json();// Use embeddings for similarity-based customer clusteringLímites de velocidad
| Modelo | RPM (Peticiones/min) | TPM (Tokens/min) | RPD (Peticiones/día) |
|---|---|---|---|
| gpt-4o | 500 | 30.000 | 10.000 |
| gpt-4o-mini | 500 | 200.000 | 10.000 |
| text-embedding-3-small | 500 | 1.000.000 | 10.000 |
| dall-e-3 | 5 | N/A | 200 |
Cabeceras de límite de velocidad
Monitoriza las cabeceras de rate limit (x-ratelimit-remaining-requests, x-ratelimit-remaining-tokens) en las respuestas de la API para aplicar throttling proactivo y evitar errores 429.
Resolución de problemas
| Problema | Causa | Solución |
|---|---|---|
| 401 Unauthorized | API key no válida | Verifica la clave en el panel de OpenAI |
| 429 Rate Limited | Demasiadas peticiones | Aplica exponential backoff |
| 500 Server Error | Caída de OpenAI | Comprueba status.openai.com y reintenta |
| Respuesta truncada | max_tokens demasiado bajo | Aumenta el parámetro max_tokens |
| Calidad de contenido baja | Temperature demasiado alta | Reduce la temperature para mayor consistencia |
Modo depuración
connectors: openai: debug: true log_level: verbose log_prompts: false # Don't log prompts in production log_usage: trueBuenas prácticas
- Cachea las respuestas - Almacena el contenido generado para reducir llamadas a la API y costes
- Usa salidas estructuradas - Solicita respuestas JSON para un parsing fiable
- Implementa lógica de reintentos - Gestiona los rate limits con exponential backoff
- Monitoriza el uso de tokens - Rastrea el consumo para controlar los costes
- Usa los modelos adecuados - Usa gpt-4o-mini para tareas simples y gpt-4o para las complejas
- Valida las salidas - Valida siempre el contenido generado por IA antes de enviarlo a los clientes
Seguridad
- Autenticación por Bearer token - API keys transmitidas en la cabecera Authorization
- Solo del lado del servidor - Nunca expongas las API keys en código del lado del cliente
- Rotación de claves - Rota las API keys con regularidad desde el panel de OpenAI
- Monitorización del uso - Establece límites de gasto en la configuración de facturación de OpenAI
- Moderación de contenido - Usa la API de Moderations para filtrar contenido no seguro
- Privacidad de datos - Revisa las políticas de uso de datos de OpenAI para tu caso de uso