In my continuing adventures as an adjunct professor at NYU’s Interactive Telecommunications Program, I taught a new course last semester entitled “Redial: Interactive Telephony“.
The purpose of the course was to utilize emerging telephony technologies, concepts and services such as VoIP as a tool for building interactive applications and devices. ITP students are famous for their imaginative use of new technology. One of my goals in this course was to help them apply some of their creative and critical thinking to new telephony technology in the context of the rich history of telephony.
The course content was focused around voice and touch-tone based applications using Asterisk, SIP, RTP, text to speech (using Festival), speech recognition (using Sphinx) and the like.
The results of this course were truely fantastic and I will take a bit of time in the coming days/weeks to highlight their projects.
For a quick taste, checkout these projects
For now I want to write a bit about using Asterisk in an environment such as this in the hopes that some Asterisk users/developers offer suggestions and perhaps implement some of my suggestions.
We (18+ students in my class, myself and a couple of students following along without actually being members of the class) used an older Intel P3 machine running RedHat Enterprise Linux 4 (as I recall) with the Secure Linux enabled. We used Asterisk 1.2 and each student had a normal linux user account on the machine. We also had Apache 2, PHP, MySQL (running on another machine), PHP AGI, Perl, Festival and Sphinx.
Many of the issues that we ran into were a direct result of running PHP for both AGI scripting in Asterisk and normal web development with Apache. PHP’s safe mode and SE linux contributed to these difficulties.
The problem is that Asterisk was running as the “asterisk” user and Apache was running as a different user. PHP safe mode was relaxed to allow the group to execute the files but this still threw many of us for a loop several times.
I don’t want to whine about this too much as it is what was available and we just had to deal with it. One thing that might help would be to enable suexec within Asterisk so that AGI scripts could run as the owner of the script. This, I believe is how Apache can be setup to handle things and would go a long way towards alleviating many of the issues we had with both security and usability.
The next major problem we had was in developing dialplans and editing other Asterisk configuration files. At first, I setup an extensions file for each student that was included (using #include) in the main Asterisk extensions.conf file. Unfortunately, we ran up against a hard limit to the number of includes that Asterisk would handle and half of the files never got included.
To alleviate that problem, I put together a PHP script and a shell script that would cat together all of the extension files that needed to be included. These scripts also took care of issuing the reload command to the asterisk manager interface. This worked reasonably well but didn’t have any error checking so that if one user’s extensions file had errors or if they used a context that was named the same as another user problems would arise.
This is probably a harder problem to solve in the current design of Asterisk. I am interested in hearing other’s thoughts on how these problem could be solved. My thoughts are that Asterisk could somehow take some pointers from Apache and allow individual users to have a set of configuration files that get included at run time when their extension is entered. Something similar to the concept of a public_html directory. Asterisk when told to go to a specific user’s context would look in a specific directory and include the dialplan from there.
Perhaps I am just dreaming.. ;-) What do you think?
In any case, none of this would have been possible in a world without Asterisk and on behalf of my students and myself a big thank you to all those who have contributed to Asterisk!