实时音视频 获取 AI 机器人状态以及上下文

这篇说明AI机器人任务运行期间,业务后端获取机器人状态与对话数据的两类途径:查询接口主动拉取(DescribeType=0查任务状态,=1查对话历史)与服务端AI状态流转回调被动推送,并强调任务状态Status与对话状态State.Code属不同层级,需区分使用。 查询接口:DescribeType区分任务状态(Status/StartTime)与对话历史(HistoryContents),S2S模式不支持查历史。 。

相关产品
实时音视频 产品页,含版本规格、价格与购买入口。

一、功能概述

任务运行期间,业务后端有两种途径获取 AI 机器人的状态与对话数据:

获取方式 途径 可获取内容 实时性
查询接口(主动拉取) 任务生命周期五类标准操作中的查询任务接口。 任务运行状态、对话上下文历史。 按需查询,返回查询时刻的快照。
服务端回调(被动推送) AI 状态流转回调。 机器人的对话状态实时流转。 实时推送,无轮询延迟。

注意:说明:

注意:客户端 SDK 也有对应的状态获取通道(状态事件),与服务端回调共用同一套状态码定义,端侧接入详细参见 (客户端)接收 AI 机器人状态。

二、通过查询接口获取

查询任务接口通过 DescribeType 区分两类查询:

DescribeType 查询内容 返回字段
0(默认) 任务运行状态 Status / StartTime
1 对话上下文历史 HistoryContents(用户与 AI 的历史对话列表)

三、查询任务运行状态(DescribeType = 0)

输入参数:

参数名 必选 类型 描述
SdkAppId 是 Integer TRTC 应用 ID。
TaskId 是 String 任务 ID。
DescribeType 否 Integer 0:查询任务状态(默认)。

输出参数:

参数名 类型 描述
Status String 任务状态,见下方状态表。
StartTime Integer 任务启动时间(UTC 毫秒)。
RequestId String 请求 ID。

任务状态(Status)取值:

Status 含义
InProgress 任务运行中。
Idle 空闲(任务创建后、正式启动前)。
Exited 已退出(任务已结束)。

请求示例:

{ "SdkAppId": 1400704311, "TaskId": "-m9jX35U7sY4p8GEKc0d4EnvzOlwCUTb…", "DescribeType": 0}

响应示例:

{ "Response": { "Status": "InProgress", "StartTime": 1751196050000, "TaskId": "-m9jX35U7sY4p8GEKc0d4EnvzOlwCUTb…", "RequestId": "req-xxx" }}

四、查询对话上下文历史(DescribeType = 1)

返回当前任务内用户与 AI 的历史对话内容,可用于客服质检、审计落库、用户重连后恢复上下文等场景。

输出参数:

参数名 类型 描述
HistoryContents Array of Object 对话历史列表,每项含 Role(user=用户 / assistant=AI)与 Content(对话文本)。
Status String 任务状态。
StartTime Integer 任务启动时间(UTC 毫秒)。

请求示例:

{ "SdkAppId": 1400704311, "TaskId": "-m9jX35U7sY4p8GEKc0d4EnvzOlwCUTb…", "DescribeType": 1}

响应示例:

{ "Response": { "StartTime": 1790542649581, "Status": "InProgress", "TaskId": "-nE5D7FU7k85T+dH1Mf-xdCO5s+…", "HistoryContents": [ {"Role": "user", "Content": "今天天气怎么样?帮我查一下北京的温度。"}, {"Role": "assistant", "Content": "我无法获取实时天气,建议用天气App查北京温度。"}, {"Role": "user", "Content": "请把下面这句话原样读出来:高优插播"}, {"Role": "assistant", "Content": "高优插播"}, {"Role": "user", "Content": "今天天气怎么样?帮我查一下北京的温度。"}, {"Role": "assistant", "Content": "无法获取实时天气,请用天气App查询北京温度。"} ], "RequestId": "req-xxx" }}

注意:S2S(端到端)模式不支持查询对话历史,DescribeType=1 时返回为空。

五、AI 状态流转回调

任务运行期间,机器人每发生一次对话状态流转,TRTC 后台即向业务回调 URL 实时推送一条 AI 状态流转事件,无需业务侧轮询。

