人与AI串联语音:完整报文
约 1110 字大约 4 分钟
2026-10-16
本页是场景流程的完整 JSON 序列,按图中编号查阅。示例中的分支互斥,不能顺序重放全部报文;实际 ID、截止、SDP、地址和密钥须由运行时取得。实施状态及字段定义仍以场景与命令页为准。
编号报文
M01 · capabilityReport
{
"msgToken": "cap-S02",
"method": "capabilityReport",
"params": {
"revision": 1,
"purposes": [
"aiConversation"
],
"transports": [
"udp"
],
"supportedInteractionModes": [
"halfDuplex"
],
"aecMode": "none",
"audio": {
"format": "opus",
"sampleRate": 16000,
"channels": 1,
"frameDuration": 20
},
"cameras": [],
"features": [
"audio",
"udpReplyStartReceipt"
]
}
}M02 · requestAck
{
"msgToken": "cap-S02",
"method": "requestAck",
"code": 200,
"data": {
"requestMethod": "capabilityReport",
"result": {
"acceptedRevision": 1
}
}
}M03 · sessionCreate
{
"msgToken": "s02-19",
"method": "sessionCreate",
"params": {
"purpose": "aiConversation",
"transport": "udp",
"tracks": [
{
"trackId": "mic-1",
"kind": "audio",
"sourceId": "mic",
"direction": "sendonly",
"codec": "opus",
"state": "requested"
},
{
"trackId": "speaker-1",
"kind": "audio",
"sourceId": "speaker",
"direction": "recvonly",
"codec": "opus",
"state": "requested"
}
],
"supportedInteractionModes": [
"halfDuplex"
],
"audioParams": {
"format": "opus",
"sampleRate": 16000,
"channels": 1,
"frameDuration": 20
}
}
}M04 · sessionCreated
{
"msgToken": "s02-19",
"method": "sessionCreated",
"sessionId": "s02-session",
"code": 200,
"data": {
"state": "negotiating",
"selected": {
"transport": "udp",
"interactionMode": "halfDuplex",
"udpReplyStartReceipt": true,
"audioParams": {
"format": "opus",
"sampleRate": 16000,
"channels": 1,
"frameDuration": 20
}
},
"tracks": [
{
"trackId": "mic-1",
"kind": "audio",
"sourceId": "mic",
"direction": "sendonly",
"codec": "opus",
"state": "requested"
},
{
"trackId": "speaker-1",
"kind": "audio",
"sourceId": "speaker",
"direction": "recvonly",
"codec": "opus",
"state": "requested"
}
],
"media": {
"udp": {
"server": "<media-host>",
"port": 0,
"key": "<redacted-key>",
"nonce": "<redacted-nonce>"
}
}
}
}M05 · mediaState
{
"msgToken": "s02-20",
"method": "mediaState",
"sessionId": "s02-session",
"params": {
"mediaRevision": 1,
"state": "connected"
}
}M06 · requestAck
{
"msgToken": "s02-20",
"method": "requestAck",
"sessionId": "s02-session",
"code": 200,
"data": {
"requestMethod": "mediaState",
"result": {
"mediaRevision": 1,
"state": "connected"
}
}
}M07 · sessionEstablished
{
"msgToken": "s02-21",
"method": "sessionEstablished",
"sessionId": "s02-session",
"eventSeq": 1,
"data": {
"state": "established",
"mediaRevision": 1
}
}M08 · audioStart
{
"msgToken": "s02-22",
"method": "audioStart",
"sessionId": "s02-session",
"params": {
"inputId": "input-1",
"firstPacketSeq": 256
}
}M09 · requestAck
{
"msgToken": "s02-22",
"method": "requestAck",
"sessionId": "s02-session",
"code": 200,
"data": {
"requestMethod": "audioStart",
"result": {
"inputId": "input-1"
}
}
}M10 · audioStop
{
"msgToken": "s02-23",
"method": "audioStop",
"sessionId": "s02-session",
"params": {
"inputId": "input-1",
"lastPacketSeq": 12800
}
}M11 · requestAck
{
"msgToken": "s02-23",
"method": "requestAck",
"sessionId": "s02-session",
"code": 200,
"data": {
"requestMethod": "audioStop",
"result": {
"inputId": "input-1"
}
}
}M12 · respCreated
{
"msgToken": "s02-25",
"method": "respCreated",
"sessionId": "s02-session",
"messageSeq": 1,
"data": {
"respId": "reply-1",
"inputId": "input-1"
}
}M13 · respSttDelta
{
"msgToken": "s02-24",
"method": "respSttDelta",
"sessionId": "s02-session",
"messageSeq": 2,
"data": {
"respId": "reply-1",
"inputId": "input-1",
"delta": "你好"
}
}M14 · respSttDone
{
"msgToken": "s02-26",
"method": "respSttDone",
"sessionId": "s02-session",
"messageSeq": 3,
"data": {
"respId": "reply-1",
"inputId": "input-1",
"text": "你好"
}
}M15 · respTextDone
{
"msgToken": "s02-27",
"method": "respTextDone",
"sessionId": "s02-session",
"messageSeq": 4,
"data": {
"respId": "reply-1",
"contentIndex": 0,
"text": "你好,有什么可以帮你?"
}
}M16 · respAudioStart
{
"msgToken": "s02-28",
"method": "respAudioStart",
"sessionId": "s02-session",
"eventSeq": 2,
"data": {
"respId": "reply-1",
"trackId": "speaker-1",
"mediaRevision": 1,
"udpNonce": "0000000000000001",
"firstPacketSeq": 128
}
}M27 · respAudioStart
{
"msgToken": "s02-28",
"method": "respAudioStart",
"sessionId": "s02-session",
"code": 200,
"data": {
"respId": "reply-1",
"trackId": "speaker-1",
"mediaRevision": 1
}
}M18 · respTextDelta
{
"msgToken": "s02-30",
"method": "respTextDelta",
"sessionId": "s02-session",
"messageSeq": 5,
"data": {
"respId": "reply-1",
"contentIndex": 1,
"delta": "请继续"
}
}M19 · respTextDone
{
"msgToken": "s02-31",
"method": "respTextDone",
"sessionId": "s02-session",
"messageSeq": 6,
"data": {
"respId": "reply-1",
"contentIndex": 1,
"text": "请继续。"
}
}M20 · respAudioDone
{
"msgToken": "s02-32",
"method": "respAudioDone",
"sessionId": "s02-session",
"eventSeq": 4,
"data": {
"respId": "reply-1",
"trackId": "speaker-1",
"mediaRevision": 1,
"lastPacketSeq": 12800
}
}M25 · respDone
{
"method": "respDone",
"msgToken": "s02-audit-0",
"sessionId": "s02-session",
"messageSeq": 7,
"data": {
"respId": "reply-1",
"inputId": "input-1",
"status": "completed",
"contentCount": 2,
"audioState": "sent"
}
}M28 · sessionError
{
"msgToken": "s02-install-expired",
"method": "sessionError",
"sessionId": "s02-session",
"code": 504,
"eventSeq": 3,
"data": {
"scope": "response",
"respId": "reply-1",
"mediaRevision": 1,
"reason": "mediaFailed",
"retryable": true
}
}M29 · respDone
{
"msgToken": "s02-install-failed",
"method": "respDone",
"sessionId": "s02-session",
"messageSeq": 5,
"data": {
"respId": "reply-1",
"inputId": "input-1",
"status": "failed",
"reason": "mediaFailed",
"audioState": "failed",
"contentCount": 1
}
}M26 · respDone
{
"msgToken": "s02-final-58",
"method": "respDone",
"sessionId": "s02-session",
"messageSeq": 8,
"data": {
"respId": "reply-1",
"inputId": "input-1",
"status": "failed",
"reason": "upstreamUnavailable",
"contentCount": 0,
"audioState": "failed"
}
}M22 · sessionError
{
"msgToken": "s02-34",
"method": "sessionError",
"sessionId": "s02-session",
"code": 502,
"eventSeq": 6,
"data": {
"reason": "modelTimeout",
"retryable": true,
"scope": "response",
"respId": "reply-1"
}
}M23 · sessionEnd
{
"msgToken": "s02-35",
"method": "sessionEnd",
"sessionId": "s02-session",
"params": {
"reason": "userHangup"
}
}M24 · sessionEnded
{
"msgToken": "s02-35",
"method": "sessionEnded",
"sessionId": "s02-session",
"code": 200,
"data": {
"state": "ended",
"reason": "userHangup"
}
}更新日志
2026/10/17 03:27
查看所有更新日志
d04e1-docs(AI与音视频): 按公共主线与场景分支整合接入手册于
