I’m sorry guys, I use MYSQL for the database.
Here is the dial plan.
[from-internal-custom]
exten => 1234,1,Answer
exten => 1234,2,Flite("Hello",any)
exten => 1234,3,Goto(ReadPhoneNumber,s,1)
[ReadPhoneNumber]
exten => s,1,Set(TIMEOUT(digit)=7)
exten => s,2,Set(TIMEOUT(response)=10)
exten => s,3,Flite("I have detected you are calling from phone number",any)
exten => s,4,SayDigits(${CALLERID(number)})
exten => s,5,Flite("If the number is correct please press 1, otherwise please hang up and call back",any)
exten => s,6,WaitExten()
exten => 1,1,Goto(CheckIfCalledAlready,s,1)
exten => t,1,Goto(s,1)
exten => i,1,Goto(s,1)
exten => o,1,Goto(s,1)
[CheckIfCalledAlready]
exten => s,1,MYSQL(Connect connid xxx.xxx.xxx.xxx TheUser ThePassword TheDatabase)
exten => s,2,MYSQL(Query resultid ${connid} SELECT Date from TheTable where uniqueid=${CALLERID(number)})
exten => s,3,MYSQL(Fetch fetchid ${resultid} HasData)
exten => s,4,MYSQL(Clear ${resultid})
exten => s,5,MYSQL(Disconnect ${connid})
exten => s,6,GoToIf($[ ${HasData} = ${STRFTIME(${EPOCH},,%U)} ]?SorryButWeHaveData1,s,1)
exten => s,7,Flite("Please enter your ticket number",any)
exten => s,8,Read(TENDIGITNUMBER,beep,10,,2,5)
exten => s,9,SayDigits(${TENDIGITNUMBER})
exten => s,10,Flite("If this is correct please press 1, otherwise press 2",any)
exten => s,11,WaitExten()
exten => 1,1,Goto(EnterDataToDB,s,1)
exten => t,1,Goto(s,1)
exten => i,1,Goto(s,1)
exten => o,1,Goto(s,1)
[SorryButWeHaveData1]
exten => s,1,Flite("I'm sorry, you have called regarding your ticket this week already, please try back.",any)
exten => s,2,Goto(ReadPhoneNumber,s,1)
[EnterDataToDB]
exten => s,1,Flite("Please wait while I process your request.",any)
exten => s,2,MYSQL(Connect connid xxx.xxx.xxx.xxx TheUser ThePassword TheDatabase)
exten => s,3,MYSQL(Query resultid ${connid} INSERT INTO TheTable SET uniqueid=${CALLERID(number)},number=${TENDIGITNUMBER},Date=${STRFTIME(${EPOCH},,%U)})
exten => s,4,MYSQL(Disconnect ${connid})
exten => s,5,Flite("Please wait",any)