Allow specifying the target type together with the target in the dialplan extension...
[project/luci.git] / contrib / package / asterisk-xip / files / macros / lastcall.conf
1 ; Last-Called number storage and calling.
2 ; Author: Michael Geddes aka FrogOnWheels
3
4 ; depends: app_macro app_system  app_record func_callerid
5 ;          app_sayunixtime app_playback func_db
6 ;          format_gsm codec_gsm
7 [globals]
8 LASTCALL_DIR=/etc/asterisk/directory
9
10 [macro-lastcallstore] ; (Number , EntryType, BufferSize)
11 exten => s,1,set(lcsName=lastcall)
12 exten => s,n,set(lcsCount=10)
13 exten => s,n,GotoIf($["${ARG2}" = ""]?blankarg)
14 exten => s,n,GotoIf($["${ARG2}" = "lastcall"]?blankarg)
15 exten => s,n,Set(lcsName=lastcall_${ARG2})
16 exten => s,n(blankarg),GotoIf($["${ARG3}" = ""]?nocount)
17 exten => s,n,Set(lcsCount=${ARG3})
18 exten => s,n(nocount),Noop(${lcsName}:${DB(${lcsName}/number1)}:${ARG1})
19 exten => s,n,GotoIf($["${DB(${lcsName}/number1)}" = "${ARG1}"]?setdate)
20 exten => s,n,set(CallerPointer=1)
21
22 exten => s,n(again),GotoIf($["${DB(${lcsName}/ddate${CallerPointer})}" = ""]?copynext)
23 exten => s,n,GotoIf($["${DB(${lcsName}/number${CallerPointer})}" = "${ARG1}"]?copynext)
24 exten => s,n,Set(CallerPointer=$[${CallerPointer}+1])
25 exten => s,n,GotoIf($[${CallerPointer} <= ${lcsCount}]?again)
26
27 exten => s,n(copynext),set(DB(${lcsName}/ddate$[${CallerPointer}])=${DB(${lcsName}/ddate$[${CallerPointer}-1])})
28 exten => s,n,set(DB(${lcsName}/number$[${CallerPointer}])=${DB(${lcsName}/number$[${CallerPointer}-1])})
29 exten => s,n,set(CallerPointer=$[${CallerPointer}-1])
30 exten => s,n,GotoIf($[${CallerPointer} > 0]?copynext)
31 exten => s,n,set(DB(${lcsName}/number1)=${ARG1})
32 exten => s,n(setdate),set(DB(${lcsName}/ddate1)=${EPOCH})
33
34 [macro-lastcallapp] ; (Entrytype, Count, RingContext, Tag)
35 exten => s,1,set(lcsName=lastcall)
36 exten => s,n,set(lcsCount=10)
37 exten => s,n,GotoIf($["${ARG1}" = ""]?blankName)
38 exten => s,n,Set(lcsName=lastcall_${ARG1})
39 exten => s,n(blankName),GotoIf($["${ARG2}" = ""]?nocount)
40 exten => s,n,Set(lcsCount=${ARG2})
41 exten => s,n(nocount),set(lcsCallContext=internal)
42 exten => s,n,GotoIf($["${ARG3}" = ""]?blankContext)
43 exten => s,n,Set(lcsCallContext=${ARG3})
44 exten => s,n(blankContext),set(lcsTag=${ARG4})
45 exten => s,n,GotoIf($["${lcsTag}" != ""]?hasTag)
46 exten => s,n,Set(lcsTag=lastcall/previous-numbers)
47 exten => s,n(hasTag),Set(lcsPointer=1)
48 exten => s,n,GotoIf($["${DB(${lcsName}/ddate1)}" != ""]?macrobody_lastcallapp|s|1)
49 exten => s,n,playback(${lcsTag}&lastcall/none-available)
50 [macrobody_lastcallapp]
51 exten => s,1(repeat),Background(${lcsTag})
52 exten => s,n(again),wait(1)
53 exten => s,n,Set(lcsLastnum=${DB(${lcsName}/number${lcsPointer})})
54 exten => s,n,Set(ddate=${DB(${lcsName}/ddate${lcsPointer})})
55 exten => s,n,Set(lcsLastDate=${DB(${lcsName}/ddate$[ ${lcsPointer} + 1])})
56 exten => s,n,GotoIf($["${lcsLastnum}" != "anonymous"]?checkblank)
57 exten => s,n,Set(lcsLastnum="")
58 exten => s,n(checkblank),GotoIf($["${lcsLastnum}" = ""]?noinfo)
59 exten => s,n,TrySystem(test -f ${LASTCALL_DIR}/${lcsLastnum}.gsm)
60 exten => s,n,GotoIf($[${SYSTEMSTATUS} != SUCCESS]?saydigitver)
61 exten => s,n,Background(${LASTCALL_DIR}/${lcsLastnum})
62 exten => s,n,Goto(saycalltime)
63 exten => s,n(saydigitver),Macro(backgroundphone,${lcsLastNum})
64 exten => s,n(saycalltime),wait(.5)
65 exten => s,n,sayunixtime(${ddate},${LASTCALLZONE},QIMp)
66 exten => s,n(saymenu),background(silence/1)
67 exten => s,n,GotoIf($[$[${lcsPointer} = ${lcsCount}] | $["${lcsLastDate}" = ""]]?noprev)
68 exten => s,n,background(lastcall/next)
69 exten => s,n(noprev),GotoIf($["${lcsLastnum}" = ""]?nocall)
70 exten => s,n,background(lastcall/call-number)
71 exten => s,n,background(lastcall/tag-number)
72 exten => s,n(nocall),GotoIf($[${lcsPointer} = 1]?nonext)
73 exten => s,n,background(lastcall/previous)
74 exten => s,n(nonext),background(silence/10)
75 exten => s,n,Goto(repeat)
76 exten => s,n(noinfo),background(lastcall/no-number-info)
77 exten => s,n,goto(saycalltime)
78 exten => 5,1,GotoIf($["${lcsLastnum}" = ""]?noinfo])
79 exten => 5,n,Ringing()
80 exten => 5,n,Goto(${lcsCallContext},${lcsLastnum},1)
81 exten => 6,1,GotoIf($[$[${lcsPointer} = ${lcsCount}] | $["${lcsLastDate}" = ""]]?sayn)
82 exten => 6,n,Set(lcsPointer=$[${lcsPointer} + 1])
83 exten => 4,1,GotoIf($[${lcsPointer}=1]?sayn)
84 exten => 4,n,Set(lcsPointer=$[${lcsPointer} - 1])
85 exten => _[46],n(sayn),saynumber(${lcsPointer})
86 exten => _[46],n,goto(s|again)
87 exten => 7,1,GotoIf($["${lcsLastNum}" = ""]?noinfo])
88 exten => 7,2,Goto(macrobody_lastcallrecord|s|1)
89 exten => i,1,Goto(s|again)
90 exten => t,1,playback(goodbye)
91 exten => t,n,Hangup
92 [macrobody_lastcallrecord]
93 exten => s,1(again),Background(lastcall/recordname)
94 exten => s,n,Record(/tmp/tmprec:gsm|2|5)
95 exten => s,n,Background(lastcall/tagfor)
96 exten => s,n,Macro(backgroundphone,${lcsLastNum})
97 exten => s,n,Background(/tmp/tmprec)
98 exten => s,n,Background(lastcall/confirmnumber)
99 exten => s,n,Background(lastcall/tryagain)
100 exten => s,n,Background(lastcall/cancelrecord)
101 exten => s,n,Background(silence/5)
102 exten => s,n,Goto(s|again)
103 exten => 1,1,System(mkdir -p ${LASTCALL_DIR})
104 exten => 1,2,System(mv /tmp/tmprec.gsm ${LASTCALL_DIR}/${lcsLastNum}.gsm)
105 exten => 1,3,Goto(macrobody_lastcallapp,s,again)
106 exten => 2,1,Goto(s|again)
107 exten => 3,1,system(rm -f /tmp/tmprec.gsm)
108 exten => 3,2,Goto(macrobody_lastcallapp,s,again)
109 ; Say Phone number in the background
110 [macro-backgroundphone]
111 exten => s,1,Set(bgDigits=${ARG1})
112 exten => s,n(loop),Set(bgDigit=${bgDigits:0:1})
113 exten => s,n,GotoIf($["${bgDigits:0:3}" = "000"]?saythousand)
114 exten => s,n,GotoIf($["${bgDigits:0:2}" = "00"]?sayhundred)
115 exten => s,n,GotoIf($["${bgDigits}" = ""]?exitloop)
116 exten => s,n,Set(bgDigits=${bgDigits:1})
117 exten => s,n,Background(digits/${bgDigit})
118 exten => s,n,Goto(loop)
119 exten => s,n(saythousand),Background(digits/thousand)
120 exten => s,n,Set(bgDigits=${bgDigits:3})
121 exten => s,n,Goto(loop)
122 exten => s,n(sayhundred),Background(digits/hundred)
123 exten => s,n,Set(bgDigits=${bgDigits:2})
124 exten => s,n,Goto(loop)
125 exten => s,n(exitloop),NOOP
126