如果任何用户离开confbridge,则在星号拨号方案上生成事件

时间:2015-06-15 11:09:31

标签: asterisk

我在星号中使用confBridge进行会议。我想检测正在进行的通话中用户数是否仍然小于或等于1,然后终止电话会议。

我试过这个 -

exten => ConfTest,1,System(asterisk -rx "confbridge kick ${DB(CONF/NUM)} ${DB(CONF/ConfTest)}")
exten => ConfTest,n,Set(DB(CONF/ConfTest)=${CHANNEL})
exten => ConfTest,n,Set(ID=${RAND(1,500)})
exten => ConfTest,n,Set(DB(CONF/NUM)=${ID})
exten => ConfTest,n,Set(target=ConfTest1)
exten => ConfTest,n,Originate(SIP/${target},app,confBridge,${ID},default_user)
exten => ConfTest,n,Set(target=ConfTest2)
exten => ConfTest,n,Originate(SIP/${target},app,confBridge,${ID},default_user)
exten => ConfTest,n,Macro(dialout-trunk-predial-hook-test)
exten => ConfTest,n,confbridge(${ID},,src_user)
exten => ConfTest,n,Answer()
exten => ConfTest,n,Set(i=1)
exten => ConfTest,n,While($[${i} = 1])
exten => ConfTest,n,GoToIf($[0${CONFBRIDGE_INFO(parties,${ID})} <= 1]?18:15)
exten => ConfTest,n,NoOp(number of participants in conference call = ${CONFBRIDGE_INFO(parties,${ID})})
exten => ConfTest,n,Wait(1000)
exten => ConfTest,n,EndWhile()
exten => ConfTest,n,System(asterisk -rx "confbridge kick ${DB(CONF/NUM)} ${DB(CONF/ConfTest))

这里的行没有从while循环执行。

是否可以为电话会议中涉及的所有频道注册挂断处理程序。 例如 -

debianpc08*CLI> confbridge list 1
Channel                       User Profile     Bridge Profile   Menu             CallerID
============================= ================ ================ ================ ================
SIP/ConfTest1-0000009c        default_user     default_bridge                    ConfTest1
SIP/ConfTest2-0000009d        default_user     default_bridge                    ConfTest2
SIP/ConfTest3-0000009b        src_user         default_bridge                    ConfTest3

这里我想注册所有频道的挂机处理程序,如SIP / ConfTest1-0000009c。

2 个答案:

答案 0 :(得分:0)

您可以使用默认挂断处理程序(h-extension)来捕获

;record situation
exten => ConfTest,n,Set(HANGUP_OK=NO)
exten => ConfTest,n,confbridge(${ID},,src_user)
; if user exit confbridge, clear it
exten => ConfTest,n,Set(HANGUP_OK=YES)

; if hanguped in confbridge, do something
exten => h,1,GotoIF($[ "${HANGUP_OK}" == "NO" ]?dosomething,s,1)

答案 1 :(得分:0)

你错了。此任务的最佳选择是使用Asterisk ARI和桥API。这个想法非常简单,启动一个Stasis应用程序来处理你的桥,把通道放到桥上。当他们进出桥时,请听WebSocket事件,看看谁离开了谁以及谁进来。

您可以查看http://www.phpari.org以获取有关如何编写此类应用程序的其他信息,演示拨号应用程序应该为您提供有关如何执行此操作的详细信息。

尼尔