芯步的10W语音音柱支持通过HTTP接口直接推送文本进行TTS播报,无需预先录音,响应延迟约80-120ms。以下方案涵盖接口协议、签名算法、核心命令及多第二种场景次开发示例。
一、 概述与准备
本方案的目标是指导开发者如何利用芯步开放的HTTP API,将10W智能语音音柱快速集成到现有的业务系统(如ERP、餐厅系统、工单系统等)中。通过调用API接口,实现将文本消息实时转换为语音并在指定音柱上播报。
准备工作:
硬件设备:芯步10W智能语音音柱(确保已连接WiFi/网口并通电)。
平台账号:在芯步官网注册开发者账号,登录控制台。
获取凭证:在控制台获取AppID和AppSecret(开发者密码)以及设备的Device ID(设备唯一ID)。
二、 接口协议详解
芯步的接口采用标准的HTTP POST请求进行通信,数据格式为JSON。核心逻辑是签名验证,确保请求安全。
1. 请求地址
https://api.thingboot.com/{AppID}/device/control/?sign={sign}&ts={ts}{AppID}: 你的应用ID。{ts}: 当前Unix时间戳(秒)。{sign}: 请求签名,用于身份验证。
2. 签名算法
这是对接的关键步骤,具体算法逻辑如下:
将你的
AppSecret进行一次MD5加密,得到字符串S1。将
S1拼接上时间戳ts(注意是拼接字符串)。将拼接后的字符串再次进行MD5加密,得到最终的
sign。
公式:
sign = md5( md5(AppSecret) + ts )
示例:假设 AppSecret = "123456",ts = 1747212640。
md5("123456") ->
e10adc3949ba59abbe56e057f20f883e拼接 ->
e10adc3949ba59abbe56e057f20f883e1747212640md5(拼接字符串) ->
c484eb97ee288572db7828c6071dd88f(这就是sign值)。
3. 请求体 (Body)
请求头需设置 Content-Type: application/json。Body结构如下:
device:支持字符串格式,可传单个ID(如 "1878")或多个ID(如 "1878,1879")。order:JSON对象,此处填写具体的控制指令。
三、 核心功能实现:TTS语音播报
根据需求,“远程TTS语音播报”主要使用 play:gbk:16 命令。此命令支持GBK编码(中文支持良好),数字16通常代表默认的音质或格式。
1. 基础文本播报
最简单的应用,直接推送文字内容。
请求示例
效果:音柱会立即播报“你好,欢迎光临”。
2. 高级播报格式(带提示音/多音字/数字读法)
你可以通过在文本前插入特定的标签来控制播报行为。
带提示音播报
(注:
message_1到message_5为内置提示音,ring_1到ring_5为铃声)。控制数字读法
金额读法:自动识别为“一百二十三元”。
手机号读法:自动识别为“幺三八零零零...”。
多音字: 某些生僻多音字可通过特定标记矫正,具体可参考官方文档。
3. 设备状态控制命令
在进行语音播报前或播报后,你可以动态调整设备参数。
调节音量:
{"volume":"5"}(范围0-9,数值越大音量越大)。切换音色:
{"voice":"1"}(0=女声,1=男声)。调节语速:
{"speed":"5"}(范围0-9)。停止播报:
{"stop":"1"}(1=停止当前所有播报)。
四、 二次开发代码实战
根据你的业务系统架构,可以选择以下任意一种方式集成。
第一种场景:Python (适用于后端服务、脚本)
第二种场景:Java (适用于企业级SpringBoot应用)
可以使用OkHttp或Unirest库。
第三种场景:JavaScript/Node.js (适用于Web前端或Serverless)
五、 最佳实践和需要注意的点
局域网IP直连(可选)如果你的音柱和服务器在同一个局域网内,官方支持私有化部署或局域网调用。这种情况下可以绕过公网,延迟更低(可降低至50ms以内)且不占用外网带宽。具体获取设备局域网IP的方式请参考设备配网后的信息。
批量播报如果需要同时让多个音柱播报(如整个厂房的广播),只需要在
device字段中用英文逗号拼接设备ID,例如"device": "1878,1879,1880"。播报队列硬件内部有播报队列。如果短时间内高频调用接口,后一条命令会排队等待前一条播完。如果希望新消息打断旧消息,可以先发送
{"stop":"1"}命令,再发送播报命令。错误处理请一定要在代码中捕获HTTP状态码非200的情况,并检查返回的JSON体中是否有
code错误字段。常见错误是签名不正确(核对时间戳同步)或Device ID不在你的账号下。