Freepbx Survey

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.

1 Like

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.

1 Like

I use Queue option c
https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Application_Queue

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

1 Like

@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.

options
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

@Offer
@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.

INSTRUCTIONS

Open up extensions_addition.conf

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

[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- 
blackhole,hangup,1:${CUT(QDEST,^,1)},${CUT(QDEST,^,2)},${CUT(QDEST,^,3)})

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

${QOPTIONS}c,${QAANNOUNCE}

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’

TEST!

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.

1 Like

I can’t find a file named extensions_addition.conf. I did however find one named extensions_additional.conf, but when I open that and search for ext-queues I only get a line that says “include => ext-queues”. Any help?

File name SHOULD be extensions_additional.conf. Typo misake.
Create a queue first. Then everything should appear as expected.

@dickson

Dickson, are you available to hire to write an IVR survey module for our FreePBX system? We are looking for someone ASAP.

@dickson,
Sorry for waking up the old thread. Can I have a complete code to deploy in my test environment?

The complete code is just a couple replies above. It should work for you.

1 Like

@dickson,
you are right!! As am totally new for the coding…
Would appreciate if you can share me a single piece of code, so that I can adapt.


Bain

Do you mean other than the complete source code that’s provided in the message six up from this one (message 29)?

Hi @dickson

First, I would like to thank you for your help in this thread. I was able to configure the suvery and it is working well, I also added some modifications to it.

I just need your help if I can add the agent’s extension or name to the CDR so we know which agent had that specific call to we relate the suvey to them.

Thanks,
Adel

Hi, sure, i’ll reinstall the code and work out that change for you and post in the next day or so

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)})

What this code will do?
what if don’t add this local Channel line ?
can you please elaborate this please ?

Hi dickson,
I found your post very useful… I’m just not able to play my audio file.
when i replace your “/var/lib/asterisk/sounds/en/custom/question1” with my “/path/audiofile.wav”, it doesn’t work… if i put instead one asterisk standard audio signal everything is fine… what i’m doing wrong? thanks

Check your log after making a test call.
https://wiki.freepbx.org/display/SUP/Providing+Great+Debug

Can your Asterisk play .wav files?

  1. Go to admin > System recordings
  2. Add sound recording here. You can use file name “question1” to keep with the original example
    When you add this sound file here, it will put that file into /var/lib/asterisk/sounds/en/custom/
    It will convert the file to the .wav file here for you and you can select play to test that it loaded properly
1 Like

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.