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

如何通过AMI检测Asterisk拒绝呼入呼叫的情况?

解决Asterisk呼叫因分机不存在被拒的告警问题

Asterisk默认没有直接对应“呼叫因分机不存在被拒绝”的原生AMI事件,你可以通过以下几种方式实现告警触发:

方式一:日志监控+自定义AMI事件

  • 先在logger.conf中配置,将NOTICE级别的SIP/PJSIP相关日志单独输出(比如到/var/log/asterisk/sip_notice.log),方便精准监控:
    [logfiles]
    sip_notice.log => notice,notice
    
  • 编写脚本(Python/Shell均可)实时监控这个日志文件,匹配你提供的rejected because extension not found格式的日志行。
  • 匹配到目标日志后,通过AMI发送自定义事件,示例AMI指令:
    Action: UserEvent
    UserEvent: ExtensionNotFoundAlert
    Caller: upstream-peer (192.168.1.1:5060)
    Extension: 44123123123
    Context: ourcontext
    
  • 你的监控系统捕获到这个自定义AMI事件后,即可触发告警。

方式二:拨号计划兜底分机触发自定义事件

在你的目标context末尾添加兜底规则,拦截无匹配分机的呼叫并触发AMI事件:

[ourcontext]
; 现有分机配置...
; 兜底规则,匹配所有未定义的分机
exten => _X.,1,NoOp(Rejected call: Extension ${EXTEN} not found in ${CONTEXT})
 same => n,UserEvent(ExtensionNotFound,CallerID=${CALLERID(all)},Extension=${EXTEN},Context=${CONTEXT})
 same => n,Hangup()

当呼入分机无匹配项时,会执行这个兜底分机,触发ExtensionNotFound自定义事件,你的AMI客户端可以直接捕获该事件并告警。

方式三:CDR辅助过滤(精度较低)

呼叫被拒时,CDR记录的disposition字段会显示FAILED或NO ANSWER,但这种方式需要结合日志内容过滤才能精准定位“分机不存在”的情况,不如前两种方式直接。

注意事项

  • 确保AMI用户拥有system权限,才能发送自定义UserEvent。
  • 多台服务器场景下,可以统一部署监控脚本,或用集中日志系统(如ELK)收集所有Asterisk日志,再做集中匹配告警。

内容的提问来源于stack exchange,提问作者KenD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 17:54:56