W706(4G语音采集器)API

概述

W706 是一款 4G 语音采集设备。用户按键开始录音,再次按键结束录音;单次录音最长 60 秒。设备有网络时自动上传录音,无网络时先保存在本地,网络恢复后自动补传。

项目 说明
设备序列号 W706 开头,以设备标签为准
接口域名 https://wdev.wmj.com.cn
设备命令格式 application/json
音频上传方式 HTTP POST,音频二进制作为请求体
音频格式 AMR-WB,16 kHz,单声道,文件后缀 .amr
单次最长录音 60 秒
离线录音 支持,网络恢复后自动补传
本地待传队列 最多保留 20 条,超出后循环清理最早的录音

API 凭据请在微门禁开放平台申请。示例中的 {{wmjv2appid}}{{wmjv2appsecret}}{{device_sn}}https://example.com 均为占位符,请勿把正式密钥写入客户端、日志或公开代码仓库。

接入流程

  1. 注册 W706,将设备绑定到客户账号。
  2. 查询设备在线状态和设备信息。
  3. 使用“配置音频接收地址”设置客户自己的 HTTPS 接收接口。
  4. 用户通过设备按键录音,也可以通过设备命令远程开始、停止录音。
  5. 客户服务接收并保存 AMR-WB 文件,立即向设备返回 HTTP 2xx。
  6. 如需语音转文字,由客户服务在保存音频后异步调用自有或第三方识别接口。

设备命令公共规则

本文所有设备命令均复用硬件云 APIv2 通用接口:

  • 请求 URL:https://wdev.wmj.com.cn/deviceApi/send
  • 请求方式:POST
  • 请求格式:application/json
  • type 固定为 1
  • 命令名放在 data.cmd_type
  • 命令参数放在 data.info
{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}",
  "type": 1,
  "data": {
    "cmd_type": "命令名称",
    "info": {}
  }
}

平台同步等待设备响应。顶层 code 表示硬件云处理结果,data.info.code 表示设备执行结果;两层 code 都为 0 才表示命令真正成功。

1.注册设备

请求URL

https://wdev.wmj.com.cn/deviceApi/register

请求方式

POST

请求格式

json

参数

{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}"
}
参数名 必填 类型 说明
app_id string APIv2 应用 ID
app_secret string APIv2 应用密钥
device_sn string W706 设备序列号

返回示例

{
  "code": 0,
  "msg": "注册成功"
}
2.查询设备在线状态

简要描述

查询设备是否连接硬件云。本接口只读取平台在线记录,不向设备发送命令。

请求URL

https://wdev.wmj.com.cn/deviceApi/getOnLine

请求方式

POST

参数

{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}"
}

返回示例

{
  "code": 0,
  "msg": "查询成功",
  "data": {
    "on_line": 1
  }
}
返回字段 类型 说明
code number 0 表示查询成功
data.on_line number 1 在线,0 离线
3.查询设备信息

简要描述

查询设备版本、4G 信号、录音状态、待上传数量和最近一次录音及上传结果。设备必须在线。

请求URL

https://wdev.wmj.com.cn/deviceApi/send

请求方式

POST

参数

{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}",
  "type": 1,
  "data": {
    "cmd_type": "getdevinfo",
    "info": {}
  }
}

返回示例

{
  "code": 0,
  "data": {
    "device_sn": "{{device_sn}}",
    "cmd_type": "getdevinfo",
    "info": {
      "code": 0,
      "msg": "",
      "project": "W706",
      "sw_ver": "706.1.2",
      "hw_ver": "1.0.0",
      "rssi": -71,
      "csq": 21,
      "recording": false,
      "uploading": false,
      "upload_queue_count": 0,
      "last_size": 15360,
      "last_duration": 6,
      "last_upload_code": 200,
      "last_error": ""
    }
  }
}
返回字段 类型 说明
data.info.project string 产品型号,固定为 W706
data.info.sw_ver / version string 设备固件版本
data.info 下的 hw_ver string 硬件版本
data.info.rssi number 4G 接收信号强度,单位 dBm
data.info.csq number 蜂窝网络信号质量
data.info.recording boolean 是否正在录音
data.info.uploading boolean 是否正在上传录音
data.info.upload_queue_count number 本地待上传录音数量
data.info.last_size number 最近一次有效录音大小,单位字节
data.info.last_duration number 最近一次录音时长,单位秒
data.info.last_upload_code number 最近一次上传的 HTTP 状态码
data.info.last_error string 最近一次错误信息,无错误时为空字符串

响应可能同时包含设备和 SIM 网络标识字段。客户系统应按最小必要原则保存,不应公开这些标识。

