Skip to Content

Reference

createClient(sessionToken, options?)

返回一个对应一通会话的 AvatarGoClient。在调用 streamToVideoElement 之前,不会有任何网络请求。

选项类型默认值
baseUrlstringhttps://api.avatargo.aiAPI 地址。末尾的斜杠会被忽略。
timezonestring浏览器的时区终端用户的时区,IANA 名称,比如 "Asia/Shanghai"。角色会被告知那里的今天日期;通话跨过那里的午夜时,会被告知新的日期。你的服务器创建会话时设置的时区(sessionOptions.timezone)优先于这里。

client.streamToVideoElement(target, options?) → Promise<void>

加入会话并显示数字人。target 是一个 <video> 元素或它的 id。数字人的画面放进这个元素;它的声音通过 SDK 创建的一个音频元素播放。加入成功(并且麦克风已打开)时 resolve,connection_established 也在同一时刻触发。 画面稍后才到——video_play_started 告诉你是什么时候。

选项类型默认值
microphonebooleantrue发送用户的麦克风声音。角色会听;用 Avatar only 或想静音加入时传 false。
posterbooleantrue通话接通期间,在元素里显示数字人的脸:用来渲染数字人的那张图,模糊处理后设为 <video> 的 poster,视频开始播放时变清晰。冷启动可能要半分钟,用户会立刻看到这张脸,而不是一个空框。传 false 则不动这个元素;元素已有 poster 时也不动。图片来自 GET /v1/engine/session/face,用 session token 获取。
waitingPromptboolean 或 objecttrue通话在等空闲的渲染器时,在画面上告诉用户服务正忙——见 Waiting for a renderer。传一个写着你自己文字的对象可替换其中任意几句,传 false 则根据 start_waiting 自己画。
endingNoticeboolean 或 objecttrue通话的最后几秒,在画面上方倒计时到结束——见 The call’s last seconds。传一个写着你自己文字的对象,或传 false 根据 call_ending 自己画。

在角色会话里,第一次加入同时会启动对话(先是角色,再是数字人)——没用过的 session token 不花钱。 如果角色设置了 greeting,数字人上线后会说出来。

会话无法加入时,以 AvatarGoError reject。如果是进入房间之后失败的(connection_failed,或麦克风打不开时的 microphone_unavailable),SDK 会再离开房间,让会话在服务器上结束,而不是占着资源;这个 reject 就是全部的回答—— session_ended 不会再触发。找不到这个 id 的 <video> 元素时,抛出普通的 Error。

一个 client 只对应一通会话:会话一旦结束(你调用了 stopStreaming() 或 endSession(),或它自己结束了),再调用这个方法会以 session_ended reject——请用新的 session token 创建新的 client。

client.endSession() → Promise<void>

彻底结束会话:通知 AvatarGo,同时像 stopStreaming() 一样离开(触发 session_ended)。适合用在挂断按钮上: 会话在这一刻就结束,不用等系统发现用户已离开;还在排队等它的渲染器也会被取消。结束后不能再加入。 它不等 AvatarGo 的回复:连不上 AvatarGo 时,client 照样离开,会话按 stopStreaming() 之后的方式结束。 「服务正忙」提示里的「稍后再打」和最长等待到点时用的就是它。在 Avatar only 会话里(由你的服务器发送音频),你的服务器也会随之断开。

document.getElementById("hang-up").onclick = () => client.endSession();

client.muteInputAudio() / client.unmuteInputAudio() → Promise<void>

停止和恢复发送麦克风声音。数字人照常说话;静音期间听不到用户。

client.stopStreaming() → Promise<void>

离开会话。用户离开后,服务器会结束会话;在那之前,用同一个 session token 再加入会回到这通会话——所以页面卸载后重新挂载 (React 的 StrictMode 会这样做)时,通话还在。触发 session_ended。要立刻彻底结束会话,用 endSession()。

在 streamToVideoElement 还在加入时调用(冷启动可能要半分钟),会取消这次加入:client 不会进入房间、不会打开麦克风, 触发 session_ended,不触发 connection_established,挂起的 streamToVideoElement 会 resolve。服务器发现没人来, 大约 30 秒内在它那一侧结束会话。

client.sessionId — string | null

会话的 id(se_…),在 streamToVideoElement 被允许进入会话后设置——和你的服务器拿到的是同一个 id,可用于你的日志或 GET /v1/sessions/{id}。

client.on(event, listener) / client.off(event, listener) → client

添加或移除监听器;两者都返回 client,可以链式调用。见 Events。

client.registerToolCallHandler(toolName, handler) → () => void

处理角色的某个客户端工具;返回一个函数,调用它就不再处理。见 Client tools。

client.sendUserMessage(text) → Promise<void>

用打字和角色对话:text 是用户这一轮说的话,等同于用户说出来。见 Typing to the character。

client.talk(text) → Promise<void>

让角色一字不差地说出 text。默认关闭,需要你的服务器打开;见 Talk and add context。

client.addContext(text) → Promise<void>

告诉角色用户在你的页面里正在做什么,不需要它回答。默认关闭,需要你的服务器打开;见 Talk and add context。