UI 功能概述#

初始化#

UI 首先通过使用 IDP 系统检索会话令牌来启动。一旦 UI 拥有会话令牌,它将生成一个随机 UUID 作为流 ID 使用。它将使用此连接 ID 启动与 VMS 的 WebSocket 连接。在与 VMS 建立 WebSocket 连接后,它将启动与 VMS 的 WebRTC 连接,该连接用于将音频和摄像头流发送到化身,并在单个 WebRTC 对等连接中接收化身视频。这样,UI 也会使用连接 ID 连接到 UI 服务器 WebSocket。UI 服务器使用此功能来关联哪个 UI 正在发送哪个摄像头流。

一旦 Tokkio 收到 fovEntry(用户出现事件),UI 将显示目录,并且用户的会话将开始,从而向用户开放以下交互。

用户出现和注意力#

UI 显示用户注意力状态的指示器。此指示器的默认值为 未出现。当检测到用户出现时,UI 服务器会收到此事件并将其发送到 UI,从而将状态更新为 出现。同样,当用户的注意力状态发生变化时,UI 也会收到此信息,从而将状态指示器更新为收到的用户注意力状态。如果用户的注意力状态被禁用,UI 将回退到 出现 状态。最后,当用户离开摄像头视野时,此状态将设置回 未出现。此指示器为用户提供了一种了解其头部位置对对话的影响的方式。

目录交互#

目录交互仅适用于零售 UI。当 UI 首次连接到 WebSocket 时,它将立即调用 API GET /menu/category,并向用户显示从此调用返回的菜单类别列表。当用户选择一个类别时,将调用 GET /menu/category/{category},其中显示此类别中的每个目录项。当用户选择一个目录项时,将进行第三次 API 调用,这次是 GET /menu/items/{itemId}。这提供了有关特定项目的信息,并用于向用户显示项目页面。

购物车交互#

购物车交互仅适用于零售 UI。在 UI 中,有关用户购物车中所有内容的信息都存储在前端的名为“cart”的 redux 存储中。每次用户更新购物车时,无论是通过触摸还是语音,都会使用 GET /cart API 调用将最新购物车更新到存储。当 UI 收到 WebSocket 消息,并且字段 "is_update_cart" 设置为 true 时,UI 将根据语音交互更新购物车。用户可以从“商品”页面(或通过语音)添加购物车商品,并且可以从“我的订单”页面进一步修改他们的购物车。

视图交互#

视图交互仅适用于零售 UI。当用户在触摸菜单中导航时,我们会使用 PUT /view/items/{id} 调用,将 UI 当前显示的内容更新到 UI 服务器。这样做是为了通知 Bot 用户正在查看的内容,从而为用户的查询提供上下文。