WechatSI 语音插件接入:AppID、app.json 配置与 5 个常见报错
小程序里做语音识别、语音合成,如果从录音 API 开始自己搭,要处理录音格式、编码、识别服务链路。WechatSI(微信同声传译插件)把这些封装成了官方插件,提供语音识别(ASR)、语音合成(TTS)、文本翻译三项能力,接入只需要后台添加插件、app.json 声明,再调用几个 API。下面记录接入流程和可复制的代码,以及实际使用中容易遇到的报错。文末再列出 UI、图表、地图、日期处理几个方向的常用插件。
一、WechatSI:语音识别、合成、翻译三合一
1.1 插件能力与限制
- 官方维护:基于微信底层能力开发,兼容性由微信保证,不存在第三方插件停止维护、失效的风险。
- 三项能力合一:语音转文字、文字转语音、文本翻译,不必为多语言场景引入多个插件,项目依赖更简单。
- 接入成本低:后台添加 + app.json 声明 + 调用 API,核心功能几行代码即可跑通。
- 免费但有配额:个人和企业主体都可使用,配额满足日常开发和中小流量场景,商用可申请提升,无需付费。
- 语言支持:语音识别、合成、翻译均支持中文(含粤语、四川话)和英文。
1.2 步骤 1:小程序后台添加插件
- 登录微信公众平台(https://mp.weixin.qq.com/),进入「设置 → 第三方服务 → 插件管理 → 添加插件」。
- 搜索插件 AppID:
wx069ba97219f66d99(WechatSI 的唯一标识),或搜索「同声传译」,点击添加并同意授权。
1.3 步骤 2:app.json 声明插件
在小程序根目录的 app.json 中添加声明,不需要额外安装依赖:
{
"plugins": {
"WechatSI": {
"version": "0.3.6",
"provider": "wx069ba97219f66d99"
}
}
}
provider 是固定 AppID,不要修改;version 按后台提供的最新版本填写。
1.4 步骤 3:语音识别 + 语音合成代码实现
WXML 部分:
识别结果:{{recognizedText}}
识别按钮的 touchstart / touchend 对应 JS 中的 startRecord / stopRecord,输入框绑定 onTextInput,朗读和停止按钮绑定 startRead / stopRead。
JS 部分,包含错误处理和状态管理:
// 1. 引入 WechatSI 插件
const plugin = requirePlugin("WechatSI");
Page({
data: {
recognizedText: "", // 语音识别结果
readText: "小程序语音交互测试,WechatSI 插件使用演示", // 待朗读文本
},
onReady() {
// 2. 初始化语音识别管理器(录音+识别一体化,无需单独调用录音API)
this.recorderManager = plugin.getRecordRecognitionManager();
// 初始化音频播放器(用于语音合成播放)
this.audioCtx = wx.createInnerAudioContext();
// 3. 监听语音识别事件(开始、结束、错误)
this.initRecordEvent();
// 4. 监听音频播放错误
this.audioCtx.onError((err) => {
wx.showToast({ title: "朗读失败", icon: "none" });
console.error("音频播放错误:", err);
});
},
// 初始化语音识别事件
initRecordEvent() {
const manager = this.recorderManager;
// 录音开始
manager.onStart = () => {
console.log("录音开始,可正常说话");
wx.showToast({ title: "正在录音...", icon: "none" });
};
// 录音结束(识别完成)
manager.onStop = (res) => {
wx.hideToast();
const result = res.result || "";
if (result.trim()) {
this.setData({ recognizedText: result.trim() });
} else {
wx.showToast({ title: "未识别到语音内容", icon: "none" });
}
};
// 识别错误处理(关键:避免小程序崩溃)
manager.onError = (res) => {
wx.hideToast();
wx.showToast({ title: `识别失败:${res.msg}`, icon: "none" });
console.error("语音识别错误:", res);
};
},
// 开始录音(按住说话)
startRecord() {
// 调用插件开始识别,配置最长录音时长(60秒)、语言(中文)
this.recorderManager.start({
duration: 60000,
lang: "zh_CN"
});
},
// 停止录音(松开结束)
stopRecord() {
this.recorderManager.stop();
},
// 输入待朗读文本
onTextInput(e) {
this.setData({ readText: e.detail.value });
},
// 开始朗读(文字转语音)
startRead() {
const { readText } = this.data;
if (!readText.trim()) {
wx.showToast({ title: "请输入朗读文本", icon: "none" });
return;
}
// 调用插件合成语音
plugin.textToSpeech({
lang: "zh_CN", // 语言:中文
tts: true, // 开启语音合成(必传)
content: readText, // 待合成文本(单次不超过200字)
success: (res) => {
// 播放合成的语音(临时音频地址)
this.audioCtx.src = res.filename;
this.audioCtx.play();
},
fail: (err) => {
wx.showToast({ title: "语音合成失败", icon: "none" });
console.error("合成错误:", err);
}
});
},
// 停止朗读
stopRead() {
this.audioCtx.stop();
},
// 页面销毁,释放资源(避免内存泄漏)
onUnload() {
this.audioCtx.destroy();
this.recorderManager.destroy();
}
});
1.5 五个常见报错与坑
- 避坑 1:插件未授权报错 → 后台添加插件和 app.json 配置缺一不可,只做其中一个会报「插件未授权使用」。
- 避坑 2:电脑端无声音、无法录音 → WechatSI 依赖手机的麦克风和扬声器,开发者工具无法模拟,必须真机调试或预览测试。
- 避坑 3:语音合成超时或失败 → 单次合成文本不超过 200 字,超出需分段处理;网络差会导致超时,需要错误捕获和重试逻辑。
- 避坑 4:流式文本朗读乱播 → 朗读 AI 逐段返回的文本时,如果每段都调一次合成接口,声音会重叠、互相打断,需要自己实现朗读队列。
- 避坑 5:配额超限 → 免费配额满足日常开发;提示「接口调用频率限制」时,可在微信公众平台申请提升配额,需说明使用场景。
1.6 典型应用场景
- 语音输入:聊天输入、搜索框语音输入、表单语音填写(记事本、客服对话);
- 语音朗读:小说朗读、新闻播报、提示音合成、无障碍朗读(适配老年用户);
- 翻译:跨境小程序的文本互译、语音互译,如英文语音转中文文本、中文文本转英文语音;
- 方言交互:支持粤语、四川话识别,适配本地生活服务类小程序。
二、其他常用第三方插件
2.1 UI 组件类:Vant Weapp
饿了么前端团队出品的轻量级 UI 组件库,用来替代原生组件的重复开发。组件覆盖按钮、表单、弹窗、轮播、购物车等高频场景,样式统一,支持自定义主题,适配移动端交互,文档较完整;支持按需引入,不会过多占用包体积。页面搭建、表单开发、商品展示、弹窗提示基本都会用到。
集成时需在 app.json 中声明组件,并尽量按需引入,避免全量引入导致包体积过大。
2.2 图表类:ECharts for WeChat
百度 ECharts 官方适配小程序的版本,专注小程序端数据可视化。支持折线图、柱状图、饼图、雷达图等多种图表类型,交互流畅,适配小程序渲染机制,支持自定义样式和数据联动,不需要自己封装图表渲染逻辑,示例和文档较全。数据统计类小程序(后台管理、报表展示、用户数据分析)、可视化看板用得多。
2.3 地图类:腾讯地图小程序插件
腾讯地图官方推出的小程序插件,提供地图展示、定位、路线规划、POI 搜索等 LBS 能力。官方维护,定位精度有保障,集成简单,支持标准、卫星、夜景等多种地图样式,提供距离计算、地址解析等 API,不需要自建地图服务,免费可用。外卖、出行、本地生活、导航类小程序(附近门店、路线查询、定位打卡)适用。
2.4 工具类:dayjs-miniprogram
轻量级日期处理库,专门适配小程序,替代原生 Date 对象的繁琐操作。体积只有几 KB,API 简洁,支持日期格式化、日期加减、时间段计算、时区转换,不用自己写复杂的日期处理函数,兼容性覆盖所有小程序版本。订单时间、活动倒计时、用户注册时间格式化这类需求都可直接使用。
三、通用注意事项
- 优先选择官方或知名团队维护的插件:WechatSI 来自微信、Vant Weapp 来自饿了么、ECharts 来自百度,避免使用小众、无人维护的插件。
- 注意版本兼容性:插件版本需与小程序基础库版本匹配,版本过高或过低都可能导致功能异常,用稳定版即可,不必追最新。
- 按需引入,控制包体积:Vant Weapp、ECharts 等支持按需引入,全量引入会占用包体积,影响小程序启动速度。
- 做好错误处理:WechatSI 的识别、合成错误都要有回调处理,避免小程序崩溃;同时做日志上报,便于排查线上问题。
- 遵守微信小程序规范:不违规收集用户信息(例如语音数据),不滥用插件功能,否则容易审核失败。
- 关注配额与商用授权:免费插件通常有配额限制,商用场景需提前申请授权;同时确认插件的隐私政策,保证用户数据处理合规。
小结
插件的价值在于把基础功能交给现成模块,把时间留给业务逻辑。WechatSI 覆盖语音识别、合成和翻译,配合 Vant Weapp、ECharts、腾讯地图、dayjs-miniprogram,能覆盖小程序开发中大部分高频需求。引入数量要控制,插件越多,包体积和线上排查成本越高;接入之后仍需真机验证,并把错误回调补齐。