0
votes

I'm working on making a system to auto dial out tenant numbers that are late with their rent and read them how much they owe. Everything is working fine when the number dialed is answered or when they send a "busy tone" when it is dialing. Unfortunately when the phone rings long enough for the answering machine (or voice mail) to pick up on its own the dial plan context and extensions do not start at all. What do I have to do in order to get the dial plan to start when the answering machine or voice mail answers? I tested this on 2 phones and both do the same thing.

Here is the code that starts the call. The script works and will dial my phone:

fputs($socket, "Action: Login\r\n"); 
fputs($socket, "UserName: $username\r\n"); 
fputs($socket, "Secret: $secret\r\n\r\n"); 
fputs($socket, "Command: sip show peers\r\n\r\n");

fputs($socket, "Action: Originate\r\n");
fputs($socket, "Channel: $number_out\r\n");
fputs($socket, "Context: $context\r\n");
fputs($socket, "Exten: $exten\r\n");
fputs($socket, "Priority: 1\r\n");
fputs($socket, "Timeout: 20000\r\n");
fputs($socket, "Variable: NAME=$name\r\n");
fputs($socket, "Variable: LOCATION=$location\r\n");
fputs($socket, "Variable: AMOUNT=$amount\r\n");
fputs($socket, "Variable: TENSE=$tense\r\n");
fputs($socket, "Variable: CALLDIR={$cd['calls_out_dir']}\r\n");
fputs($socket, "Variable: CALLFILE=$callFile\r\n");
fputs($socket, "Variable: ICOID=${cd['ico_id']}\r\n");
fputs($socket, "Variable: LIVEORDEVEL=html-devel\r\n");
fputs($socket, "Variable: TIMESTAMP=$timestamp\r\n");
fputs($socket, "Callerid: \"$cid_name\" <$cid_num>\r\n"); 


fputs($socket, "Action: Logoff\r\n\r\n");

Here is the relevant part of the dial plan:

[out-tenant-collections]
exten => s,1,Wait(1)
exten => s,2,AMD()
exten => s,3,Monitor(gsm,"${CALLDIR}${CALLFILE}",m)

exten => s,n,NOOP(AMDSTATUS = ${AMDSTATUS} DIALSTATUS = ${DIALSTATUS})

exten => s,n,GotoIf($[${AMDSTATUS}=HUMAN]?humn:mach)


exten => s,n(mach),agi(/var/www/${LIVEORDEVEL}/asterisk-programs/ivr_collections_out_response.php,${ICOID},0,${CALLDIR}${CALLFILE}.gsm,${TIMESTAMP})

exten => s,n,Wait(10)



exten => s,n(humn),agi(googletts.agi,"You ${TENSE} at ${LOCATION}. Your rent is overdue by ${AMOUNT}., If you already made a payment in full, press 1. If you already mailed payment or intend to pay within two days, press 2., If you feel$

exten => s,n,NOOP(ICOID: ${ICOID})

; the wait exten command will let you interupt the above googletts agi app and go to the extension dialed in (1,2,3 or 4) if a digit is dialed that is not recognized it will go to the i extension

exten => s,n,WaitExten()



; they entered something other than 1,2,3 or 4

exten => i,1,agi(googletts.agi,"Sorry I did not catch that.",en,,1.1)

exten => i,n,Goto(s,4)



;; They hit 1, register that they said they paid their full amount

exten => 1,1,agi(/var/www/${LIVEORDEVEL}/asterisk-programs/ivr_collections_out_response.php,${ICOID},1,${CALLDIR}${CALLFILE}.gsm,${TIMESTAMP})

exten => 1,2,agi(googletts.agi,"Thank you, we will double check our records, if the payment has been recorded you will not recieve any more calls.",en,,1.1)

exten => s,n,Hangup


;; They hit 2, register that they said they mailed a payment

exten => 2,1,agi(/var/www/${LIVEORDEVEL}/asterisk-programs/ivr_collections_out_response.php,${ICOID},2,${CALLDIR}${CALLFILE}.gsm,${TIMESTAMP})

exten => 2,2,agi(googletts.agi,"Thank you, we will await your payment.",en,,1.1)

exten => s,n,Hangup


;; They hit 3, register that they said it was an error to get this call

exten => 3,1,agi(/var/www/${LIVEORDEVEL}/asterisk-programs/ivr_collections_out_response.php,${ICOID},3,${CALLDIR}${CALLFILE}.gsm,${TIMESTAMP})

exten => 3,2,agi(googletts.agi,"Please explain why you feel you have recieved this message in error, after the beep.",en,,1.1)

exten => 3,3,Wait(1)

exten => 3,4,Playback(beep)

exten => 3,5,Wait(30)

exten => 3,n,Hangup


;; They hit 4, they want the message repeated

exten => 4,1,Goto(s,4)


;; The waitexten command timed out with no response

exten => t,1,agi(/var/www/${LIVEORDEVEL}/asterisk-programs/ivr_collections_out_response.php,${ICOID},0,${CALLDIR}${CALLFILE}.gsm,${TIMESTAMP})

exten => t,2,Hangup
2
you need check verbose/debug output. acordinly to ur dialplan all is ok, just have go other agi script.arheops

2 Answers

1
votes

Please post the code you are using to generate the out going call. It looks to me like you are not sending "your side" of the out-going call into this context as part of your dial command.

1
votes

Turns out that you need to handle when the answering machine or voice mail picks up with a special extension. I added the following line to my dial plan. The important point to notice is the name of the extension: "failed" this is the default extension that executes when the answering machine picks up.

;; if the answering machine picks up when no user answers or sends a busy tone
exten => failed,1,Goto(s,mach)