Roaming PBX with Raspberry Pi, Asterisk and chan_dongle

As an frequent tralveller, I well understand the needs of another travelers and citizens of the world in telecommunications ;) While ago I’ve decided to spent my free time building Roaming PBX solution.

Why create AGI?

Asterisk dial-plan is powerful, and possible to create a number of custom voice applications only with its functions... AEL looks like high-level language, of course, it is just a view of standard expressions, same as in extensions.conf, but.
You can manipulate database data through func_odbc, you can call a Linux system script and process result, in case if you want to send a notice about event to a web application, you can use a curl function.
No problem to send out email or jabber/google talk notification...

So, why and when you should use AGI? I believe, correct answers are:
  • Dial-plan is complex, you have a growing amount of huge macros and contexts;
  • System are hosted or cluster with various customers with different needs and functions;
  • You do integration with another application or web app and have to process inbound events (and send outbound);
  • Want to create an API to support 3rd apps;
  • Application API of another application;
  • And most important – database is a core part of application and should access data permanently.
There are many reasons too, but basically it is good to always keep in mind a KISS principle. If task can be resolved without using AGI, do that and use dial-plan. If dial-plan call a lot of external shell scripts – create AGI app.

Click-to-call script

Sharing one my ancient projects with Asterisk: click-to-call library with client and server part. Windows user could activate callto.rb script, the customer just integrated it with their CRM application; after user start script, his SIP phone rings. Here it is: https://github.com/andrius/asterisk-click-to-call-windows.

How to unlock Huawei modem

After last post about GSM gateway based on Raspberry Pi and Huawei modem, I have received few questions like "how to unlock it?" Below is YouTube video describing process.

Asterisk on Raspberry Pi as GSM gateway

Yesterday I've installed chan\_dongle for Asterisk PBX running at Raspberry Pi. What is chan\_dongle? It is driver for Asterisk PBX, that allow to use some Huawei 3G USB dongles as a voice "board" to handle voice, SMS and USSD. Kind of your own self-made single-channel GSM gateway.

Time based conditions in voice (AGI) application

Typical telephony system process incoming call-flow based on different times (and of course customer do want to have control on that, handle time-ranges; also whole platform could be an multi-tenant server with different virtual PBX'es).

Delete voice recordings older than N-days

Disk space running out fast in loaded telephony systems with instant call recording or either with heavy usage of voicemail. It's good to purge them on regular basis.

Questionnaire application with Asterisk PBX AGI + Ruby

Questionnaire application were in production for long time for one small project, now I've decided to share with VoIP community. It's based on AsteriskRuby gem. How it works: for new caller system would play welcome announcement, for returned caller "welcome back" announcement (caller authentication based on callerid number and PIN); upon successful authentication, system will continue from last unanswered question (or will start with first question for new caller); Amount of attempts is unlimited, answers and amount of calls are stored into DB.

Telephony system for remote locations

Who is living far away from home country. Or working remotely. Who is travelling a lot, or have presence in another country — such people or businesses need some telecommunication system, that will keep them connected to the world.

Asterisk AGI sample in bash

Asterisk AGI sample in bash, very interesting. Bash is great alternative in situation when external scripts must be executed to implement functionality Asterisk can't do.