CATALOG

这其实是个很常见的需求——把“远程控制20W语音壁挂音箱”变成“一个简单的HTTP接口调用”。整个过程核心就是三步:准备工作、拼接请求、发送命令。下面我一步步说清楚。

一、前期准备

首先,你需要确认手里那台20W壁挂音箱已经联网并且在线。然后去芯步开放平台的后台,找到三个关键信息

  • AppID:相当于你的账号标识

  • AppSecret:你的“私密密码”,用来加密,千万别泄

  • Device ID:也就是那台音箱的设备编号,通常贴在设备上或者后台能看到

简单说,AppID是公开的,AppSecret是你家钥匙,这俩都是平台分配给你的,后面调用接口需要用它们生成签名,用来校验身份。

提示:20W的壁挂音箱通常支持WiFi或有线网口,设备只要在后台显示“在线”就行,不需要你关心它具体在哪个局域网

二、对接方案核心流程

官方接口地址是固定的,你要做的就是往这个地址发送一条带签名的POST请求

这里面最重要也最容易踩坑的就是签名计算,算法虽然很机械但容易错:

  1. 先把你的 AppSecret 做一次MD5,得到一串字符,比如叫 secret_md5

  2. secret_md5 拼接上当前的时间戳(秒级,比如 1715678900),得到一个新串。

  3. 再把这个新串整体做一次MD5。最终得到的那串东西就是 sign

之所以要套两层MD5,是为了让传输更安全,防止接口被简单伪造。时间戳参数 ts 也要一起传给接口,用来做时效校验。

三、请求体结构

准备好 signts 之后,就可以构造POST请求的Body了。芯步的接口要求传一个JSON对象,里面包含 deviceorder 两个字段

  • device:放刚才准备好的设备ID,如果多台可以用逗号隔开。

  • order:这才是真正的命令,也是一个JSON。

对这款20W音箱来说,播报文本的命令格式是这样的:

其中 play:gbk:16 可以拆开理解:play 是动作(播报),gbk 是中文编码方式(通常不用改),16 代表音量级别(0-9级,16好像是最大音量?)

实际调用中,我们通常用 POST 方式,把上面这个JSON结构放在请求体里,并把 Content-Type 设置为 application/json

四、代码实操示例

我直接用 Python 的 requests 库写个最简单的例子,看起来比较直观:

如果你对接的是企业资源计划(ERP)系统或SaaS系统,只要系统支持webhook或发送HTTP请求,照着上面这个逻辑设置就行。很多低代码平台都有“HTTP连接器”组件,填上地址、签名和JSON体就能跑通

五、进阶控制

只让音箱“开口说话”是最基本的,这个接口还能调很多东西,同样是通过修改 order 里的内容

  • 调节音量(0-9级)

  • 切换男女声(不同设备代码稍有不同,一般是 voicespeed 相关参数):

  • 播放内置提示音(比如门铃声、警报声):

六、常见坑点和排查

  1. 签名错误:最常见的坑。检查时间戳 ts 是不是当前秒级时间戳,MD5结果是否是32位十六进制小写。很多人容易把 app_secret 在拼接时间戳时多拼一次或少拼一次MD5,比如把 md5(md5(secret)+ts) 写成了 md5(secret+ts),记得是双层MD5

  2. 返回200但没声音:这通常是因为设备离线、WiFi信号不好,或者device_id填错了。先去芯步控制台确认一下设备的“最后在线时间”

  3. 中文乱码或不读:确保 order 里的编码参数用 gbk。另外注意一些特殊字符和数字读法(比如把“188”读成“一百八十八”而不是“幺八八”),可能需要额外的参数来控制读法。

总结一下,对接这个音箱就是个无状态、无依赖的HTTP调用。你的业务系统不需要装驱动,不需要连串口,只要能把文本塞进HTTP请求里就行。把这套对接流程写成一个简单函数,在你的业务逻辑里(比如订单支付成功回调、设备告警触发时)调用它,音箱就能实时发声了。