Asterisk 18中Dial命令调用Macro报错问题求助
Dial命令调用Macro失败报错排查
问题详情
用户Macro代码:
[macro-subrao] exten => s,1,AMD() exten => s,n,Set(RAO=${AMDSTATUS})
拨号计划代码:
exten => _+33.,n,Set(FILENAME=${EXTEN}_${SIPCALLID}) exten => _+33.,n,Monitor(wav,${FILENAME},b) exten => _+33.,n,Dial(${SIPTrunk}/${EXTEN},,M(subrao))
运行时错误日志:
[Dec 6 08:03:40] WARNING[27509][C-00000001]: app.c:297 ast_app_exec_macro: Cannot run 'Macro(subrao)'. The application is not available.
错误原因分析
- Macro未被正确加载:
[macro-subrao]段未放置在Asterisk扫描的拨号计划配置文件中,或配置文件修改后未重新加载。 - Macro模块未启用:Asterisk的
app_macro模块未加载,导致无法识别Macro应用。 - 版本兼容问题:部分新版本Asterisk默认不加载过时的Macro模块,或调用格式有变化。
解决办法
确认Macro配置位置并重新加载拨号计划
将[macro-subrao]代码段添加到extensions.conf或已通过#include引入的配置文件中,然后在Asterisk控制台执行:dialplan reload执行完成后,用
dialplan show macro-subrao验证Macro是否被正确识别。检查并加载Macro模块
在Asterisk控制台执行以下命令查看模块状态:module show like macro如果输出中没有
app_macro.so,执行加载命令:module load app_macro.so若需要开机自动加载,编辑
modules.conf,添加:load => app_macro.so替代方案(推荐)
Macro在Asterisk 16及以上版本已被标记为过时(deprecated),推荐使用Gosub替代,示例改写如下:
首先定义Gosub段:[subrao] exten => s,1,AMD() exten => s,n,Set(RAO=${AMDSTATUS}) exten => s,n,Return()然后在Dial命令中调用:
exten => _+33.,n,Dial(${SIPTrunk}/${EXTEN},,g(subrao,s,1))
内容的提问来源于stack exchange,提问作者Hakim Amzaourou
相关产品推荐
相关产品推荐

