We’re making steady progress on the Incredible PBX for Asterisk-GUI project. If you didn’t read last week’s introductory article, start there. This week we’ve had to wrestle with one of the stark realities of taking someone else’s turnkey code and attempting to bolt on enhancements. As previously noted, Asterisk-GUI works all of its magic by manipulating Asterisk® config files directly with no outside storage of settings in either MySQL or the Asterisk DB. This is a good thing… at least until you try to add new features while leaving the basic Asterisk-GUI code intact. That was one of our primary objectives.
This is the second installment in our series. You can catch up with the Overview as well as Chapter 1 and Chapter 3 here.
Simplifying Credentials Management with Incredible PBX
Here’s the problem. We wanted to separate out the credentials for various providers so it would be easy for first-time users to set up a server without having to master Asterisk or the Asterisk-GUI. As we mentioned, this has been the number #1 complaint with the FreePBX® way of doing things. You almost needed to go back to college for another degree before you could make your first phone call. To get a functional VoIP server with one extension and one outbound trunk, it required creation of an extension, registration of a trunk with obscure settings that are different for almost every provider, creation of an inbound and outbound route with settings for how to actually route the calls in and out. And then there was configuration of some less-than-intuitive SIP settings. That’s before you ever start thinking about security and a firewall. Life’s too short!
But we encountered some stumbling blocks with Asterisk-GUI as well. It was rewriting our credentials_sip.conf file whenever Asterisk-GUI was actually used to add a new user (extension) or trunk. Worse yet, it was rewriting the entries incorrectly because the developers forgot about a special syntax in Asterisk that we’ll get to in a minute.
We first thought we could solve the rewriting of our config files by limiting write permissions on our new credentials files to the root user. Asterisk and Asterisk-GUI both run as the asterisk user so this would have been an easy fix. Well, no cigar. Asterisk-GUI outsmarted us by quietly aborting the update when it didn’t have ownership of our .conf files. This meant you never could use the Asterisk-GUI for much of anything, not exactly what we had in mind.
Lucky for us, one of the developers forgot about our favorite Linux utility, chattr. This lets you set the immutable bit to prevent all users (including root) from changing the contents of a file. Since Asterisk-GUI sometimes skips error checking after it’s sure it owns the .conf files, it was perfect. We could "hide" settings in our own credentials_sip.conf file without worrying that they’d be overwritten by Asterisk-GUI. The only trick is remembering to turn the immutable bit off when we want to make updates and, of course, turning it back on once we’re finished so that Asterisk-GUI doesn’t mangle the settings when you use Asterisk-GUI for other things. Of course, it also means you’ll need to log in as root to set up credentials for the "Incredible 9″ trunks, but that’s a walk in the park. In fact, that’s the beauty of using chattr in the first place.
For those that love to wade into the weeds of Asterisk design, there is another feature which permits storage of additional settings for any [context]. You simply create [context](+) in a separate file using the same name as the original context. When you reload Asterisk, it blends all of the entries from the two contexts. That’s exactly what we needed in order to simplify storage of credentials for providers using our own config files. Unfortunately, the Asterisk-GUI developers forgot about this syntax and removed our [context](+) entries presumably thinking they were bad code. This left the credentials themselves sitting in a config file with no context, and that wreaked all sorts of havoc in Asterisk-GUI. So now you know why we needed write protection for our credentials_sip.conf file.
Speaking of credentials, here’s how the default credentials_sip.conf file actually looks. To edit the file, you start by removing the immutable bit: chattr -i credentials_sip.conf. Never comment out the host entries or Asterisk dies! Host names may need to be changed depending upon the server on which your provider sets up your individual account. Everything else is simple enough for anyone to master without a tutorial. Plug in your ACCTNAME and ACCTPASS and uncomment the affected lines by removing the semicolons for any trunk you wish to use. Save your settings. Don’t forget to reprotect the file when you’re finished: chattr +i credentials_sip.conf. Finally, restart Asterisk: service asterisk restart. We plan to add scripts to automatically manage these trunk settings, but we wanted you to know how everything actually worked so you can do it yourself should you ever feel the urge.
[voipms](+) ; VoIP.ms trunk Prefix: Dial 9 ;username = ACCTNAME ;secret = ACCTPASS host = atlanta.voip.ms [Vitelity](+) ; Vitelity trunk Prefix: Dial 8 ;username = ACCTNAME ;secret = ACCTPASS host = inbound1.vitelity.net [lesnet_peer](+) ; Les.net trunk Prefix: Dial 7 ;username = ACCTNAME ;secret = ACCTPASS host = did.voip.les.net [ipcomms](+) ; IPcomms trunk Prefix: Dial 6 ;username = ACCTNUM ;fromuser = ACCTNUM ;secret = ACCTPASS host = 2way.ipcomms.net [didlogic](+) ; DIDlogic trunk Prefix: Dial 5 ;username = ACCTNUM ;secret = ACCTPASS host = sip.didlogic.net [CallCentric](+) ; CallCentric trunk Prefix: Dial 4 ;username = ACCTNUM ;fromuser = ACCTNUM ;authuser = ACCTNUM ;secret = ACCTPASS host = callcentric.com [FutureNine](+) ; FutureNine trunk Prefix: Dial 3 ;username = ACCTNUM ;secret = ACCTPASS host = incoming.future-nine.com
I hear some of you squawking, "Why do you call it ‘Incredible 9’ when there are only 7 providers?" The answer is that Google Voice is managed separately in credentials_googlevoice.conf because it operates differently in Asterisk. Anveo Direct also has a different way of handling outbound SIP calls. A PIN is required as part of the dial string. That PIN is managed separately in credentials_extensions.conf. So… 7 + 2 = 9.
Linux Application Framework for Incredible PBX
We also wanted to simplify the process of adding new Linux utilities to our Incredible PBX setup for Asterisk-GUI. You may know that Asterisk-GUI runs under a lean, mean web server that’s actually part of Asterisk. By default, it operates on port 8088. We wanted to leave it that way to simplify the procedure for compiling Asterisk to run as the asterisk user as opposed to the root user. The Asterisk web server never was intended to compete with Apache, and there is no support for PHP much less MySQL. In order to use the dozens of Incredible PBX utilities and databases as well as all of the text-to-speech and speech recognition tools, we needed Apache, PHP, and MySQL. So our design decision was to run Apache on port 80 with full PHP support and then run MySQL in the same way it has been installed on LAMP servers since Day One.
That design meant we still needed a separate web site to support Incredible PBX utilities. Luckily, our friends at Kennon Software built a beautiful user interface for PBX in a Flash many years ago. With some minor tweaking to account for newer releases of PHP, it was a perfect fit for Incredible PBX as you can see at the top of this article. It has all the things we were looking for including an RSS Feed to provide emergency announcements. It also provides developers unlimited flexibility to add local applications and make other modifications as desired for both end-users and administrators. So our tip of the hat again goes to Kennon Software for their terrific open source contribution to our projects.
Choosing a Linux Platform for Incredible PBX
Speaking of Linux, we’re often asked what’s the best Linux platform on which to run Incredible PBX. Our stock answer is ALL OF THE ABOVE. Incredible PBX has been and is being engineered to run well on almost any Linux platform. We plan to initially release Incredible PBX for Asterisk-GUI on the CentOS/Scientific Linux 6.5 platform, but we’ll add Ubuntu 14.04 and Debian in coming weeks. In this way, we can support all of our favorite low-cost hardware platforms including the Raspberry Pi, BeagleBone Black, CuBox, PogoPlug, and anything else we can get our hands on.
Adding Inbound & Outbound Dialplan Code to Incredible PBX
This week we also tackled some of the other items on the Wish List. We’ve heard from a number of folks that wanted a simple way to add customized dialplan code whenever a call was made or received. That was an easy one. In extensions_custom.conf, you’ll now find the following contexts which can be enhanced in any way you choose. Just plug your additional code into each context between the two default entries.
[incoming-sub] exten => incoming-sub_1,1,Noop(*** Incoming: ${CALLERID(all)} on ${CHANNEL} ***) exten => incoming-sub_1,n,Return() [outgoing-sub] exten => outgoing-sub_1,1,Noop(*** Calling: ${CALLERID(dnid)} from ${CALLERID(all)} ***) exten => outgoing-sub_1,n,Return()
Managing Incoming Calls to "Incredible 9″ Trunks
We haven’t (yet) come up with a really simple way to adjust how inbound calls to our preconfigured trunks are processed because of the basic Asterisk-GUI design. In a nutshell, incoming calls come into your PBX on a phone number, aka DID. That DID is associated with a trunk that you’ve registered to a specific provider. Once the call hits Incredible PBX, we need to tell the PBX where to route the call. Typical choices include an extension, a group of extensions (i.e. a ring group), an IVR, or an AutoAttendant. There are others. In extensions.conf, you will find the dialplan code to manage incoming calls to the "Incredible 9″ trunks. The setup for each of the 9 trunks looks like this:
[DID_Vitelity] include = DID_Vitelity_default [DID_Vitelity_default] exten = _.,1,Set(CALLERID(name)=${CALLERID(number)}) exten = _.,n,Set(CALLERID(number)=${CALLERID(number):0:10}) exten = _.,n,Gosub(cidlookup,cidlookup_1,1()) exten = _.,n,ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)})) exten = _.,n,Gosub(incoming-sub,incoming-sub_1,1()) ;exten = _.,n,Goto(default,6001,1) ;exten = _.,n,Goto(ringroups-custom-1,s,1) ;exten = _.,n,Goto(voicemenu-custom-2,s,1) exten = _.,n,Goto(voicemenu-custom-1,s,1) [CallingRule_OutVitelity] exten = _8NXXNXXXXXX,1,Macro(trunkdial-failover-0.4,${Vitelity}/${EXTEN:1},,Vitelity,) exten = _81NXXNXXXXXX,1,Macro(trunkdial-failover-0.4,${Vitelity}/${EXTEN:2},,Vitelity,)
In the Asterisk-GUI world, a [DID_provider] context manages incoming calls FROM a provider’s DID or trunk. And a [CallingRule_provider] context manages outbound calls TO your provider’s trunk. In the default Vitelity setup, incoming Vitelity calls get routed to voicemenu-custom-1, and outbound calls with an 8 prefix get routed out through your Vitelity trunk. As noted, all of these contexts can be found in extensions.conf.
Toward the end of the default context you will see two voicemenu-custom entries as well as a ringroups-custom-1 entry and a default entry with an extension number. All but one of these is commented out. As you have probably guessed, the uncommented entry determines where the incoming call is routed. When you create IVRs or ring groups in Asterisk-GUI, each new creation gets assigned a sequential number starting with 1. ringroups-custom-1 is a preconfigured Ring Group that currently sends calls to extensions 6001 and 6002, the two extensions created in the Incredible PBX default setup. If you add additional extensions and then add those new numbers to this preconfigured ring group, then those phones will ring as well. It does NOT change the sequential number originally assigned to this ring group. Adding a new ring group does that.
In Asterisk-GUI, IVRs and AutoAttendants are called Voice Menus. Incredible PBX ships with two. Voice Menu #1 is the Nerd Vittles’ Stealth AutoAttendant. It greets the caller with a cheery message from Allison while providing a couple seconds for someone (like you) to press a button to reroute the call to an undisclosed destination. If no key is pressed, the incoming call is routed to Ring Group #1.
Voice Menu #2 is a Demo IVR that showcases many of the Nerd Vittles applications. By default, all "Incredible 9″ trunks are configured to route incoming callers through the Stealth AutoAttendant to Ring Group #1. If you’d prefer to route incoming calls to a ring group or a particular extension or the demo IVR, the commented out entries will let you do that.
But suppose you wanted to route an incoming call to a custom extension defined in extensions_custom.conf? Well, it’s easy. Just change the context to CallingRule_extensions_custom and route the call to line 1 of the extension context desired. For example, to send an incoming call to the AsteriDex Voice Dialer (411) which lets callers say the name of the party they wish to reach, you’d insert a call destination entry that looked like this:
exten = _.,n,Goto(CallingRule_extensions_custom,411,1)
Better yet, you can use the generic dialplan context, DLPN_DialPlanMain, to reach any extension on your server:
exten = _.,n,Goto(DLPN_DialPlanMain,411,1)
As you add new ring groups, extensions, and voice menus with Asterisk-GUI, you can adjust these settings accordingly now that you know how all of this works. After making changes in extensions.conf, be sure you’ve only enabled ONE destination per trunk by commenting out the rest of them. Then reload your dialplan: asterisk -rx "dialplan reload"
Free Worldwide Calling Support with Incredible PBX
We mentioned last week that iNum support will be included through two SIP providers to let you make free phone calls worldwide to anyone with a registered iNum. SIP URIs are equally important for the same reason. You can make a free call to anyone, anywhere in the world if the recipient happens to have a SIP URI, and sip2sip.info will provide a free one to anybody. To support SIP URIs, Incredible PBX for Asterisk-GUI includes a new context that will let you link a SIP URI to an extension on your PBX. We’ve included an entry for L-E-N-N-Y to get you started. You can add as many more as you like:
[CallingRule_SIP_URI] exten = 53669,1,Dial(SIP/2233435945@sip2sip.info)
CallerID Name Lookups with Incredible PBX
On the CallerID Name front, we’re still exploring alternatives including incorporation of CallerID Superfecta which originally was a Nerd Vittles creation. It now is maintained by the POSSA Development Team. In the interim, we’ve provided code for one of the best CNAM sources in the business, OpenCNAM. It gets you 10 free lookups an hour from cached entries. If you need more, you can sign up for an account. For completed calls, there is a charge of $.004. Just adjust the CURL entry below to plug in your credentials:
[cidlookup] exten => cidlookup_1,1,Set(CURLOPT(httptimeout)=7) exten => cidlookup_1,n,Set(CALLERID(name)=${CURL(https://account_sid:auth_token@api.opencnam.com/v2/phone/${CALLERID(num)}?format=pbx&ref=incrediblepbx)}) exten => cidlookup_1,n,Set(current_hour=${STRFTIME(,,%Y-%m-%d %H)}) exten => cidlookup_1,n,Set(last_query_hour=${DB(cidlookup/opencnam_last_query_hour)}) exten => cidlookup_1,n,Set(total_hourly_queries=${DB(cidlookup/opencnam_total_hourly_queries)}) exten => cidlookup_1,n,ExecIf($["${last_query_hour}" != "${current_hour}"]?Set(DB(cidlookup/opencnam_total_hourly_queries)=0)) exten => cidlookup_1,n,ExecIf($["${total_hourly_queries}" = ""]?Set(DB(cidlookup/opencnam_total_hourly_queries)=0)) exten => cidlookup_1,n,Set(DB(cidlookup/opencnam_total_hourly_queries)=${MATH(${DB(cidlookup/opencnam_total_hourly_queries)}+1,i)}) exten => cidlookup_1,n,ExecIf($[${DB(cidlookup/opencnam_total_hourly_queries)} >= 60]?System(${ASTVARLIBDIR}/bin/opencnam-alert.php)) exten => cidlookup_1,n,Set(DB(cidlookup/opencnam_last_query_hour)=${current_hour}) exten => cidlookup_1,n,Return() exten => cidlookup_return,1,ExecIf($["${DB(cidname/${CALLERID(num)})}" != ""]?Set(CALLERID(name)=${DB(cidname/${CALLERID(num)})})) exten => cidlookup_return,n,Return() ;--== end of [cidlookup] ==--;;end of Incredible PBX original build file
Managing Outbound CallerID & PINs with Incredible PBX
There appear to be a few leftover CallerID bugs in the original Asterisk-GUI code. As a workaround, we’ve added support for setting CallerID numbers in credentials_extensions.conf. This lets you set outbound CallerID numbers on a per trunk basis for providers that allow spoofing of CallerID numbers.
Here’s what the complete credentials_extension.conf file actually looks like. The AnveoPIN is the code used to authorize outbound calls through Anveo Direct. Anveo handles outbound calling differently than most providers so the setting had to go here instead of in the more traditional credentials_sip.conf file. Sorry. The other entries are self-explanatory. This config file can be edited using your favorite text editor. Then service asterisk restart and you’re done.
AnveoPIN = 024680 ; Conference Bridge PINs CONF_USER_PIN = 1234 CONF_ADMIN_PIN = 4321 ; DISA password DISA_PW = 9876 ; CallerID numbers CID_allroutes = 8005551212 CID_CallCentric = 8005551212 CID_ipcomms = 8005551212 CID_voipms = 8005551212 CID_anveodirect = 8005551212
Outbound Call Processing with Incredible PBX
With apologies to our international friends, we’ve included a template to handle processing of all outbound U.S. calls using the "Incredible 9″ trunks. Basically, you can dial a 10-digit number or 1+ the 10-digit number, and the [outbound-allroutes] context will walk the call through all of the trunks for which you’ve registered including Google Voice. If a trunk isn’t registered, it’s skipped. The arrangement of the trunks can be adjusted to meet your own needs. As delivered, calls are processed in the following order: Google Voice, VoIP.ms, Vitelity, les.net, IPcomms, DIDlogic, CallCentric, FutureNine, and Anveo Direct. You obviously can add as many additional providers as desired or rearrange the ones that already are included. And international calling can be added easily using the existing entries as a model. Cut-and-paste is your friend!
[outbound-allroutes] exten => _NXXNXXXXXX,1,Set(CALLERID(num)=${CID_allroutes}) exten => _NXXNXXXXXX,n,Dial(Motif/GoogleVoice/1${EXTEN}@voice.google.com) exten => _NXXNXXXXXX,n,Dial(${voipms}/${EXTEN}) exten => _NXXNXXXXXX,n,Dial(${Vitelity}/${EXTEN}) exten => _NXXNXXXXXX,n,Dial(${lesnet_peer}/1${EXTEN}) exten => _NXXNXXXXXX,n,Dial(${ipcomms}/${EXTEN}) exten => _NXXNXXXXXX,n,Dial(${didlogic}/1${EXTEN}) exten => _NXXNXXXXXX,n,Dial(${CallCentric}/1${EXTEN}) exten => _NXXNXXXXXX,n,Dial(${FutureNine}/1${EXTEN}) exten => _NXXNXXXXXX,n,Dial(SIP/${AnveoPIN}1${EXTEN}@sbc.anveo.com) exten => _NXXNXXXXXX,n,Hangup exten => _1NXXNXXXXXX,1,Set(CALLERID(num)=${CID_allroutes}) exten => _1NXXNXXXXXX,n,Dial(Motif/GoogleVoice/${EXTEN}@voice.google.com) exten => _1NXXNXXXXXX,n,Dial(${voipms}/${EXTEN:1}) exten => _1NXXNXXXXXX,n,Dial(${Vitelity}/${EXTEN:1}) exten => _1NXXNXXXXXX,n,Dial(${lesnet_peer}/${EXTEN}) exten => _1NXXNXXXXXX,n,Dial(${ipcomms}/${EXTEN:1}) exten => _1NXXNXXXXXX,n,Dial(${didlogic}/${EXTEN}) exten => _1NXXNXXXXXX,n,Dial(${CallCentric}/${EXTEN}) exten => _1NXXNXXXXXX,n,Dial(${FutureNine}/${EXTEN}) exten => _1NXXNXXXXXX,n,Dial(SIP/${AnveoPIN}${EXTEN}@sbc.anveo.com) exten => _1NXXNXXXXXX,n,Hangup
DISA Support for Incredible PBX
Unless we missed it, Asterisk-GUI was missing DISA support, the ability to call your PBX and receive dialtone to make an outbound call through the PBX. Because of costs associated with outbound calls, this can make a real difference in some countries. We’ve added DISA support through the D-I-S-A (3472) extension. The DISA password can be set in credentials_extensions.conf. The DISA extension can be added to an IVR for one or more trunks to provide password-protected DISA call access to incoming callers. The dialplan code can be adjusted to meet your own requirements. As delivered, only 10-digit calls are permitted. Just change the 10 on line 10 if you want to enable international dialing. Calls are limited to 150 minutes by default. Just change the 9000 (seconds) entry as desired.
[custom-disa] exten => s,1,Answer exten => s,n,Wait(1) exten => s,n,Set(TIMEOUT(digit)=7) exten => s,n,Set(TIMEOUT(response)=10) exten => s,n,Background(enter-password) exten => s,n,Read(MYCODE,beep,7) exten => s,n,Noop(DISA_PW: ${DISA_PW}) exten => s,n,GotoIf($["${MYCODE}" = "${DISA_PW}"]?disago:bad,1) exten => s,n(disago),Set(TIMEOUT(absolute)=9000) exten => s,n,Read(NUM2CALL,pls-entr-num-uwish2-call,10) exten => s,n,Background(calling) exten => s,n,SayDigits("${NUM2CALL}") exten => s,n,Goto(outbound-allroutes,${NUM2CALL},1) exten => s,n,Hangup exten => t,1,Hangup exten => i,1,Hangup exten => h,1,Hangup exten => bad,1,Hangup
Call Forwarding Support with Incredible PBX
We have restored the call forwarding functionality that originally was missing in Asterisk-GUI. The same feature codes found in FreePBX are supported. By dialing *72, you can set forwarding for any extension to either a local number or any other number supported by your dial plan. By dialing *72NXXNXXXXXX or *726XXX (local extensions typically are in the 6000-6299 range with Asterisk-GUI), you can set call forwarding in a single step. *73 can be used to disable call forwarding for the extension from which you dialed, or *74 can be used to disable call forwarding for any extension on your server. A list of currently forwarded extensions can be retrieved using the Asterisk CLI: asterisk -rx "database show CF"
Conference Bridge Support in Incredible PBX
As previously mentioned, Conference Bridge support wasn’t available when Asterisk-GUI was released so we’ve added it. Just dial C-O-N-F (2663) to join the conference bridge. User and admin PINs are set in the credentials_extensions.conf file. You can create as many of these as you need by cloning the code below with different extension numbers:
[conf_bridge] exten => 2663,1,Macro(user-callerid,) exten => 2663,n,Set(MEETME_ROOMNUM=2663) exten => 2663,n,Set(MAX_PARTICIPANTS=0) exten => 2663,n,Set(MEETME_MUSIC=default) exten => 2663,n,GotoIf($["${DIALSTATUS}" = "ANSWER"]?READTHEPIN) exten => 2663,n,Answer exten => 2663,n,Wait(1) exten => 2663,n,Set(PINTRIES=0) exten => 2663,n,Noop(${CONF_USER_PIN}) exten => 2663,n(READTHEPIN),Read(PIN,enter-conf-pin-number,,,,) exten => 2663,n,GotoIf($[${PIN} = ${CONF_USER_PIN}]?ENDUSER) exten => 2663,n,GotoIf($[${PIN} = ${CONF_ADMIN_PIN}]?ADMINISTRATOR) exten => 2663,n,Set(PINTRIES=$[${PINTRIES}+1]) exten => 2663,n,GotoIf($[${PINTRIES}>3]?h,1) exten => 2663,n,Playback(conf-invalidpin) exten => 2663,n,Goto(READTHEPIN) exten => 2663,n(ADMINISTRATOR),Set(CONFBRIDGE(user,admin)=yes) exten => 2663,n,Set(CONFBRIDGE(user,marked)=yes) exten => 2663,n,Set(CONFBRIDGE(user,dsp_drop_silence)=yes) exten => 2663,n,Set(CONFBRIDGE(user,talk_detection_events)=yes) exten => 2663,n,Set(CONFBRIDGE(user,announce_user_count)=yes) exten => 2663,n,Set(CONFBRIDGE(user,announce_join_leave)=yes) exten => 2663,n,Set(CONFBRIDGE(user,music_on_hold_when_empty)=yes) exten => 2663,n,Goto(ext-meetme,STARTMEETME,1) exten => 2663,n(ENDUSER),Noop(User Options:) exten => 2663,n,Set(CONFBRIDGE(user,dsp_drop_silence)=yes) exten => 2663,n,Set(CONFBRIDGE(user,talk_detection_events)=yes) exten => 2663,n,Set(CONFBRIDGE(user,announce_user_count)=yes) exten => 2663,n,Set(CONFBRIDGE(user,announce_join_leave)=yes) exten => 2663,n,Set(CONFBRIDGE(user,music_on_hold_when_empty)=yes) exten => 2663,n,Goto(ext-meetme,STARTMEETME,1) exten => 2663,hint,confbridge:2663
Google Voice Support in Incredible PBX
Google Voice is another little goodie that wasn’t available when Asterisk-GUI came along. Because we’re now running everything on the Asterisk 11 platform, it seemed silly not to include Google Voice support. And we’ve made it about as easy to set up as tying your shoes. Plug in your Google email address and password using the new web interface, and you’re done. By default, all 10-digit and 11-digit outbound calls are first attempted through your Google Voice trunk. You can’t beat free!
If you’ve used the same account elsewhere, Google may block access from your new IP address. In this case, just follow the steps outlined in this Google Reset Procedure to get things going.
Managing Call Detail Records (CDR) in Incredible PBX
The gorgeous CDR Viewer found under the Options -> Advanced Options -> Enable tab in Asterisk-GUI is incredibly flexible. In addition to being lightening fast, you can reorder the CDR listing by simply clicking on any column heading. Clicking twice will sort the list in the opposite order. You also can expand the detail in two ways. Either click on an individual entry (as shown) to display the complete CDR entry or check the Show All Fields checkbox to get the full picture for every CDR entry. The complete CDR database in CSV format can be retrieved from /var/log/asterisk/cdr-csv/Master.csv.
Getting Up to Speed on Asterisk-GUI Basics
We’ve covered a lot of territory this week. You don’t have to master it all at once. Incredible PBX is being engineered to give you the best of both worlds rather than one size fits all. By setting things up this way, you can add your own features and share them with the community as you move up the learning curve. That’s what open source is all about!
The other goal was to leave Asterisk-GUI intact to the greatest extent possible. This has several advantages. First, for previous users of Asterisk-GUI, they’ll feel right at home. Second, we don’t have to write extensive documentation for Asterisk-GUI because many others have already done the heavy lifting. One obvious word of caution. Don’t delete, rename, or otherwise modify the default trunks, users, calling rules, ring groups, and dialplans that already have been created to support Incredible PBX. If you do, you will break things. But feel free to add as many new pieces to your setup as desired and, of course, the extension passwords can be changed in any way you like. Trunk credentials for the "Incredible 9″ preconfigured trunks should be managed using the credentials files documented above.
Here are a few resources that will guide you through mastering the Asterisk-GUI:
- The Asterisk Appliance 50 Admin Manual (Chapter 3)
- AsteriskNOW Lab Tutorial
- MyPBX SOHO User’s Manual
- ATCOM User’s Manual
Remember the Objective of Incredible PBX for Asterisk-GUI
We’ll close for today by reiterating why we’re introducing a new VoIP alternative with Incredible PBX for Asterisk-GUI. From the ground up, this project is designed as an open source, hobbyist platform so that you can actually LEARN how Asterisk works and become self-sufficient in designing AND managing your own VoIP communications platform. Is it "Pure GUI"? Nope. Here’s why. One of the major reasons that so many folks have had their VoIP systems hacked over the past few years is because those users never quite understood how their "Pure GUI" stuff was working (or not) under the hood.
Does "hobbyist platform" mean it’s a Crappy Purple Scion? Nope. In fact, the Asterisk-GUI tools and Asterisk code in Incredible PBX were designed and written by some of the best Asterisk experts in the business including Mark Spencer, the creator of Asterisk. When the nay-sayers snicker at your "hobbyist platform," just smile and enjoy your independence. 🙂
Originally published: Monday, December 8, 2014
Need help with Asterisk? Visit the PBX in a Flash Forum.
Special Thanks to Our Generous Sponsors
FULL DISCLOSURE: ClearlyIP, Skyetel, Vitelity, DigitalOcean, Vultr, VoIP.ms, 3CX, Sangoma, TelecomsXchange and VitalPBX have provided financial support to Nerd Vittles and our open source projects through advertising, referral revenue, and/or merchandise. As an Amazon Associate and Best Buy Affiliate, we also earn from qualifying purchases. We’ve chosen these providers not the other way around. Our decisions are based upon their corporate reputation and the quality of their offerings and pricing. Our recommendations regarding technology are reached without regard to financial compensation except in situations in which comparable products at comparable pricing are available from multiple sources. In this limited case, we support our sponsors because our sponsors support us.
BOGO Bonaza: Enjoy state-of-the-art VoIP service with a $10 credit and half-price SIP service on up to $500 of Skyetel trunking with free number porting when you fund your Skyetel account. No limits on number of simultaneous calls. Quadruple data center redundancy. $25 monthly minimum spend required. Tutorial and sign up details are here.
The lynchpin of Incredible PBX 2020 and beyond is ClearlyIP components which bring management of FreePBX modules and SIP phone integration to a level never before available with any other Asterisk distribution. And now you can configure and reconfigure your new Incredible PBX phones from the convenience of the Incredible PBX GUI.
VitalPBX is perhaps the fastest-growing PBX offering based upon Asterisk with an installed presence in more than 100 countries worldwide. VitalPBX has generously provided a customized White Label version of Incredible PBX tailored for use with all Incredible PBX and VitalPBX custom applications. Follow this link for a free test drive!
Special Thanks to Vitelity. Vitelity is now Voyant Communications and has halted new registrations for the time being. Our special thanks to Vitelity for their unwavering financial support over many years and to the many Nerd Vittles readers who continue to enjoy the benefits of their service offerings. We will keep everyone posted on further developments.
Some Recent Nerd Vittles Articles of Interest…
Ward, a slight point of correction. This article states that the Superfecta module is maintained by Lorne Gaetz. Superfecta is currently maintained by the PBX Open Source Software Alliance (POSSA) of which I am but a member. I devote a bit of time to organizing things, but the much of the code that Superfecta users enjoy comes from amateur coders from all timezones and walks of life as well as from regular POSSA members. While I doubt any of POSSA’s contributors feel slighted, I would appreciate a correction to prevent anyone from thinking that my meager contributions alone are somehow responsible for keeping Superfecta going.
Thanks.
[WM: My apologies to the entire POSSA team! Thanks.]