You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ElevenLabs React SDK(v0.13.1)错误事件未触发问题求助

如何捕获ElevenLabs实时对话代理的异常错误信息

看起来你遇到的问题是SDK的onError回调没有按预期触发,导致无法捕获token耗尽、网络异常这类错误。结合ElevenLabs的实时对话机制和你使用的v0.13.1版本SDK,我给你几个可行的解决方案:

1. 在onMessage中监听错误事件

根据ElevenLabs的实时事件文档,当发生错误时,WebSocket会发送一个类型为error的事件 payload。你可以在onMessage回调中主动检查这类消息,获取详细错误信息:

const conversation = useConversation({
  onMessage: (payload) => {
    // 优先检查是否为错误事件
    if (payload.type === "error") {
      console.error("ElevenLabs Error:", payload.data);
      // 这里可以根据payload.data的内容判断错误类型,比如token耗尽、权限问题等
      if (payload.data.code === "token_exhausted") {
        // 处理token耗尽逻辑
        alert("对话时长已耗尽,请充值或更换token");
      }
      return;
    }
    // 处理正常的消息/转录文本
    console.log("Received message:", payload);
  },
  // 保留其他回调...
  onError: (error) => {
    console.error("SDK Error:", error);
  },
  onDisconnect: () => {
    console.log("Disconnected");
  },
});

2. 监听WebSocket的关闭事件获取状态码

WebSocket断开时会携带关闭状态码和原因,这些信息能帮你判断错误类型(比如1006对应异常网络断开,401对应权限/token问题)。你可以在onStatusChange中监听disconnected状态,手动绑定WebSocket的onclose事件:

const conversation = useConversation({
  onStatusChange: (newStatus) => {
    console.log("Current status:", newStatus);
    if (newStatus === "disconnected") {
      // 访问SDK内部的WebSocket实例(v0.13.1通常暴露为`ws`属性)
      if (conversation.ws) {
        conversation.ws.onclose = (event) => {
          console.error("WebSocket closed:", {
            code: event.code,
            reason: event.reason
          });
          // 根据状态码判断错误场景
          switch(event.code) {
            case 401:
              console.error("Token无效或已耗尽");
              break;
            case 1006:
              console.error("网络连接异常断开");
              break;
            case 1011:
              console.error("ElevenLabs服务端内部错误");
              break;
          }
        };
      }
    }
  },
  // 其他回调...
});

3. 尝试捕获对话启动时的同步错误

如果错误发生在对话初始化阶段,你可以用try/catch包裹对话启动的方法(比如conversation.start()),捕获同步错误:

const startConversation = async () => {
  try {
    await conversation.start();
    console.log("Conversation started successfully");
  } catch (error) {
    console.error("Failed to start conversation:", error);
    // 这里可以捕获token无效、签名URL错误等启动阶段的错误
  }
};

4. 考虑升级SDK版本

v0.13.1相对较早,可能存在onError回调覆盖不全的问题。你可以尝试升级到最新版SDK,看看是否修复了错误事件传递的问题(注意升级后可能需要调整部分API调用)。

这些方法应该能帮你捕获到之前缺失的错误信息,尤其是通过WebSocket关闭状态码和onMessage中的错误事件,基本能覆盖token耗尽、网络异常等场景。

内容的提问来源于stack exchange,提问作者Leon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 10:42:41