API 参考
配置表、方法、事件、类型定义一览。
ChatConfig(核心配置)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appId | string | 是 | 项目 ID |
| apiKey | string | 否 | API Key 或 tokenProvider 二选一 |
| tokenProvider | () => Promise<string> | 否 | 临时 Token 动态获取函数,生产环境推荐,与 apiKey 二选一 |
| baseUrl | string | 否 | API 基础地址(默认 https://pinyou.xin/api) |
| timeout | number | 否 | 请求超时(默认 30000ms) |
| debug | boolean | 否 | 调试模式,打印日志 |
| userId | string | 否 | 终端用户标识 |
| sessionId | string | 否 | 会话标识(不传则自动生成) |
| ttsMode | 'stream' | 'websocket' | 否 | TTS 模式(默认 websocket) |
| ttsWebSocket | TtsWebSocketConfig | 否 | TTS WebSocket 高级配置(wsUrl, forceWebSocket) |
WidgetConfig(预制组件配置)
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| theme | 'minimal' | 'glass' | 'bubble' | 'light' | 'dark' | 'custom' | 'minimal' | 主题(light/dark/custom 为旧版兼容) |
| draggable | boolean | true | 悬浮球可拖拽 |
| defaultOpen | boolean | false | 默认打开窗口 |
| position | 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left' | 'bottom-right' | 悬浮球位置 |
| title | string | 'AI 助手' | 窗口标题 |
| welcomeMessage | string | - | 欢迎消息 |
| width | number | 380 | 窗口宽度 |
| height | number | 600 | 窗口高度 |
| themeConfig | ThemeConfig | - | 主题颜色配置 |
| placeholder | string | - | 输入框占位符文本 |
| subtitle | string | - | 窗口副标题 |
| logoUrl | string | - | Logo 图片 URL |
| showCloseButton | boolean | true | 显示关闭按钮 |
| zIndex | number | 9999 | 窗口层级 |
| offset | { x: number; y: number } | - | 位置偏移量 |
ChatClient 方法
1// 创建客户端2const client = new ChatClient(config);34// === 消息 ===5await client.send(content);6await client.sendMessage({ content, conversationId, stream: true });7await client.sendImage(file, content?);8await client.sendVoice(file, content?);9await client.sendVideo(file, content?);10await client.sendWithAttachments(content, attachments);11await client.uploadFile(file, type);1213// === 会话 ===14await client.getConversations();15await client.getConversation(id);16await client.deleteConversation(id);17client.newConversation();18await client.switchConversation(id);19client.getCurrentConversationId();2021// === TTS 语音播报 ===22client.setTtsMuted(muted);23client.playTts(messageId, text);24client.pauseTts();25client.resumeTts();26client.stopTts();27await client.generateTts(text, options?);28client.setTtsVoice(voiceId);29await client.getTtsVoices();30client.setTtsAutoPlay(enabled);31client.isTtsAutoPlay();32client.isTtsMuted();33client.getCurrentTtsMessageId();34client.getTtsPlayState();3536// === 状态 ===37client.getState();38client.getMessages();39client.setInputValue(value);40client.getInputValue();41client.subscribe(listener);4243// === 控制 ===44client.abortMessage(messageId);45client.abortAll();46client.destroy();4748// === 事件 ===49client.on(event, handler);50client.once(event, handler);51client.off(event, handler);
事件类型
| 事件 | 说明 |
|---|---|
| connected | 连接建立 |
| disconnected | 断开连接 |
| message:sending | 消息发送中 |
| message:sent | 消息已发送 |
| message:received | 收到回复 |
| message:stream:start | 流式响应开始 |
| message:stream:chunk | 流式数据块 |
| message:stream:delta | 流式增量文本 |
| message:stream:end | 流式响应结束 |
| message:stream:usage | Token 用量统计(promptTokens, completionTokens, totalTokens) |
| message:stream:aborted | 流式传输被中止 |
| message:error | 消息错误 |
| conversation:created | 会话创建 |
| conversation:updated | 会话更新 |
| tts:start | TTS 开始播放 |
| tts:play | TTS 音频片段播放 |
| tts:end | TTS 播放结束 |
| tts:error | TTS 错误 |
| tts:pause | TTS 暂停 |
| tts:stop | TTS 停止 |
| tts:audio | TTS 音频数据 |
| error | 全局错误 |
类型定义
1interface Message {2 id: string;3 conversationId: string;4 role: 'user' | 'assistant' | 'system';5 content: string;6 status: 'pending' | 'sending' | 'streaming' | 'success' | 'error' | 'aborted';7 createdAt: Date;8 attachments?: MediaAttachment[];9 metadata?: Record<string, unknown>;10}1112type MediaType = 'image' | 'audio' | 'video' | 'file';1314interface MediaAttachment {15 type: MediaType;16 url: string;17 mimeType?: string;18 name?: string;19 size?: number;20 duration?: number; // 秒,音视频21}2223interface UploadResult {24 url: string;25 objectName: string;26 mimeType: string;27 size: number;28 name?: string;29}3031interface TtsOptions {32 voice?: string; // 音色 ID33 projectId?: string; // 项目 ID34 conversationId?: string; // 对话 ID35 mode?: 'api' | 'websocket'; // 播放模式36}3738interface TtsResult {39 audioUrl: string;40 characters: number;41 model: string;42 voice: string;43}
媒体上传 API
| 方法 | 参数 | 说明 |
|---|---|---|
| uploadFile(file, type) | File/Blob, 'image'|'audio'|'video'|'file' | 上传文件,返回 UploadResult |
| sendImage(file, content?) | File/Blob, string? | 上传并发送图片消息 |
| sendVoice(file, content?) | File/Blob, string? | 上传并发送语音消息 |
| sendVideo(file, content?) | File/Blob, string? | 上传并发送视频消息 |
| sendWithAttachments(content, attachments) | string, MediaAttachment[] | 发送带附件的消息 |
文件限制
图片
最大 10MB
jpeg, png, gif, webp, bmp
音频
最大 25MB
mp3, wav, ogg, aac, webm, flac, amr, opus, silk
视频
最大 50MB
mp4, webm, quicktime
文件
最大 30MB
pdf, doc/docx, xls/xlsx, ppt/pptx, txt, csv, md, json, zip