Problem with playing incall IVR


I am using Asterisk Version 1.4. We are basically trying to provide incall services to the Asterisk SIP users via an IVR menu.

For example:

  1. A and B are in a call
  2. A press “*3” to activate the IVR menu.
  3. Party B is parked while an IVR is being played to party A.

The Dialplan is:

exten => _.,1,Goto(dynamic-nway,s,postparkedstep)

exten => s,n,ParkAndAnnounce(PARKED,20,Local/${EXTEN}@park-and-announce-temp)
exten => s,n(postparkedstep),NoOp(PARKED AT EXTENSION ${PARKEDAT}****)
exten => s,n,Set(DB(LastParkedCall)=${PARKEDAT})

exten => s,1,ChannelRedirect(${BRIDGEPEER},park-other-party,s,1)
exten => s,n,Playback(Press_one_to_pickup_call)
exten => s,n,Read(readdigit,1)
exten => s,n,GoToIf([${readdigit} = 1]?pickup_other:exit)
exten => s,n(exit),Hangup
exten => s,n(pickup_other),ParkedCall(${LastParkedCall})

And here is the applicationmap defined in the features.conf:

dynamic-incall-ivr => *3,self/both,macro,incall-ivr

The above works fine when the calling party invokes the feature code(*3).
The problem occurs when the called party invokes the feature code for playing the ivr. In this case the calling party is not sent to the [park-other-party] context by application channelRedirect and Asterisk issues softhangup on the channel.

The channelRedirect application is correctly breaking the bridged call and sending the called party to some context|exten|prio when dynamic feature code is invoked by calling party

But when the called party invokes the dynamic feature code (*3), channelRedirect should do the opposite i.e breaking the bridged channel and send the calling party to some context|exten|prio. But this is not happening.

Is it possible? If not, then can anyone suggest some other way to do this.


Might blind transfer help?

I don’t think blind transfer will work me as i want to keep both the channels active during the call. i.e the party that invokes the dynamic feature code is presented with an IVR, from where it can invoke many services (like blind transfer, 3-way-conferencing, recording etc). The remote party is parked as soon as the IVR is kicked in, only to be retrieved later so as to provide all the above services.

The Dialplan that i have written below took the clue from wiki page to achieve n-way-conference by calling macro in applicationmap


Then maybe try to hard code the application without using Macro and other “forbidden” elements. Variables should be fine if values have to be passed.