Коннектор OpenAI
Подключите OpenAI к Brevo через Tajo для использования генерации контента с помощью ИИ, анализа настроений клиентов, интеллектуальной сегментации и прогностической аналитики в рабочих процессах маркетинговой автоматизации.
Обзор
| Свойство | Значение |
|---|---|
| Платформа | OpenAI |
| Категория | AI / ML (Custom) |
| Сложность настройки | Средняя |
| Официальная интеграция | Нет |
| Синхронизируемые данные | Контент, Embeddings, Инсайты, Прогнозы |
| Метод аутентификации | API Key (Bearer Token) |
Возможности
- Генерация AI-контента, создание тем писем, текста и CTA с помощью моделей GPT
- Анализ настроений клиентов, анализ тикетов поддержки и обратной связи для оценки настроений
- Умная сегментация, использование embeddings для кластеризации клиентов по поведенческим паттернам
- Прогностическая аналитика, прогнозирование оттока, LTV и склонности к покупке
- Многоязычный контент, генерация маркетингового контента на любом поддерживаемом языке
- Генерация изображений, создание визуалов для кампаний через интеграцию с DALL-E
Предварительные требования
Прежде чем начать, убедитесь, что у вас есть:
- Аккаунт OpenAI с доступом к API
- API-ключ из панели управления OpenAI
- Аккаунт Brevo с доступом к API
- Аккаунт Tajo с правами на управление коннекторами
- Достаточно кредитов OpenAI API для ожидаемого объёма использования
Аутентификация
Аутентификация по API Key
OpenAI использует аутентификацию через Bearer token для всех запросов к API:
# Задайте ваши API-ключиexport OPENAI_API_KEY=sk-your-api-keyexport TAJO_API_KEY=your_tajo_api_keyexport BREVO_API_KEY=your_brevo_api_key// Все запросы требуют заголовка Authorizationconst headers = { 'Authorization': `Bearer ${process.env.OPENAI_API_KEY}`, 'Content-Type': 'application/json'};
// Для доступа в рамках организацииconst orgHeaders = { ...headers, 'OpenAI-Organization': process.env.OPENAI_ORG_ID, 'OpenAI-Project': process.env.OPENAI_PROJECT_ID};Безопасность API Key
Никогда не раскрывайте ваш API-ключ OpenAI в клиентском коде. Всегда используйте переменные окружения и серверные запросы. Регулярно ротируйте ключи через панель управления OpenAI.
Конфигурация
Базовая настройка
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.7Шаблоны генерации контента
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.7Эндпоинты API
| Эндпоинт | Метод | Описание |
|---|---|---|
https://api.openai.com/v1/responses | POST | Создание AI-ответов (Responses API) |
https://api.openai.com/v1/chat/completions | POST | Генерация текстовых ответов |
https://api.openai.com/v1/embeddings | POST | Создание текстовых embeddings |
https://api.openai.com/v1/images/generations | POST | Генерация изображений |
https://api.openai.com/v1/audio/speech | POST | Генерация речи из текста |
https://api.openai.com/v1/audio/transcriptions | POST | Транскрипция речи в текст |
https://api.openai.com/v1/moderations | POST | Модерация контента |
https://api.openai.com/v1/models | GET | Список доступных моделей |
Примеры кода
Инициализация коннектора
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'});Генерация email-контента
// Генерация персонализированных тем писемconst 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;Анализ настроений клиентов
// Анализ настроений в обратной связи от клиентовconst 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 }});Умная сегментация с embeddings
// Генерация embeddings для кластеризации клиентовconst 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();// Используйте embeddings для кластеризации клиентов по схожестиОграничения скорости
| Модель | RPM (запросов/мин) | TPM (токенов/мин) | RPD (запросов/день) |
|---|---|---|---|
| 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 | Н/Д | 200 |
Заголовки ограничений скорости
Следите за заголовками ограничений скорости (x-ratelimit-remaining-requests, x-ratelimit-remaining-tokens) в ответах API для проактивного регулирования и предотвращения ошибок 429.
Устранение неполадок
| Проблема | Причина | Решение |
|---|---|---|
| 401 Unauthorized | Недействительный API-ключ | Проверьте ключ в панели управления OpenAI |
| 429 Rate Limited | Слишком много запросов | Реализуйте экспоненциальную задержку |
| 500 Server Error | Сбой на стороне OpenAI | Проверьте status.openai.com и повторите попытку |
| Усечённый ответ | Слишком низкое значение max_tokens | Увеличьте параметр max_tokens |
| Низкое качество контента | Слишком высокая температура | Снизьте temperature для большей стабильности |
Режим отладки
connectors: openai: debug: true log_level: verbose log_prompts: false # Не логируйте промпты в production log_usage: trueЛучшие практики
- Кешируйте ответы, сохраняйте сгенерированный контент для снижения количества API-запросов и расходов
- Используйте структурированные выводы, запрашивайте JSON-ответы для надёжного парсинга
- Реализуйте логику повтора, обрабатывайте лимиты скорости с экспоненциальной задержкой
- Отслеживайте потребление токенов, контролируйте расход для управления затратами
- Используйте подходящие модели, gpt-4o-mini для простых задач, gpt-4o для сложных
- Валидируйте результаты, всегда проверяйте контент, сгенерированный ИИ, перед отправкой клиентам
Безопасность
- Аутентификация по Bearer token, API-ключи передаются через заголовок Authorization
- Только на стороне сервера, никогда не раскрывайте API-ключи в клиентском коде
- Ротация ключей, регулярно ротируйте API-ключи через панель управления OpenAI
- Мониторинг использования, установите лимиты расходов в настройках биллинга OpenAI
- Модерация контента, используйте Moderations API для фильтрации небезопасного контента
- Конфиденциальность данных, ознакомьтесь с политикой использования данных OpenAI для вашего сценария