Asterisk 1.8.32拨号方案中MYSQL函数失效问题求助
解决Asterisk 1.8.32中"No application 'MYSQL'"报错的方案
这个报错的核心原因很直接——你的Asterisk实例找不到MYSQL这个拨号方案应用,通常是因为对应的模块没加载或者编译时没包含。下面是具体的排查和解决步骤:
1. 先检查MySQL相关模块是否已加载
登录到Asterisk命令行(执行asterisk -r进入),输入以下命令查看模块状态:
module show like mysql
你需要看到app_mysql.so(提供MYSQL应用)和res_mysql.so(数据库连接基础模块)都显示为Loaded状态。
- 如果模块未加载,尝试手动加载:
加载成功后,重新测试你的拨号方案。module load res_mysql.so module load app_mysql.so - 如果加载失败(提示模块不存在),说明你的Asterisk编译时没包含MySQL支持,需要重新编译。
2. 重新编译Asterisk并启用MySQL支持
第一步:安装MySQL依赖包
根据你的操作系统安装对应的开发包:
- Debian/Ubuntu系统:
apt-get install libmysqlclient-dev - CentOS/RHEL系统:
yum install mysql-devel
第二步:重新配置并编译Asterisk
- 进入Asterisk 1.8.32的源码目录
- 执行配置命令启用MySQL支持:
./configure --with-mysql - 进入菜单选择界面,确保相关模块被选中:
在make menuselectAdd-ons分类里找到app_mysql,确保它被标记为选中状态(按空格键勾选);同时检查基础模块分类里res_mysql是否已选中。 - 编译并安装:
make make install - 重启Asterisk服务,让新模块生效:
service asterisk restart
3. 修复拨号方案中的语法错误
除了模块问题,你的拨号方案里还有两处小错误需要修正:
- 最后一行
MYSQL(Disconnect)多了一个右括号 Playback命令拼写错误(写成了Platback)
修正后的完整拨号方案代码:
exten => 8367,1,MYSQL(connect connid SERVERIP cron 1234 asterisk) exten => 8367,n,MYSQL(Query resultid ${connid} select comments from vicidial_list where list_id=5555 and phone_number=${EXTEN:2} order by lead_id desc limit 1) exten => 8367,n,MYSQL(Fetch vdp_tmp ${resultid} comments) exten => 8367,n,MYSQL(Clear ${resultid}) exten => 8367,n,MYSQL(Disconnect ${connid}) exten => 8367,n,NoOp(${comments}) exten => 8367,n,Playback(/tmp/${comments}) exten => 8367,n,Hangup()
补充说明
Asterisk 1.8.32是非常老旧的版本(发布于2015年),官方早已停止维护,建议如果条件允许,尽量升级到较新的LTS版本(比如16或18),不仅能获得更好的兼容性,还有安全补丁和新功能。
内容的提问来源于stack exchange,提问作者Basani suresh
相关产品推荐
相关产品推荐