回调 Payload 关键字段:

字段名 类型 描述
State.Code Integer 机器人对话状态码,见下表。
State.Desc String 状态描述。
Timestamp Integer 状态流转时间戳(毫秒)。

回调示例(EventInfo.Payload 部分):

{ "Payload": { "State": { "Code": 2, "Desc": "AI 思考中(LLM 推理)" }, "Timestamp": 1751196060800 }}

注意:说明:

注意:回调报文的完整结构(事件组、事件类型枚举、回调 URL 配置与 X-TRTC-Signature 签名校验)详细参见 AI 对话回调事件。

六、机器人对话状态码(State.Code)

State.Code 描述的是一轮对话中机器人的实时状态,客户端 SDK 的状态事件与服务端状态流转回调共用同一套定义:

State.Code 含义 对应链路阶段
0 AI 空闲中 等待用户开口。
1 AI 聆听中 ASR 识别中(用户说话中),一轮对话的开始信号。
2 AI 思考中 LLM 推理中。
3 AI 说话中 TTS 播报中。
4 AI 被打断 轮次提前终止。
5 AI 已说完 轮次正常结束。

一轮对话的典型状态流转:

·正常路径:用户开口(1)→ LLM 推理(2)→ TTS 播报(3)→ 播报完成(5)→ 回到空闲(0)等待下一轮。

·打断路径:播报中(3)被用户打断或收到打断指令,直接流转为被打断(4)→ 回到空闲(0)。打断的触发方式详细参见 (客户端)打断指令。

七、两类状态的区分

查询接口返回的 Status(任务状态)与回调推送的 State.Code(对话状态)是两个不同层级的状态,注意区分:

对比项 任务状态(Status) 对话状态(State.Code)
描述层级 任务生命周期。 单轮对话生命周期。
获取方式 查询接口(DescribeType=0)/ 任务结束回调。 AI 状态流转回调 / 客户端状态事件。
类型与取值 String:InProgress 运行中;Idle 空闲;Exited 已退出。 Integer:0 空闲;1 聆听中;2 思考中;3 说话中;4 被打断;5 已说完。
典型用途 任务级监控、存活巡检、故障告警。 对话过程展示、打断检测、轮次统计。

注意:说明:

注意:任务级的状态变化(启动完成、结束及退出原因等)通过任务启动 / 结束回调推送,详细参见 AI 对话回调事件。

八、典型应用场景

场景 实现方式 说明
对话质检与审计 查询接口 DescribeType=1 会话结束后拉取完整对话上下文,落库用于质检、审计与合规。
任务监控告警 查询接口 DescribeType=0 轮询 / 任务结束回调 发现任务 Exited(已退出)及时告警,结合退出码判断是否为异常退出。
实时状态大屏 订阅 AI 状态流转回调 回调实时驱动机器人状态展示(聆听中 / 思考中 / 说话中),无需轮询。
轮次统计分析 累计状态流转回调 基于 1→5 完整流转统计轮次数,基于 4 统计打断率。
重连恢复上下文 查询接口 DescribeType=1 用户断线重连或切换设备后,拉取历史对话恢复上下文继续服务。

九、注意事项

1. S2S 模式不支持查询对话历史:端到端模式下 DescribeType=1 返回为空;如需对话记录请通过字幕回调 / 状态回调自行落库。

2. 查询返回的是快照:查询接口返回查询时刻的状态,如需实时感知状态变化请订阅状态流转回调,不要依赖轮询(轮询既有时延又消耗接口 QPS 配额)。

3. 回调必须校验签名:业务后端收到回调后须校验 X-TRTC-Signature 签名防止伪造,配置方式见 AI 对话回调事件。

4. 任务退出排查:查询到 Status 为 Exited 时,建议结合任务结束回调的退出码与 ASR / LLM 回调定位退出原因(区分正常结束与异常失败)。

5. 状态回调可能重复:网络重传等情况下回调可能重复投递,业务侧需按 TaskId + Timestamp 做幂等处理。

赞 (0)
上一篇 4天前
下一篇 4天前