On Sat, 10 Mar 2012, bilal ghayyad wrote:

If I have information that I need to build a decision in the extensions.conf based on it, and these informations can be obtained using this script, so how I will read these informations? What is the method to read it from the database and store it in a variable that I can use it in the extensions.conf to do proper call routing? How?

We must be mis-communicating something. This is almost exactly the same question you asked a couple of days ago.

Let's walk through what an example of what I think you are asking and see if it answers your questions.

I have a system where calls are answered. The key piece of information at the start of the call is 'what number did the caller dial?' This is frequently (depending on what part of the world you are in) called the DID (Direct Inward Dial) or DNIS (Dialed Number Identification Service). For me, and the industries I work in, it's DNIS.

When a call is received, Asterisk saves the DNIS in the EXTEN channel variable and sends the call to the context (as defined in sip.conf), the exten ${EXTEN}, and the priority 1.

In my dialplan, I save the ${EXTEN} channel variable in a new channel variable named DNIS so it will be obvious to 'the next guy' and it won't change as I bounce around from context to context in my dial plan.

I invoke an AGI in the dialplan using:

        agi(lookup-dnis,${DEBUG-MODE})

Where DEBUG-MODE is a global variable set in the [globals] section of extensions.conf to either be '--debug' or '--null.'

(My AGIs always use the 'getopt_long()' function to parse the command line.)

This AGI reads the DNIS channel variable using (via a library) the AGI command 'get variable' and save it in a variable curiously named 'dnis' in my AGI compliant application.

My AGI uses the dnis to retrieve a row from my CLIENTS, DNISES, RECIPES and STEPS tables using (via a library) the MySQL function 'mysql_query("select ... from ... where ...").'

The retrieved row contains a bunch (up to about a hundred) of columns, most of which my AGI sets as channel variables. Now the cruft from the database is available to the rest of my dialplan and my AGI exits.

Back in my dialplan, I use those channel variables like these AEL snippets:

                set(LANGUAGE()=${INITIAL-LANGUAGE});
                set(RECORDING-PATH=/tmp/${CLIENT-ID}/${CALL-ID}/);
                system(mkdir --parents ${RECORDING-PATH}/tmp/);
                if      ("COMPLIANT" = "${PROMPT-RECORDING-MODE}")
                        {
                        MONITOR_EXEC="/scripts/compliant-mixer.sh";
                        MONITOR_EXEC_ARGS="COMPLIANT OUT";
                        };
// note the 'nested expansion' in the next channel variable
                switch  (${STEP-${IDX}-TYPE})
                        {
                        case AGENT-ID:
                                verbose(1,AGENT-ID);
                                
agi(agent-id,${DEBUG-MODE},${TEST-MODE},${VERBOSE-MODE});
                                break;
                        case BRANCH:
                                verbose(1,BRANCH);
                                
agi(branch,${DEBUG-MODE},${TEST-MODE},${VERBOSE-MODE});
                                IDX=0$[ ${IDX} - 1 ];
                                break;

At the end of the call (in the 'h' extension), I invoke another AGI ('finish-call') which reads various channel variables and writes them into a 'CDR-ish' table which is used to create reports and billing statements.

Does this 'cover the bases?'

--
Thanks in advance,
-------------------------------------------------------------------------
Steve Edwards       [email protected]      Voice: +1-760-468-3867 PST
Newline                                              Fax: +1-760-731-3000

--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
New to Asterisk? Join us for a live introductory webinar every Thurs:
              http://www.asterisk.org/hello

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
  http://lists.digium.com/mailman/listinfo/asterisk-users

Reply via email to