conversationApi.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { apiUrl } from "@/lib/config";
  2. import { reportFrontendLog } from "@/features/agent/services/systemLogApi";
  3. export interface InitVisitorConversationPayload {
  4. visitorId: number;
  5. website?: string;
  6. referrer?: string;
  7. browser?: string;
  8. os?: string;
  9. language?: string;
  10. ipAddress?: string;
  11. chatMode?: string; // 对话模式:human(人工客服)、ai(AI客服)
  12. aiConfigId?: number; // AI 配置 ID(访客选择的模型配置,AI 模式时必需)
  13. }
  14. export interface InitVisitorConversationResult {
  15. conversation_id: number;
  16. status: string;
  17. }
  18. export async function initVisitorConversation(
  19. payload: InitVisitorConversationPayload
  20. ): Promise<InitVisitorConversationResult> {
  21. const res = await fetch(apiUrl("/conversation/init"), {
  22. method: "POST",
  23. headers: { "Content-Type": "application/json" },
  24. body: JSON.stringify({
  25. visitor_id: payload.visitorId,
  26. website: payload.website,
  27. referrer: payload.referrer,
  28. browser: payload.browser,
  29. os: payload.os,
  30. language: payload.language,
  31. ip_address: payload.ipAddress,
  32. chat_mode: payload.chatMode,
  33. ai_config_id: payload.aiConfigId,
  34. }),
  35. });
  36. if (!res.ok) {
  37. void reportFrontendLog({
  38. level: "warn",
  39. category: "frontend",
  40. event: "visitor_init_conversation_failed",
  41. message: "访客初始化对话失败",
  42. visitorId: payload.visitorId,
  43. meta: { status: res.status, chatMode: payload.chatMode, aiConfigId: payload.aiConfigId },
  44. });
  45. throw new Error("初始化对话失败");
  46. }
  47. const data = await res.json();
  48. return {
  49. conversation_id: data.conversation_id ?? 0,
  50. status: data.status ?? "open",
  51. };
  52. }