Robby Dermody
2005-Nov-21 17:27 UTC
[Asterisk-Users] inquiry into Asterisk scripting scenario (VXML, AGI, IVR, etc)
Hey guys, I've written an VoIP monitoring and recording application that pulls VoIP phone call data off of the network (in real time) and makes it available for monitoring. Besides being able to listen into these conversations in progress through a web interface, we can actually monitor these conversations over the phone as well. This is done through a VoiceXML script sitting on a Cisco router (which is acting as a VoiceXML voice browser). In this case, the user dials the system (i.e. the router), and the voiceXML script starts executing. The user logs in to my application over the phone through this script, and can listen to a specific agent talking or just sample the agent conversations going through the underlying IPT environment. The playback of the conversations makes use the ability of the Cisco VoiceXML browser to do audio-streaming through the <audio> command. Our goal is to move this functionality off of a cisco router, and onto the same box as my app, using Asterisk (or whatever other open source software may be better suited for this). Basically, Asterisk would be set up as a SIP/H.323 endpoint. If any user wanted to dial into our voice monitoring system, they could just be transferred from the outside IPT phone environment (be it Cisco, Avaya, etc) to our box, and Asterisk would service the call by interacting with my app. This way, there is no extra Cisco router to support, interacting with my app over the phone interface is as easy as setting up a route point in the outside IPT phone environment, and everything fits nicely on one box. I am an Asterisk newbie, and at this point am just asking the question, "is this possible, and how might I go about it (what should I be researching)?" I have done some research, and there doesn't seem to be any real open source VoiceXML 2.x browser implementation that would work with asterisk. From what I can tell, that leaves IVR scripting (such as http://users.pandora.be/Asterisk-PBX/IVR.htm) and AGI (http://home.cogeco.ca/~camstuff/agi.html). Note that this voice application, while not horribly complex, is somewhat complex and requires things such as the following: *Ability to interface with the application via HTTP (sending URL requests and reading back received data): Every interaction between the IVR script and my application is done via HTTP. For example, the command to login a user (once the IVR script has gotten a userID and PIN) may be: http://localhost:1234/login?userID=444&pin=4321, which returns a success/failure code. *G.711 (ulaw) audio streaming via a URL: Monitoring of agents is done by submitting a URL request to my application, which will start streaming back G711 ulaw data (which is the conversation in progress) as it arrives. I see that Asterisk has a MP3Player command that allows streaming mp3 playback. If I can write my own commands, it probably wouldn't be too hard to do the same for g711 ulaw OR linear PCM, if this functionality isn't already available. *Dynamic prompt construction: The IVR interface also allows a user to list the agents active in the environment. With the current voice XML implementation, this is done by querying my application for the list, which my app returns as a voicexml subdialog which control transfers to. This kind of thing is where AGI might win out as the solution to take (as I can whip up and massage the list dynamically easily with a language like Python) I would appreciate opinions of the best way to go about converting this functionality to run on Asterisk. I'm especially interested in AGI, but the documentation I can find on it is rather out of date it appears. If there are any gurus in this field who are interested in helping out with something like this, let me know and I could very possibly compensate financially, if desired. BTW, if I went with AGI, I would be working with Python (the whole app is written in Python/Pyrex, believe it or not! :) Thanks!!! Robby