内容与异步消息命令
约 4920 字大约 16 分钟
2026-10-16
本页按 Topic、method 和方向定义完整契约。字段表与JSON中的可选扩展不等于当前全部启用,实际接入前请查支持范围;应用REST封装见应用接入。
respCreated · MSG↓
输入来源:采集段与语音条目分离
audioStart/audioStop.params.inputId标识设备的一次持续采集段;inputSend.params.inputId标识一次主动提交的内容。两者都不能被当成云端VAD识别的每句话:同一开麦段可能产生多句,供应商事件也可能在暂停或恢复后迟到。
语音识别生产者为每个确定的语音条目生成平台内稳定的utteranceId,不把供应商私有ID原样暴露给设备。respCreated、respSttDelta/Done及respDone的来源字段为inputId、utteranceId至少一个;主动内容提交保留原inputId,持续语音使用utteranceId。只有具备不可变证据时才同时附加关联的采集inputId,不能读取“当前输入”补值。已提供的字段均须为非空标识,不接受null。
| 项目 | 契约 |
|---|---|
| Topic/接口 | $thing/down/message/{productID}/{deviceName} |
| 发送→接收 | 平台→设备 |
| 消息类型 | 事件 |
| 对应应答 | — |
| 触发与状态变化 | 为内容与音频事件建立关联,不能据此推断UDP已到达。 |
| 前置条件 | 会话/参与端有效,满足方法语义;结束/失败事件允许清理非终态会话 |
| 超时与重试 | 不等待ACK;重复按公共规则丢弃/重放 |
| 幂等与迟到 | 遵循公共约定;终态不复活;旧sessionId/媒体代次拒绝或丢弃,不影响新资源 |
| 失败 | 请求按对应应答方法返回实际code和data.reason;异步失败单独事件,不以成功字段包装错误 |
| 适用场景 | S02、S03 |
正文字段
| 字段 | 类型 | 必填条件 | 枚举/默认及含义 |
|---|---|---|---|
| respId | string | 必填 | 回复ID |
| inputId | string | 与utteranceId至少一个 | 已确定关联的主动输入或采集段;规则见本页输入来源 |
| utteranceId | string | 持续语音使用 | 平台生成、会话内稳定的识别条目;不等同于采集段 |
所有成功字段表以外的共通错误负载为 data.reason:string;条件不满足时不要求成功字段。未声明可选字段缺省为“未提供”,无隐式开启能力。
报文实例
{
"msgToken": "s02-25",
"method": "respCreated",
"sessionId": "s02-session",
"messageSeq": 1,
"data": {
"respId": "reply-1",
"inputId": "input-1"
}
}对应S02-M12;完整应答和异常在该场景或S11。设备Topic中的productID/deviceName来自认证,不从正文取身份。
respSttDelta · MSG↓
| 项目 | 契约 |
|---|---|
| Topic/接口 | $thing/down/message/{productID}/{deviceName} |
| 发送→接收 | 平台→设备 |
| 消息类型 | 事件 |
| 对应应答 | — |
| 触发与状态变化 | 可选增量识别,按 messageSeq 排序。 |
| 前置条件 | 会话/参与端有效,满足方法语义;结束/失败事件允许清理非终态会话 |
| 超时与重试 | 不等待ACK;重复按公共规则丢弃/重放 |
| 幂等与迟到 | 遵循公共约定;终态不复活;旧sessionId/媒体代次拒绝或丢弃,不影响新资源 |
| 失败 | 请求按对应应答方法返回实际code和data.reason;异步失败单独事件,不以成功字段包装错误 |
| 适用场景 | S02 |
正文字段
| 字段 | 类型 | 必填条件 | 枚举/默认及含义 |
|---|---|---|---|
| respId | string | 必填 | 回复ID |
| inputId | string | 来源组合与respCreated一致 | 已明确关联的输入;禁止补猜当前段 |
| utteranceId | string | 来源组合与respCreated一致 | 识别条目ID |
| delta | string | 必填 | 识别增量 |
所有成功字段表以外的共通错误负载为 data.reason:string;条件不满足时不要求成功字段。未声明可选字段缺省为“未提供”,无隐式开启能力。
报文实例
{
"msgToken": "s02-24",
"method": "respSttDelta",
"sessionId": "s02-session",
"messageSeq": 2,
"data": {
"respId": "reply-1",
"inputId": "input-1",
"delta": "你好"
}
}对应S02-M13;完整应答和异常在该场景或S11。设备Topic中的productID/deviceName来自认证,不从正文取身份。
respSttDone · MSG↓
| 项目 | 契约 |
|---|---|
| Topic/接口 | $thing/down/message/{productID}/{deviceName} |
| 发送→接收 | 平台→设备 |
| 消息类型 | 事件 |
| 对应应答 | — |
| 触发与状态变化 | 最终识别替换此前增量;不等于回复文本。 |
| 前置条件 | 会话/参与端有效,满足方法语义;结束/失败事件允许清理非终态会话 |
| 超时与重试 | 不等待ACK;重复按公共规则丢弃/重放 |
| 幂等与迟到 | 遵循公共约定;终态不复活;旧sessionId/媒体代次拒绝或丢弃,不影响新资源 |
| 失败 | 请求按对应应答方法返回实际code和data.reason;异步失败单独事件,不以成功字段包装错误 |
| 适用场景 | S02、S03 |
正文字段
| 字段 | 类型 | 必填条件 | 枚举/默认及含义 |
|---|---|---|---|
| respId | string | 必填 | 回复ID |
| inputId | string | 来源组合与respCreated一致 | 已明确关联的输入;禁止补猜当前段 |
| utteranceId | string | 来源组合与respCreated一致 | 识别条目ID |
| text | string | 必填 | 最终识别文本 |
所有成功字段表以外的共通错误负载为 data.reason:string;条件不满足时不要求成功字段。未声明可选字段缺省为“未提供”,无隐式开启能力。
报文实例
{
"msgToken": "s02-26",
"method": "respSttDone",
"sessionId": "s02-session",
"messageSeq": 3,
"data": {
"respId": "reply-1",
"inputId": "input-1",
"text": "你好"
}
}对应S02-M14;完整应答和异常在该场景或S11。设备Topic中的productID/deviceName来自认证,不从正文取身份。
respTextDelta · MSG↓
| 项目 | 契约 |
|---|---|
| Topic/接口 | $thing/down/message/{productID}/{deviceName} |
| 发送→接收 | 平台→设备 |
| 消息类型 | 事件 |
| 对应应答 | — |
| 触发与状态变化 | 按 messageSeq 排序,不拼接重复增量。 |
| 前置条件 | 会话/参与端有效,满足方法语义;结束/失败事件允许清理非终态会话 |
| 超时与重试 | 不等待ACK;重复按公共规则丢弃/重放 |
| 幂等与迟到 | 遵循公共约定;终态不复活;旧sessionId/媒体代次拒绝或丢弃,不影响新资源 |
| 失败 | 请求按对应应答方法返回实际code和data.reason;异步失败单独事件,不以成功字段包装错误 |
| 适用场景 | S02 |
正文字段
| 字段 | 类型 | 必填条件 | 枚举/默认及含义 |
|---|---|---|---|
| respId | string | 必填 | 回复ID |
| contentIndex | uint | 必填 | 从0起内容段 |
| delta | string | 必填 | 回复增量 |
所有成功字段表以外的共通错误负载为 data.reason:string;条件不满足时不要求成功字段。未声明可选字段缺省为“未提供”,无隐式开启能力。
报文实例
{
"msgToken": "s02-30",
"method": "respTextDelta",
"sessionId": "s02-session",
"messageSeq": 5,
"data": {
"respId": "reply-1",
"contentIndex": 1,
"delta": "请继续"
}
}对应S02-M18;完整应答和异常在该场景或S11。设备Topic中的productID/deviceName来自认证,不从正文取身份。
respTextDone · MSG↓
| 项目 | 契约 |
|---|---|
| Topic/接口 | $thing/down/message/{productID}/{deviceName} |
| 发送→接收 | 平台→设备 |
| 消息类型 | 事件 |
| 对应应答 | — |
| 触发与状态变化 | 最终完整文本取代增量;不是播放完成。 |
| 前置条件 | 会话/参与端有效,满足方法语义;结束/失败事件允许清理非终态会话 |
| 超时与重试 | 不等待ACK;重复按公共规则丢弃/重放 |
| 幂等与迟到 | 遵循公共约定;终态不复活;旧sessionId/媒体代次拒绝或丢弃,不影响新资源 |
| 失败 | 请求按对应应答方法返回实际code和data.reason;异步失败单独事件,不以成功字段包装错误 |
| 适用场景 | S02、S03、S04、S09 |
正文字段
| 字段 | 类型 | 必填条件 | 枚举/默认及含义 |
|---|---|---|---|
| respId | string | 必填 | 回复ID |
| contentIndex | uint | 必填 | 内容段 |
| text | string | 必填 | 该段完整文本 |
所有成功字段表以外的共通错误负载为 data.reason:string;条件不满足时不要求成功字段。未声明可选字段缺省为“未提供”,无隐式开启能力。
报文实例
{
"msgToken": "s02-27",
"method": "respTextDone",
"sessionId": "s02-session",
"messageSeq": 4,
"data": {
"respId": "reply-1",
"contentIndex": 0,
"text": "你好,有什么可以帮你?"
}
}对应S02-M15;完整应答和异常在该场景或S11。设备Topic中的productID/deviceName来自认证,不从正文取身份。
toolCallStart · MSG↓
| 项目 | 契约 |
|---|---|
| Topic/接口 | $thing/down/message/{productID}/{deviceName} |
| 发送→接收 | 平台→设备 |
| 消息类型 | 事件 |
| 对应应答 | — |
| 触发与状态变化 | 模型工具意图,不代表执行已成功。 |
| 前置条件 | 会话/参与端有效,满足方法语义;结束/失败事件允许清理非终态会话 |
| 超时与重试 | 不等待ACK;重复按公共规则丢弃/重放 |
| 幂等与迟到 | 遵循公共约定;终态不复活;旧sessionId/媒体代次拒绝或丢弃,不影响新资源 |
| 失败 | 请求按对应应答方法返回实际code和data.reason;异步失败单独事件,不以成功字段包装错误 |
| 适用场景 | S04 |
正文字段
| 字段 | 类型 | 必填条件 | 枚举/默认及含义 |
|---|---|---|---|
| respId | string | 必填 | 回复ID |
| toolCallId | string | 必填 | 工具调用ID |
| name | string | 必填 | 工具名 |
| arguments | object | 必填 | 工具参数 |
所有成功字段表以外的共通错误负载为 data.reason:string;条件不满足时不要求成功字段。未声明可选字段缺省为“未提供”,无隐式开启能力。
报文实例
{
"msgToken": "s04-57",
"method": "toolCallStart",
"sessionId": "s04-session",
"messageSeq": 1,
"data": {
"respId": "tool-reply",
"toolCallId": "tool-1",
"name": "deviceTakePhoto",
"arguments": {}
}
}对应S04-M01;完整应答和异常在该场景或S11。设备Topic中的productID/deviceName来自认证,不从正文取身份。
toolCallExecute · MSG↓
当前可运行的审核工具仅set_local_display_theme,交互类型action、schemaRevision=1,参数及成功结果为闭合对象{"theme":"light"}或{"theme":"dark"}。成功回报必须与实际执行主题一致;action不携带formSchema。下表form及formSchema仅为扩展定义,不能据此声明任意工具或表单。
明确请求指定客户端执行注册工具,不是后端执行中通知。后端MCP与设备action链路见S04,不发送此事件。 Topic为 $thing/down/message/{productID}/{deviceName},平台→设备;仅声明frontendTools并获授权的端接收。客户端通过toolCallSubmit回传,平台用requestAck确认;从下发起最多60秒或expiresAt更早值。MSG事件使用messageSeq,按toolCallId幂等,不自动重复执行。
工具执行等待期限与平台 Owner 短租约不是同一个期限:投递时仍须确认 Owner 当前存活、原业务会话未结束以及原执行票据和当前完整端点来源一致,不要求一次续租提前覆盖整个工具等待窗口。接续目标只沿原工具截止执行,不延长原票据;旧来源、旧票据、终态或已过期 Owner 都不能借此取得当前目标权限。普通媒体、邀请及焦点命令保留各自原寿命约束。
| 字段 | 类型 | 必填条件 | 枚举/默认及含义 |
|---|---|---|---|
| respId | string | 必填 | 已创建回复 |
| toolCallId | string | 必填 | 会话内唯一调用 |
| name | string | 必填 | 已注册客户端工具 |
| arguments | object | 必填 | 通过工具schema校验的参数 |
| isFrontend | boolean | 必填 | 固定true;表示客户端执行 |
| interactionType | string | 必填 | action/form |
| formSchema | object | form必填 | 已审核表单JSON Schema,不含可执行代码 |
| executionToken | string | 必填 | 绑定会话、回复、调用、接收端的一次授权令牌 |
| expiresAt | int64 | 必填 | Unix毫秒;过期禁止新执行 |
报文实例
{
"msgToken": "s22-1",
"method": "toolCallExecute",
"sessionId": "s22-session",
"messageSeq": 1,
"data": {
"respId": "reply-1",
"toolCallId": "tool-1",
"name": "set_local_display_theme",
"arguments": {
"theme": "dark"
},
"isFrontend": true,
"interactionType": "action",
"executionToken": "<scoped-single-call-token>",
"expiresAt": 1900000000000
}
}对应S22-M01。完整结果、取消、超时及应用客户端分支见S22;授权和迟到规则见命令08。无此能力不能降级为任意action执行;工具失败不结束主会话,取消不能回滚已发生副作用。扩展契约,须确认支持,不能按现行代码存在常量就声称设备已接收。
toolCallResult · MSG↓
| 项目 | 契约 |
|---|---|
| Topic/接口 | $thing/down/message/{productID}/{deviceName} |
| 发送→接收 | 平台→设备 |
| 消息类型 | 事件 |
| 对应应答 | — |
| 触发与状态变化 | 成功需可信 actionReply;超时且设备可能已执行时用 unknown。注入播报不能证明模型原生工具选择。 |
| 前置条件 | 会话/参与端有效,满足方法语义;结束/失败事件允许清理非终态会话 |
| 超时与重试 | 不等待ACK;重复按公共规则丢弃/重放 |
| 幂等与迟到 | 遵循公共约定;终态不复活;旧sessionId/媒体代次拒绝或丢弃,不影响新资源 |
| 失败 | 请求按对应应答方法返回实际code和data.reason;异步失败单独事件,不以成功字段包装错误 |
| 适用场景 | S04 |
正文字段
| 字段 | 类型 | 必填条件 | 枚举/默认及含义 |
|---|---|---|---|
| respId | string | 必填 | 回复ID |
| toolCallId | string | 必填 | 工具ID |
| state | string | 必填 | succeeded/failed/unknown |
| result | object | 必填 | 脱敏工具结果 |
所有成功字段表以外的共通错误负载为 data.reason:string;条件不满足时不要求成功字段。未声明可选字段缺省为“未提供”,无隐式开启能力。
报文实例
{
"msgToken": "s04-59",
"method": "toolCallResult",
"sessionId": "s04-session",
"messageSeq": 2,
"data": {
"respId": "tool-reply",
"toolCallId": "tool-1",
"state": "succeeded",
"result": {
"fileUri": "<file-uri>"
}
}
}对应S04-M11;完整应答和异常在该场景或S11。设备Topic中的productID/deviceName来自认证,不从正文取身份。
translationResult · MSG↓
| 项目 | 契约 |
|---|---|
| Topic/接口 | $thing/down/message/{productID}/{deviceName} |
| 发送→接收 | 平台→设备 |
| 消息类型 | 事件 |
| 对应应答 | — |
| 触发与状态变化 | 字幕和译音关联;旧配置结果不送新方向播报。 |
| 前置条件 | 会话/参与端有效,满足方法语义;结束/失败事件允许清理非终态会话 |
| 超时与重试 | 不等待ACK;重复按公共规则丢弃/重放 |
| 幂等与迟到 | 遵循公共约定;终态不复活;旧sessionId/媒体代次拒绝或丢弃,不影响新资源 |
| 失败 | 请求按对应应答方法返回实际code和data.reason;异步失败单独事件,不以成功字段包装错误 |
| 适用场景 | S05 |
正文字段
| 字段 | 类型 | 必填条件 | 枚举/默认及含义 |
|---|---|---|---|
| resultSeq | uint | 必填 | 本会话翻译结果序号 |
| speakerId | string | 必填 | 经确认说话人 |
| sourceLanguage | string | 必填 | BCP47 |
| targetLanguage | string | 必填 | BCP47 |
| sourceText | string | 必填 | 原文 |
| translatedText | string | 必填 | 译文 |
| outputTrackId | string | 有译音必填 | 独立译音轨 |
| configRevision | uint | 必填 | 语言配置代次 |
所有成功字段表以外的共通错误负载为 data.reason:string;条件不满足时不要求成功字段。未声明可选字段缺省为“未提供”,无隐式开启能力。
报文实例
{
"msgToken": "s05-68",
"method": "translationResult",
"sessionId": "s05-session",
"messageSeq": 1,
"data": {
"resultSeq": 1,
"speakerId": "person-a",
"sourceLanguage": "zh-CN",
"targetLanguage": "en-US",
"sourceText": "你好",
"translatedText": "Hello",
"outputTrackId": "speaker-1",
"configRevision": 1
}
}对应S05-M12;完整应答和异常在该场景或S11。设备Topic中的productID/deviceName来自认证,不从正文取身份。
messageDeliver · MSG↓
| 项目 | 契约 |
|---|---|
| Topic/接口 | $thing/down/message/{productID}/{deviceName} |
| 发送→接收 | 平台→设备 |
| 消息类型 | 请求 |
| 对应应答 | messageAck |
| 触发与状态变化 | 无 sessionId;一个收件设备一份投递状态,离线排队并按过期时间丢弃。 |
| 前置条件 | 投递身份及内容引用有效,不创建实时会话 |
| 超时与重试 | 直到expiresAt,按S10退避,收到received即停止重投 |
| 幂等与迟到 | 遵循公共约定;终态不复活;旧sessionId/媒体代次拒绝或丢弃,不影响新资源 |
| 失败 | 请求按对应应答方法返回实际code和data.reason;异步失败单独事件,不以成功字段包装错误 |
| 适用场景 | S10 |
正文字段
| 字段 | 类型 | 必填条件 | 枚举/默认及含义 |
|---|---|---|---|
| deliveryId | string | 必填 | 投递ID |
| kind | string | 必填 | broadcast/voiceMessage |
| expiresAt | int64 | 必填 | Unix毫秒 |
| contentRef | string | 必填 | 授权内容引用 |
所有成功字段表以外的共通错误负载为 data.reason:string;条件不满足时不要求成功字段。未声明可选字段缺省为“未提供”,无隐式开启能力。
报文实例
{
"msgToken": "s10-140",
"method": "messageDeliver",
"params": {
"deliveryId": "delivery-1",
"kind": "voiceMessage",
"expiresAt": 1900000000000,
"contentRef": "<authorized-audio-ref>"
}
}对应S10-M03;完整应答和异常在该场景或S11。设备Topic中的productID/deviceName来自认证,不从正文取身份。
messageAck · MSG↑
| 项目 | 契约 |
|---|---|
| Topic/接口 | $thing/up/message/{productID}/{deviceName} |
| 发送→接收 | 设备→平台 |
| 消息类型 | 应答或事件 |
| 对应应答 | — |
| 触发与状态变化 | received 回应投递原 token;played 是实际播放完成后独立报告,不能把下载完成算播放完成。 |
| 前置条件 | 投递身份及内容引用有效,不创建实时会话 |
| 超时与重试 | 10秒;最多原token重试2次;事件形式不等待ACK |
| 幂等与迟到 | 遵循公共约定;终态不复活;旧sessionId/媒体代次拒绝或丢弃,不影响新资源 |
| 失败 | 请求按对应应答方法返回实际code和data.reason;异步失败单独事件,不以成功字段包装错误 |
| 适用场景 | S10 |
正文字段
| 字段 | 类型 | 必填条件 | 枚举/默认及含义 |
|---|---|---|---|
| deliveryId | string | 必填 | 投递ID |
| status | string | 必填 | received/played/failed/expired |
| reason | string | 失败必填 | 原因 |
所有成功字段表以外的共通错误负载为 data.reason:string;条件不满足时不要求成功字段。未声明可选字段缺省为“未提供”,无隐式开启能力。
报文实例
{
"msgToken": "s10-140",
"method": "messageAck",
"code": 200,
"data": {
"deliveryId": "delivery-1",
"status": "received"
}
}对应S10-M04;完整应答和异常在该场景或S11。设备Topic中的productID/deviceName来自认证,不从正文取身份。
更新日志
2026/10/16 16:04
查看所有更新日志
fe3a7-docs(AI与音视频): 按场景整理完整接入流程与命令契约于
