Using Asterisk as a Conference Bridge for Your Cisco CallManager
This is using Trixbox as a web scheduled conference bridge for your Cisco Callmanager. As most of you CCM guys know, CCM comes with a light meet-me conference bridge; you can’t password protect in any way and there are few features. If you want to run the Callmanager conference server, you are looking at somewhere between $8K-10K. I got all of the functionality I wanted for $0! We wanted to have the ability to schedule through the web, when users call in they enter a conference #, then the users have to enter a Pin number…simple, right?
****EDIT – Since the Trixbox was so unreliable I’ve configured the same system using Elastix. See the configuration options at bottom for this configuration!****
This is done with an install of Trixbox CE 2.6.2.3 (Stable) found here. Trixbox, as you all know, is a bootable ISO that installs centos and a complete working install of asterisk and FreePBX GUI. I love it!
This install contains something called web-meetme, which is a web interface into scheduling conferences. It’s features include:
- Time Scheduling
- Reoccurring Conferences
- Configurable Conference Pin Numbers
- Conference Recording
- Monitor Users in Conference
- Multiple Users
- Simultaneous Conferences
- Join Announcements
I didn’t even burn a server to install this on, I just loaded it up on one of our VMWare servers, so we really are spending no money on the project.
Web-meetme screen shots:
Add Conference
View Current Confs
View Users in Conf
Here are the config steps I took once trixbox was installed and IPd.
Install the Misc Appliaction module:
- Enter FreePBX admin. Clicked PBX->PBX Settings
- Selected the Tools tab and clicked Module Admin (which is actually available in both the Tools and Setup tabs.
- Clicked the “Check for Updates Online” text at the top of the “Module Administration” window
- Scrolled to the “Internal Options & Configuration” section and clicked on the “Misc Applications” item…
– this expanded an instance menu below the “Misc Application” selection
– there are two options (No Action / Download and Install) - Clicked the radio button next to “Download and Install”
- Scrolled to the bottom of the window and clicked the “Process” button.
- Acknownedged that I wanted to install
- Performed the Reload
Setup Misc Destination:
- Next add a misc. destination under the tools menu in FreePBX
- Click on tools, then find misc. destinations and click on it. In the Custom Destination field enter custom-meetme3,s,1
- In the description you can enter what you like, I entered MeetMe
- I left notes blank.
- Click submit changes
Setup Misc Application:
- Find and click on misc applications
- Click on add misc application
- In the description I entered MeetMe
- in Feature code you can enter what you like, as long as it is not used by anything else, I entered 150
- Feature status should be enabled
- Under the destination section select Custom Applications: And select the misc destination name you created above, in my case MeetMe
- Click Submit Changes
Be sure to apply changes.
To fix a web-meetme security issue (allow you to view conferences and attendants), edit /etc/asterisk/phpagi.conf. You need to add the following:
- [asmanager]
- # server to connect to
- server=localhost
- # default manager port
- port=5038
- #username for login
- username=admin
- #password for login
- secret=amp111
- #user=admin
- #secret=amp111
I didn’t want my Trixbox to be able to dial out, so I didn’t add any outgoing route patterns, but you do need to configure incoming route patterns. If you leave any DID information blank, it will capture ANY incoming call and force it into the conference bridge, which is what I wanted.
Configure Incoming Route
- In the PBX settings, choose inbound routes
- Add a route
- I gave mine a description of MeetMe
- I then clicked the Custom Destination radio button and choose MeetMe
- Save then apply
I also wanted to lock down my admin pages so that only my subnet can hit the admin pages, but my entire organization can hit the web-meet me.
Edit /etc/trixbox/httpdconf/trixbox.conf
Add the following code:
- #Password protect /var/www/html/web-meetme
- Order deny,allow
- deny from all
- allow from 1.1.1.0/255.255.255.0
- allow from 2.2.2.2/255.255.255.255
You will also want to update the allow list for your existing maint and admin dirs.
The above was stolen from this link and kludged together from random others.
To get the SIP trunk from callmanager I followed the directions listed here. I’m just posting the link, since this is all in one page.
Once done, route one of your DIDs from callmanager to the sip trunk.
To get started with web-meetme, you can hit the direct link at http://serverIP/web-meetme and login with the following default accounts:
Admin,
Username:
wmm@localhost
Password:
wmmpw
Standard user:
Username:
tim@localhost
Password:
1234
There are a couple of bugs in the PHP user code. When you try and add new users sometimes they are created with null passwords. Also, the password update code is bricked. Here’s the fix:
There is a typo in one of the .php files for Web Meetme.
Edit /var/www/html/web-meetme/user_add_sqldb.php
Search for ‘userPassr’ and change ‘userPassr’ to ‘userPass’ (removing the ‘r’ on the end).
Also there is another error in Line 94 comment out $userPass = “password=’$userPass’”; and insert instead $userPass = “$userPass”;
The fix is listed here.
I also did some tweaking to the php code. There is a limitation on the number of recurring days you can set daily and weekly meetings for. I wanted to be able to schedule these things out for years! By default you can only set daily for 14 days and you can only set weekly for 26 weeks…I modified it a bit
Edit /var/www/html/web-meetme/meetme_control.php as described below:
Change this:
- for (var i = 0; i <= (recurPrd-2); i++) {
- if (recurPrd == 14){
- objForm.recurPrd.options[i] = new Option((i+2)+' days', (i+2));
- } else {
- if (recurPrd == 26){
- objForm.recurPrd.options[i] = new Option((i+2)+' weeks', (i+2));
- } else {
- objForm.recurPrd.options[i] = new Option(((i+1)*2)+' weeks', (i+2));
- }
- }
To this:
- for (var i = 0; i <= (recurPrd-2); i++) {
- if (recurPrd == 14){
- objForm.recurPrd.options[i] = new Option((i+2)+' days', (i+2));
- } else {
- if (recurPrd == 26){
- objForm.recurPrd.options[i] = new Option((i+2)+' weeks', (i+2));
- } else {
- if (recurPrd == 156){
- objForm.recurPrd.options[i] = new Option((i+2)+' weeks', (i+2));
- } else {
- if (recurPrd == 1095){
- objForm.recurPrd.options[i] = new Option((i+2)+' days', (i+2));
- } else {
- objForm.recurPrd.options[i] = new Option(((i+1)*2)+' weeks', (i+2));
- }
- }
- }
- }
Modify /var/www/html/web-meetme/lib/defines.php as follows:
Change this:
- $recurPeriod = array("14", "26", "13");
To this:
- $recurPeriod = array("1095", "156", "13");
defines.php also has some of the default values for the notification emails.
In closing, I would recommend you guys install webmin for easier system administration. In webmin, I would set the server to sync with an NTP time server, that way your conference scheduling is accurate!
If you want to do some trouble shooting, from the asterisk CLI (asterisk -r) issue the following:
- core set verbose 10
- core set debug 10
You should now be able to see most of what’s happening in call control.
ELASTIX CONFIGURATION
Elastix is an opensource PBX much like trixbox, but appears to be actively developed unlike the CE version of trixbox, which is dead. Anyway, the configuration is close, but you need to make a couple of modifications. BTW, elastix has a much prettier interface!
First we have to unembed freePBX. Here’s how:
Once freePBX breaks out you can follow the instructions above save for having to modify any PHP code. Everything seems to be working in their code 🙂
One last thing you will need to do is edit the extension config file like so:
Edit /etc/asterisk/extensions.conf and add the following:
1 2 3 4 5 | [custom-meetme3] exten => s,1,Answer exten => s,n,Wait(3) exten => s,n,CBMysql() exten => s,n,Hangup |
Restart your asterisk services and you should be rocking and rolling!
Setting up user permissions in elastix
Elastix has fine grained control for conferencing. You can basically lock it down so users only see the conference section when they log in.
Once you get this all setup and you add a conference, you dial in. You are prompted to type the conference #, and if you specified a Pin, it will ask you for it. Then you are joined to the bridge. If you use the announce check box, it prompts you to record your name and you are announced when you enter and leave the room.
I hope you find this useful, because I think it’s frickin cool. It is going to save us somewhere around $500 a month! Let me know what you guys think in the comments. Also as I make adjustments, I’ll add them to this page.
What type of capacities can you expect to get out of this, and what resources did you give your guest VM?
What is the largest number of users you have had in one conference, any voice quality issues since you didn’t have hardware DSPs or hardware timing sources?
@Todd
I’m not sure what capacities one can expect.
I’ve given the VM a couple of CPUs and 1GB of RAM.
The largest number of participants was probably somewhere around 8.
The only issues I’ve experienced is stability issues. This version of trixbox isn’t the most stable thing out there, so I have a cron that occasionally kicks the server.
Did you integrate this with AD? Also, once you give a user access to “conference” they have access to all conferences and PIN information? Guess I few years late to the party:)
@Del
I didn’t integrate it with AD. You can set some users as admins, so only they can adjust pins and such.