ElevenLabs Websocket服务无响应问题求助(Unity C#客户端)
问题排查与解决方案
1. 核对音频数据格式与编码合规性
ElevenLabs Conversational AI的WebSocket API对输入音频有严格要求,必须满足:
- 采样率为16kHz、单声道、16位PCM格式
- 音频数据需经Base64编码后发送,不能直接传原始二进制
- 消息的
content_type字段必须固定为"audio/wav; codecs=1; rate=16000"
检查你的音频处理代码,示例正确流程:
// 先将原始音频转换为符合要求的格式 AudioClip convertedClip = ConvertTo16kHzMono16BitPCM(originalAudioClip); byte[] pcmBytes = ExtractPCMBytes(convertedClip); // 编码为Base64字符串 string encodedAudio = Convert.ToBase64String(pcmBytes);
2. 验证消息结构与必填字段
发送的消息必须严格匹配官方规范,不能遗漏必填项:
- 消息
type需设为"user_audio_chunk"(分块发送时)或"user_audio_finished"(收尾时) - 必须携带
voice_id,若使用会话需保持conversation_id一致 - 避免字段名拼写错误(比如把
audio写成sound)
示例正确的分块消息结构:
var audioChunkMsg = new { type = "user_audio_chunk", audio = encodedAudio, content_type = "audio/wav; codecs=1; rate=16000", voice_id = "你的语音ID", conversation_id = "当前会话ID" }; string jsonMsg = JsonConvert.SerializeObject(audioChunkMsg); webSocket.SendText(jsonMsg);
3. 确保分块发送的完整性
如果采用分块发送音频,必须在最后发送收尾消息告知服务器音频传输完成:
// 发送完所有音频块后发送 var finishMsg = new { type = "user_audio_finished", conversation_id = "当前会话ID" }; webSocket.SendText(JsonConvert.SerializeObject(finishMsg));
未发送该消息时,服务器会一直等待完整音频,不会触发AI响应。
4. 检查WebSocket连接的初始参数
初始连接时需确保请求头携带正确的授权信息,且连接URL参数无误:
string wsUrl = $"wss://api.elevenlabs.io/v1/conversation/{conversationId}/ws?voice_id={voiceId}"; var headers = new Dictionary<string, string> { { "Authorization", $"Bearer 你的API密钥" } }; // 确认WebSocket库支持传入自定义请求头并正确配置
5. 控制消息发送时机
必须等待服务器返回"ready"类型的消息后,再开始发送音频数据,避免过早发送导致服务器未就绪:
webSocket.OnMessage += (sender, e) => { dynamic response = JsonConvert.DeserializeObject(e.Data); if (response.type == "ready") { // 此时开始发送音频块 StartSendingAudioChunks(); } };
6. 确认API权限与配额
检查你的API密钥是否开启了Conversational AI的访问权限,同时确认未超出调用配额。即使官网对话正常,客户端使用的密钥可能存在权限限制,可在ElevenLabs后台查看密钥配置。
内容的提问来源于stack exchange,提问作者Abdulmalek Almkainzi
相关产品推荐
相关产品推荐

