0

当发生以下事件时,我需要执行 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,1,AGI(agi://127.0.0.1/hangup,${CDR(uniqueid)})

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

看,我已经调用3 fast-agi了脚本incomingansweredhangup。现在我需要调用类似ringing的脚本,比如被叫方“响铃”时。如何做到这一点?

4

1 回答 1

1

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

所以不,你不能在拨号应用程序中得到它。因为某些频道类型无法获取它,并且 Dial 仍然应该适用于这些类型。

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

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

于 2021-04-06T16:11:27.273 回答