本 API 适用于 W70B/W70R 云喇叭设备。设备通过硬件云 APIv2 接入,开发者使用 app_idapp_secret 和设备序列号完成注册、语音播报、循环播报、播放状态查询、语音参数设置、上电播报、定时播报、设备信息查询、OTA 升级和解绑。W70B 和 W70R 使用 W70BIDF 固件能力,业务接口一致,主要差异是设备形态和硬件外设。W70B/R 使用在线合成和本地缓存播放链路,支持发音人、数字读法、分段步长、缓存刷新等高级合成参数。W70B.2.40、W70R.2.40 及以上版本支持持久化循环播报:首次联网合成并生成缓存后,设备断网或重启仍可继续本地循环播报。 app_id 和 app_secret 请登录 https://wdev.wmj.com.cn 获取。 点击下面的序号展开。

1.注册设备

简要描述

将 W70B/W70R 和 app_id、app_secret 绑定。注册成功后才能调用功能接口。

请求URL

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

请求方式

POST

请求格式

json

参数

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

参数说明

| 参数名 | 必选 | 类型 | 取值范围 / 格式 | 说明 | | — | — | — | — | — | | app_id | 是 | string | 平台分配 | 硬件云 app_id | | app_secret | 是 | string | 平台分配 | 硬件云 app_secret | | device_sn | 是 | string | W70B 或 W70R 设备序列号 | 设备序列号 |

返回示例

json { "code": 0, "msg": "注册成功" } json { "code": 1005, "msg": "设备已注册" }

2.公共请求结构

简要描述

除注册、解绑外,功能接口统一调用发送指令接口,通过 data.cmd_type 区分具体功能。

请求URL

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

请求方式

POST

请求格式

json

基础参数

json { "app_id": "{{wmjv2appid}}", "app_secret": "{{wmjv2appsecret}}", "device_sn": "{{device_sn}}", "type": 1, "data": { "cmd_type": "play", "info": {} } } | 参数名 | 必选 | 类型 | 取值范围 / 格式 | 说明 | | — | — | — | — | — | | app_id | 是 | string | 平台分配 | 硬件云 app_id | | app_secret | 是 | string | 平台分配 | 硬件云 app_secret | | device_sn | 是 | string | W70B 或 W70R 设备序列号 | 设备序列号 | | type | 否 | int | 固定传 1 | 请求类型 | | data.cmd_type | 是 | string | 本文档列出的命令名 | 命令类型 | | data.info | 否 | object | JSON 对象 | 命令参数 |

通用返回

json { "code": 0, "data": { "device_sn": "{{device_sn}}", "msg_id": 1, "type": 1, "cmd": "play", "info": { "err_code": 0, "code": 0, "msg": "" } } } | 参数名 | 类型 | 说明 | | — | — | — | | code | int | 平台接口调用错误码,0 表示平台已受理 | | data.info.code | int | 设备业务错误码,0 表示成功 | | data.info.err_code | int | 兼容错误码,0 表示成功 | | data.info.msg | string | 设备返回消息 |

3.播放文本语音

简要描述

让设备通过在线合成播放一段文本,适合收款提醒、通知播报、告警播报等场景。

请求URL

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

请求方式

POST

请求格式

json

参数

json { "app_id": "{{wmjv2appid}}", "app_secret": "{{wmjv2appsecret}}", "device_sn": "{{device_sn}}", "type": 1, "data": { "cmd_type": "play", "info": { "tts": "欢迎使用云喇叭", "speaker": "prompt_female_high", "speed": 5, "number_mode": "digit", "num_step": 2, "refresh_cache": 1, "volume": 5 } } }

参数说明

| 参数名 | 必选 | 类型 | 取值范围 / 格式 | 默认值 | 说明 | | — | — | — | — | — | — | | data.cmd_type | 是 | string | play,兼容 play_adpcm | - | 文本播放命令 | | data.info.tts | 是 | string | 1-2047 字节(UTF-8) | - | 播放文本,兼容字段 text | | data.info.speaker | 否 | string | 如 prompt_female_high | 设备默认 | 发音人 | | data.info.speed | 否 | int | 1-9 | 设备默认 | 兼容语速档位,1 最慢、5 约为正常语速、9 最快 | | data.info.number_mode | 否 | string | digit / value | value | 数字读法,digit 按位读,value 按数值读 | | data.info.num_step | 否 | int | 正整数 | 设备默认 | 数字分段步长 | | data.info.refresh_cache | 否 | int/bool | 0 / 1 | 0 | 是否刷新相同文本的播放缓存 | | data.info.volume | 否 | int | 1-100-100 | 设备默认 | 本次播放音量 |

