Fun-ASR 实时语音识别 WebSocket 服务端事件参考
Fun-ASR 实时语音识别服务通过 WebSocket 向客户端发送四种服务端事件:
task-started、result-generated、task-finished 和 task-failed。
用户指南:模型详情和选型建议请参见3D 生成 API
专项模型 API
语音合成
语音对话
音乐生成
图片翻译
多模态向量
平台 API
交互流程:事件交互时序图请参见 WebSocket API。客户端事件请参见客户端事件。
task-started
服务器处理 run-task 指令后返回此事件,表示可以开始发送音频。 示例:复制
{
"header": {
"task_id": "2bf83b9a-baeb-4fda-8d9a-xxxxxxxxxxxx",
"event": "task-started",
"attributes": {}
},
"payload": {}
}
header 参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| header.event | string | 事件类型。值为 task-started。 |
| header.task_id | string | 任务 ID。 |
result-generated
服务器产生识别结果时返回此事件,包含中间结果和最终结果。 示例:复制
{
"header": {
"task_id": "2bf83b9a-baeb-4fda-8d9a-xxxxxxxxxxxx",
"event": "result-generated",
"attributes": {}
},
"payload": {
"output": {
"sentence": {
"begin_time": 170,
"end_time": 920,
"text": "好的,我知道了",
"heartbeat": false,
"sentence_end": true,
"words": [
{
"begin_time": 170,
"end_time": 295,
"text": "好的",
"punctuation": ","
},
{
"begin_time": 295,
"end_time": 503,
"text": "我",
"punctuation": ""
},
{
"begin_time": 503,
"end_time": 711,
"text": "知道",
"punctuation": ""
},
{
"begin_time": 711,
"end_time": 920,
"text": "了",
"punctuation": ""
}
]
}
},
"usage": {
"duration": 3
}
}
}
header 参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| header.event | string | 事件类型。值为 result-generated。 |
| header.task_id | string | 任务 ID。 |
payload 参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| output | object | output.sentence 包含识别结果,详见下方。 |
| usage | object | 语句未完成时(sentence_end = false)为 null。语句完成时(sentence_end = true),usage.duration 为计费时长(秒)。 |
payload.usage 参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| duration | integer | 计费时长,单位秒。 |
payload.output.sentence 参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| begin_time | integer | 语句开始时间,单位毫秒。 |
| end_time | integer | null | 语句结束时间,单位毫秒。中间结果为 null。 |
| text | string | 识别文本。 |
| words | array | 词级别时间戳。 |
| heartbeat | boolean | null | 为 true 时跳过此结果。与 run-task 指令中的 heartbeat 设置对应。 |
| sentence_end | boolean | 语句是否已结束。 |
| sentence_id | integer | 句子的序号标识。正常识别结果中,sentence_id 从 1 开始递增。当 heartbeat 为 true 时(即心跳包),sentence_id 固定为 0。 |
| channel_id | integer | 音频通道编号。单声道固定为 0。 |
| speaker_id | integer | null | 说话人编号。未启用说话人分离时为 null。 |
| sentence_begin | boolean | 是否为语句起始帧。 |
| stash | object | 服务端内部缓存信息,可忽略。 |
payload.output.sentence.words 参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| begin_time | integer | 词开始时间,单位毫秒。 |
| end_time | integer | 词结束时间,单位毫秒。 |
| text | string | 识别的词。 |
| punctuation | string | 词尾标点符号。 |
| fixed | boolean | 是否为已确认词(不再变更)。 |
| speaker_id | integer | null | 说话人编号。未启用说话人分离时为 null。 |
task-finished
服务器收到 finish-task 指令并处理完剩余音频后返回此事件。 示例:复制
{
"header": {
"task_id": "2bf83b9a-baeb-4fda-8d9a-xxxxxxxxxxxx",
"event": "task-finished",
"attributes": {}
},
"payload": {
"output": {}
}
}
header 参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| header.event | string | 事件类型。值为 task-finished。 |
| header.task_id | string | 任务 ID。 |
task-failed
任务处理过程中发生错误时返回此事件。收到后应关闭连接并处理错误。 示例:复制
{
"header": {
"task_id": "2bf83b9a-baeb-4fda-8d9a-xxxxxxxxxxxx",
"event": "task-failed",
"error_code": "CLIENT_ERROR",
"error_message": "request timeout after 23 seconds.",
"attributes": {}
},
"payload": {}
}
header 参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| header.event | string | 事件类型。值为 task-failed。 |
| header.task_id | string | 任务 ID。 |
| header.error_code | string | 错误类型。 |
| header.error_message | string | 错误详情。 |

