FreeSWITCH FunASR语音识别模块
mod_funasr基于 FunASR 的 FreeSWITCH 语音识别模块概述mod_funasr是一个为 FreeSWITCH 开发的语音识别模块集成了阿里巴巴的 FunASRFun Automatic Speech Recognition语音识别服务。该模块通过 WebSocket 连接实现实时语音识别功能支持语音转文本以及相关的语音事件处理。模块信息版本: 1.0作者: pzh创建时间: 2025/05/14接口名称:funasr目录结构mod_funasr/ ├── mod_funasr.cpp # 核心实现文件 ├── funasr.conf.xml # 配置文件 ├── Makefile.am # 构建配置 └── README.md # 说明文档主要功能 语音识别接口完整实现 FreeSWITCH ASR 接口标准支持实时语音流识别支持暂停/恢复识别功能支持语法加载/卸载操作 WebSocket 连接通过 WebSocket 连接 FunASR 服务端支持音频数据实时传输支持双向消息通信自动连接管理和错误处理 音频处理支持 PCM 格式音频流音频块大小1920 字节 (960*2)支持 8kHz 和 16kHz 采样率内置音频缓存机制 事件系统支持以下 ASR 事件类型asr::say_stop- 语音停止事件asr::break_say- 语音中断事件asr::silence_say- 静音事件asr::detected- 语音检测事件asr::detected_timeout- 检测超时事件asr::stop- 停止事件asr::digits- 数字检测事件配置说明配置文件funasr.conf.xmlconfigurationnamefunasr.confdescriptionfunasr Configurationsettingsparamnameurlvaluewss://www.funasr.com:10096//paramnamemodevalue2pass//settings/configuration配置参数参数类型默认值说明urlstringwss://www.funasr.com:10096/FunASR WebSocket 服务地址modestring2pass识别模式支持2pass等模式依赖要求系统依赖FreeSWITCH 开发环境C11 兼容编译器pthread 线程库第三方库libks2: WebSocket 和 JSON 处理库licensecc: 许可证管理库静态链接编译条件必须满足HAVE_KS编译条件需要 libks 库支持编译安装1. 准备环境确保已安装所需依赖库# 安装 libks 开发库# 安装 licensecc 库2. 编译选项# 编译标志 CPPFLAGS: -O2 -fdata-sections -ffunction-sections LDFLAGS: -Wl,--gc-sections -Wl,--strip-all -lpthread -lks2 # 包含路径 /usr/src/libks/src/include /usr/src/licensecc/install/include3. 编译安装# 在 FreeSWITCH 源码目录中makemod_funasrmakeinstall使用方法1. 模块加载在 FreeSWITCH 配置中添加loadmodulemod_funasr/2. 接口调用在拨号计划中使用actionapplicationdetect_speechdatafunasr default default/actionapplicationplaybackdataprompt.wav/在脚本中使用// JavaScript 示例session.execute(detect_speech,funasr);session.streamFile(prompt.wav);3. ASR 接口方法方法名功能描述asr_open打开 ASR 会话asr_close关闭 ASR 会话asr_feed输入音频数据asr_pause暂停识别asr_resume恢复识别asr_start_input_timers启动输入定时器WebSocket 请求格式启动请求{mode:2pass,chunk_size:[5,10,5],chunk_interval:10,wav_name:asr,wav_format:pcm,itn:true,is_speaking:true}停止请求{is_speaking:false}技术特性多线程架构主线程处理 FreeSWITCH 接口调用独立线程处理 WebSocket 消息接收线程安全的状态管理状态管理使用位标志管理模块状态FLAG_PAUSE: 暂停标志FLAG_CONTINUE_SAY: 继续播放标志FLAG_CONTINUE_BREAK_SAY: 继续中断播放标志FLAG_FIRE_BREAK_SAY: 触发中断播放标志FLAG_CONTINUE_SILENCE_SAY: 继续静音播放标志许可证管理集成 licensecc 许可证管理系统确保模块合法使用。日志调试模块提供详细的日志输出包括连接状态信息音频数据传输状态识别结果信息错误和异常信息使用 FreeSWITCH 日志系统可通过修改日志级别控制输出详细程度。注意事项网络连接: 确保服务器能访问 FunASR 服务地址音频格式: 仅支持 PCM 格式采样率 8kHz/16kHz许可证: 模块启动时会验证许可证确保许可证文件正确配置资源管理: 模块会自动管理 WebSocket 连接和音频缓存线程安全: 多线程环境下注意状态同步故障排除常见问题连接失败检查网络连接验证服务器地址配置确认防火墙设置编译错误检查依赖库是否正确安装确认编译环境配置验证头文件路径运行时错误检查许可证配置查看 FreeSWITCH 日志验证模块加载状态许可证本模块受许可证保护使用前请确保获得合法许可。支持与反馈如有问题或建议请联系开发团队。这篇文章把 AI 外呼的链路和落地要点讲清楚了。这个开源模块的完整源码我已开源可以在下面的仓库获取GitHubhttps://github.com/pzhu1015/salesGitee国内访问更快https://gitee.com/pzhu1015/sales如果你正在做或打算做智能外呼 / 呼叫中心除了这个模块还有 FreeSWITCH 部署、ASR/TTS 对接、Kamailio 负载、录音上云等相关方案欢迎到仓库交流和看更多实现。欢迎技术交流一起把 AI 外呼做好。本文为技术经验分享欢迎收藏转发。