OpenAI-connector
Verbind OpenAI met Brevo via Tajo om gebruik te maken van AI-gestuurde contentgeneratie, klant-sentimentanalyse, intelligente segmentatie en voorspellende analyses voor je marketingautomatiseringsworkflows.
Overzicht
| Eigenschap | Waarde |
|---|---|
| Platform | OpenAI |
| Categorie | AI / ML (Custom) |
| Setupcomplexiteit | Gemiddeld |
| Officiële integratie | Nee |
| Gesynchroniseerde data | Content, Embeddings, Inzichten, Voorspellingen |
| Auth-methode | API Key (Bearer Token) |
Functies
- AI-contentgeneratie - Genereer e-mailonderwerpregels, body-copy en CTA’s met GPT-modellen
- Klant-sentimentanalyse - Analyseer supporttickets en feedback voor sentimentscoring
- Slimme segmentatie - Gebruik embeddings om klanten te clusteren op gedragspatronen
- Voorspellende analyses - Voorspel churn, LTV en aankoopkans
- Meertalige content - Genereer marketingcontent in elke ondersteunde taal
- Beeldgeneratie - Maak campagnevisuals met DALL-E-integratie
Vereisten
Voordat je begint, zorg dat je beschikt over:
- Een OpenAI-account met API-toegang
- Een API key uit het OpenAI dashboard
- Een Brevo-account met API-toegang
- Een Tajo-account met connector-rechten
- Voldoende OpenAI API-credits voor je verwachte gebruik
Authenticatie
API Key-authenticatie
OpenAI gebruikt Bearer-token-authenticatie voor alle API-requests:
# 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};API key-beveiliging
Gebruik je OpenAI API key nooit in client-side code. Werk altijd met environment variables en server-side requests. Roteer keys regelmatig via het OpenAI-dashboard.
Configuratie
Basisinstelling
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.7Templates voor contentgeneratie
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.7API-endpoints
| Endpoint | Method | Beschrijving |
|---|---|---|
https://api.openai.com/v1/responses | POST | AI-responses aanmaken (Responses API) |
https://api.openai.com/v1/chat/completions | POST | Tekstcompletions genereren |
https://api.openai.com/v1/embeddings | POST | Tekstembeddings aanmaken |
https://api.openai.com/v1/images/generations | POST | Afbeeldingen genereren |
https://api.openai.com/v1/audio/speech | POST | Tekst-naar-spraakgeneratie |
https://api.openai.com/v1/audio/transcriptions | POST | Spraak-naar-teksttranscriptie |
https://api.openai.com/v1/moderations | POST | Contentmoderatie |
https://api.openai.com/v1/models | GET | Beschikbare modellen opvragen |
Codevoorbeelden
Connector initialiseren
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'});E-mailcontent genereren
// 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;Klant-sentimentanalyse
// 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 }});Slimme segmentatie met 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 clusteringRate limits
| Model | RPM (Requests/Min) | TPM (Tokens/Min) | RPD (Requests/Dag) |
|---|---|---|---|
| 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.v.t. | 200 |
Rate limit-headers
Monitor rate limit-headers (x-ratelimit-remaining-requests, x-ratelimit-remaining-tokens) in API-responses om proactieve throttling te implementeren en 429-fouten te voorkomen.
Probleemoplossing
| Probleem | Oorzaak | Oplossing |
|---|---|---|
| 401 Unauthorized | Ongeldige API key | Verifieer key in OpenAI-dashboard |
| 429 Rate Limited | Te veel requests | Implementeer exponentiële backoff |
| 500 Server Error | OpenAI-storing | Check status.openai.com en probeer opnieuw |
| Afgekapte response | max_tokens te laag | Verhoog de max_tokens-parameter |
| Slechte contentkwaliteit | Temperature te hoog | Verlaag temperature voor consistentie |
Debugmodus
connectors: openai: debug: true log_level: verbose log_prompts: false # Don't log prompts in production log_usage: trueBest practices
- Cache responses - Sla gegenereerde content op om API-calls en kosten te beperken
- Gebruik gestructureerde outputs - Vraag JSON-responses aan voor betrouwbare parsing
- Implementeer retry-logica - Behandel rate limits met exponentiële backoff
- Monitor token-gebruik - Volg consumptie om kosten te beheersen
- Gebruik passende modellen - Gebruik gpt-4o-mini voor eenvoudige taken, gpt-4o voor complexe
- Valideer outputs - Valideer altijd AI-gegenereerde content voordat je deze naar klanten stuurt
Beveiliging
- Bearer token-auth - API keys verzonden via Authorization-header
- Alleen server-side - Stel API keys nooit bloot in client-side code
- Key-rotatie - Roteer API keys regelmatig via OpenAI-dashboard
- Gebruiksmonitoring - Stel uitgavenlimieten in via OpenAI-billing settings
- Contentmoderatie - Gebruik de Moderations API om onveilige content te filteren
- Dataprivacy - Bekijk OpenAI’s data usage policies voor je use case