Appearance
出站推送
| 项 | 说明 |
|---|---|
| 方向 | 平台 → 你 |
| 方法 | POST |
| URL | 开通时配置的 HTTPS 接收地址 |
| Content-Type | application/json |
| 鉴权 | 无 Token。能用 secret 解密即合法 |
产物就绪后平台 POST 一条密文。你方解密 → 按 eventId 去重 → 返回 {"code":2000}。
密文外壳见 安全规范。
明文信封
解密后的 JSON。业务字段全部在 data 内。
| 参数名 | 类型 | 必传 | 描述 |
|---|---|---|---|
| specVersion | string | 是 | 固定 "1" |
| eventId | string | 是 | 去重键。自动补推仍用此值;人工重推会换新 eventId |
| eventType | string | 是 | 见 概述 · 对接方案 |
| occurredAt | string | 是 | ISO-8601,时区 +08:00 |
| audioId | string | 是 | 录音 ID |
| data | object | 是 | 下表。未订阅的类型不会出现对应字段 |
data · 公共字段
| 参数名 | 类型 | 必传 | 描述 |
|---|---|---|---|
| deviceUid | string | 否 | 设备 UID |
| title | string | 否 | 录音标题 |
| contentTypes | string[] | 多项时 | 实际包含的类型,如 ["DENOISE_COMPLETED","TRANSCRIPT_COMPLETED"] |
| 参数名 | 类型 | 必传 | 描述 |
|---|---|---|---|
| deviceUid | string | 否 | 设备 UID |
| title | string | 否 | 录音标题 |
| contentTypes | string[] | 多项时 | 实际包含的类型,如 ["DENOISE_COMPLETED"] |
data · 处理后音频(含 DENOISE_COMPLETED)
| 参数名 | 类型 | 必传 | 描述 |
|---|---|---|---|
| denoiseUrl | string | 是 | 处理后音频文件 URL |
| recordDuration | int | 否 | 时长,秒 |
data · 转写文本(含 TRANSCRIPT_COMPLETED)
| 参数名 | 类型 | 必传 | 描述 |
|---|---|---|---|
| transcriptId | long | 是 | 转写记录 ID |
| transcriptText | string | 是 | 全文 |
| transcriptSentences | string | 是 | 分句。JSON 数组的字符串,需再反序列化,类型不是 array |
| durationMs | long | 否 | 转写时长,毫秒 |
| wordsCount | int | 否 | 句段条数 |
transcriptSentences 反序列化后的元素:
| 参数名 | 类型 | 必传 | 描述 |
|---|---|---|---|
| text | string | 是 | 一句文本 |
| beginTime | long | 否 | 开始,毫秒 |
| endTime | long | 否 | 结束,毫秒 |
| emotion | string | 否 | 如 neutral |
| speakerId | int | 否 | 说话人编号 |
示例(仅转写)
json
{
"specVersion": "1",
"eventId": "c0ffee12ab",
"eventType": "TRANSCRIPT_COMPLETED",
"occurredAt": "2026-08-26T10:00:00+08:00",
"audioId": "audio-xxx",
"data": {
"deviceUid": "DEV001",
"title": "客户拜访",
"transcriptId": 90001,
"transcriptText": "你好,今天过来看看。",
"transcriptSentences": "[{\"text\":\"你好,今天过来看看。\",\"beginTime\":0,\"endTime\":1800,\"emotion\":\"neutral\",\"speakerId\":0}]",
"durationMs": 1800,
"wordsCount": 1
}
}示例(处理后音频 + 转写)
只订一项时:无 contentTypes,也没有未订类型的字段。
json
{
"specVersion": "1",
"eventId": "c0ffee12ab",
"eventType": "DENOISE_COMPLETED,TRANSCRIPT_COMPLETED",
"occurredAt": "2026-08-26T10:00:00+08:00",
"audioId": "audio-xxx",
"data": {
"deviceUid": "DEV001",
"title": "客户拜访",
"contentTypes": ["DENOISE_COMPLETED", "TRANSCRIPT_COMPLETED"],
"denoiseUrl": "https://oss.example/audio.wav",
"recordDuration": 35,
"transcriptId": 90001,
"transcriptText": "你好,今天过来看看。",
"transcriptSentences": "[{\"text\":\"你好,今天过来看看。\",\"beginTime\":0,\"endTime\":1800,\"emotion\":\"neutral\"}]",
"durationMs": 1800,
"wordsCount": 1
}
}示例(处理后音频)
json
{
"specVersion": "1",
"eventId": "c0ffee12ab",
"eventType": "DENOISE_COMPLETED",
"occurredAt": "2026-08-26T10:00:00+08:00",
"audioId": "audio-xxx",
"data": {
"deviceUid": "DEV001",
"title": "客户拜访",
"denoiseUrl": "https://oss.example/audio.wav",
"recordDuration": 35
}
}响应
你的 HTTP 响应 Body:
json
{ "code": 2000 }| 参数名 | 类型 | 必传 | 描述 |
|---|---|---|---|
| code | int | 是 | 2000 表示已收到。平台 只读该字段 |
| msg | string | 否 | 忽略 |
| data | object | 否 | 忽略 |
成功条件:HTTP 2xx 且 code == 2000。仅 HTTP 200 不算成功。
补推与幂等
| 你的响应 | 平台行为 |
|---|---|
2xx 且 code == 2000 | 成功,不再补本条 |
2xx 但非 JSON / 无 code / code ≠ 2000 | 失败,不自动补推 |
| 4xx | 失败,不自动补推 |
| 5xx、超时、连接失败 | 自动补推,最多 4 次(约 15s / 60s / 5min) |
| 场景 | 建议返回 |
|---|---|
| 密钥错误、密文无法解密 | 4xx 或 code ≠ 2000(避免无效重试) |
| 处理过程异常、希望平台再送 | 5xx |
同一 eventId 再次到达 | 仍返回 code: 2000,不要重复落库 |
自动补推(超时 / 5xx)仍用同一 eventId,nonce 重新生成。人工在平台点重推会换新 eventId,按新事件处理。
注意事项
- 订阅多项只来一条推送,
eventType为所订类型名逗号拼接。 - 耗时逻辑先回
2000再异步,避免超时补推。 secret只下发一次;轮换后旧钥立即失效。