Asterisk 星号拨号计划:如何检测何时成功接听电话?

Asterisk 星号拨号计划:如何检测何时成功接听电话?,asterisk,asteriskami,freepbx,dialplan,Asterisk,Asteriskami,Freepbx,Dialplan,我真的很难弄清楚是否有一个触发器或一种方法可以从拨号操作继续,从而让您检测电话是否有人接听。似乎拨号在挂断、忙碌或拥挤时才会响应。当电话的另一端实际接听电话时,我错过了什么动作或事件可以告诉我?希望有这样的东西,我只是错过了: exten => s,7,Dial(${ARG1},20,rt) ; Ring the interface, 20 seconds maximum exten => s,8,Goto(s-${DIALSTATUS},1)

我真的很难弄清楚是否有一个触发器或一种方法可以从拨号操作继续,从而让您检测电话是否有人接听。似乎拨号在挂断、忙碌或拥挤时才会响应。当电话的另一端实际接听电话时,我错过了什么动作或事件可以告诉我?希望有这样的东西,我只是错过了:

exten => s,7,Dial(${ARG1},20,rt)       ; Ring the interface, 20 seconds maximum
exten => s,8,Goto(s-${DIALSTATUS},1)                    
; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
exten => s-ANSWER(do something)

我终于明白了。它涉及调用拨号操作调用中的M标志。通过调用M标志,您可以调用一个自定义宏,该宏将在连接/应答呼叫后立即执行

例如:拨号(SIP/200,60,M(myCustomMacro))


希望这对那些同样好奇的人有所帮助。

当电话接通时,你也可以做Gosub:

asterisk*cli> core show application Dial
...
    U(x[^arg[^...]]):
        x - Name of the subroutine to execute via Gosub
        arg - Arguments for the Gosub routine
Execute via Gosub the routine <x> for the *called* channel before connecting to
the calling channel. Arguments can be specified to the Gosub using '^' as a
delimiter. The Gosub routine can set the variable ${GOSUB_RESULT} to specify
the following actions after the Gosub returns
asterisk*cli>核心显示应用程序拨号
...
U(x[^arg[^…]):
x—通过Gosub执行的子例程的名称
arg-Gosub例程的参数
在连接到之前,通过Gosub执行*被调用*通道的例程
呼叫频道。可以使用“^”作为参数为Gosub指定参数
定界符。Gosub例程可以将变量${Gosub_RESULT}设置为指定
Gosub返回后的以下操作

我的目标是在调用某个扩展名时运行一个shell脚本,在同一扩展名完成调用时运行另一个脚本—这是一种方法吗?@Jb1128您能在extensions.conf中发布代码吗。我也面临同样的问题。此外,什么是
myCustomMacro