4.配置音频接收地址

简要描述

设置客户服务用于接收录音文件的 HTTP 或 HTTPS 地址。配置写入设备后会持久保存,重启后继续生效。

生产环境应使用 HTTPS,并保证接口可从公网访问。接收地址不应包含公开可见的账号密码。

请求URL

https://wdev.wmj.com.cn/deviceApi/send

请求方式

POST

参数

{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}",
  "type": 1,
  "data": {
    "cmd_type": "set_cloud_config",
    "info": {
      "upload_url": "https://example.com/api/voice/upload"
    }
  }
}
参数名 必填 类型 说明
data.info.upload_url string 客户音频接收接口完整地址,必须为非空字符串

返回示例

{
  "code": 0,
  "data": {
    "device_sn": "{{device_sn}}",
    "cmd_type": "set_cloud_config",
    "info": {
      "code": 0,
      "msg": "",
      "upload_url": "https://example.com/api/voice/upload"
    }
  }
}

配置后建议调用“查询设备信息”,核对返回的 upload_url。如需配置多台设备,应分别向每台 W706 下发。

5.远程开始录音

简要描述

让在线设备开始一次录音。设备已经在录音或正在结束上一条录音时会返回失败。现场按键录音不依赖网络,不需要调用本接口。

请求URL

https://wdev.wmj.com.cn/deviceApi/send

请求方式

POST

参数

{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}",
  "type": 1,
  "data": {
    "cmd_type": "start_record",
    "info": {}
  }
}

返回示例

{
  "code": 0,
  "data": {
    "device_sn": "{{device_sn}}",
    "cmd_type": "start_record",
    "info": {
      "code": 0,
      "msg": ""
    }
  }
}

录音灯会在开始请求时亮起。再次按下设备按键、调用停止录音命令或达到 60 秒,都会结束本次录音。

6.远程停止录音

简要描述

结束当前录音。设备没有正在录音时会返回失败。结束后设备先保存文件,再根据网络状态立即上传或加入待传队列。

请求URL

https://wdev.wmj.com.cn/deviceApi/send

请求方式

POST

参数

{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}",
  "type": 1,
  "data": {
    "cmd_type": "stop_record",
    "info": {}
  }
}

返回示例

{
  "code": 0,
  "data": {
    "device_sn": "{{device_sn}}",
    "cmd_type": "stop_record",
    "info": {
      "code": 0,
      "msg": ""
    }
  }
}
7.接收设备上传的音频

简要描述

W706 使用 HTTP POST 把 AMR-WB 音频二进制直接写入请求体。该请求不是 JSON,也不是 multipart/form-data

客户服务应尽快完成校验和文件落盘,然后返回 HTTP 2xx。语音识别应异步执行,不要阻塞设备上传请求。

请求URL

由“配置音频接收地址”设置,例如:

https://example.com/api/voice/upload

请求方式

POST

Content-Type

audio/amr

请求示例

POST /api/voice/upload?device_sn={{device_sn}}&project=W706&version=706.1.2&duration=6 HTTP/1.1
Host: example.com
Content-Type: audio/amr
Content-Length: 15360
X-Device-Sn: {{device_sn}}
X-Project: W706
X-Version: 706.1.2
X-Audio-Duration: 6

<AMR-WB 音频二进制内容>

Query 参数

参数名 必填 类型 说明
device_sn string 上传录音的设备序列号
project string 产品型号,固定为 W706
version string 设备固件版本
duration number 录音时长,单位秒

Header

Header 类型 说明
Content-Type string 当前为 audio/amr
Content-Length number 音频请求体字节数
X-Device-Sn string 设备序列号,与 Query 参数一致
X-Project string 产品型号
X-Version string 设备固件版本
X-Audio-Duration number 录音时长,单位秒

音频参数

项目
编码 AMR-WB
采样率 16 kHz
声道 单声道
文件后缀 .amr
单次最长时长 60 秒
典型大小 约 2.4 KB/s,60 秒约 150 KB

成功响应示例

{
  "code": 0,
  "msg": "",
  "data": {
    "id": "voice_record_id",
    "device_sn": "{{device_sn}}",
    "duration": 6,
    "size": 15360
  }
}

设备主要根据 HTTP 状态码判断上传是否成功。成功时必须返回 200299;请求超时、网络失败或返回非 2xx 时,设备保留本地文件并在后续联网时重试。

失败响应示例

{
  "code": 1,
  "msg": "invalid audio body",
  "data": null
}
HTTP 状态码 建议场景
400 参数错误、空文件或音频格式不支持
413 文件超过服务端限制
500 服务端内部错误
503 服务临时不可用,设备稍后重试

