W706(4G语音采集器)API
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 均为占位符,请勿把正式密钥写入客户端、日志或公开代码仓库。
接入流程
- 注册 W706,将设备绑定到客户账号。
- 查询设备在线状态和设备信息。
- 使用“配置音频接收地址”设置客户自己的 HTTPS 接收接口。
- 用户通过设备按键录音,也可以通过设备命令远程开始、停止录音。
- 客户服务接收并保存 AMR-WB 文件,立即向设备返回 HTTP 2xx。
- 如需语音转文字,由客户服务在保存音频后异步调用自有或第三方识别接口。
设备命令公共规则
本文所有设备命令均复用硬件云 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 状态码判断上传是否成功。成功时必须返回 200 至 299;请求超时、网络失败或返回非 2xx 时,设备保留本地文件并在后续联网时重试。
失败响应示例
{
"code": 1,
"msg": "invalid audio body",
"data": null
}
| HTTP 状态码 | 建议场景 |
|---|---|
400 |
参数错误、空文件或音频格式不支持 |
413 |
文件超过服务端限制 |
500 |
服务端内部错误 |
503 |
服务临时不可用,设备稍后重试 |
服务端处理要求
- 校验
Content-Length,拒绝空文件。 - 读取完整请求体,按二进制方式保存为
.amr文件。 - 记录设备序列号、录音时长、文件大小和接收时间。
- 文件保存成功后立即返回 HTTP 2xx。
- 语音转文字、内容审核等耗时任务放入异步队列处理。
- 建议单文件限制不小于 1 MB,请求超时时间不小于 120 秒。
- 建议按设备号和接收时间生成唯一业务 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 | start、ok 或 failed |
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 15:42