功能概述
任务运行期间,业务后端有两种途径获取 AI 机器人的状态与对话数据:
获取方式 | 途径 | 可获取内容 | 实时性 |
查询接口(主动拉取) | 任务生命周期五类标准操作中的查询任务接口。 | 任务运行状态、对话上下文历史。 | 按需查询,返回查询时刻的快照。 |
服务端回调(被动推送) | 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}}
说明:
机器人对话状态码(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 已说完。 |
典型用途 | 任务级监控、存活巡检、故障告警。 | 对话过程展示、打断检测、轮次统计。 |
说明:
典型应用场景
场景 | 实现方式 | 说明 |
对话质检与审计 | 查询接口 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 做幂等处理。