I would appreciate hearing from anyone who has figured this one out.  Here’s the scenario:

I have a context wherein I give the called party the option to dial the digit 9.  If he does so, he is transferred a la this extension entry:

exten => 9,1,Playback(pls-hold-while-try)

exten => 9,n,Noop(Attempting to bridge to ${agentext})

exten => 9,n,Dial(Zap/g9/${agentext}|60|gM(Connect_to_agent^${dnum}))

exten => 9,n,Noop(Done w/ x-fer to agent!)

exten => 9,n,Hangup

 

I simply play a “please hold message,” execute a Noop, and then Dial with g and M.  In this case, the variable agentext has already been assigned a value (“2160”), and the Dial command executes properly, at least AFAIK.  The call gets transferred and the agent’s phone rings.  Now, here’s the catch: I’m trying to pass along some information to the agent before the call gets transferred.  Here’s the dialplan context “Macro-Connect_to_agent”:

[macro-Connect_to_agent]

exten => s,1,DigitTimeout(180)

exten => s,n,Noop(Inside macro, ARG1 is '${ARG1}') ;ARG1 = dnum

exten => s,n,Set(AGENT_TRIES=1)

exten => s,n,Noop(Agent tries = ${AGENT_TRIES})

exten => s,n(repeat),WaitExten(.5)

exten => s,n,Background(your-account)

exten => s,n,Background(number)

exten => s,n,WaitExten(.5)

exten => s,n,SayDigits(${ARG1})

exten => s,n,WaitExten(1.5)

exten => s,n,Set(AGENT_TRIES=$[${AGENT_TRIES} + 1])

exten => s,n,GotoIf($[${AGENT_TRIES} > 40]?10:repeat)

exten => s,n,Noop(How did I get here?!)

exten => 1,1,Noop(Agent pressed ${EXTEN} - call being transferred)

exten => 1,n,ForkCDR()  ; start new CDR if call actually got xfer'd

exten => 1,n,Noop(All done here!)

exten => t,1,Noop(Agent timeout, dropping call anyway)

exten => h,1,Hangup

exten => i,1,Noop(Invalid entry, dropping call to agent)

exten => 10,1,Playback(vm-goodbye)

exten => 10,n,Noop(Agent did not pickup call...)

exten => 10,n,Hangup

 

The idea of this context is to voice a series of digits to the agent who answers the call.  (The digits are passed in the variable “dnum.”)  It repeats over and over again, 40 times before giving up.  This part works well.  After hearing the digits, the agent presses 1 (during the WaitExten app) and the call is connected.  I see this at the CLI:

    -- Executing WaitExten("Zap/49-1", "1.5") in new stack

    -- Attempting native bridge of Zap/1-1 and Zap/49-1

 

Again, that works just fine.  The call is connect as soon as the agent dials the digit 1 (or any digit, it would seem).  However, extension 1 never gets executed.  The call is connected properly, but my Noop’s and my ForkCDR never happen.  When the call is terminated then it returns to the original context.  Here is the CLI for the whole process from the point where I tell the called party to dial 9:

 

    -- Executing Playback("Zap/1-1", "pls-hold-while-try") in new stack

    -- Playing 'pls-hold-while-try' (language 'en')

    -- Executing NoOp("Zap/1-1", "Attempting to bridge to 2160") in new stack

    -- Executing Dial("Zap/1-1", "Zap/g9/2160|60|gM(Connect_to_agent^5012709)")

in new stack

    -- Called g9/2160

    -- Zap/49-1 answered Zap/1-1

    -- Executing DigitTimeout("Zap/49-1", "180") in new stack

    -- Executing NoOp("Zap/49-1", "Inside macro| ARG1 is 5012709") in new stack

    -- Executing Set("Zap/49-1", "AGENT_TRIES=1") in new stack

    -- Executing NoOp("Zap/49-1", "Agent tries = 1") in new stack

    -- Executing WaitExten("Zap/49-1", ".5") in new stack

    -- Timeout on Zap/49-1, continuing...

    -- Executing BackGround("Zap/49-1", "your-account") in new stack

    -- Playing 'your-account' (language 'en')

    -- Executing BackGround("Zap/49-1", "number") in new stack

    -- Playing 'number' (language 'en')

    -- Executing WaitExten("Zap/49-1", ".5") in new stack

    -- Timeout on Zap/49-1, continuing...

    -- Executing SayDigits("Zap/49-1", "5012709") in new stack

    -- Playing 'digits/5' (language 'en')

    -- Playing 'digits/0' (language 'en')

    -- Playing 'digits/1' (language 'en')

    -- Playing 'digits/2' (language 'en')

    -- Playing 'digits/7' (language 'en')

    -- Playing 'digits/0' (language 'en')

    -- Playing 'digits/9' (language 'en')

    -- Executing WaitExten("Zap/49-1", "1.5") in new stack

    -- Attempting native bridge of Zap/1-1 and Zap/49-1

    -- Hungup 'Zap/49-1'

    -- Executing NoOp("Zap/1-1", "Done w/ x-fer to agent!") in new stack

    -- Executing Hangup("Zap/1-1", "") in new stack

  == Spawn extension (blasterisk_english_right_party, 9, 5) exited non-zero on '

Zap/1-1'

    -- Hungup 'Zap/1-1'

 

 

As you can see, the call simply returns to the original context and carries on, in this case executing the Noop that immediate follows the Dial.  For kicks, I’ve tried without the ‘g’ option on the Dial but that made no difference (other than not returning and continuing with the priority following the Dial).

 

Is there any way to get the system to go to extension 1 when the agent dials 1 so that I can do my ForkCDR? 

 

Thanks for your time and sorry for the long post!

 

-MC

 

_______________________________________________
--Bandwidth and Colocation provided by Easynews.com --

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

Reply via email to