OpenAI 커넥터
Tajo를 통해 OpenAI를 Brevo와 연결하여 AI 기반 콘텐츠 생성, 고객 감정 분석, 지능형 세그먼테이션, 마케팅 자동화 워크플로를 위한 예측 분석을 활용하십시오.
개요
| 속성 | 값 |
|---|---|
| 플랫폼 | OpenAI |
| 카테고리 | AI / ML (Custom) |
| 설정 복잡도 | 중간 |
| 공식 통합 | 아니오 |
| 동기화 데이터 | 콘텐츠, 임베딩, 인사이트, 예측 |
| 인증 방법 | API 키 (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 속도 제한 | 너무 많은 요청 | 지수 백오프 구현 |
| 500 서버 오류 | 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 생성 콘텐츠를 항상 검증
보안
- Bearer 토큰 인증 - Authorization 헤더를 통해 API 키 전송
- 서버 측 전용 - 클라이언트 측 코드에 API 키를 노출하지 않음
- 키 교체 - OpenAI 대시보드를 통해 API 키를 정기적으로 교체
- 사용량 모니터링 - OpenAI 청구 설정에서 지출 한도 설정
- 콘텐츠 조정 - Moderations API를 사용하여 안전하지 않은 콘텐츠 필터링
- 데이터 개인 정보 보호 - 사용 사례에 대한 OpenAI 데이터 사용 정책 검토