Anthony Minessale
2003-Oct-15 08:49 UTC
[Asterisk-Users] Manager Interface Needs a protocol
I was using the Asterisk::Manager perl module and had some troube with it so I decided to make my own. I have a pretty good prototype after a few hours (My main point about the protocol is at the bottom of this example.) http://asterisk.650dialup.com is where you can download it. my $man = init Asterisk::AstMan ({ -user => "asterisk", -secret => "1234", -host => "localhost" }); This auths you and logs you in you can do usual stuff like print $man->command("show agents"); print $man->command("show queues"); print $man->command("show channels"); The cool part is you can register a code ref to a certian Event and then listen on the socket all day and the code registered to that certian event will fire. $newext = sub { # $ref will be a hash ref of all the parameters in the event my $ref = shift; print "New Extension Event Detected\n\n"; }; $man->reg_event("Newexten",$newext); $man->listen(); # a man who listens, won't your wife be jealous ;) Now the program will just sit there and listen to all the event data and calls the function hooked into the Nexexten event whenever it sees it the special event ALL can be used to match every undefined event Now my only problem is that while making this module I started wishing that is was just a tiny bit more like maybe http or imap I dont wanna hack up the code and make my stuff propitary so I was wondering if anyone agrees It is close to being a cut and dry protocol it would be nice to have it uniform. 1 issue I notice is that since you are getting a nonstop flow of events sometimes when you send an Action you have to intercept some of those events and I thought it may be nice to either format the req so you know which reply is for you or to formally request the events to flow rather than have them come by default. I think you can reduce the user's rightst to stop the events but what i was looking for was a common structure. My proposed example uses Content-Length so you know how much to read off the socket but I guess using just <lf> in the data and <cr><lf><cr><lf> as EOR works ok too for variable lengths EXAMPLES... You send your own homeade ReplyID so you recognize your answer. Action: Queues ReplyID: 1234 so then it replies ReplyID: 1234 Content-Desc: Action Content-Type: text/plain Content-Length: 4031 tech_support has 0 calls (max unlimited) in 'ringall' strategy Members: Agent/118 with penalty 1 has taken no calls yet ...................... etc so on or Action: Command ReplyID: 888 Command: show channels .......... To start pouring on the events Action: EventFlow and you get nonstop flow of .. ReplyID: * Content-Desc: Event Content-Type: text/plain Content-Length: 111 Event: Newchannel Channel: Agent/112 State: Up Callerid: *8015711666*1608* Uniqueid: 1066231464.36432kick ASS --------------------------------- Do you Yahoo!? The New Yahoo! Shopping - with improved product search -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.digium.com/pipermail/asterisk-users/attachments/20031015/6852a2d5/attachment.htm