FreePBX | Register | Issues | Wiki | Portal | Support

Freepbx Survey


Queues Pro has an option for this. Caller post hang up destination.

(Itzik) #22

Agent post hangup. If the caller hangs up you have no way of playing anything…


As far as I understand, until now, the discussion was about solution that will not require a commercial module.

Is there an option to keep it that way?


(Dickson) #24

Sorry, I should have given an update on this.
I’m working on the automatic survey right now. I got it to the point where i’ve intercepted the hangup, and can differentiate between the agent and caller, just can’t stop the caller from disconnecting.
I did code for something like this back in the Trixbox days, sadly most of their forum branches where I think I posted this are no longer available. Having to re-invent the wheel.


Actually the field in FreePBX is called " Caller Post Hangup Destination"

Destination to send the caller to upon the agen hanging up the call

The other field is called “Agent Post Hangup Destination”

That field has to do with where to send the agent after a caller hangs up.

(Jerson Jr) #26

I use Queue option c

c - Continue in the dialplan if the callee hangs up.

(Dickson) #27

@comtech I believe Caller Post Hangup Destination is a queue plus module though. The group asking don’t have it available. The “C” is the path i’ve been testing.

(Jerson Jr) #28

C - Mark all calls as “answered elsewhere” when cancelled.
c - Continue in the dialplan if the callee hangs up.

c is different of C

An example of queue

exten => 300,n(qcall),Queue(300,${QOPTIONS}c,${QAANNOUNCE},${QMAXWAIT},${QAGI},${QGOSUB},${QRULE},${QPOSITION})
exten => 300,n,Macro(blkvm-clr,)
exten => 300,n,Gosub(sub-record-cancel,s,1())
exten => 300,n,Set(__NODEST=)
exten => 300,n,Set(_QUEUE_PRIO=0)
exten => 300,n,Set(QDEST=${VQ_DEST})
exten => 300,n,Set(VQ_DEST=)
exten => 300,n(gotodest),GotoIf($["${QDEST}"=""]?survey,s,1:${CUT(QDEST,^,1)},${CUT(QDEST,^,2)},${CUT(QDEST,^,3)})

Try to create a queue with Fail Over Destination surveys, s, 1 copy the code from extensions_additional and make changes to extensiions_overryde.conf

(Dickson) #29

@jersonjunior hit the nail on the head exactly the code change.

The ‘small c’ will allow the dialplan to continue on when the agent hangs up (vs triggering a hangup of both agent and caller).
Then it will automatically call the script and the caller into your queue will hear it and be able to respond.

We are copying the QUEUE code into the override file. Here is the caveat to this that you will need to remember for this particular code change.
ANY Changes that you need to make to the queues via the GUI will have NO effect on the queue’s behavior. Since we are using the override file. What this means is if you need to make changes to the queue, you will need to perform the steps below for those changes to take effect in your production PBX as well as allow the automatic message to play. Without doing it, you will make changes, but asterisk will continue with the code that is in the override file, ignoring the changes.
Its the price of free.


Open up extensions_addition.conf

Go [ext-queues] and copy everything from [ext-queues] all the way to ;–== end of [ext-queues] ==–;

include => ext-queues-custom
exten => 8860,1,Macro(user-callerid,)
exten => 8860,n,Answer
bla bla bla
bla bla bla
exten => 8860,n,Set(VQ_DEST=)
exten => 8860,n,Dial(Local/554@from-internal/n,)
exten => 8860,n(gotodest),GotoIf($["${QDEST}"=""]?app- 

exten => 8860*,1,Macro(agent-add,8860,) 

exten => 8860**,1,Macro(agent-del,8860)

exten => h,1,Macro(hangupcall,)

;--== end of [ext-queues] ==--;

Copy this into “extensions_override_freepbx.conf”

Now you will need to modify two lines in the override file.

1> For the section that reflects your queue (in my example my queue is 8860) that will look basically like this (just remember yours will reflect the number that you have assigned to your queue)

exten => 8860,n(qcall),Queue(8860,${QOPTIONS},,${QAANNOUNCE},${QMAXWAIT},${QAGI},,${QGOSUB},${QRULE},${QPOSITION})

The change you will make is

exten => 8860,n(qcall),Queue(8860,${QOPTIONS}c,,${QAANNOUNCE},${QMAXWAIT},${QAGI},,${QGOSUB},${QRULE},${QPOSITION})

specfically you will add a “c” (lower case) right after QOPTIONS and before the first “,” comma mark


Now, scroll down about 5 or so lines and you’ll see this:

exten => 8860,n,Set(VQ_DEST=)
exten => 8860,n(gotodest),GotoIf($["${QDEST}"=""]?app blackhole,hangup,1:${CUT(QDEST,^,1)},${CUT(QDEST,^,2)},${CUT(QDEST,^,3)})

Now between these lines insert the following line, except modify the XXXX value to be the number you dial to test your script with.

exten => 8860,n,Set(VQ_DEST=)
exten => 8860,n,Dial(Local/XXXX@from-internal/n,)
exten => 8860,n(gotodest),GotoIf($["${QDEST}"=""]?app blackhole,hangup,1:${CUT(QDEST,^,1)},${CUT(QDEST,^,2)},${CUT(QDEST,^,3)})

Now save your changes

from command line type in asterisk -rx 'core reload’


To backout this code if there is a problem that is affecting a production system, it the extensions_override_freepbx.conf file, change the heading [ext-queues] to [ext-queues-bypass]
save that change
then in the cli type in

asterisk -rx 'core reload’

This will revert the pbx back to the original code.

You can then identify the changes, remove the -bypass
save/reload the script and test.