You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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模块,或调用格式有变化。

解决办法

  1. 确认Macro配置位置并重新加载拨号计划
    将[macro-subrao]代码段添加到extensions.conf或已通过#include引入的配置文件中,然后在Asterisk控制台执行:

    dialplan reload
    

    执行完成后,用dialplan show macro-subrao验证Macro是否被正确识别。

  2. 检查并加载Macro模块
    在Asterisk控制台执行以下命令查看模块状态:

    module show like macro
    

    如果输出中没有app_macro.so,执行加载命令:

    module load app_macro.so
    

    若需要开机自动加载,编辑modules.conf,添加:

    load => app_macro.so
    
  3. 替代方案(推荐)
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 01:45:30