QUESTION Dynamic Conference Room - Tutorial Help.

Robert Frey

New Member
Joined
May 12, 2015
Messages
2
Reaction score
0
I was hoping to get some detailed help on getting a Dynamic Conference Room system set up.
Currently I've got about 20 preset conferences configured, each with their own conference and inbound route, and corresponding DID/Extension on my external system. (We use ShoreTel and have those 20 extensions as off-system extensions using SIP to PIAF).

I'd really like to add an additional conference room that simply prompted for an 8 character code. When the code is entered it would direct the person into a specific room that other people with that code would have (either join, or create, that "room.")

I've found many snippits online, but nothing I have done by editing extensions_custom.conf seems to work. I assume there is likely other work that needs to be done somewhere else.

This is a brand new install, using Green. Incredible PBX was also added. This would be using confbridge, not meetme.

Any help with this would be greatly appreciated.
 

rjaiswal

Active Member
Joined
May 24, 2013
Messages
438
Reaction score
58
So you are looking for something like this?

http://www.voip-info.org/wiki/view/Asterisk+cmd+ConfBridge

This is the text from the website, just incase it goes down:
Asterisk cmd ConfBridge

ConfBridge

Synopsis

ConfBridge conferencing bridge

Description

ConfBridge([confno][,options]): Enters the user into a specified ConfBridge conference



10.x

ConfBridge has undergone many changes for the version released with Asterisk 10.x. The documentation for this new *version* can be found here. (Someone should add it to Voip-Info)

Asterisk cmd ConfBridge


ConfBridge is an application for Asterisk starting with the 1.6.2.* series. ConfBridge is very similar in features to MeetMe, but unlike MeetMe, ConfBridge does not perform audio mixing using DAHDI. Instead, audio mixing is performed within the internals of Asterisk.

To get an up2date description of ConfBridge for your used Asterisk version execute core show application ConfBridge at the Asterisk CLI.

