import { ChatClient, VoiceEvents } from '@koi-video/voice-realtime-sdk';
// 1. 初始化客户端
const client = new ChatClient(
{
robotKey: process.env.ROBOT_KEY,
robotToken: process.env.ROBOT_TOKEN,
},
{
userName: 'demo-user-1',
}
);
// 2. 注册事件监听
client.on(VoiceEvents.SESSION_CREATED, ({ sessionId }) => {
console.log('SESSION_CREATED', sessionId);
});
client.on(VoiceEvents.SESSION_STARTED, ({ sessionId }) => {
console.log('SESSION_STARTED', sessionId);
});
client.on(VoiceEvents.SESSION_ENDED, ({ sessionId, reason }) => {
console.log('SESSION_ENDED', sessionId, reason);
});
client.on(VoiceEvents.USER_MESSAGE, ({ content, segmentId, raw }) => {
console.log('用户:', content, segmentId, raw);
});
client.on(VoiceEvents.ROBOT_MESSAGE, ({ content, segmentId, raw }) => {
console.log('机器人:', content, segmentId, raw);
});
client.on(VoiceEvents.INTERRUPT, ({ sessionId }) => {
console.log('打断', sessionId);
});
client.on(VoiceEvents.AUDIO_MUTED, ({ sessionId }) => {
console.log('静音', sessionId);
});
client.on(VoiceEvents.AUDIO_UNMUTED, ({ sessionId }) => {
console.log('取消静音', sessionId);
});
client.on(VoiceEvents.ERROR, (err) => {
console.error('错误:', err.code, err.message);
});
client.on(VoiceEvents.ALL, (eventName, data) => {
console.log('所有事件:', eventName, data);
});
// 3. 启动对话
const startChat = async () => {
try {
const sessionId = await client.startVoiceChat();
console.log('对话已启动,会话ID:', sessionId);
} catch (error) {
console.error('启动失败', error);
}
};
// 示例:5秒后打断,10秒后结束对话
setTimeout(() => {
client.interrupt();
}, 5000);
setTimeout(async () => {
await client.stopVoiceChat();
console.log('对话已结束');
}, 10000);
startChat();