OpenAI コネクタ
Tajo を介して OpenAI を Brevo に接続し、AI 駆動のコンテンツ生成、顧客のセンチメント分析、インテリジェントなセグメンテーション、予測分析をマーケティング自動化ワークフローに活用します。
概要
| プロパティ | 値 |
|---|---|
| プラットフォーム | OpenAI |
| カテゴリ | AI / ML(カスタム) |
| セットアップの複雑さ | 中 |
| 公式統合 | いいえ |
| 同期データ | コンテンツ、埋め込み、インサイト、予測 |
| 認証方式 | API Key(Bearer Token) |
機能
- AI コンテンツ生成 - GPT モデルでメール件名、本文、CTA を生成
- 顧客センチメント分析 - サポートチケットやフィードバックを分析してセンチメントスコアリング
- スマートセグメンテーション - 埋め込みを使用して行動パターン別に顧客をクラスタリング
- 予測分析 - チャーン、LTV、購入傾向を予測
- 多言語コンテンツ - サポートされている任意の言語でマーケティングコンテンツを生成
- 画像生成 - DALL-E 統合でキャンペーンビジュアルを作成
前提条件
開始する前に、以下を準備してください。
- API アクセス可能な OpenAI アカウント
- OpenAI ダッシュボード からの API キー
- API アクセス可能な Brevo アカウント
- コネクタ権限を持つ Tajo アカウント
- 想定される使用量に十分な OpenAI API クレジット
認証
API キー認証
OpenAI はすべての API リクエストに Bearer トークン認証を使用します。
# API キーを設定export OPENAI_API_KEY=sk-your-api-keyexport TAJO_API_KEY=your_tajo_api_keyexport BREVO_API_KEY=your_brevo_api_key// すべてのリクエストに Authorization ヘッダーが必要const 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 キーのセキュリティ
OpenAI API キーをクライアントサイドコードに公開しないでください。常に環境変数とサーバーサイドリクエストを使用してください。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.7API エンドポイント
| エンドポイント | メソッド | 説明 |
|---|---|---|
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 | テキスト埋め込みを作成 |
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'});メールコンテンツを生成
// パーソナライズされたメール件名を生成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 }});埋め込みを使用したスマートセグメンテーション
// 顧客クラスタリング用の埋め込みを生成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();// 類似性ベースの顧客クラスタリングに埋め込みを使用レート制限
| モデル | 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 | N/A | 200 |
レート制限ヘッダー
API レスポンスのレート制限ヘッダー(x-ratelimit-remaining-requests、x-ratelimit-remaining-tokens)を監視して、事前にスロットリングを実装し、429 エラーを回避してください。
トラブルシューティング
| 問題 | 原因 | 解決策 |
|---|---|---|
| 401 Unauthorized | API キーが無効 | OpenAI ダッシュボードでキーを確認 |
| 429 Rate Limited | リクエスト過多 | 指数バックオフを実装 |
| 500 Server Error | OpenAI の障害 | status.openai.com を確認して再試行 |
| レスポンスが切り捨てられる | max_tokens が低すぎる | max_tokens パラメータを増やす |
| コンテンツ品質が低い | Temperature が高すぎる | 一貫性のため temperature を下げる |
デバッグモード
connectors: openai: debug: true log_level: verbose log_prompts: false # 本番環境ではプロンプトをログに記録しない log_usage: trueベストプラクティス
- レスポンスをキャッシュする - API 呼び出しとコストを削減するために生成されたコンテンツを保存
- 構造化された出力を使用する - 信頼性の高い解析のため JSON レスポンスをリクエスト
- リトライロジックを実装する - 指数バックオフでレート制限を処理
- トークン使用量を監視する - コストを制御するため消費量を追跡
- 適切なモデルを使用する - 単純なタスクには gpt-4o-mini、複雑なタスクには gpt-4o を使用
- 出力を検証する - 顧客に送信する前に常に AI 生成コンテンツを検証
セキュリティ
- ベアラートークン認証 - Authorization ヘッダー経由で API キーを送信
- サーバーサイドのみ - クライアントサイドコードに API キーを決して公開しない
- キーローテーション - OpenAI ダッシュボードから定期的に API キーをローテーション
- 使用量監視 - OpenAI 課金設定で支出制限を設定
- コンテンツモデレーション - Moderations API を使用して安全でないコンテンツをフィルタリング
- データプライバシー - ユースケースに応じて OpenAI のデータ使用ポリシーを確認