เอกสาร API

เอกสารอ้างอิงฉบับสมบูรณ์สำหรับ Widget API และ REST endpoints

Widget API

อ็อบเจกต์ window.LaunchChatWidget แบบ global มีเมธอดสำหรับควบคุมวิดเจ็ตด้วยโปรแกรม

เมธอด

open()

เปิดหน้าต่างแชทด้วยโปรแกรม

window.LaunchChatWidget.open();
close()

ปิดหน้าต่างแชท

window.LaunchChatWidget.close();
destroy()

ลบวิดเจ็ตออกจากหน้าทั้งหมด เหมาะสำหรับ SPA เมื่อนำทางออก

window.LaunchChatWidget.destroy();
init(config)

เริ่มต้นวิดเจ็ตใหม่ด้วยการตั้งค่าใหม่

window.LaunchChatWidget.init({ widgetId: "new-widget-id" });
on(event, callback)

สมัครรับเหตุการณ์ของวิดเจ็ต

window.LaunchChatWidget.on('message', (data) => {
  console.log('New message:', data);
});
off(event, callback)

ยกเลิกการสมัครรับเหตุการณ์ของวิดเจ็ต

เหตุการณ์

เหตุการณ์Payloadคำอธิบาย
open{ timestamp }หน้าต่างแชทถูกเปิด
close{ timestamp }หน้าต่างแชทถูกปิด
message{ content, role }ข้อความถูกส่งหรือรับ
escalate{ email, message }ผู้ใช้ขอความช่วยเหลือจากเจ้าหน้าที่
feedback{ messageId, type }ผู้ใช้ให้ความคิดเห็น (เชิงบวก/เชิงลบ)

REST API

POST /api/widget/chat

ส่งข้อความและรับคำตอบที่สร้างโดย AI

Request Body

{
  "widgetId": "string",      // Required
  "message": "string",       // Required - user's question
  "conversationId": "string", // Optional - for context
  "visitorId": "string",     // Optional - track visitor
  "pageUrl": "string"        // Optional - current page
}

Response

{
  "conversationId": "uuid",
  "messageId": "uuid",
  "answer": "string",
  "citations": [
    {
      "pageId": "string",
      "pageTitle": "string",
      "pageUrl": "string",
      "excerpt": "string"
    }
  ],
  "relatedArticles": [...],
  "confidenceScore": 0.85,
  "wasRefused": false
}

รหัสข้อผิดพลาด

รหัสสถานะคำอธิบาย
400Bad Requestขาดฟิลด์ที่จำเป็น
403Forbiddenโดเมนไม่อยู่ในรายการที่อนุญาต
404Not Foundไม่พบวิดเจ็ตหรือไม่ได้ใช้งาน
429Rate Limitedเกินโควตาข้อความ
500Server Errorข้อผิดพลาดในการประมวลผลภายใน

TypeScript Types

คัดลอก types เหล่านี้ลงในโปรเจกต์ของคุณเพื่อความปลอดภัยของ type อย่างสมบูรณ์:

interface LaunchChatConfig {
  widgetId: string;
  primaryColor?: string;
  greeting?: string;
  placeholder?: string;
  position?: 'bottom-right' | 'bottom-left';
  theme?: 'light' | 'dark' | 'auto';
}

interface WidgetAPI {
  open(): void;
  close(): void;
  destroy(): void;
  init(config: { widgetId: string }): Promise<void>;
  on<E extends keyof WidgetEvents>(
    event: E,
    callback: (data: WidgetEvents[E]) => void
  ): void;
  off<E extends keyof WidgetEvents>(
    event: E,
    callback: (data: WidgetEvents[E]) => void
  ): void;
}

interface WidgetEvents {
  open: { timestamp: number };
  close: { timestamp: number };
  message: { content: string; role: 'user' | 'assistant' };
  escalate: { email: string; message: string };
  feedback: { messageId: string; type: 'positive' | 'negative' };
}

declare global {
  interface Window {
    LaunchChatConfig?: LaunchChatConfig;
    LaunchChatWidget?: WidgetAPI;
  }
}