Bill Andersen wrote: > Has anyone tried to used VB6 to communicate with the Asterisk Manager? > > If so, would you be willing to share some basic code showing your > approach to getting connected and parsing results? > > I've got a Telnet control that is allowing me to connect, authenticate > and see the "flow" of status, etc., but I'm sure there is a better way > to do this without using Telnet (maybe not?). Any suggestions? > > I want to write a presence monitor (a virtual "sidecar" if you will) > > Bill >
As Razza said, you can just use the winsock control included with VB. The protocol is very simple, basically just name/value pairs delimited by #13#10 (CRLF) with an extra CRLF at the end to denote termination of the packet. Action: Originate Channel: local/[EMAIL PROTECTED] Context: to_meetme Exten: s Priority: 1 Variable: CALLERID(num)=123432|CALLERID(name)=Automated Call Async: true <extra CRLF> <== extra CRLF here. So, like this: 1. Send your properly formatted packet to AMI . 2. Read incoming response terminated by double #13#10. 3. Parse values as you are comfortable with. I am in the process of writing a similar product for one of our customers. Well, a re-write to add features and make it cross platform. Here's a screenshot running on Linux/GTK: http://leebo.dreamhosters.com/images/guiApp.png A couple of side notes from what I've learned myself and read on this mailing list or through the wiki: 1. Packet Volume The volume of messages that you can get from the AMI is impressive. I've tested on our Asterisk system which has only 2 pots lines and two sip trunks with 10 desktop phones and the amount of messages can be staggering! Use a proxy for AMI if you have any decent phone traffic. AstManProxy is VERY propular. I wrote one as well, but its still beta and I think there's another one out there somewhere. Usually with these proxy servers you can filter out unwanted/extraneous events to reduce the amount of messages your app has to contend with. 2. Make good use of Observer/Mediator pattern to distribute events to different parts of your GUI. Monolithic loops to write everything out on a timer's event or after a Sleep() for instance, is not a good way to go in my experience. 3. Check the source for manager interface for changes between Asterisk 1.2 and 1.4 (and 1.6?) if you're using 1.2 or plan to. I believe the latest version of AMI is 1.1 (someone can correct me here). A few label names for some of the AMI packets have been changed and a couple events (like LINK event) have been changed drastically. I originally wrote against the 1.2 Manager interface only to find that I had to refactor some code and write descendant classes to handle the slight differences between the two versions' events. I could have saved myself some work had I thought to look for the changes. I think this link is up to date: http://svn.digium.com/view/asterisk/trunk/doc/manager_1_1.txt?revision=98152&view=markup Happy coding. -- Warm Regards, Lee "Everything I needed to learn in life, I learned selling encyclopedias door to door." _______________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- asterisk-users mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/asterisk-users