OpenAI Connector
เชื่อมต่อ OpenAI กับ Brevo ผ่าน Tajo เพื่อใช้ประโยชน์จากการสร้างเนื้อหาด้วย AI การวิเคราะห์ความรู้สึกของลูกค้า การแบ่งกลุ่มอัจฉริยะ และ predictive analytics สำหรับเวิร์กโฟลว์ระบบอัตโนมัติทางการตลาด
ภาพรวม
| คุณสมบัติ | ค่า |
|---|---|
| แพลตฟอร์ม | OpenAI |
| หมวดหมู่ | AI / ML (แบบกำหนดเอง) |
| ความซับซ้อนในการตั้งค่า | ปานกลาง |
| การผสานรวมอย่างเป็นทางการ | ไม่ |
| ข้อมูลที่ซิงค์ | เนื้อหา Embeddings ข้อมูลเชิงลึก การคาดการณ์ |
| วิธีการยืนยันตัวตน | API Key (Bearer Token) |
ฟีเจอร์
- การสร้างเนื้อหาด้วย AI - สร้างหัวเรื่องอีเมล เนื้อหา และ CTAs ด้วยโมเดล GPT
- การวิเคราะห์ความรู้สึกของลูกค้า - วิเคราะห์ตั๋วสนับสนุนและข้อเสนอแนะเพื่อให้คะแนนความรู้สึก
- การแบ่งกลุ่มอัจฉริยะ - ใช้ embeddings เพื่อจัดกลุ่มลูกค้าตามรูปแบบพฤติกรรม
- Predictive analytics - คาดการณ์ churn, LTV และแนวโน้มการซื้อ
- เนื้อหาหลายภาษา - สร้างเนื้อหาการตลาดในภาษาที่รองรับใดๆ
- การสร้างรูปภาพ - สร้างภาพสำหรับแคมเปญด้วยการผสานรวม DALL-E
ข้อกำหนดเบื้องต้น
ก่อนเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมี:
- บัญชี OpenAI ที่มีสิทธิ์เข้าถึง API
- API key จาก OpenAI dashboard
- บัญชี Brevo ที่มีสิทธิ์เข้าถึง API
- บัญชี Tajo ที่มีสิทธิ์ connector
- เครดิต OpenAI API เพียงพอสำหรับการใช้งานที่คาดไว้
การยืนยันตัวตน
การยืนยันตัวตนด้วย API Key
OpenAI ใช้การยืนยันตัวตน Bearer token สำหรับคำขอ API ทั้งหมด:
# 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
อย่าเปิดเผย OpenAI API key ในโค้ดฝั่ง client ใช้ตัวแปรสภาพแวดล้อมและคำขอฝั่งเซิร์ฟเวอร์เสมอ หมุนเวียน keys เป็นระยะผ่าน OpenAI dashboard
การกำหนดค่า
การตั้งค่าพื้นฐาน
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 Endpoints
| Endpoint | เมธอด | คำอธิบาย |
|---|---|---|
https://api.openai.com/v1/responses | POST | สร้างการตอบสนอง AI (Responses API) |
https://api.openai.com/v1/chat/completions | POST | สร้าง text completions |
https://api.openai.com/v1/embeddings | POST | สร้าง text 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 | แสดงรายการโมเดลที่มีอยู่ |
ตัวอย่างโค้ด
เริ่มต้น Connector
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'});สร้างเนื้อหาอีเมล
// 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;การวิเคราะห์ความรู้สึกของลูกค้า
// 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 }});การแบ่งกลุ่มอัจฉริยะด้วย 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 clusteringขีดจำกัดอัตรา
| โมเดล | RPM (คำขอ/นาที) | TPM (Tokens/นาที) | 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 |
Rate Limit Headers
ตรวจสอบ headers ขีดจำกัดอัตรา (x-ratelimit-remaining-requests, x-ratelimit-remaining-tokens) ในการตอบสนอง API เพื่อใช้การควบคุมเชิงรุกและหลีกเลี่ยงข้อผิดพลาด 429
การแก้ไขปัญหา
| ปัญหา | สาเหตุ | วิธีแก้ |
|---|---|---|
| 401 Unauthorized | API key ไม่ถูกต้อง | ตรวจสอบ key ใน OpenAI dashboard |
| 429 Rate Limited | คำขอมากเกินไป | ใช้ exponential backoff |
| 500 Server Error | OpenAI หยุดทำงาน | ตรวจสอบ status.openai.com และลองใหม่ |
| การตอบสนองถูกตัด | max_tokens ต่ำเกินไป | เพิ่มพารามิเตอร์ max_tokens |
| คุณภาพเนื้อหาไม่ดี | Temperature สูงเกินไป | ลด temperature เพื่อความสม่ำเสมอ |
โหมด Debug
connectors: openai: debug: true log_level: verbose log_prompts: false # Don't log prompts in production log_usage: trueแนวทางปฏิบัติที่ดีที่สุด
- Cache การตอบสนอง - จัดเก็บเนื้อหาที่สร้างขึ้นเพื่อลดการเรียก API และค่าใช้จ่าย
- ใช้ structured outputs - ขอการตอบสนอง JSON เพื่อการ parsing ที่เชื่อถือได้
- ใช้ retry logic - จัดการขีดจำกัดอัตราด้วย exponential backoff
- ตรวจสอบการใช้งาน token - ติดตามการบริโภคเพื่อควบคุมค่าใช้จ่าย
- ใช้โมเดลที่เหมาะสม - ใช้ gpt-4o-mini สำหรับงานง่ายๆ gpt-4o สำหรับงานที่ซับซ้อน
- ตรวจสอบ outputs - ตรวจสอบเนื้อหาที่สร้างโดย AI เสมอก่อนส่งให้ลูกค้า
ความปลอดภัย
- การยืนยันตัวตน bearer token - API keys ส่งผ่าน Authorization header
- ฝั่งเซิร์ฟเวอร์เท่านั้น - อย่าเปิดเผย API keys ในโค้ดฝั่ง client
- การหมุนเวียน key - หมุนเวียน API keys เป็นระยะผ่าน OpenAI dashboard
- การตรวจสอบการใช้งาน - ตั้งขีดจำกัดการใช้จ่ายในการตั้งค่าการเรียกเก็บเงิน OpenAI
- การกลั่นกรองเนื้อหา - ใช้ Moderations API เพื่อกรองเนื้อหาที่ไม่ปลอดภัย
- ความเป็นส่วนตัวของข้อมูล - ตรวจสอบนโยบายการใช้ข้อมูลของ OpenAI สำหรับกรณีใช้งานของคุณ