返回示例

json { "code": 0, "data": { "device_sn": "{{device_sn}}", "cmd": "play", "info": { "code": 0, "err_code": 0, "msg": "TTS started", "volume_arg": 5 } } }

4.查询播放状态

简要描述

查询设备当前播放、循环播放、持久化循环配置和本地缓存状态。

请求URL

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

请求方式

POST

请求格式

json

参数

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

返回示例

json { "code": 0, "data": { "device_sn": "{{device_sn}}", "cmd": "get_play_status", "info": { "code": 0, "err_code": 0, "msg": "", "is_playing": false, "is_loop_playing": true, "loop_persistent": true, "loop_cache_ready": true, "loop_text": "设备异常,请及时处理", "loop_speaker": "prompt_female_high", "loop_number_mode": "digit", "loop_speed": 1.0, "loop_volume": 5, "loop_interval_ms": 10000, "is_live_talk": false, "free_heap": 120000 } } }

主要返回字段

字段 类型 说明
is_playing bool 当前是否正在播放语音
is_loop_playing bool 当前是否正在执行循环播报
loop_persistent bool 是否已保存断电恢复所需的循环配置
loop_cache_ready bool 当前循环语音的本地缓存是否完整可用;离线续播前应确认此字段为 true
loop_text string 已保存的循环播报文本
loop_speaker string 循环播报发音人
loop_number_mode string 循环播报数字读法
loop_speed number 设备内部使用的循环播报语速倍率
loop_volume int 循环播报音量兼容档位
loop_interval_ms int 两轮循环之间的间隔,单位毫秒
is_live_talk bool 当前是否处于实时喊话状态
free_heap int 设备剩余内存,单位字节
5.循环播报

简要描述

让设备按固定间隔循环播报文本。适用于持续提醒、异常告警等场景。W70B.2.40、W70R.2.40 及以上版本会持久保存循环配置,并在首次合成成功后保存本地语音缓存。

请求URL

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

请求方式

POST

请求格式

json

开始循环播报

json { "app_id": "{{wmjv2appid}}", "app_secret": "{{wmjv2appsecret}}", "device_sn": "{{device_sn}}", "type": 1, "data": { "cmd_type": "loop_play", "info": { "tts": "设备异常,请及时处理", "interval": 10, "speaker": "prompt_female_high", "speed": 5, "number_mode": "digit", "volume": 5 } } }

停止循环播报

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

参数说明

| 参数名 | 必选 | 类型 | 取值范围 / 格式 | 默认值 | 说明 | | — | — | — | — | — | — | | data.cmd_type | 是 | string | loop_play / loop_stop | - | 循环播报命令 | | data.info.tts | loop_play 必填 | string | 1-2047 字节(UTF-8) | - | 循环播报文本,兼容字段 text | | data.info.interval | 否 | int | 1-86400 秒,建议大于单次语音时长 | 5 | 两轮播报之间的间隔;小于等于 0 时按 5 秒处理 | | data.info.speaker | 否 | string | 如 prompt_female_high | 设备默认 | 发音人 | | data.info.speed | 否 | int | 1-9 | 设备默认 | 兼容语速档位,5 约为正常语速 | | data.info.number_mode | 否 | string | digit / value | value | 数字读法 | | data.info.volume | 否 | int | 1-100-100 | 设备默认 | 播报音量 |

持久化与离线播报

  1. 发送 loop_play 成功后,设备先保存循环文本和参数,再开始播放;接口返回成功表示命令已受理,不代表本地缓存已经生成完成。
  2. 首次播放需要设备联网完成语音合成。随后调用 get_play_statusgetdevinfo,确认 loop_persistent=trueloop_cache_ready=true,才表示该循环语音可以在离线或重启后继续播放。
  3. 设备断网时不会重新合成语音;仅在当前循环缓存完整可用时继续本地播报。若文本、发音人、语速或数字读法发生变化,需要重新联网生成对应缓存。
  4. loop_stopstop_play 都会停止循环播报并清除自动恢复状态;再次循环播报需要重新发送 loop_play
6.停止当前播放

简要描述

停止当前正在播放的语音。该命令也会停止循环播报并清除自动恢复状态;仅暂停一轮播报但保留循环任务的场景不应使用此命令。

请求URL

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

请求方式

POST

请求格式

json

参数

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

7.设置语音和上电播报

简要描述