服务端处理要求

  1. 校验 Content-Length,拒绝空文件。
  2. 读取完整请求体,按二进制方式保存为 .amr 文件。
  3. 记录设备序列号、录音时长、文件大小和接收时间。
  4. 文件保存成功后立即返回 HTTP 2xx。
  5. 语音转文字、内容审核等耗时任务放入异步队列处理。
  6. 建议单文件限制不小于 1 MB,请求超时时间不小于 120 秒。
  7. 建议按设备号和接收时间生成唯一业务 ID,并做好重复上传的幂等处理。

X-Device-Sn 等 Header 用于标识和核对,不是密码或签名。生产服务应使用 HTTPS,并在服务端校验已绑定的设备号、访问来源和业务权限。

8.录音与上传状态上报

简要描述

设备会通过硬件云上报录音开始、录音结束和上传结果。客户回调服务可按 cmd_type 区分事件,并使用业务唯一键避免重复处理。

录音开始

{
  "device_sn": "{{device_sn}}",
  "type": 2,
  "cmd_type": "record_start",
  "info": {
    "path": "/w706_rec_1.amr",
    "max_seconds": 60,
    "record_type": "AMR_WB",
    "sample_rate": 16000,
    "bits": 16,
    "channels": 1
  }
}

录音结束

{
  "device_sn": "{{device_sn}}",
  "type": 2,
  "cmd_type": "record_stop",
  "info": {
    "reason": "button",
    "path": "/w706_rec_1.amr",
    "size": 15360,
    "duration": 6
  }
}

reason 常见值:button 表示按键结束,mqtt 表示远程命令结束,timeout 表示达到 60 秒自动结束,empty_audio 表示没有形成有效音频。

上传结果

{
  "device_sn": "{{device_sn}}",
  "type": 2,
  "cmd_type": "record_upload",
  "info": {
    "status": "ok",
    "code": 200,
    "size": 15360,
    "duration": 6,
    "body": "{\"code\":0,\"msg\":\"\"}"
  }
}
字段 类型 说明
info.status string startokfailed
info.code number 音频接收接口返回的 HTTP 状态码;网络失败时可能为 0
info.size number 上传文件大小,单位字节
info.duration number 录音时长,单位秒
info.body string 音频接收接口返回的原始响应文本
9.语音转文字对接建议

W706 只负责采集和上传音频,不提供语音识别结果。客户服务收到 .amr 文件后,可调用自有或第三方语音识别服务。

  • 识别服务支持 AMR-WB 时,可直接提交原文件。
  • 识别服务不支持 AMR-WB 时,可先转换为 16 kHz 单声道 WAV。
  • “音频接收成功”和“文字识别完成”应作为两个独立状态处理。
  • 设备上传接口不要等待识别完成,以免超时后重复上传。
  • 识别结果应通过录音业务 ID 与原始文件关联,不建议只用文件名关联。
10.常见问题

为什么收到的文件无法播放?

确认服务端按二进制读取完整请求体,并以 .amr 后缀保存;不要把请求体当作 JSON、文本或表单解析。还应核对文件大小与 Content-Length 是否一致。

为什么会收到较早时间的录音?

设备离线时会保存录音,网络恢复后按队列补传。因此服务端接收时间不一定等于实际录音时间,业务系统应保留接收时间,并以设备上报的时长作为辅助信息。

为什么同一条录音可能重复到达?

设备只有在收到 HTTP 2xx 后才删除本地待传文件。如果服务端已经保存文件但响应超时,设备会再次上传。客户服务应使用设备号、文件内容摘要、时长和接收时间窗口做幂等判断。

无网络时按键还能录音吗?

可以。按键录音不依赖网络;网络只影响上传。待传队列最多保留 20 条,长时间离线时应及时恢复网络,避免最早的录音被循环清理。

接收接口需要直接返回识别文字吗?

不需要。设备只判断 HTTP 状态码,不读取识别文字。建议先保存音频并返回成功,再异步完成语音识别。

11.解绑设备

请求URL

https://wdev.wmj.com.cn/deviceApi/logout

请求方式

POST

参数

{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}"
}

返回示例

{
  "code": 0,
  "msg": "解绑成功"
}

解绑后,客户账号不能再通过 APIv2 向该设备发送命令。解绑不会删除客户服务器已经接收的音频文件。

更新记录

日期 内容
2026-08-22 新增 W706 设备 API、音频接收协议、离线补传和语音转文字对接说明
作者:极客师傅  创建时间:2026-08-22 14:58
最后编辑:极客师傅  更新时间:2026-08-22 15:42