2

In the near future I'm going to be setting up an Asterisk box to handle all the phones in our office (a linux software developer). I've had a play and the basic setup seems fairly simple, and the complex stuff possible.

Should I consider using a GUI such as asterisk-gui or FreePBX? A GUI seems to want to configure things "its way", and sometimes they don't give the level of detail I'd like, but they sure are easy.

One option may be to basically setup the system in the GUI, then edit the config files by hand afterward.

Does anyone have any experience with this?

4 Answers 4

4

Your initial impressions are correct; the GUIs like do to things their way, and attempts to step outside of that box will sometimes be difficult. Think of the way that say Debian does their Apache configuration vs the standard source distribution - one config file vs tens or even hundreds being pulled in via include statements. You will also tend to find multiple levels of macros in GUI distributions, which may make using the config files they create less than optimal.

If you then go to edit the config files they create, you have to be very careful to make your changes in the same parts of the config that the GUI would have let you - otherwise the GUI may not recognize what you've done, or worse yet stamp over what you've done with its own templates because you put the changes in the wrong place.

If you just want to use the GUI to get started, then take over complete control of the configs that will work, but you'll probably be driven to reduce the layers that the GUI was using for your own sanity.

If you want a full level of control (as I did), I would suggest:

  • write your own config files
  • use AEL (Asterisk Extensions Language) for your dialplan instead of the original extensions.conf style. It gives you some flow control and conditional primitives that can be emulated in extensions.conf, but is much easier to plan and visualize
  • use a good text templating utility to simply generation of large dialplan chunks. I use Template-Toolkit because I'm a Perl guy, but there are plenty that can be embedded in other languages or run standalone
  • install one or more GUIs on a development server (or even run them as SIP/IAX only in a VM) so that when one offers a neat feature you can quickly play with it and see what the resulting configs look like

Hope that's of some use to you.

6

Upfront: I used to be a core dev on freepbx, but moved to another company, and unfortunately don't have time for it anymore.

It really depends on your style. Certainly, by hand, you get a ton of control. However, you also have to consider what you are trying to accomplish. In the end, an office PBX generally needs to work in a certain way, and there a bunch of baseline services you need to provide. Writing by hand, you'll end up re-inventing the wheel, writing all those little services and things that every PBX needs to have.

When you use the GUI, you're using code where those things are already written, and collectively the community has figured out the gotchas and has knowledge of what works vs what doesn't. It's also frankly, much faster to do common tasks like setting up a new extension using a GUI, rather than a bunch of config files -- especially if you haven't done it in a few months -- because the GUI is intuitive and easy to pick back up.

As far as customization, writing by hand you no doubt can do whatever you want. However, freepbx in particular allows for quite a bit to be done via plugins - a plugin can more or less modify any part of the dialplan. There is a layer of abstraction from pure asterisk dialplan code, so if you know asterisk already, you'll have to re-learn some of this, but it's not that big a leap.

There's also nothing stopping you from adding your own custom apps (written by hand) when you do need to deviate from stock PBX functionality, and freepbx makes it easy to reference those from the GUI, seamlessly tying them in like a native app (either via plugins, or just custom actions).

I originally got involved with Freepbx because I was setting up an office PBX, and I'm lazy - adding extensions by hand, and remembering to add appropriate hooks to go to voicemail, and enable other features etc, is repetitive, boring, and error-prone (eg "whoops, bob's extension goes to dave's voicemail? sorry, it was a typo!").

I can't speak for every GUI, but I would not suggest using freepbx to generate config files with the goal of later editing them by hand: it is designed to be efficient for asterisk and the plugin code, not human-readable. (eg, it sometimes repeats chunks of code instead of using a macro). On top of that, if you ever generate configs via freepbx again, you'll lose any changes you made to the auto-generated files.

Sure, editing by hand will yield a more efficient dialplan in the end, just like writing programs by assembly is more efficient for the CPU than writing in C++. You have to consider what is more valuable - $100 for a bigger CPU, or many (potentially hundreds of) hours of your time?


It'd be interesting to hear your experiences, now that it's a couple months later.

2

Virtually everything you would want to do can be done with the FreePBX "system" (it's more than a GUI.) AND, FreePBX sets up an awful lot for you right out of the box, that would otherwise be difficult to a new Asterisk admin.

FreePBX does also have facilities where you can override the configs it creates, in the event that it can't do what you want through the web interface.

1

No, GUI for Asterisk is misleading. All GUIs tend to change Asterisk's conf files and they teach bad (read proprietary) practices. Digium makes changes to Asterisk syntax with each major releases and you need keep up with that. Adding GUI's own config logic upon that, is unnecessary overhead. My perfect Asterisk GUI would be totally unintrusive. It would just listen on port 5038 for Manager events and report them. Issue commands as well. Bout would not need any inside plumbing.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .