Skip to Content

Errors

加入失败时以 AvatarGoError reject:

import { AvatarGoError } from "@avatargo/sdk"; try { await client.streamToVideoElement("avatar"); } catch (e) { if (e instanceof AvatarGoError) console.log(e.code, e.status, e.message); }

code 是稳定的——按它分支处理;message 是给人看的,可能会变。

监听器(client.on(…))抛出异常时,不会影响同一事件的其他监听器,也不会影响该事件所说的工具调用;错误会写到控制台。

codestatus含义怎么处理
unauthorized401session token 缺失、格式不对或已过期(token 有效期一小时)。从你的服务器拿一个新 token。
not_found404没有这通会话。新建一通。
session_ended410会话已经结束。新建一通——已结束的会话不能再加入。(会话还在进行时,用它的 token 再加入会回到这通会话。)
quota_exceeded402你账户的余额不够正在进行的所有通话再加上这一通各维持一分钟(用户加入时会再检查一次;会话已失败)。在控制台充值或打开自动充值,然后新建一通会话。
concurrency_limit429你套餐的同时通话数已用满;会话已失败。等一通通话结束,或升级套餐,然后新建一通会话。
forbidden403你的账户因付款问题被暂停;会话已失败。联系客服。
connection_failed0无法加入房间。告诉用户,提供重试。
microphone_unavailable0已加入房间,但麦克风打不开:用户拒绝了权限,或者没有麦克风。SDK 已经重新离开房间。告诉用户,提供用 { microphone: false } 新建会话,或重试。
session_ended0这个 client 的会话已经结束(调用过 stopStreaming() 或 endSession(),或它自己结束了),而一个 client 只对应一通会话。用新的 session token 创建新的 client。
internal_error500AvatarGo 内部出错。新建一通会话重试。

talk()、addContext() 和 sendUserMessage() 会以下列错误 reject,status 都是 0:

code含义怎么处理
not_streaming不在会话中:streamToVideoElement resolve 之前,或会话结束之后。先加入。
client_controls_disabled会话创建时没有设 sessionOptions.clientControls: true,或它是 Avatar only 会话。在你的服务器上打开它,或改从服务器发送(POST /v1/sessions/{id}/talk、/context)。
invalid_requesttext 为空或太长。发送 1–4,000 个字符(talk)、1–8,000 个(addContext)或 1–2,000 个(sendUserMessage)。
session_not_live角色还没准备好(它在数字人出现前一刻才加入)。等 video_play_started,或稍后重试。
rate_limited这通会话在最近一分钟里 talk(或 addContext、sendUserMessage)超过 20 次,包括你的服务器发的。等一等;message 会说要等多久。

不认识的错误码按 internal_error 处理。创建会话时的拒绝——没有容量(concurrency_limit)、余额不足(quota_exceeded)、 数字人还没准备好、某个模型不可用、角色没有发布(character_not_published)——由 POST /v1/auth/session-token 返回给你的服务器, 还没到页面;见 API 参考。用户加入时会再判断一次套餐和余额,因为从拿到 token 到现在它们可能变了:上面表格里的 quota_exceeded、concurrency_limit 和 forbidden 就来自这里。