在从被叫方接收到的“振铃”状态中调用子程序的 Asterisk Dial() 选项是什么?

问题描述

我需要在发生以下事件时执行 AGI 脚本:

  1. 来电(很简单,只需调用 AGI() 函数)。
  2. 呼叫“正在响铃”时(我不知道!)。 <-- Problem,how to do this?
  3. 当电话被“接听”时(我使用 U(answer^${CALLID}) 中的 Dial() 选项)。
  4. 当电话挂断时(我使用 h 特殊分机)。

我的拨号方案如下所示:

[from_origin]
exten => _X.,1,NoOp(${CALLER_USERNAME} from ${CHANNEL(pjsip,remote_addr)})
 same => n,AGI(agi://127.0.0.1/incoming)
 same => n,Dial(${DIALSTR},45,U(answer^${CALLID}))
exten => h,AGI(agi://127.0.0.1/hangup,${CDR(uniqueid)})

[answer]
exten => s,Set(theCallID=${ARG1})
 same => n,AGI(agi://127.0.0.1/answered)
 same => n,Return()

看,我调用了 3 fast-agi 脚本:incomingansweredhangup。现在我需要在被叫方“振铃”时调用类似 ringing 的脚本。如何实现这一目标?

解决方法

振铃状态是频道的状态(chan_pjsip.so),它没有发送到频道外代码。

所以不,您无法在 Dial 应用程序中获取它。因为某些频道类型无法获取它,而 Dial 仍然适用于这些类型。

对于某些频道,您可以在 NewState 事件的事件侦听循环中通过 AMI 获取它。但是没有保证它会在您收到响铃 sip 消息的同一时间。

https://wiki.asterisk.org/wiki/display/AST/Asterisk+11+ManagerEvent_Newstate

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...