Why are you wanting to use CLI commands instead of AMI? The available
AMI actions for ConfBridge can do listing/locking/muting/kicking etc as
you want.
Because I can't easily manually do an AMI command, but instead have to
write code to do it. It's important to me to be able to clean up things
from the command-line if something is stuck or broken.
As for dialplan applications to do the various things - what are you
trying to achieve using them?
And IVR application that people can call into and manipulate people in
conference rooms. Note that this depends on dialplan commands *and*
having a number index for them. It's unclear how I'd do this with
confbridge.
Here's the dialplan I'm using.
exten = 210/_[12]XX,1,NoOp ; Valid if internal.
exten = 210,s,Gosub(Authenticate,s,1()); Else authenticate.
same = n,Mset(C=conferenceha/roomdigits/2digits/0,E=adacore/not-exist)
same = n,Mset(STATS_INC(conf_mgr)=1,__G=conf_op) ; Count the usage.
same = n(r),Macro(Get-Speech,${G},${EFN}adacore/conf_mgr,2,10,100,w)
same = n,GotoIf(${S_T}?${S_T},1:r); Retry or do action.
exten = _[lLK]20Z,1,GotoIf(${MEETME_INFO(parties,20${EXTEN:-1})}?:err)
exten = _L20Z,n,Mset(V=lock,T=locked,E=isadacore/already-locked)
exten = _l20Z,s,Mset(V=unlock,T=unlocked,E=isadacore/already-unlocked)
exten = _K20Z,s,Mset(V=terminate,T=terminated) ; To terminate.
exten =
_[lLK]20Z,n,Set(CFN=adacore/you-want-toadacore/${V}${C}digits/${EXTEN:-1})
exten = _[lLK]20Z,n,Gosub(Is-That-Correct,s,1) ; ... and see if correct.
exten = _[lLK]20Z,n,GotoIf($[${GOSUB_RETVAL}=2]?210,r) ; Retry it not.
exten = _L20Z,n,GotoIf(${MEETME_INFO(lock,20${EXTEN:-1})}?err) ; Bad status.
exten = _l20Z,s,GotoIf(${MEETME_INFO(lock,20${EXTEN:-1})}?:err) ; Likewise.
exten = _K20Z,s,NoOp ; No test needed for termination.
exten = _[lLK]20Z,n,MeetMeAdmin(${EXTEN:-3},${EXTEN:0:1}) ; Perform op.
exten = _[lLK]20Z,n,Set(EFN=${C}digits/${EXTEN:-1}isnowadacore/${T})
exten = _[lLK]20Z,n,Goto(210,r); Ask for another operation.
exten = _[lLK]20Z,n(err),Set(EFN=im-sorry${C}digits/${EXTEN:-1}${E})
exten = _[lLK]20Z,n,Goto(210,r); See if another operation is wanted.
exten = _s20Z,1,Goto(s20${EXTEN:-1}${MEETME_INFO(parties,${EXTEN:-3})},1)
exten = _s20Z.,1,Playback(${C}digits/${EXTEN:3:1}) ; Say that conference ...
exten = _s20Z0,n,Playback(adacore/not-exist) ; ... doesn't exist,
exten = _s20Z1,s,Swift(has one participant); ... or has one person,
exten = _s20Z.,s,Swift(has ${EXTEN:4} participants) ; ... or more.
exten = _s20Z.,n,ExecIf(${MEETME_INFO(lock,${EXTEN:1})}?Swift(and is locked)
exten = _s20Z.,n,Set(M=$[CEIL(MEETME_INFO(activity,${EXTEN:1:3})/60)])
exten = _s20Z[1-9]!,n,Swift(and has been active for ${M} minutes)
exten = _s20Z.,s,NoOp ; In other cases, do nothing.
exten = _s20Z.,n,Goto(210,r) ; Go back for another operation.
exten = _j20Z,1,Set(CFN=you-wish-to-join${C}digits/${EXTEN:-1})
same = n,Gosub(Is-That-Correct,s,1) ; See if correct.
same = n,GotoIf($[${GOSUB_RETVAL}=2]?210,r) ; Retry it not.
same = n,SpeechDestroy; Else free speech channel.
same = n,Goto(${EXTEN:-3},1) ; And go there.
exten =
_[pP]20Z,1,GotoIf($[MEETME_INFO(parties,${EXTEN:1})=0]?s20${EXTEN:-1}0,1)
same = n,Swift(participants in) ; Say the header and ...
same = n,Playback(${C}digits/${EXTEN:3:1}) ; ... conference number.
same = n,ExecIf($[x${G:0:3}=xtmp]?System(rm -f ${GRAMS}/${G}.gram))
same = n,Set(__G=tmp/r${RAND(1,9)}) ; Grammar filename part.
same = n,AGI(conflist.php,${EXTEN:1},${GRAMS}/${G}.gram,${EXTEN:0:1})
same = n,Goto(210,r) ; And go back.
exten = _m20ZXX.,1,Mset(Q=adacore/unmute,OP=adacore/unmuted)
exten = _M20ZXX.,s,Mset(Q=adacore/mute,OP=adacore/muted)
exten = _k20ZXX.,s,Mset(Q=adacore/remove,OP=removed)
exten = _[Mmk]20ZXX.,n,Playback(adacore/you-want-to${Q}) ; Start question.
same = n,Swift(${EXTEN:6}); Say who ...
same = n,Gosub(Is-That-Correct,s,1) ; ... and see if correct.
same = n,GotoIf($[${GOSUB_RETVAL}=2]?210,r) ; Retry it not.
same = n,Set(U=${IF($[${EXTEN:4:1}=0]?${EXTEN:5:1}:${EXTEN:4:2})})
same = n,MeetMeAdmin(${EXTEN:1:3},${EXTEN:0:1},${U}) ; Do operation.
same = n,Swift(${EXTEN:6}); Say name ...
same = n,Playback(${OP}) ; ... and what we did.
same = n,Goto(210,r) ; Go back for another try.
exten = What,1,Set(EFN=adacore/confop_what) ; Say what options are available.
same = n,Goto(210,r) ; And go back and prompt again.
exten = Done,1,Playback(vm-goodbye); Here to hangup.
Here's the grammar:
#ABNF 1.0 UTF-8;
language en-US;
mode voice;
tag-format semantics/1.0.2006;
root $conf_op;
$Operation = lock {out = L;}
| unlock {out = l;}
| (end | kill | terminate) {out = K;}
| join { out = j;}
| [(say | get)] status [of] {