The option string may contain zero or more of the following characters:
  • 'a' — Set admin mode
  • 'A' — Set marked mode
  • 'c' — Announce user(s) count on joining a conference.
  • 'm' — Set initially muted.
  • 'M' — Enable music on hold when the conference has a single caller. Optionally, specify a musiconhold class to use. If one is not provided, it will use the channel's currently set music class, or 'default'
  • '1' — Do not play message when first person enters
  • 's' — Present menu (user or admin) when '#' is received (send to menu)
  • 'w' — Wait until the marked user enters the conference
  • 'q' — Quiet mode (don't play enter/leave sounds).

The join sound can be set using the 'CONFBRIDGE_JOIN_SOUND' variable and
the leave sound can be set using the 'CONFBRIDGE_LEAVE_SOUND' variable.
These can be unique to the caller.

NOTE: This application will not automatically answer the channel.
Muting

When a participant is "muted" this means that the participant's audio is ignored. Nevertheless the muted participant still receives the mixed audio stream.

Differences with MeetMe

It is no longer possible to assign a PIN to a conference as you would with MeetMe(123,d,321) - instead this must be done outside of the ConfBridge application. Because of possible clashes if two people run the code at the same time, it is not possible to use the CONFBRIDGE_INFO(parties) function and the code must, at least in part, be run in a MacroExclusive() application. Sample code to implement this is shown below:
 

rjaiswal

Active Member
Joined
May 24, 2013
Messages
438
Reaction score
58
Code:
A modified version of the above.
This allows setting more of the Confbridge options available in 10.x and sets the first (creating) user as admin.
 
From extensions.conf
 
[External-Conf]
exten=s,1,NoOP(External Conference Caller Coming In)
exten=s,n,Read(CONFnum,custom/6004,4,,2,5)
exten=s,n,Goto(CONFERENCE,${CONFnum},1)
 
[CONFERENCE]
exten=_19XX,1,NoOp(Dynamic Conferences)
same=n,Set(CONFnum=${EXTEN})
same=n,Set(CONFnum=${FILTER(0-9,${CONFnum})})
same=n,GotoIf($["${CONFnum}" = ""]?CONFERENCE,${EXTEN},hangup)
same=n,Playback(custom/6000)
same=n,SayDigits(${CONFnum})
same=n,NoOP(Type Conference PIN)
same=n,Read(CONFpin,custom/6002,4,,2,5)
same=n,Set(CONFpin=${FILTER(0-9,${CONFpin})})
same=n,GotoIf($["${CONFpin}" = ""]?CONFERENCE,${EXTEN},hangup)
same=n,Playback(custom/6001)
same=n,SayDigits(${CONFpin})
same=n,MacroExclusive(emptyconference,${CONFnum},TMP_EMPTY)
same=n,GotoIf($["${TMP_EMPTY}" = "1"]?CONFERENCE,${EXTEN},uconf)
same=n,NoOP(Type Conference Max Users)
same=n,Read(CONFusers,custom/6003,2,,2,5)
same=n,Set(CONFusers=${FILTER(0-9,${CONFusers})})
same=n,GotoIf($["${CONFusers}" = ""]?CONFERENCE,${EXTEN},hangup)
same=n(aconf),MacroExclusive(makeconference,${CONFnum},${CONFpin},${CONFusers},${CONFrec},TMP_CONFOK,TMP_ADMIN)
same=n(uconf),MacroExclusive(makeconference,${CONFnum},${CONFpin},${CONFusers},${CONFrec},TMP_CONFOK,TMP_ADMIN)
same=n,GotoIf($["${TMP_CONFOK}" != "1"]?hangup)
same=n,GotoIf($["${TMP_ADMIN}" = "1"]?CONFERENCE,${EXTEN},admin:CONFERENCE,${EXTEN},user)
same=n(admin),Read(PASS,custom/6005,5,,2,5)
same=n,GotoIf($["${PASS}" = "12345"]?:CONFERENCE,${EXTEN},hangup)
same=n,Set(CONFBRIDGE(user,admin)=yes)
same=n,Set(CONFBRIDGE(user,marked)=yes)
same=n,Set(CONFBRIDGE(user,announce_join_leave)=yes)
same=n,Set(CONFBRIDGE(user,music_on_hold_when_empty)=yes)
same=n,Set(CONFBRIDGE(user,music_on_hold_class)=default)
same=n,Set(CONFBRIDGE(user,end_marked)=yes)
same=n,Set(CONFBRIDGE(user,announce_only_user)=yes)
same=n,Set(CONFBRIDGE(user,announce_user_count)=yes)
same=n,Set(CONFBRIDGE(bridge,max_members)=${CONFusers})
same=n,ConfBridge(${CONFnum},conferences,USER,admin_menu)
same=n,Hangup()
same=n(user),Set(CONFBRIDGE(user,admin)=no)
same=n,Set(CONFBRIDGE(user,marked)=no)
same=n,Set(CONFBRIDGE(user,announce_join_leave)=yes)
same=n,Set(CONFBRIDGE(user,music_on_hold_when_empty)=yes)
same=n,Set(CONFBRIDGE(user,music_on_hold_class)=default)
same=n,Set(CONFBRIDGE(user,end_marked)=yes)
same=n,ConfBridge(${CONFnum},conferences,foo-user,user_menu)
same=n,Hangup()
same=n(hangup),Hangup()
 
[macro-emptyconference]
exten=s,1,NoOp(Checking to see if conference is empty and needs extra admin prompts)
same=n,Verbose(${GROUP_COUNT(${ARG1}@conference)})
same=n,GotoIf($[${GROUP_COUNT(${ARG1}@conference)} > 0]?user)
same=n,Set(${ARG2}=0)
same=n,NoOp(${DB_DELETE(conf/${MACRO_EXTEN})})
same=n,MacroExit
same=n(user),Set(${ARG2}=1)
same=n,MacroExit
 
[macro-makeconference]
exten=s,1,NoOp(Validating Conference)
same=n,GotoIf($[${LEN(${ARG1})} < ${CONFnum_MINLEN}]?exiterr)
same=n,GotoIf($[${LEN(${ARG1})} > ${CONFnum_MAXLEN}]?exiterr)
same=n,GotoIf($[${LEN(${ARG2})} < ${CONFpin_MINLEN}]?exiterr)
same=n,GotoIf($[${LEN(${ARG2})} > ${CONFpin_MAXLEN}]?exiterr)
same=n,Verbose(${GROUP_COUNT(${ARG1}@conference)})
same=n,GotoIf($[${GROUP_COUNT(${ARG1}@conference)} > 0]?checkpin)
same=n,Set(DB(conf/${ARG1}/pin)=${ARG2})
same=n,Set(DB(conf/${ARG1}/max_users)=${ARG3})
same=n,Set(${ARG5}=1)
same=n,Set(${ARG6}=1)
same=n,Set(GROUP(conference)=${ARG1})
same=n,MacroExit()
same=n(checkpin),NoOp(Checking PIN)
same=n,GotoIf($["${DB(conf/${ARG1}/pin)}" != "${ARG2}"]?exiterr)
same=n,Set(${ARG5}=1)
same=n,Set(GROUP(conference)=${ARG1})
same=n,MacroExit()
same=n(exiterr),NoOp(Exiting - Something Wasn't Liked)
same=n,Set(${ARG5}=0)
same=n,MacroExit()
 
 
From confbridge.conf
 
[USER]
type=user
music_on_hold_when_empty=yes
music_on_hold_
end_marked=yes
announce_only_user=yes
announce_join_leave=yes
dtmf_passthrough=yes
 
[conferences]
type=bridge
 
 
Some of the differences:
The example above gives ability to set all options usually in the confbridge.conf file from within the dialplan.
It also does a pssword check to keep just any Joe Random employee from creating conference rooms.
Since [CONFERENCE] is included in my users contexts, anybody can just dial any extension 1900 through 1999 to create/enter a conference.
I also have an external DID pointing to External-Conf which prompts for the conference room number and then places that call into [CONFERENCES] with that extension.
There are a few other changes, but I forget them all.
 
Technical Details (for developers)
ConfBridge() uses Asterisk's bridging framework which was introduced in Asterisk 1.6.2. There is a common bridging framework in main/bridging.c. The bridging implemenations itself are modules located in bridges/bridge_*.c. There are several implementations with different kind of features. When an application requests a new bridge (e.g. ConfBridge), it has to specify the needed features and the bridging framework will choose the best fitting bridging implementation.
 
Bugs
ConfBridge crashes in Asterisk 1.8 when users leave at the same time. See bug 16640. The ConfBridge implementation in Asterisk 10 is much improved to the 1.8 version and probably (?!) does not have have this bug.
 

Robert Frey

New Member
Joined
May 12, 2015
Messages
2
Reaction score
0
That is one of the ones that I found; however, I still couldn't get anything to work properly.
I did just recently figure this out though, I needed to set up a Custom Destination with the same name(s) that I was using in the configuration. I'm sure this information is obvious somewhere out there; however, I couldn't find it.
The only reason I eventually found it was thanks to one of the resources on this forum; however, those resources are locked to Forum Members only and that took a few days to get registered!

Thank you for taking the time to reply - sorry I forgot to close this thread.
 

Members online

Forum statistics

Threads
25,812
Messages
167,761
Members
19,240
Latest member
nikko
Get 3CX - Absolutely Free!

Link up your team and customers Phone System Live Chat Video Conferencing

Hosted or Self-managed. Up to 10 users free forever. No credit card. Try risk free.

3CX
A 3CX Account with that email already exists. You will be redirected to the Customer Portal to sign in or reset your password if you've forgotten it.
Top