设置设备默认音量、发音人、语速、语调和上电播报。设置后会持久保存。

请求URL

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

请求方式

POST

请求格式

json

参数

json { "app_id": "{{wmjv2appid}}", "app_secret": "{{wmjv2appsecret}}", "device_sn": "{{device_sn}}", "type": 1, "data": { "cmd_type": "setting", "info": { "volume": 5, "volume_percent": 50, "speaker": 4, "speed": 5, "tone": 5, "pwr_on_enabled": 1, "pwr_on_text": "欢迎使用云喇叭", "pwr_on_delay": 3, "pwr_on_volume": 5, "pwr_on_repeat": 1 } } }

参数说明

| 参数名 | 必选 | 类型 | 取值范围 / 格式 | 默认值 | 说明 | | — | — | — | — | — | — | | data.cmd_type | 是 | string | setting | - | 设置命令 | | data.info.volume | 否 | int | 1-10 | 设备当前值 | 默认音量兼容档位 | | data.info.volume_percent | 否 | int | 0-100 | 设备当前值 | 默认音量百分比;与 volume 同时传时优先生效 | | data.info.speaker | 否 | int | 设备支持的发音人编号 | 设备当前值 | 默认发音人编号 | | data.info.speed | 否 | int | 0-9 | 设备当前值 | 默认语速 | | data.info.tone | 否 | int | 0-9 | 设备当前值 | 默认语调 | | data.info.pwr_on_enabled | 否 | int/bool | 0 / 1 | 设备当前值 | 是否启用上电播报 | | data.info.pwr_on_text | 否 | string | 建议 1-540 字节 | 设备当前值 | 上电播报文本;超长会返回 413 | | data.info.pwr_on_delay | 否 | int | 0-3600 秒 | 0 | 上电后延迟播报时间 | | data.info.pwr_on_volume | 否 | int | 1-100-100 | 设备当前值 | 上电播报音量 | | data.info.pwr_on_repeat | 否 | int | 1-10 | 1 | 上电播报重复次数 |

8.查询设备信息

简要描述

查询设备版本、网络状态、语音参数、上电播报、播放状态、定时播报和 OTA 状态。公开文档不展示设备接入密钥、管理密码、默认云接入参数等内部字段。

请求URL

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

请求方式

POST

请求格式

json

参数

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

返回示例

json { "code": 0, "data": { "device_sn": "{{device_sn}}", "cmd": "getdevinfo", "info": { "sw_ver": "W70B.2.40", "hw_ver": "2.0.0", "project": "W70B / W70R", "net_type": "wifi", "iccid": "{{ssid_or_empty}}", "imei": "AA:BB:CC:DD:EE:FF", "speaker": 4, "volume": 5, "volume_percent": 50, "speed": 5, "tone": 5, "pwr_on_enabled": 1, "pwr_on_text": "欢迎使用云喇叭", "pwr_on_delay": 3, "pwr_on_volume": 5, "pwr_on_repeat": 1, "is_playing": false, "is_loop_playing": true, "loop_persistent": true, "loop_cache_ready": true, "loop_text": "设备异常,请及时处理", "loop_speaker": "prompt_female_high", "loop_number_mode": "digit", "loop_speed": 1.0, "loop_volume": 5, "loop_interval_ms": 10000, "schedule_enabled_count": 1, "schedule_total_count": 20, "time_synced": true, "free_heap": 120000, "code": 0, "err_code": 0, "msg": "" } } }

返回字段说明

| 字段 | 类型 | 说明 | | — | — | — | | sw_ver | string | 软件版本 | | hw_ver | string | 硬件版本 | | project | string | 项目标识 | | net_type | string | 网络类型 | | iccid | string | WiFi SSID 或内部网络标识 | | imei | string | 设备网络 MAC 标识 | | speaker | int | 当前默认发音人编号 | | volume | int | 当前默认音量兼容档位 | | volume_percent | int | 当前默认音量百分比 | | speed | int | 当前默认语速 | | tone | int | 当前默认语调 | | pwr_on_enabled | int | 是否启用上电播报 | | pwr_on_text | string | 上电播报文本 | | pwr_on_delay | int | 上电播报延迟 | | pwr_on_volume | int | 上电播报音量 | | pwr_on_repeat | int | 上电播报重复次数 | | is_playing | bool | 当前是否正在播放 | | is_loop_playing | bool | 当前是否循环播放 | | loop_persistent | bool | 是否已保存断电恢复所需的循环配置 | | loop_cache_ready | bool | 当前循环语音的本地缓存是否完整可用 | | loop_text | string | 已保存的循环播报文本 | | loop_speaker | string | 循环播报发音人 | | loop_number_mode | string | 循环播报数字读法 | | loop_speed | number | 设备内部使用的循环播报语速倍率 | | loop_volume | int | 循环播报音量兼容档位 | | loop_interval_ms | int | 两轮循环之间的间隔,单位毫秒 | | schedule_enabled_count | int | 已启用定时播报数量 | | schedule_total_count | int | 定时播报槽位总数 | | time_synced | bool | 设备时间是否已同步 | | free_heap | int | 设备剩余内存,单位字节 |

