[asterisk-users] Passing parameter from executable program to asterisk dialplan
Steve Edwards
asterisk.org at sedwards.com
Sun Jul 25 11:39:32 CDT 2010
>> On Sun, 25 Jul 2010, Muro, Sam wrote:
>>
>>> I am having a problem understanding the way to retrieve some
>>> parameters to asterisk via AGI or what ever method that fits. I have
>>> an executable program that accept one parameter (CALLERID) and return
>>> customer status from the database server which can be printed in the
>>> console.
>>>
>>> #./retrive 0117473789
>>> NAME: Franklin John
>>> STATUS: Active
>>>
>>> Can someone advice on how i can catch this values from AGI or directly
>>> on dialplan.
> Steve Edwards wrote:
>> AGI is a protocol used to interact with Asterisk. An AGI is a separate
>> process created by Asterisk when you execute "agi()" in the dialplan.
>>
>> From best to worst...
>>
>> 1) You could recode your retrieve application so it uses the AGI
>> protocol. Then, you could set channel variables to make these values
>> accessible to the rest of your dialplan.
>>
>> 2) You could cobble up an AGI to execute your retrieve application
>> using a "pipe" ("popen()" in c), parse the output and set channel
>> variables.
>>
>> 3) You could cobble up something to execute your retrieve application,
>> redirecting the output to a file and then use the FILE function read
>> the text file and then parse the output using dialplan functions.
On Sun, 25 Jul 2010, Muro, Sam wrote:
> Option one and two looks more ideal. Let stick on option one, the
> program is written in C++ (Actually is a corba interface). I have tried
> looking on how to write AGI script using C++ in vain. I am used to
> perl/php for scripting.. Can you post a snippet of c++ agi script.
I'm a c weenie myself. I coded my own library way too long ago and
remember the scars :)
If you google for "asterisk agi c++ library" you'll find links to cagi,
quivr, and probably a couple more. I don't know if any are c++ specific.
The basic "outline" is:
call a function to read the AGI environment from stdin. (Mine is
named "agi_read_environment()")
get your customer ID number either from the command line or from a
channel variable. (argv[] or "agi_get_variable("CUSTOMER-ID",
customer_id".)
retrieve your values from your database.
set your channel variables. ("agi_set_variable("CUSTOMER-NAME",
mysql_row[CUSTOMER_NAME])")
--
Thanks in advance,
-------------------------------------------------------------------------
Steve Edwards sedwards at sedwards.com Voice: +1-760-468-3867 PST
Newline Fax: +1-760-731-3000
More information about the asterisk-users
mailing list