Connettore OpenAI
Collega OpenAI a Brevo tramite Tajo per sfruttare generazione di contenuti AI-powered, analisi del sentiment, segmentazione intelligente e analytics predittive nei tuoi flussi di marketing automation.
Panoramica
| Proprietà | Valore |
|---|---|
| Piattaforma | OpenAI |
| Categoria | AI / ML (Custom) |
| Complessità di setup | Media |
| Integrazione ufficiale | No |
| Dati sincronizzati | Contenuti, Embeddings, Insight, Predizioni |
| Metodo di autenticazione | API Key (Bearer Token) |
Funzionalità
- Generazione contenuti AI - Genera oggetti email, corpo del messaggio e CTA con i modelli GPT
- Analisi sentiment clienti - Analizza ticket di supporto e feedback per calcolare sentiment score
- Segmentazione smart - Usa embeddings per raggruppare i clienti per pattern di comportamento
- Analytics predittive - Prevedi churn, LTV e propensione all’acquisto
- Contenuti multilingua - Genera contenuti marketing in qualsiasi lingua supportata
- Generazione immagini - Crea visual per campagne con l’integrazione DALL-E
Prerequisiti
Prima di iniziare, assicurati di avere:
- Un account OpenAI con accesso API
- Una API key dalla dashboard OpenAI
- Un account Brevo con accesso API
- Un account Tajo con permessi sui connettori
- Crediti API OpenAI sufficienti per l’uso previsto
Autenticazione
Autenticazione con API Key
OpenAI usa l’autenticazione Bearer token per tutte le richieste API:
# Imposta le tue API keyexport OPENAI_API_KEY=sk-your-api-keyexport TAJO_API_KEY=your_tajo_api_keyexport BREVO_API_KEY=your_brevo_api_key// Tutte le richieste richiedono l'header Authorizationconst headers = { 'Authorization': `Bearer ${process.env.OPENAI_API_KEY}`, 'Content-Type': 'application/json'};
// Per accesso con scope di organizzazioneconst orgHeaders = { ...headers, 'OpenAI-Organization': process.env.OPENAI_ORG_ID, 'OpenAI-Project': process.env.OPENAI_PROJECT_ID};Sicurezza dell'API key
Non esporre mai la tua API key OpenAI in codice client-side. Usa sempre variabili d’ambiente e richieste server-side. Ruota periodicamente le chiavi tramite la dashboard OpenAI.
Configurazione
Setup di base
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.7Template di generazione contenuti
templates: email_subject: model: "gpt-4o" system_prompt: | Sei un esperto di email marketing. Genera oggetti efficaci che aumentino il tasso di apertura. max_tokens: 100 temperature: 0.8
email_body: model: "gpt-4o" system_prompt: | Genera contenuti email personalizzati basati sui dati cliente e sugli obiettivi della campagna. max_tokens: 2048 temperature: 0.7Endpoint API
| Endpoint | Metodo | Descrizione |
|---|---|---|
https://api.openai.com/v1/responses | POST | Crea risposte AI (Responses API) |
https://api.openai.com/v1/chat/completions | POST | Genera completion di testo |
https://api.openai.com/v1/embeddings | POST | Crea embedding di testo |
https://api.openai.com/v1/images/generations | POST | Genera immagini |
https://api.openai.com/v1/audio/speech | POST | Generazione text-to-speech |
https://api.openai.com/v1/audio/transcriptions | POST | Trascrizione speech-to-text |
https://api.openai.com/v1/moderations | POST | Moderazione contenuti |
https://api.openai.com/v1/models | GET | Elenca i modelli disponibili |
Esempi di codice
Inizializzare il connettore
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'});Generare contenuti email
// Genera oggetti email personalizzaticonst 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: 'Genera 5 oggetti email efficaci per il lancio di un prodotto.' }, { role: 'user', content: `Prodotto: ${product.name}. Target: ${segment.description}.` } ], max_tokens: 200, temperature: 0.8 })});
const result = await response.json();const subjectLines = result.choices[0].message.content;Analisi del sentiment cliente
// Analizza il sentiment del feedback clienteconst 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: 'Analizza il sentiment. Restituisci JSON: {score: -1 a 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 }});Segmentazione smart con embeddings
// Genera embeddings per il clustering dei clienticonst 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();// Usa gli embedding per il clustering clienti basato sulla similaritàLimiti di rate
| Modello | RPM (Richieste/Min) | TPM (Token/Min) | RPD (Richieste/Giorno) |
|---|---|---|---|
| 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 |
Header del rate limit
Monitora gli header del rate limit (x-ratelimit-remaining-requests, x-ratelimit-remaining-tokens) nelle risposte API per implementare throttling proattivo ed evitare errori 429.
Risoluzione dei problemi
| Problema | Causa | Soluzione |
|---|---|---|
| 401 Unauthorized | API key non valida | Verifica la key nella dashboard OpenAI |
| 429 Rate Limited | Troppe richieste | Implementa exponential backoff |
| 500 Server Error | Outage OpenAI | Controlla status.openai.com e riprova |
| Risposta troncata | max_tokens troppo basso | Aumenta il parametro max_tokens |
| Qualità contenuti scarsa | Temperature troppo alta | Abbassa la temperature per coerenza |
Modalità debug
connectors: openai: debug: true log_level: verbose log_prompts: false # Non loggare i prompt in produzione log_usage: trueBest practice
- Memorizza in cache le risposte - Archivia i contenuti generati per ridurre chiamate API e costi
- Usa output strutturati - Richiedi risposte JSON per un parsing affidabile
- Implementa logica di retry - Gestisci i rate limit con exponential backoff
- Monitora l’uso dei token - Traccia il consumo per controllare i costi
- Usa modelli appropriati - Usa gpt-4o-mini per task semplici, gpt-4o per quelli complessi
- Valida gli output - Valida sempre i contenuti generati dall’AI prima di inviarli ai clienti
Sicurezza
- Autenticazione Bearer token - API key trasmesse tramite header Authorization
- Solo server-side - Non esporre mai le API key in codice client-side
- Rotazione chiavi - Ruota regolarmente le API key tramite la dashboard OpenAI
- Monitoraggio dell’uso - Imposta limiti di spesa nelle impostazioni di fatturazione OpenAI
- Moderazione dei contenuti - Usa la Moderations API per filtrare contenuti non sicuri
- Privacy dei dati - Rivedi le policy di utilizzo dati di OpenAI per il tuo caso d’uso