Are you still paging using the built-in page function for your Digium Switchvox? Are you using analog paging systems with ATA’s or FXO ports to communicate with legacy overhead paging? Well keep reading on how to get your Digium Switchvox to perform Multicast Paging.
When Digium announced support for Multicast Paging back with release 6.4 there was a few things left out of the solution. Like performing a multicast page.
What Digium actually released was the ability for Digium Phones to listen to Multicast audio streams. This would allow them to play nicely with other hardware vendors that already produce reliable equipment such as the CyberData SIP Paging Adapter.
There is nothing wrong with this, infact, it is probably a good thing they chose not to make the Switchvox a multicast server. For example, if you have multiple locations that share a single central installation, multicast won’t work.
To handle this you need a multicast server at each location, such as the CyberData unit linked above. But what if you don’t have an extra $400 – $500 for each location just to page?
Building A Multicast Server
If costs are prohibitive, or you simply want to see how it works before commiting to a full featured solution, we can build a simple appliance to handle our needs.
In order to accomplish this task we are going to need some inexpensive hardware.
Start with a Raspberry Pi 3 b+. Anyone will do, but the link above will get you a power supply, heat sinks and a case. Not to mention the raspberry pi. You will need an micorSD card, and if you don’t have one, you can grab 2 below. One for you, one for your phone.
If you haven’t setup a RPi before, its fairly painless, but for our needs we want to download a package to write to our microSD card called raspberry-asterisk available over at http://www.raspberry-asterisk.org.
Instructions for how to write the image to your microSD card can be found in the documentation, as well as how to go about setting up the raspbian OS.
Note: This will install asterisk 13, as well as FreePBX 14. We are not concerned with setting up FreePBX.
Configuring Switchvox & Asterisk
The next thing we need to do is create a SIP Trunk between our Digium Switchvox, and the raspberry-asterisk install. Setup a simple peer in VoIP Providers
And in your raspberry-asterisk the counter side. We set this up as a pjsip trunk using all of the defaults.
Defining your Multicast Addresses
You will need to predefine your multicast addresses, in your switchvox you can select Tools > Multicast Addresses
We have chosen the above address to be our emergency notification address.
Make sure that all of the devices you want to listen to this stream have subscribed. On your Switchvox, you can use the Bulk Modify Extensions, to assign all the desired phones to listen.
You have one more thing to do in the Switchvox, and that is to create an outgoing call rule to access the Multicat Pager. In our example, we will dial 9 + 4 digits to get to a multicast page. This lets us define multiple addresses in the future with out needing to add more rules.
We need to provide asterisk with a dialplan that allows us to perform multicast. SSH into your asterisk install and create the file /etc/asterisk/multicast-pager.conf
exten => s,1,NoOp(Multicast Pager)
exten => s,n,Dial(MulticastRTP/basic/18.104.22.168:32000//c(ulaw))
We also need to add the following lines to /etc/asterisk/extensions_custom.conf
It’s not fancy, but it doesn’t need to be for this. Those of you familiar with asterisk dialplan may quickly see was for improving functionality at this point, but that’s a post for later. For now, let’s get the message out.
Because the raspberry-asterisk uses freepbx, there are some things we need to tell freepbx in order to operate correctly and use this new feature. Start by creating a ‘custom destination’. This will allow you to reference the previously created asterisk file and context.
Now we need a way to send traffic to this newly created destination. While still in FreePBX, create a new inbound route.
Now restart your raspberry-asterisk to make sure everything loaded correctly.
Paging with Multicast
From your Switchvox, you can now dial what every outbound dialplan you created to page with, and you will be able to send a multicast page to those devices listening to the specified multicast address.
One advantage to this is that it does not require a Digium Seat. This is because we are using a SIP Trunk to interface. SIP Trunks do not require a Switchvox LIcense. Most commercial appliances will require a SIP account on the PBX and will not work when setup as a trunk.
Compatible with Digium Cloud
Another awesome side effect is that if you happen to subscribe to Digium Cloud offerings, this solution still works. It’s also more network friendly and resource friendly then trying to page everyone using the built in ‘page’ function from Switchvox.
Do you need a Raspberry Pi? Nope, but it is a lot easier to deploy., You could use a virtual machine, but Multicast and broadcast addresses could be an issue that’s just not worth the headache.
There is a lot of room for improvements, such as adding an authentication PIN before being allowed access, ability to play an announcement from a file, even the ability to buffer a recording and play it back after the caller hangs up.
For the adventurous tinker types, you can even use the raspberry pi to perform other actions, like trigger a GPIO pin to close a contact on a strobe or indicator light.
This post hasn’t gone in to the details of how to add these functionalities but VOICE1 will be providing pre-built systems with support for some of these functionalities (and without the FreePBX interface or overhead) shortly, making it easier for you to have multicast paging at an affordable price.
This setup does not have every feature you might get from a commercial appliance, but it’s not supposed to. You could expand your Pi, if you choose to, but for a simple multicast paging server, this gets the job done.
Ben has been building VoIP solutions for over 10 years, has over 15 years of Linux administration experience and enjoys problem-solving. When he is not coding something in Python, or tinkering with some project, you can often find him wandering through the forests and parks of the Pacific Northwest enjoying waterfalls, trails, and animals.