Waiting for a renderer
数字人由一台 GPU 机器绘制。没有空闲的机器时——都在忙别的通话,或者有一台还在启动——通话会排队,直到有一台空出来。 数字人还没出现时,SDK 会在画面上告诉用户:
- 15 秒后,显示 服务正忙——已经等了多久,以及「要继续等待吗?」,带 继续等待 和 稍后再打 两个按钮;
- 选了继续等待之后,每 30 秒再问一次;
- 到 5 分钟时,显示「暂时无法接通,请稍后再试」和 知道了,然后挂断。
这些时间由 AvatarGo 统一设定,所有租户都一样,在 SDK 加入时传给它。等待不计费。提示框用浏览器的语言——中文或英文,其他语言用英文
(英文界面是 Service busy、Keep waiting、Call later、OK)——并且不打扰用户:它不抢键盘焦点,按 Esc 也不会关掉。
「稍后再打」会结束会话(endSession()),元素恢复成原来的样子;到了最长等待时间,提示文字会一直留在模糊的脸上,直到用户按下「知道了」。
每一步都会触发 start_waiting;在等待中结束的会话会在 session_ended 里说明(startWait: "cancelled" 或 "timed_out")。
可以换成你自己的文字,可替换的有 title、body(其中的 {waited} 会换成已等待的时间)、keepWaiting、tryLater、timedOut 和 ok:
await client.streamToVideoElement("avatar", { waitingPrompt: { title: "Hang on", tryLater: "Not now" } });或者自己画:关掉提示框,跟着事件走。放弃等待用 endSession();到了最长等待时间,SDK 会自己挂断,和开着提示框时一样。
client.on("start_waiting", ({ waitedSeconds, final }) => {
busyNote.hidden = false;
busyNote.textContent = final ? "No one is free right now. Please try again later." : `Still connecting… ${waitedSeconds} s`;
});
client.on("video_play_started", () => { busyNote.hidden = true; });
await client.streamToVideoElement("avatar", { waitingPrompt: false });