For the complete documentation index, see llms.txt. This page is also available as Markdown.

错误处理

SDK 通过四个通道暴露错误。每个通道都有不同的范围和负载——了解在何种场景下使用哪一个,是构建可靠应用的关键。

通道
事件
触发时机

传输错误

错误

底层 WebRTC / WebSocket 异常

会话结束

断开连接

每次会话结束时,附带原因代码

服务器确认

serverResponse

在你发送的每条消息之后

静默 LLM

llmNoResponse

LLM 明确选择不响应

空闲超时

idleWarning

服务器即将断开一个空闲会话


错误 事件

触发于底层传输异常。载荷是 未知 因为它包装了底层传输抛出的任何内容。

client.on('error', (err) => {
  if (err instanceof Error) {
    console.error(err.name, err.message);
  } else {
    console.error(err);
  }
});

WebRTC 传输上的常见原因:

代码
含义

1

ConnectionError — 权限被拒绝、服务器不可达或已取消

13

NegotiationError — WebRTC 协商失败

21

DeviceUnsupportedError — 麦克风或摄像头不可用


断开连接 事件

会在每次会话结束时触发——无论是有意还是无意。载荷是一个数值 DisconnectReason 代码。

React

原生 JS

原因代码参考

代码
枚举键
含义
自动重试?

0

UNKNOWN_REASON

网络不可用或浏览器离线——这是意外中断最常见的原因

1

CLIENT_INITIATED

用户调用了 disconnect()

否——这是有意的

2

DUPLICATE_IDENTITY

具有相同身份的另一个会话已加入

否——提示用户

3

SERVER_SHUTDOWN

服务器重启

是——有延迟

4

PARTICIPANT_REMOVED

通过服务器 API 移除

5

ROOM_DELETED

会话已在服务器端关闭

6

STATE_MISMATCH

客户端/服务器状态出现分歧

7

JOIN_FAILURE

加入失败——检查配置

否——修复配置

9

SIGNAL_CLOSE

WebSocket 信令通道已正常关闭

UNKNOWN_REASONSIGNAL_CLOSE: 两者都表示网络中断,并且都应触发重试。区别在于时机——当浏览器完全离线时(n +avigator.onLine = false),LiveKit 会通过其离线检测器立即触发 UNKNOWN_REASON (0) ,甚至在 WebSocket 关闭之前。 SIGNAL_CLOSE (9) 会在信令 WebSocket 自身关闭时触发,这要求网络仍有部分可达性。实际上,拔掉 WiFi 或在 DevTools → Offline 下都会产生 UNKNOWN_REASON.

最后一个原因也可以在同步状态下查看: client.state.disconnectReasonnull 在已连接时。


serverResponse 事件

服务器会对 你客户端发送的每条消息sendUserTextMessage, updateContext, sendTriggerMessage, toggleTts等发送确认。检查 状态 以了解服务器是否已接受该请求。

React

原生 JS

载荷结构

对于 context-update, extras 包含令牌预算信息:


llmNoResponse 事件

在 LLM 明确选择不响应时触发——这不是错误,但你的 UI 应该停止显示“思考中”指示器。


idleWarning 事件

在服务器断开空闲会话之前触发。在任何用户活动时调用 resetIdleTimer() 以保持会话存活。


可靠性模式

使用指数退避重试

SDK 不会自动重连。请在非有意断开时实现你自己的退避重试。

安全发送保护

发送前检查连接状态,以避免静默丢失。

保护媒体控制调用

音频和视频控制方法是异步的,并且在权限被拒绝时可能抛出错误。

始终取消订阅

每个 client.on(...) 调用都会返回一个取消订阅函数。请在卸载或会话拆除时调用它。


快速参考——应使用哪个通道

场景
通道

会话进行中网络中断

断开连接SIGNAL_CLOSE (9)

用户按下断开连接

断开连接CLIENT_INITIATED (1)

同一用户打开了另一个标签页

断开连接DUPLICATE_IDENTITY (2)

服务器维护

断开连接SERVER_SHUTDOWN (3)

updateContext 被服务器拒绝

serverResponsestatus: 'error'

动态上下文 token 预算过低

serverResponseextras.remaining_tokens

WebRTC 协商失败

错误 — 代码 13

麦克风权限被拒绝

错误 — 代码 1(子原因 0)

LLM 决定不回复

llmNoResponse

会话即将超时

idleWarning

最后更新于

这有帮助吗?