9.设置定时播报

简要描述

设置单个定时播报任务。设备最多支持 20 组任务,时间以设备本地时区为准。

请求URL

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

请求方式

POST

请求格式

json

参数

json { "app_id": "{{wmjv2appid}}", "app_secret": "{{wmjv2appsecret}}", "device_sn": "{{device_sn}}", "type": 1, "data": { "cmd_type": "set_tts_schedule", "info": { "index": 0, "enabled": true, "hour": 9, "minute": 30, "weekdays": 62, "tts_text": "请及时处理待办事项", "speaker": "prompt_female_high", "speed": 1.0, "number_mode": "digit", "repeat_count": 3 } } }

参数说明

| 参数名 | 必选 | 类型 | 取值范围 / 格式 | 默认值 | 说明 | | — | — | — | — | — | — | | data.cmd_type | 是 | string | set_tts_schedule | - | 设置单个任务 | | data.info.index | 是 | int | 0-19 | - | 定时任务序号 | | data.info.enabled | 否 | bool | true / false | false | 是否启用 | | data.info[“hour”] | 否 | int | 0-23 | 0 | 播报小时 | | data.info.minute | 否 | int | 0-59 | 0 | 播报分钟 | | data.info.weekdays | 否 | int | 1-127 | 127 | 星期掩码,bit0 周日,bit1 周一,依次到 bit6 周六;127 表示每天 | | data.info.tts_text | 否 | string | 1-255 字节(UTF-8) | 空 | 播报文本,兼容字段 text | | data.info.speaker | 否 | string | 如 prompt_female_high | prompt_female_high | 发音人 | | data.info.speed | 否 | number | 大于 0 | 1.0 | 语速倍率 | | data.info.number_mode | 否 | string | digit / value | digit | 数字读法 | | data.info.repeat_count | 否 | int | 1-10 | 3 | 触发后重复播报次数 |

weekdays 示例

| 取值 | 含义 | | — | — | | 127 | 每天 | | 62 | 周一到周五 | | 65 | 周六和周日 |

10.批量设置定时播报

简要描述

一次性设置多组定时播报任务。schedules 数组最多 20 项,数组下标对应任务序号。

请求URL

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

请求方式

POST

请求格式

json

参数

json { "app_id": "{{wmjv2appid}}", "app_secret": "{{wmjv2appsecret}}", "device_sn": "{{device_sn}}", "type": 1, "data": { "cmd_type": "set_tts_schedules", "info": { "schedules": [ { "index": 0, "enabled": true, "hour": 9, "minute": 0, "weekdays": 127, "tts_text": "早上好", "speaker": "prompt_female_high", "speed": 1.0, "number_mode": "digit", "repeat_count": 1 } ] } } }

参数说明

| 参数名 | 必选 | 类型 | 取值范围 / 格式 | 说明 | | — | — | — | — | — | | data.cmd_type | 是 | string | set_tts_schedules | 批量设置任务 | | data.info.schedules | 是 | array | 最多 20 项 | 定时任务数组 |

11.查询定时播报

简要描述

查询设备当前保存的定时播报任务、设备当前时间和时间同步状态。

请求URL

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

请求方式

POST

请求格式

json

参数

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

返回字段说明

| 字段 | 类型 | 说明 | | — | — | — | | schedules | array | 定时任务列表 | | current_time | string | 设备当前时间,格式 YYYY-MM-DD HH:mm:ss | | weekday | int | 当前星期,0 周日,1 周一,依次到 6 周六 | | time_synced | bool | 是否已同步网络时间 |

12.清除定时播报

简要描述

清除单个或全部定时播报任务。

请求URL

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

请求方式

POST

请求格式

json

清除单个任务

json { "app_id": "{{wmjv2appid}}", "app_secret": "{{wmjv2appsecret}}", "device_sn": "{{device_sn}}", "type": 1, "data": { "cmd_type": "clear_tts_schedule", "info": { "index": 0 } } }

