小米小爱音箱语音指令桥接:截取语音,转为AI指令并通过TTS回复。支持触发词过滤、自动去重、后台监听。适用于控制OpenClaw助手、智能家居联动、语音任务执行。
小爱音箱语音桥接 Skill
功能概述
小爱音箱语音桥接 Skill是一项面向实际任务的技能,主要用于通过小米小爱音箱实现 OpenClaw 的语音交互能力;✅ 语音指令监听 - 实时轮询小爱音箱的语音消息(小米云端语音识别);
核心要点
- ✅ 智能触发过滤 - 支持触发词前缀(默认"请"),避免误触发;
- ✅ TTS 语音回复 - 将 AI 处理结果通过小爱音箱播报;
- ✅ 消息去重机制 - 自动跟踪时间戳,避免重复处理;
使用与执行
✅ 后台持续运行 - 支持长期监听,稳定可靠。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
结果检查与注意事项
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
小爱音箱语音桥接 Skill
通过小米小爱音箱实现 OpenClaw 的语音交互能力。
功能特性
✅ 语音指令监听 - 实时轮询小爱音箱的语音消息(小米云端语音识别)
✅ 智能触发过滤 - 支持触发词前缀(默认"请"),避免误触发
✅ TTS 语音回复 - 将 AI 处理结果通过小爱音箱播报
✅ 消息去重机制 - 自动跟踪时间戳,避免重复处理
✅ 后台持续运行 - 支持长期监听,稳定可靠
✅ 多设备支持 - 支持所有小米 IoT 生态的小爱音箱设备
工作原理
- 监听 - 轮询小爱音箱获取语音消息(小米云端语音转文字)
- 处理 - 将语音消息转换为 AI 助手指令
- 回复 - 通过小爱音箱 TTS 播报处理结果
快速开始
1. 安装依赖
cd skills/xiaoai-bridge/scripts npm install
2. 配置环境变量
复制 .env.example 并填写配置:
cp .env.example .env
编辑 .env 文件:
MI_USER_ID=1234567890 # 小米账号 ID(纯数字) MI_PASS_TOKEN=your_pass_token # 推荐:使用 passToken # MI_PASSWORD=your_password # 备选:密码(可能触发安全验证) MI_DEVICE_ID=小爱音箱Pro # 设备名称、miotDID 或 MAC 地址 TRIGGER_PREFIX=请 # 触发词前缀(默认"请") POLL_INTERVAL=1000 # 轮询间隔(毫秒,默认 1000)
获取 passToken:参考 https://github.com/idootop/migpt-next/issues/4
查找设备 ID:运行 DEBUG=true node scripts/xiaoai-listen.js test 查看所有设备列表。
3. 测试连接
node scripts/xiaoai-listen.js test
预期输出:
🔌 正在连接小爱音箱... ✅ 连接成功
4. 启动监听
后台运行监听服务:
node scripts/xiaoai-listen.js > xiaoai.log 2>&1 &
或���用 OpenClaw 进程管理(推荐)。
使用示例
示例 1:后台监听 + 消息处理
启动监听进程并解析 JSON 输出:
const { exec } = require('child_process');
const listener = exec('node skills/xiaoai-bridge/scripts/xiaoai-listen.js');
listener.stdout.on('data', (data) => {
const lines = data.toString().split('n');
for (const line of lines) {
if (!line.trim()) continue;
try {
const msg = JSON.parse(line);
if (msg.type === 'message') {
// 处理语音指令
handleVoiceCommand(msg.text);
}
} catch (e) {
// 非 JSON 的状态日志
console.log(line);
}
}
});
async function handleVoiceCommand(text) {
// 你的指令处理逻辑
const response = await processCommand(text);
// 通过 TTS 回复
await exec(`node skills/xiaoai-bridge/scripts/xiaoai-listen.js speak "${response}"`);
}
示例 2:直接 TTS 播报
发送文本到小爱音箱:
node scripts/xiaoai-listen.js speak "任务已完成"
代码调用:
const { exec } = require('child_process');
function speakViaXiaoAi(text) {
return new Promise((resolve, reject) => {
exec(`node skills/xiaoai-bridge/scripts/xiaoai-listen.js speak "${text}"`,
(error, stdout, stderr) => {
if (error) reject(error);
else resolve();
}
);
});
}
// 使用
await speakViaXiaoAi("你好,任务已完成");
示例 3:触发词过滤
Skill 自动过滤触发词前缀(默认"请"),只处理符合条件的消息:
// 用户说:"请帮我查天气" → 处理,text = "帮我查天气"
// 用户说:"今天天气怎么样" → 忽略(无触发词)
listener.stdout.on('data', (data) => {
const lines = data.toString().split('n');
for (const line of lines) {
try {
const msg = JSON.parse(line);
if (msg.type === 'message') {
// msg.text 已自动去除触发词前缀
console.log(`处理指令: ${msg.text}`);
handleVoiceCommand(msg.text);
}
} catch (e) {}
}
});
自定义触发词(在 .env 中配置):
TRIGGER_PREFIX=请 # 默认 # TRIGGER_PREFIX=小助手 # 自定义唤醒词 # TRIGGER_PREFIX= # 空值 = 处理所有消息
消息格式
监听器输出 JSON 格式消息(仅处理符合触发词的消息):
{
"type": "message",
"text": "查一下天气",
"originalText": "请查一下天气",
"timestamp": 1708070400000
}
注意:text 字段已自动去除触发词前缀。如需完整消息,使用 originalText。
API 参考
完整 MiGPT-Next API 文档见 references/migpt-api.md。
脚本命令
# 启动监听(默认) node scripts/xiaoai-listen.js # TTS 播报文本 node scripts/xiaoai-listen.js speak "要说的话" # 测试连接 node scripts/xiaoai-listen.js test
环境变量
| 变量 | 必需 | 说明 |
|---|---|---|
MI_USER_ID |
是 | 小米账号 ID(纯数字) |
MI_PASS_TOKEN |
是* | passToken(推荐) |
MI_PASSWORD |
是* | 密码(可能触发安全验证) |
MI_DEVICE_ID |
是 | 设备名称、miotDID 或 MAC |
TRIGGER_PREFIX |
否 | 触发词前缀(默认"请") |
POLL_INTERVAL |
否 | 轮询间隔(毫秒,默认 1000) |
DEBUG |
否 | 调试模式(true/false) |
*MI_PASS_TOKEN 或 MI_PASSWORD 二选一。
故障排查
登录失败
症状:❌ 连接失败: 登录失败
解决方案:
- 使用
passToken替代密码(推荐) - 检查
MI_USER_ID是否为纯数字(不是手机号或邮箱) - 开启
DEBUG=true查看详细错误信息
找不到设备
症状:❌ 找不到设备
解决方案:运行以下命令查看所有设备:
DEBUG=true node scripts/xiaoai-listen.js test
使用设备的 name、miotDID 或 mac 作为 MI_DEVICE_ID。
收不到消息
可能原因:
- 消息同步延迟(1-2 秒正常)
- 设备离线或无响应
- 自上次轮询后无新消息
需要验证码
症状:❌ 本次登录需要验证码
解决方案:必须使用 passToken 登录。参考 https://github.com/idootop/migpt-next/issues/4
最佳实践
- 使用 passToken - 比密码更稳定,避免安全验证
- 轮询间隔 - 1-2 秒最佳(平衡响应速度和 API 负载)
- 消息去重 - 跟踪已处理的时间戳,避免重复处理
- 错误处理 - 实现重试逻辑应对网络故障
- 长文本分段 - 将长回复分句播报,提升 TTS 体验
完整集成示例
与 OpenClaw 助手的完整集成:
const { exec } = require('child_process');
const path = require('path');
class XiaoAiBridge {
constructor() {
this.listener = null;
this.lastTimestamp = Date.now();
}
start(onMessage) {
const scriptPath = path.join(__dirname, 'skills/xiaoai-bridge/scripts/xiaoai-listen.js');
this.listener = exec(`node ${scriptPath}`);
this.listener.stdout.on('data', (data) => {
const lines = data.toString().split('n');
for (const line of lines) {
if (!line.trim()) continue;
try {
const msg = JSON.parse(line);
if (msg.type === 'message' && msg.timestamp > this.lastTimestamp) {
this.lastTimestamp = msg.timestamp;
onMessage(msg.text);
}
} catch (e) {
console.log(line); // 状态日志
}
}
});
this.listener.stderr.on('data', (data) => {
console.error('XiaoAi Error:', data.toString());
});
}
async speak(text) {
const scriptPath = path.join(__dirname, 'skills/xiaoai-bridge/scripts/xiaoai-listen.js');
return new Promise((resolve, reject) => {
exec(`node ${scriptPath} speak "${text}"`, (error) => {
if (error) reject(error);
else resolve();
});
});
}
stop() {
if (this.listener) {
this.listener.kill();
}
}
}
// 使用示例
const bridge = new XiaoAiBridge();
bridge.start(async (voiceCommand) => {
console.log(`收到语音指令: ${voiceCommand}`);
// 用你的 AI 助手处理指令
const response = await yourAgentProcess(voiceCommand);
// 通过小爱音箱回复
await bridge.speak(response);
});
相关资源
- MiGPT-Next 项目:https://github.com/idootop/migpt-next
- passToken 获取教程:https://github.com/idootop/migpt-next/issues/4
- API 完整文档:references/migpt-api.md
许可证
MIT License
贡献
欢迎提交 Issue 和 Pull Request!
热门AI工具
相关专题
DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。
0
2026.11.05
DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。
0
2026.11.05
本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。
0
2026.11.04
本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。
0
2026.11.04
本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。
0
2026.11.04
本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。
0
2026.11.04
本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。
0
2026.11.04
本专题梳理XORM框架的入门路径,从框架定位、依赖安装、连接数据库到跑通第一个增删改查示例,讲清Engine初始化、日志开启与项目目录规划,并对比GORM等同类ORM的差异,帮助Go开发者建立整体认知。
0
2026.11.04
本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。
0
2026.11.03
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.7万人学习
共6课时 | 54.7万人学习
最新文章