planetWayne.com - Forums
Rants and Raves and Generally Anything
Last Number Caller Anouncements

 
Post new topic   Reply to topic    planetWayne.com - Forums Forum Index -> VoIP
View previous topic :: View next topic  
Author Message
planetWayne
Site Admin


Joined: 30 Jan 2003
Posts: 280

PostPosted: Sun Sep 19, 2004 12:07 am    Post subject: Last Number Caller Anouncements Reply with quote

I know most SIP or IP phones have the ability to tell you what calls came in and allow you to redial the number - but it involves reading the numbers from the screen (if they have one) and dialing them back. Fine - but what about not having a big display.

This example (its quite big!) allows you to store off the last 10 inbound numbers that called you for retrieval via a menu. You can skip through the numbers stored and at any point dial back the selected number. When the 11th call comes it - the system automaticly drops the first from the list - a first in first out type stack.

Its a bit like BT's 1471 service - the one that tells you the number called and at what date/time...

Anyways - Global variables hold extention numbers you dial to get into the menu. Theres a new context that holds the menu system. A small bit you need to put in the context that holds your phones and theres also a large(ish) bit of code that needs to be attached into your context that receives incoming calls (either internet based or land line etc.)

This makes use of the Asterisk database to store the details.
Family name 'LastCall'

Code:
[globals]
LASTNUMEXT=1471   ;Extention to get LastNumberCaller details


The next bit is the new context that is actualy the menu system.
NOTE you will need a sound file which is the actual spoken menu. If I cant find the anouncements within Asterisk, I tend to go visit Rhetorical.Com and generate one with thier online demo Smile

Quote:
To dial this number, Press 1
To hear the next number, Press 2
To hear the previous number, Press 3


Code:

; Lets us go through a list of the last ten called numbers - reads them out and lets us dial them back.
[LastNumberCaller]
exten => s,1,answer
exten => s,2,wait(1)
exten => s,3,dbget(lastnum=lastcall/number${LastNumberCallerPointer})
exten => s,4,dbget(ddate=lastcall/ddate${LastNumberCallerPointer})
exten => s,5,gotoif($["${lastnum}" = ""]?104)
exten => s,6,playback(last-num-to-call)
exten => s,7,saydigits(${lastnum})
exten => s,8,wait(.5)
exten => s,9,sayunixtime(${ddate},,QIMp)
exten => s,10,wait(.5)
exten => s,11,background(called-number-menu)

exten => s,104,background(no-info-about-number)
exten => s,105,goto,s|10

exten => 1,1,playback(pls-wait-connect-call)
exten => 1,2,goto(nicepeople,${lastnum},1)


exten => 2,1,setvar(newPointer=$[${LastNumberCallerPointer} + 1])
exten => 2,2,setvar(LastNumberCallerPointer=${newPointer})
exten => 2,3,gotoif,$[${LastNumberCallerPointer} = 11]?5
exten => 2,4,goto,6
exten => 2,5,setvar(LastNumberCallerPointer=1)
exten => 2,6,saynumber(${LastNumberCallerPointer})
exten => 2,7,goto,s|1


exten => 3,1,setvar(newPointer=$[${LastNumberCallerPointer} - 1])
exten => 3,2,setvar(LastNumberCallerPointer=${newPointer})
exten => 3,3,gotoif,$[${LastNumberCallerPointer} = 0]?5
exten => 3,4,goto,6
exten => 3,5,setvar(LastNumberCallerPointer=10)
exten => 3,6,saynumber(${LastNumberCallerPointer})
exten => 3,7,goto,s|1



; or if you 'time out' then quit and hangup.
exten => t,1,playback(goodbye)
exten => t,2,Hangup



This bit goes in the context that holds your phones and you want to have access to this menu
Code:
; Our Last Number Caller return
exten => ${LASTNUMEXT},1,setglobalvar(LastNumberCallerPointer=1)
exten => ${LASTNUMEXT},2,goto(LastNumberCaller,s,1)



The last part needs to be attached to your context that receives the calls from (eg) your ZAP channels.
NOTE the priorities here (exten => s,{priority here} ...) will need to be changed according to what you have in your context already, althought I would suggest it goes near the top as you would want to store this info before jumping out of the context.
Code:
; This next bit is used to rotate the store of inbound caller numbers so we can store the last ten callers.
exten => s,3,dbget(tempddate=lastcall/ddate9)
exten => s,4,dbget(tempnumber=lastcall/number9)
exten => s,5,dbput(lastcall/ddate10=${tempddate})
exten => s,6,dbput(lastcall/number10=${tempnumber})

exten => s,7,dbget(tempddate=lastcall/ddate8)
exten => s,8,dbget(tempnumber=lastcall/number8)
exten => s,9,dbput(lastcall/ddate9=${tempddate})
exten => s,10,dbput(lastcall/number9=${tempnumber})

exten => s,11,dbget(tempddate=lastcall/ddate7)
exten => s,12,dbget(tempnumber=lastcall/number7)
exten => s,13,dbput(lastcall/ddate8=${tempddate})
exten => s,14,dbput(lastcall/number8=${tempnumber})

exten => s,15,dbget(tempddate=lastcall/ddate6)
exten => s,16,dbget(tempnumber=lastcall/number6)
exten => s,17,dbput(lastcall/ddate7=${tempddate})
exten => s,18,dbput(lastcall/number7=${tempnumber})

exten => s,19,dbget(tempddate=lastcall/ddate5)
exten => s,20,dbget(tempnumber=lastcall/number5)
exten => s,21,dbput(lastcall/ddate6=${tempddate})
exten => s,22,dbput(lastcall/number6=${tempnumber})

exten => s,23,dbget(tempddate=lastcall/ddate4)
exten => s,24,dbget(tempnumber=lastcall/number4)
exten => s,25,dbput(lastcall/ddate5=${tempddate})
exten => s,26,dbput(lastcall/number5=${tempnumber})

exten => s,27,dbget(tempddate=lastcall/ddate3)
exten => s,28,dbget(tempnumber=lastcall/number3)
exten => s,29,dbput(lastcall/ddate4=${tempddate})
exten => s,30,dbput(lastcall/number4=${tempnumber})

exten => s,31,dbget(tempddate=lastcall/ddate2)
exten => s,32,dbget(tempnumber=lastcall/number2)
exten => s,33,dbput(lastcall/ddate3=${tempddate})
exten => s,34,dbput(lastcall/number3=${tempnumber})

exten => s,35,dbget(tempddate=lastcall/ddate1)
exten => s,36,dbget(tempnumber=lastcall/number1)
exten => s,37,dbput(lastcall/ddate2=${tempddate})
exten => s,38,dbput(lastcall/number2=${tempnumber})


exten => s,39,dbput(lastcall/ddate1=${EPOCH})
exten => s,40,dbput(lastcall/number1=${CALLERIDNUM})

exten => s,41,goto(OurMenu,s,1)


The last entry in there ( exten => s,41,goto(OurMenu,s,1) ) jumps into our phone systems main menu. If you dont need that as your routing your calls within the context then take that line out.


Its a biggie but works for us here!
Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    planetWayne.com - Forums Forum Index -> VoIP All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group