清除全部任务

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

13.音频资源升级

简要描述

检查并更新设备本地音频资源。一般仅在设备提示音资源需要升级时使用。

请求URL

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

请求方式

POST

请求格式

json

参数

json { "app_id": "{{wmjv2appid}}", "app_secret": "{{wmjv2appsecret}}", "device_sn": "{{device_sn}}", "type": 1, "data": { "cmd_type": "audio_ota", "info": { "force": false } } }

参数说明

| 参数名 | 必选 | 类型 | 取值范围 / 格式 | 说明 | | — | — | — | — | — | | data.cmd_type | 是 | string | audio_ota | 音频资源升级命令 | | data.info.force | 否 | bool | true / false | 是否强制检查更新 |

14.重启和恢复

重启设备

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

恢复设备配置

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

参数说明

| 参数名 | 必选 | 类型 | 取值范围 / 格式 | 说明 | | — | — | — | — | — | | data.cmd_type | 是 | string | restart / reset | 重启设备或恢复设备配置 |

15.OTA 升级

简要描述

让设备下载指定 OTA 固件并升级。OTA 文件 URL 需要设备网络可直接访问。

请求URL

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

请求方式

POST

请求格式

json

参数

json { "app_id": "{{wmjv2appid}}", "app_secret": "{{wmjv2appsecret}}", "device_sn": "{{device_sn}}", "type": 1, "data": { "cmd_type": "set_ota", "info": { "hw_ver": "2.0.0", "sw_ver": "W70B.2.40", "url": "https://example.com/ota/W70B.2.40.bin" } } }

参数说明

| 参数名 | 必选 | 类型 | 取值范围 / 格式 | 说明 | | — | — | — | — | — | | data.cmd_type | 是 | string | set_ota | OTA 命令 | | data.info[“hw_ver”] | 是 | string | 设备硬件版本 | 必须和设备硬件版本一致 | | data.info.sw_ver | 是 | string | 大于当前版本 | 目标软件版本 | | data.info.url | 是 | string | HTTP/HTTPS URL | OTA 固件地址,请使用平台发布的正式升级包 |

16.回调与上报

简要描述

设备在上线、指令执行完成、播放状态变化或门磁/按键状态变化时,通过硬件云返回或上报数据。业务系统应按 device_sncmdmsg_id 做幂等处理。

播放完成上报示例

json { "device_sn": "{{device_sn}}", "type": 2, "cmd_type": "tts_complete", "info": { "status": "success", "timestamp": 123456 } }

状态上报示例

json { "device_sn": "{{device_sn}}", "type": 2, "cmd_type": "exitopened", "info": { "status": 0 } }

17.查询在线状态

请求URL

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

请求方式

POST

请求格式

json

参数

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

返回示例

json { "code": 0, "data": { "on_line": 1 }, "msg": "查询成功" }

18.常见问题

播放没有声音

先调用 getdevinfoget_play_status 确认音量不是 0,再调用 setting 设置 volumevolume_percent

数字读法不符合预期

使用 number_mode=digit 按位播报数字,使用 number_mode=value 按数值播报数字。

定时播报没有触发

先调用 get_tts_schedules 查看 time_synced 是否为 true,并确认 weekdayshourminute 与设备当前时间匹配。

循环播报在断网或重启后没有继续

先确认设备版本为 W70B.2.40、W70R.2.40 或更高版本,再调用 get_play_status 检查 loop_persistentloop_cache_readyloop_persistent=false 表示循环任务未保存或已被 loop_stopstop_play 清除;loop_cache_ready=false 表示首次联网合成尚未完成、缓存空间不足或当前文本参数对应的缓存不可用,需要恢复网络后重新发送 loop_play 并等待缓存就绪。

19.解绑设备

简要描述

解除设备与 app_id、app_secret 的绑定。解绑后该应用不能继续控制设备。

请求URL

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

请求方式

POST

请求格式

json

参数

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

返回示例

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

更新日志

| 日期 | 内容 | | — | — | | 2026-08-30 | 新增 W70B/W70R 2.40 持久化循环播报、离线缓存条件和状态字段说明,修正文本长度、语速档位及 OTA 示例 | | 2026-06-25 | 按 IDF 固件能力重整 W70B/W70R APIv2 文档,移除默认云接入配置和管理密码类字段,仅保留公开业务接口 |

作者:极客师傅  创建时间:2026-01-21 14:56
最后编辑:极客师傅  更新时间:2026-09-09 10:08