feat(conversation): TTS 投递与 WebSocket 管线;客户端播放门禁与会话页联动;COS 键与迁移脚本调整
This commit is contained in:
@@ -117,6 +117,8 @@ interface UseRealtimeSessionOptions {
|
||||
conversationId: string;
|
||||
enabled?: boolean;
|
||||
onTtsSegment?: (payload: TtsSegmentPayload) => void;
|
||||
/** 用户发出下一条文本/语音成功后调用,用于恢复接受 TTS 片段(打断后丢弃迟到片段) */
|
||||
onTtsPlaybackResume?: () => void;
|
||||
}
|
||||
|
||||
const MIN_RECORDING_DURATION_SEC = 1;
|
||||
@@ -136,12 +138,14 @@ interface RealtimeSessionState {
|
||||
sendText: (text: string) => void;
|
||||
sendVoiceMessage: (uri: string, durationMs: number) => Promise<boolean>;
|
||||
sendEndConversation: () => void;
|
||||
sendTtsCancel: () => void;
|
||||
}
|
||||
|
||||
export function useRealtimeSession({
|
||||
conversationId,
|
||||
enabled = true,
|
||||
onTtsSegment,
|
||||
onTtsPlaybackResume,
|
||||
}: UseRealtimeSessionOptions): RealtimeSessionState {
|
||||
const queryClient = useQueryClient();
|
||||
const sessionRef = useRef<RealtimeSession | null>(null);
|
||||
@@ -207,6 +211,8 @@ export function useRealtimeSession({
|
||||
return;
|
||||
}
|
||||
|
||||
onTtsPlaybackResume?.();
|
||||
|
||||
const localId = `pending_${Date.now()}`;
|
||||
|
||||
queryClient.setQueryData<MessageItem[]>(
|
||||
@@ -224,7 +230,7 @@ export function useRealtimeSession({
|
||||
},
|
||||
);
|
||||
},
|
||||
[conversationId, queryClient],
|
||||
[conversationId, queryClient, onTtsPlaybackResume],
|
||||
);
|
||||
|
||||
const sendVoiceMessage = useCallback(
|
||||
@@ -276,19 +282,24 @@ export function useRealtimeSession({
|
||||
return [...(old ?? []), msg];
|
||||
},
|
||||
);
|
||||
onTtsPlaybackResume?.();
|
||||
return true;
|
||||
} catch {
|
||||
setError('语音文件读取失败');
|
||||
return false;
|
||||
}
|
||||
},
|
||||
[conversationId, queryClient],
|
||||
[conversationId, queryClient, onTtsPlaybackResume],
|
||||
);
|
||||
|
||||
const sendEndConversation = useCallback(() => {
|
||||
sessionRef.current?.sendEndConversation();
|
||||
}, []);
|
||||
|
||||
const sendTtsCancel = useCallback(() => {
|
||||
sessionRef.current?.sendTtsCancel();
|
||||
}, []);
|
||||
|
||||
return {
|
||||
connectionState,
|
||||
streamingMessage,
|
||||
@@ -296,5 +307,6 @@ export function useRealtimeSession({
|
||||
sendText,
|
||||
sendVoiceMessage,
|
||||
sendEndConversation,
|
||||
sendTtsCancel,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user