SHOW:
|
|
- or go back to the newest paste.
1 | - | [test-queue] |
1 | + | UPDATED: |
2 | - | exten => 56,1,Answer |
2 | + | |
3 | - | exten => 56,2,Queue(111) |
3 | + | [from-queue] |
4 | - | exten => 56,3,Playback(zombies) |
4 | + | include => from-queue-custom |
5 | - | exten => 56,4,Hangup |
5 | + | exten => 111,1,Goto(from-internal,${QAGENT},1) |
6 | ||
7 | - | [test-queue2] |
7 | + | exten => _X!,1,Set(QAGENT=${EXTEN}) |
8 | - | exten => 57,1,Queue(111) |
8 | + | exten => _X!,n,Goto(${NODEST},1) |
9 | - | exten => 57,2,Playback(zombies) |
9 | + | |
10 | - | exten => 57,3,Hangup |
10 | + | ;--== end of [from-queue] ==--; |
11 | ||
12 | ||
13 | ORIGINAL: | |
14 | - | Dialing into the queue directly from the phone using 111 works. The agents phone is rang. |
14 | + | ;--------------------------------------------------------------------------------; |
15 | ; Do NOT edit this file as it is auto-generated by FreePBX. ; | |
16 | - | Dialing using 56 causes an infinite loop. |
16 | + | ;--------------------------------------------------------------------------------; |
17 | - | Dialing using 57 shows the caller is in the queue but the caller hears no music, and the agents phone is not rang. |
17 | + | ; For information on adding additional paramaters to this file, please visit the ; |
18 | ; FreePBX.org wiki page, or ask on IRC. This file was created by the new FreePBX ; | |
19 | ; BMO - Big Module Object. Any similarity in naming with BMO from Adventure Time ; | |
20 | ; is totally deliberate. ; | |
21 | ;--------------------------------------------------------------------------------; | |
22 | [globals] | |
23 | MIXMON_BEEP = | |
24 | QUEDEVSTATE = TRUE | |
25 | QUEUETOGGLE = *45 | |
26 | QUEUEPAUSETOGGLE = *46 | |
27 | DYNAMIC_FEATURES = apprecord | |
28 | INTERCOMCODE = *80 | |
29 | ASTETCDIR = /etc/asterisk | |
30 | ASTMODDIR = /usr/lib/asterisk/modules | |
31 | ASTVARLIBDIR = /var/lib/asterisk | |
32 | ASTAGIDIR = /var/lib/asterisk/agi-bin | |
33 | ASTSPOOLDIR = /var/spool/asterisk | |
34 | ASTRUNDIR = /var/run/asterisk | |
35 | ASTLOGDIR = /var/log/asterisk | |
36 | CWINUSEBUSY = 1 | |
37 | AMPMGRUSER = admin | |
38 | AMPMGRPASS = efef34ttdsa3 | |
39 | ASTMANAGERHOST = localhost | |
40 | AMPDBENGINE = mysql | |
41 | AMPDBHOST = localhost | |
42 | AMPDBNAME = asterisk | |
43 | AMPDBUSER = freepbxuser | |
44 | AMPDBPASS = ee914d04b542d8b7e1cc1d81d68c63b8 | |
45 | VMX_CONTEXT = from-internal | |
46 | VMX_PRI = 1 | |
47 | VMX_TIMEDEST_CONTEXT = | |
48 | VMX_TIMEDEST_EXT = dovm | |
49 | VMX_TIMEDEST_PRI = 1 | |
50 | VMX_LOOPDEST_CONTEXT = | |
51 | VMX_LOOPDEST_EXT = dovm | |
52 | VMX_LOOPDEST_PRI = 1 | |
53 | MIXMON_DIR = | |
54 | MIXMON_POST = | |
55 | DIAL_OPTIONS = Ttr | |
56 | TRUNK_OPTIONS = Tt | |
57 | TRUNK_RING_TIMER = 300 | |
58 | MIXMON_FORMAT = wav | |
59 | REC_POLICY = caller | |
60 | RINGTIMER_DEFAULT = 15 | |
61 | TRANSFER_CONTEXT = from-internal-xfer | |
62 | ASTVERSION = 13.7.2 | |
63 | ASTCHANDAHDI = 1 | |
64 | NULL = "" | |
65 | OUT_1 = DAHDI/g0 | |
66 | OUTCID_1 = | |
67 | OUTMAXCHANS_1 = | |
68 | OUTFAIL_1 = | |
69 | OUTPREFIX_1 = | |
70 | OUTDISABLE_1 = off | |
71 | OUTKEEPCID_1 = | |
72 | FORCEDOUTCID_1 = | |
73 | PREFIX_TRUNK_1 = | |
74 | OUT_2 = SIP/flowroute1 | |
75 | OUTCID_2 = TestSIP | |
76 | OUTMAXCHANS_2 = | |
77 | OUTFAIL_2 = | |
78 | OUTPREFIX_2 = | |
79 | OUTDISABLE_2 = off | |
80 | OUTKEEPCID_2 = off | |
81 | FORCEDOUTCID_2 = | |
82 | PREFIX_TRUNK_2 = 1 | |
83 | ALLOW_SIP_ANON = yes | |
84 | #include globals_custom.conf | |
85 | ||
86 | ;end of [globals] | |
87 | ||
88 | [sub-record-cancel] | |
89 | include => sub-record-cancel-custom | |
90 | exten => s,1,Return() | |
91 | ||
92 | ;--== end of [sub-record-cancel] ==--; | |
93 | ||
94 | ||
95 | [sub-record-check] | |
96 | include => sub-record-check-custom | |
97 | exten => s,1,GotoIf($[${LEN(${FROMEXTEN})}]?initialized) | |
98 | exten => s,n,Set(__REC_STATUS=INITIALIZED) | |
99 | exten => s,n,Set(NOW=${EPOCH}) | |
100 | exten => s,n,Set(__DAY=${STRFTIME(${NOW},,%d)}) | |
101 | exten => s,n,Set(__MONTH=${STRFTIME(${NOW},,%m)}) | |
102 | exten => s,n,Set(__YEAR=${STRFTIME(${NOW},,%Y)}) | |
103 | exten => s,n,Set(__TIMESTR=${YEAR}${MONTH}${DAY}-${STRFTIME(${NOW},,%H%M%S)}) | |
104 | exten => s,n,Set(__FROMEXTEN=${IF($[${LEN(${AMPUSER})}]?${AMPUSER}:${IF($[${LEN(${REALCALLERIDNUM})}]?${REALCALLERIDNUM}:unknown)})}) | |
105 | exten => s,n,Set(__MON_FMT=${IF($["${MIXMON_FORMAT}"="wav49"]?WAV:${MIXMON_FORMAT})}) | |
106 | exten => s,n(initialized),Noop(Recordings initialized) | |
107 | exten => s,n,ExecIf($[!${LEN(${ARG3})}]?Set(ARG3=dontcare)) | |
108 | exten => s,n,Set(REC_POLICY_MODE_SAVE=${REC_POLICY_MODE}) | |
109 | exten => s,n,ExecIf($["${BLINDTRANSFER}${ATTENDEDTRANSFER}" != ""]?Set(REC_STATUS=NO)) | |
110 | exten => s,n(next),GotoIf($[${LEN(${ARG1})}]?checkaction) | |
111 | exten => s,n(recorderror),Playback(something-terribly-wrong,error) | |
112 | exten => s,n,Hangup | |
113 | exten => s,n(checkaction),GotoIf($[${DIALPLAN_EXISTS(sub-record-check,${ARG1})}]?sub-record-check,${ARG1},1) | |
114 | exten => s,n,Noop(Generic ${ARG1} Recording Check - ${FROMEXTEN} ${ARG2}) | |
115 | exten => s,n,Gosub(recordcheck,1(${ARG3},${ARG1},${ARG2})) | |
116 | exten => s,n,Return() | |
117 | ||
118 | exten => recordcheck,1,Noop(Starting recording check against ${ARG1}) | |
119 | exten => recordcheck,n,Goto(${ARG1}) | |
120 | exten => recordcheck,n(dontcare),Return() | |
121 | exten => recordcheck,n(always),Noop(Detected legacy "always" entry. Mapping to "force") | |
122 | exten => recordcheck,n(force),Set(__REC_POLICY_MODE=FORCE) | |
123 | exten => recordcheck,n,GotoIf($["${REC_STATUS}"!="RECORDING"]?startrec) | |
124 | exten => recordcheck,n,Return() | |
125 | exten => recordcheck,n(delayed),Noop(Detected legacy "delayed" entry. Mapping to "yes") | |
126 | exten => recordcheck,n(yes),ExecIf($["${REC_POLICY_MODE}" = "NEVER" | "${REC_POLICY_MODE}" = "NO" | "${REC_STATUS}" = "RECORDING"]?Return()) | |
127 | exten => recordcheck,n,Set(__REC_POLICY_MODE=YES) | |
128 | exten => recordcheck,n,Goto(startrec) | |
129 | exten => recordcheck,n(no),Set(__REC_POLICY_MODE=NO) | |
130 | exten => recordcheck,n,Return() | |
131 | exten => recordcheck,n(never),Set(__REC_POLICY_MODE=NEVER) | |
132 | exten => recordcheck,n,Goto(stoprec) | |
133 | exten => recordcheck,n(startrec),Noop(Starting recording: ${ARG2}, ${ARG3}) | |
134 | exten => recordcheck,n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes) | |
135 | exten => recordcheck,n,Set(__CALLFILENAME=${ARG2}-${ARG3}-${FROMEXTEN}-${TIMESTR}-${UNIQUEID}) | |
136 | exten => recordcheck,n,MixMonitor(${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT},ai(LOCAL_MIXMON_ID)${MIXMON_BEEP},${MIXMON_POST}) | |
137 | exten => recordcheck,n,Set(__MIXMON_ID=${LOCAL_MIXMON_ID}) | |
138 | exten => recordcheck,n,Set(__RECORD_ID=${CHANNEL(name)}) | |
139 | exten => recordcheck,n,Set(__REC_STATUS=RECORDING) | |
140 | exten => recordcheck,n,Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT}) | |
141 | exten => recordcheck,n,Return() | |
142 | exten => recordcheck,n(stoprec),Noop(Stopping recording: ${ARG2}, ${ARG3}) | |
143 | exten => recordcheck,n,Set(__REC_STATUS=STOPPED) | |
144 | exten => recordcheck,n,System(/var/lib/asterisk/bin/stoprecording.php "${CHANNEL(name)}") | |
145 | exten => recordcheck,n,Return() | |
146 | ||
147 | exten => out,1,Noop(Outbound Recording Check from ${FROMEXTEN} to ${ARG2}) | |
148 | exten => out,n,Set(RECMODE=${DB(AMPUSER/${FROMEXTEN}/recording/out/external)}) | |
149 | exten => out,n,ExecIf($[!${LEN(${RECMODE})} | "${RECMODE}" = "dontcare"]?Goto(routewins)) | |
150 | exten => out,n,ExecIf($["${ARG3}" = "never" | "${ARG3}" = "force"]?Goto(routewins)) | |
151 | exten => out,n(extenwins),Gosub(recordcheck,1(${RECMODE},out,${ARG2})) | |
152 | exten => out,n,Return() | |
153 | exten => out,n(routewins),Gosub(recordcheck,1(${ARG3},out,${ARG2})) | |
154 | exten => out,n,Return() | |
155 | ||
156 | exten => in,1,Noop(Inbound Recording Check to ${ARG2}) | |
157 | exten => in,n,Set(FROMEXTEN=unknown) | |
158 | exten => in,n,ExecIf($[${LEN(${CALLERID(num)})}]?Set(FROMEXTEN=${CALLERID(num)})) | |
159 | exten => in,n,Gosub(recordcheck,1(${ARG3},in,${ARG2})) | |
160 | exten => in,n,Return() | |
161 | ||
162 | exten => exten,1,Noop(Exten Recording Check between ${FROMEXTEN} and ${ARG2}) | |
163 | exten => exten,n,Set(CALLTYPE=${IF($[${LEN(${FROM_DID})}]?external:internal)}) | |
164 | exten => exten,n,ExecIf(${LEN(${CALLTYPE_OVERRIDE})}?Set(CALLTYPE=${CALLTYPE_OVERRIDE})) | |
165 | exten => exten,n,Set(CALLEE=${DB(AMPUSER/${ARG2}/recording/in/${CALLTYPE})}) | |
166 | exten => exten,n,ExecIf($[!${LEN(${CALLEE})}]?Set(CALLEE=dontcare)) | |
167 | exten => exten,n,GotoIf($["${CALLTYPE}"="external"]?callee) | |
168 | exten => exten,n,GotoIf($["${CALLEE}"="dontcare"]?caller) | |
169 | exten => exten,n,ExecIf($[${LEN(${DB(AMPUSER/${FROMEXTEN}/recording/priority)})}]?Set(CALLER_PRI=${DB(AMPUSER/${FROMEXTEN}/recording/priority)}):Set(CALLER_PRI=0)) | |
170 | exten => exten,n,ExecIf($[${LEN(${DB(AMPUSER/${ARG2}/recording/priority)})}]?Set(CALLEE_PRI=${DB(AMPUSER/${ARG2}/recording/priority)}):Set(CALLEE_PRI=0)) | |
171 | exten => exten,n,GotoIf($["${CALLER_PRI}"="${CALLEE_PRI}"]?${REC_POLICY}:${IF($[${CALLER_PRI}>${CALLEE_PRI}]?caller:callee)}) | |
172 | exten => exten,n(callee),Gosub(recordcheck,1(${CALLEE},${CALLTYPE},${ARG2})) | |
173 | exten => exten,n,Return() | |
174 | exten => exten,n(caller),Set(RECMODE=${DB(AMPUSER/${FROMEXTEN}/recording/out/internal)}) | |
175 | exten => exten,n,ExecIf($[!${LEN(${RECMODE})}]?Set(RECMODE=dontcare)) | |
176 | exten => exten,n,ExecIf($["${RECMODE}"="dontcare"]?Set(RECMODE=${CALLEE})) | |
177 | exten => exten,n,Gosub(recordcheck,1(${RECMODE},${CALLTYPE},${ARG2})) | |
178 | exten => exten,n,Return() | |
179 | ||
180 | exten => conf,1,Noop(Conference Recording Check ${FROMEXTEN} to ${ARG2}) | |
181 | exten => conf,n,Gosub(recconf,1(${ARG2},${ARG2},${ARG3})) | |
182 | exten => conf,n,Return() | |
183 | ||
184 | exten => page,1,Noop(Paging Recording Check ${FROMEXTEN} to ${ARG2}) | |
185 | exten => page,n,GosubIf($["${REC_POLICY_MODE}"="always"]?recconf,1(${ARG2},${FROMEXTEN},${ARG3})) | |
186 | exten => page,n,Return() | |
187 | ||
188 | exten => recconf,1,Noop(Setting up recording: ${ARG1}, ${ARG2}, ${ARG3}) | |
189 | exten => recconf,n,Set(__CALLFILENAME=${IF($[${CONFBRIDGE_INFO(parties,${ARG2})}]?${DB(RECCONF/${ARG2})}:${ARG1}-${ARG2}-${ARG3}-${TIMESTR}-${UNIQUEID})}) | |
190 | exten => recconf,n,ExecIf($[!${CONFBRIDGE_INFO(parties,${ARG2})}]?Set(DB(RECCONF/${ARG2})=${CALLFILENAME})) | |
191 | exten => recconf,n,Set(CONFBRIDGE(bridge,record_file)=${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT}) | |
192 | exten => recconf,n,ExecIf($["${ARG3}"!="always"]?Return()) | |
193 | exten => recconf,n,Set(CONFBRIDGE(bridge,record_conference)=yes) | |
194 | exten => recconf,n,Set(__REC_STATUS=RECORDING) | |
195 | exten => recconf,n,Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT}) | |
196 | exten => recconf,n,Return() | |
197 | ||
198 | exten => recq,1,Noop(Setting up recording: ${ARG1}, ${ARG2}, ${ARG3}) | |
199 | exten => recq,n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes) | |
200 | exten => recq,n,Set(MONITOR_FILENAME=${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}) | |
201 | exten => recq,n,MixMonitor(${MONITOR_FILENAME}.${MON_FMT},${MONITOR_OPTIONS}${MIXMON_BEEP},${MIXMON_POST}) | |
202 | exten => recq,n,Set(__REC_STATUS=RECORDING) | |
203 | exten => recq,n,Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT}) | |
204 | exten => recq,n,Return() | |
205 | ||
206 | exten => parking,1,Noop(User ${ARG2} picked up a parked call) | |
207 | exten => parking,n,Set(USER=${ARG2}) | |
208 | exten => parking,n,ExecIf($[!${LEN(${ARG2})}]?Set(USER=unknown)) | |
209 | exten => parking,n,Set(RECMODE=${DB(AMPUSER/${ARG2}/recording/out/internal)}) | |
210 | exten => parking,n,ExecIf($[!${LEN(${RECMODE})}]?Set(RECMODE=dontcare)) | |
211 | exten => parking,n,Gosub(recordcheck,1(${RECMODE},parked,${USER})) | |
212 | exten => parking,n,Return() | |
213 | ||
214 | ;--== end of [sub-record-check] ==--; | |
215 | ||
216 | ||
217 | [macro-one-touch-record] | |
218 | include => macro-one-touch-record-custom | |
219 | exten => s,1,Set(ONETOUCH_REC_SCRIPT_STATUS=) | |
220 | exten => s,n,System(/var/lib/asterisk/bin/one_touch_record.php "${CHANNEL(name)}") | |
221 | exten => s,n,Noop(ONETOUCH_REC_SCRIPT_STATUS: [${ONETOUCH_REC_SCRIPT_STATUS}]) | |
222 | exten => s,n,ExecIf($["${REC_STATUS}"="RECORDING"]?Playback(beep)) | |
223 | exten => s,n,ExecIf($["${REC_STATUS}"="STOPPED"]?Playback(beep&beep)) | |
224 | exten => s,n,ExecIf($["${ONETOUCH_REC_SCRIPT_STATUS:0:6}"="DENIED"]?Playback(access-denied)) | |
225 | exten => s,n,MacroExit() | |
226 | ||
227 | ;--== end of [macro-one-touch-record] ==--; | |
228 | ||
229 | ||
230 | [ext-featurecodes] | |
231 | include => ext-featurecodes-custom | |
232 | exten => 555,1,Goto(from-internal,555,1) | |
233 | ||
234 | exten => 7777,1,Goto(from-internal,7777,1) | |
235 | ||
236 | exten => 888,1,Goto(from-internal,888,1) | |
237 | ||
238 | exten => *43,1,Goto(from-internal,*43,1) | |
239 | ||
240 | exten => *60,1,Goto(from-internal,*60,1) | |
241 | ||
242 | exten => *98,1,Goto(from-internal,*98,1) | |
243 | ||
244 | ;--== end of [ext-featurecodes] ==--; | |
245 | ||
246 | ||
247 | [app-calltrace] | |
248 | include => app-calltrace-custom | |
249 | exten => *69,1,Goto(app-calltrace-perform,s,1) | |
250 | ||
251 | ;--== end of [app-calltrace] ==--; | |
252 | ||
253 | ||
254 | [app-calltrace-perform] | |
255 | include => app-calltrace-perform-custom | |
256 | exten => s,1,Answer | |
257 | exten => s,n,Wait(1) | |
258 | exten => s,n,Macro(user-callerid,) | |
259 | exten => s,n,Playback(info-about-last-call&telephone-number) | |
260 | exten => s,n,Set(lastcaller=${DB(CALLTRACE/${AMPUSER})}) | |
261 | exten => s,n,GotoIf($[ $[ "${lastcaller}" = "" ] | $[ "${lastcaller}" = "unknown" ] ]?noinfo) | |
262 | exten => s,n,SayDigits(${lastcaller}) | |
263 | exten => s,n,Set(TIMEOUT(digit)=3) | |
264 | exten => s,n,Set(TIMEOUT(response)=7) | |
265 | exten => s,n,Background(to-call-this-number&press-1) | |
266 | exten => s,n,Goto(fin) | |
267 | exten => s,n(noinfo),Playback(from-unknown-caller) | |
268 | exten => s,n,Macro(hangupcall,) | |
269 | exten => s,n(fin),Noop(Waiting for input) | |
270 | exten => s,n,WaitExten(60,) | |
271 | exten => s,n,Playback(sorry-youre-having-problems&goodbye) | |
272 | ||
273 | exten => 1,1,Goto(from-internal,${lastcaller},1) | |
274 | ||
275 | exten => i,1,Playback(vm-goodbye) | |
276 | exten => i,n,Macro(hangupcall,) | |
277 | ||
278 | exten => t,1,Playback(vm-goodbye) | |
279 | exten => t,n,Macro(hangupcall,) | |
280 | ||
281 | ;--== end of [app-calltrace-perform] ==--; | |
282 | ||
283 | ||
284 | [app-echo-test] | |
285 | include => app-echo-test-custom | |
286 | exten => *43,1,Answer | |
287 | exten => *43,n,Macro(user-callerid,) | |
288 | exten => *43,n,Wait(1) | |
289 | exten => *43,n,Background(demo-echotest,,,app-echo-test-echo) | |
290 | exten => *43,n,Goto(app-echo-test-echo,1,1) | |
291 | ||
292 | ;--== end of [app-echo-test] ==--; | |
293 | ||
294 | ||
295 | [app-echo-test-echo] | |
296 | include => app-echo-test-echo-custom | |
297 | exten => _[0-9#*],1,Echo() | |
298 | exten => _[0-9#*],n,Playback(demo-echodone) | |
299 | exten => _[0-9#*],n,Hangup | |
300 | ||
301 | ;--== end of [app-echo-test-echo] ==--; | |
302 | ||
303 | ||
304 | [app-speakextennum] | |
305 | include => app-speakextennum-custom | |
306 | exten => *65,1,Answer | |
307 | exten => *65,n,Wait(1) | |
308 | exten => *65,n,Macro(user-callerid,) | |
309 | exten => *65,n,GotoIf($[${DIALPLAN_EXISTS(app-speakextennum,${CHANNEL(language)},1)}]?app-speakextennum,${CHANNEL(language)},1:app-speakextennum,en,1) | |
310 | ||
311 | exten => en,1,Playback(your) | |
312 | exten => en,n,Playback(extension) | |
313 | exten => en,n,Playback(number) | |
314 | exten => en,n,Playback(is) | |
315 | exten => en,n,SayDigits(${AMPUSER}) | |
316 | exten => en,n,Wait(2) | |
317 | exten => en,n,Hangup | |
318 | ||
319 | exten => fr,1,Playback(your) | |
320 | exten => fr,n,Playback(extension) | |
321 | exten => fr,n,Playback(is2) | |
322 | exten => fr,n,SayDigits(${AMPUSER}) | |
323 | exten => fr,n,Wait(2) | |
324 | exten => fr,n,Hangup | |
325 | ||
326 | exten => ja,1,Playback(your) | |
327 | exten => ja,n,Playback(extension) | |
328 | exten => ja,n,Playback(jp-wa) | |
329 | exten => ja,n,SayDigits(${AMPUSER}) | |
330 | exten => ja,n,Wait(2) | |
331 | exten => ja,n,Hangup | |
332 | ||
333 | ;--== end of [app-speakextennum] ==--; | |
334 | ||
335 | ||
336 | [sub-hr12format] | |
337 | include => sub-hr12format-custom | |
338 | exten => s,1,GotoIf($[${DIALPLAN_EXISTS(sub-hr12format,${CHANNEL(language)},1)}]?sub-hr12format,${CHANNEL(language)},1:sub-hr12format,en,1) | |
339 | exten => s,n,GotoIf($[${DIALPLAN_EXISTS(sub-hr12format,${CHANNEL(language)},1)}]?${CHANNEL(language)},1:en,1) | |
340 | ||
341 | exten => en,1,Playback(at-tone-time-exactly) | |
342 | exten => en,n,SayUnixTime(${FutureTime},,IM 'and' S 'seconds' p) | |
343 | exten => en,n,Return() | |
344 | exten => en,n,Playback(at-tone-time-exactly) | |
345 | exten => en,n,SayUnixTime(${FutureTime},,IM 'and' S 'seconds' p) | |
346 | exten => en,n,Return() | |
347 | ||
348 | exten => fr,1,Playback(at-tone-time-exactly) | |
349 | exten => fr,n,SayUnixTime(${FutureTime},,IMSp) | |
350 | exten => fr,n,Return() | |
351 | exten => fr,n,Playback(at-tone-time-exactly) | |
352 | exten => fr,n,SayUnixTime(${FutureTime},,IMSp) | |
353 | exten => fr,n,Return() | |
354 | ||
355 | exten => de,1,Playback(at-tone-time-exactly) | |
356 | exten => de,n,SayUnixTime(${FutureTime},,IMSp) | |
357 | exten => de,n,Return() | |
358 | exten => de,n,Playback(at-tone-time-exactly) | |
359 | exten => de,n,SayUnixTime(${FutureTime},,IMSp) | |
360 | exten => de,n,Return() | |
361 | ||
362 | exten => ja,1,Playback(at-tone-time-exactly) | |
363 | exten => ja,n,SayUnixTime(${FutureTime},,pIMS) | |
364 | exten => ja,n,Return() | |
365 | exten => ja,n,Playback(at-tone-time-exactly) | |
366 | exten => ja,n,SayUnixTime(${FutureTime},,pIMS) | |
367 | exten => ja,n,Return() | |
368 | ||
369 | ;--== end of [sub-hr12format] ==--; | |
370 | ||
371 | ||
372 | [app-speakingclock] | |
373 | include => app-speakingclock-custom | |
374 | exten => *60,1,Macro(user-callerid,) | |
375 | exten => *60,n,Answer | |
376 | exten => *60,n,Wait(1) | |
377 | exten => *60,n,Set(NumLoops=0) | |
378 | exten => *60,n(start),Set(FutureTime=$[${EPOCH} + 8]) | |
379 | exten => *60,n,Set(FutureTimeMod=$[${FutureTime} % 10]) | |
380 | exten => *60,n,Set(FutureTime=$[${FutureTime} - ${FutureTimeMod} + 10]) | |
381 | exten => *60,n,Gosub(sub-hr12format,s,1()) | |
382 | exten => *60,n(waitloop),Set(TimeLeft=$[${FutureTime} - ${EPOCH}]) | |
383 | exten => *60,n,GotoIf($[${TimeLeft} < 1]?playbeep) | |
384 | exten => *60,n,Wait(1) | |
385 | exten => *60,n,Goto(waitloop) | |
386 | exten => *60,n(playbeep),Playback(beep) | |
387 | exten => *60,n,Wait(5) | |
388 | exten => *60,n,Set(NumLoops=$[${NumLoops} + 1]) | |
389 | exten => *60,n,GotoIf($[${NumLoops} < 5]?start) | |
390 | exten => *60,n,Playback(goodbye) | |
391 | exten => *60,n,Hangup | |
392 | ||
393 | ;--== end of [app-speakingclock] ==--; | |
394 | ||
395 | ||
396 | [sub-hr24format] | |
397 | include => sub-hr24format-custom | |
398 | exten => s,1,GotoIf($[${DIALPLAN_EXISTS(sub-hr24format,${CHANNEL(language)},1)}]?${CHANNEL(language)},1:en,1) | |
399 | ||
400 | exten => en,1,Playback(at-tone-time-exactly) | |
401 | exten => en,n,SayUnixTime(${FutureTime},,kM 'and' S 'seconds') | |
402 | exten => en,n,Return() | |
403 | ||
404 | exten => fr,1,Playback(at-tone-time-exactly) | |
405 | exten => fr,n,SayUnixTime(${FutureTime},,kMS) | |
406 | exten => fr,n,Return() | |
407 | ||
408 | exten => de,1,Playback(at-tone-time-exactly) | |
409 | exten => de,n,SayUnixTime(${FutureTime},,kMS) | |
410 | exten => de,n,Return() | |
411 | ||
412 | exten => ja,1,Playback(at-tone-time-exactly) | |
413 | exten => ja,n,SayUnixTime(${FutureTime},,kMS) | |
414 | exten => ja,n,Return() | |
415 | ||
416 | ;--== end of [sub-hr24format] ==--; | |
417 | ||
418 | ||
419 | [app-queue-toggle] | |
420 | include => app-queue-toggle-custom | |
421 | exten => s,1(start),Answer | |
422 | exten => s,n,Wait(1) | |
423 | exten => s,n,Macro(user-callerid,) | |
424 | exten => s,n,Set(QUEUEUSER=${IF($[${LEN(${QUEUEUSER})}>0]?${QUEUEUSER}:${AMPUSER})}) | |
425 | exten => s,n,Set(QUEUESTAT=LOGGEDOUT) | |
426 | exten => s,n,AGI(queue_devstate.agi,getqueues,${QUEUEUSER}) | |
427 | exten => s,n,GotoIf($["${QUEUESTAT}" = "LOGGEDOUT"]?activate) | |
428 | exten => s,n,GotoIf($["${QUEUESTAT}" = "LOGGEDIN"]?deactivate) | |
429 | exten => s,n,GotoIf($["${QUEUESTAT}" = "STATIC"]?static:end) | |
430 | exten => s,n(deactivate),Noop(Agent Logged out) | |
431 | exten => s,n,Macro(toggle-del-agent,) | |
432 | exten => s,n(logout),Set(STATE=NOT_INUSE) | |
433 | exten => s,n,Gosub(sstate,1()) | |
434 | exten => s,n,Playback(agent-loggedoff) | |
435 | exten => s,n,Macro(hangupcall,) | |
436 | exten => s,n(activate),Noop(Agent Logged In) | |
437 | exten => s,n,Macro(toggle-add-agent,) | |
438 | exten => s,n,GotoIf($["${QAGENT_UNAUTHORIZED}"="1"]?logout) | |
439 | exten => s,n,Set(STATE=INUSE) | |
440 | exten => s,n,Gosub(sstate,1()) | |
441 | exten => s,n,Playback(agent-loginok) | |
442 | exten => s,n,SayDigits(${QUEUEUSER}) | |
443 | exten => s,n,Macro(hangupcall,) | |
444 | exten => s,n(static),Noop(User is a Static Agent) | |
445 | exten => s,n,Set(STATE=INUSE) | |
446 | exten => s,n,Gosub(sstate,1()) | |
447 | exten => s,n,Playback(agent-loginok) | |
448 | exten => s,n,Macro(hangupcall,) | |
449 | ||
450 | exten => sstate,1,Set(DEVICES=${DB(AMPUSER/${QUEUEUSER}/device)}) | |
451 | exten => sstate,n,GotoIf($["${DEVICES}" = "" ]?return) | |
452 | exten => sstate,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)}) | |
453 | exten => sstate,n,Set(ITER=1) | |
454 | exten => sstate,n(begin),Set(DEVICE_STATE(Custom:QUEUE${CUT(DEVICES,&,${ITER})}*${QUEUENO})=${STATE}) | |
455 | exten => sstate,n,Set(ITER=$[${ITER} + 1]) | |
456 | exten => sstate,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin) | |
457 | exten => sstate,n(return),Return() | |
458 | ||
459 | ;--== end of [app-queue-toggle] ==--; | |
460 | ||
461 | ||
462 | [app-all-queue-toggle] | |
463 | include => app-all-queue-toggle-custom | |
464 | exten => s,1(start),Answer | |
465 | exten => s,n,Wait(1) | |
466 | exten => s,n,Macro(user-callerid,) | |
467 | exten => s,n,AGI(queue_devstate.agi,getall,${AMPUSER}) | |
468 | exten => s,n,GotoIf($["${QUEUESTAT}" = "NOQUEUES"]?skip) | |
469 | exten => s,n,Set(TOGGLE_MACRO=${IF($["${QUEUESTAT}"="LOGGEDOUT"]?toggle-add-agent:toggle-del-agent)}) | |
470 | exten => s,n,Set(STATE=${IF($["${QUEUESTAT}"="LOGGEDOUT"]?INUSE:NOT_INUSE)}) | |
471 | exten => s,n,Set(LOOPCNTALL=${FIELDQTY(USERQUEUES,-)}) | |
472 | exten => s,n,Set(ITERALL=1) | |
473 | exten => s,n(begin),Set(QUEUENO=${CUT(USERQUEUES,-,${ITERALL})}) | |
474 | exten => s,n,Set(ITERALL=$[${ITERALL}+1]) | |
475 | exten => s,n,Macro(${TOGGLE_MACRO},) | |
476 | exten => s,n,Gosub(app-queue-toggle,sstate,1()) | |
477 | exten => s,n,GotoIf($[${ITERALL} <= ${LOOPCNTALL}]?begin) | |
478 | exten => s,n(skip),ExecIf($["${QUEUESTAT}"="LOGGEDIN" | "${QUEUESTAT}"="NOQUEUES"]?Playback(agent-loggedoff)) | |
479 | exten => s,n,ExecIf($["${QUEUESTAT}"="LOGGEDOUT"]?Playback(agent-loginok)) | |
480 | exten => s,n,ExecIf($["${QUEUESTAT}"="LOGGEDOUT"]?SayDigits(${AMPUSER})) | |
481 | exten => s,n,Macro(hangupcall,) | |
482 | ||
483 | ;--== end of [app-all-queue-toggle] ==--; | |
484 | ||
485 | ||
486 | [macro-toggle-del-agent] | |
487 | include => macro-toggle-del-agent-custom | |
488 | exten => s,1,Macro(user-callerid,SKIPTTL,) | |
489 | exten => s,n,Set(QUEUEUSER=${IF($[${LEN(${QUEUEUSER})}>0]?${QUEUEUSER}:${AMPUSER})}) | |
490 | exten => s,n,Set(QUEUEUSERCIDNAME=${DB(AMPUSER/${QUEUEUSER}/cidname)}) | |
491 | exten => s,n,RemoveQueueMember(${QUEUENO},Local/${QUEUEUSER}@from-queue/n) | |
492 | exten => s,n,RemoveQueueMember(${QUEUENO},Local/${QUEUEUSER}@from-internal/n) | |
493 | exten => s,n,UserEvent(RefreshQueue) | |
494 | exten => s,n,QueueLog(${QUEUENO},MANAGER,${IF($[${LEN(${QUEUEUSERCIDNAME})}>0]?${QUEUEUSERCIDNAME}:${QUEUEUSER})},REMOVEMEMBER,) | |
495 | exten => s,n,MacroExit() | |
496 | ||
497 | ;--== end of [macro-toggle-del-agent] ==--; | |
498 | ||
499 | ||
500 | [macro-toggle-add-agent] | |
501 | include => macro-toggle-add-agent-custom | |
502 | exten => s,1,Macro(user-callerid,SKIPTTL,) | |
503 | exten => s,n,Set(QUEUEUSER=${IF($[${LEN(${QUEUEUSER})}>0]?${QUEUEUSER}:${AMPUSER})}) | |
504 | exten => s,n,Set(QUEUEUSERCIDNAME=${DB(AMPUSER/${QUEUEUSER}/cidname)}) | |
505 | exten => s,n,GotoIf($["${DB(QPENALTY/${QUEUENO}/dynmemberonly)}" = "yes" & ${DB_EXISTS(QPENALTY/${QUEUENO}/agents/${QUEUEUSER})} != 1]?invalid) | |
506 | exten => s,n,ExecIf($["${DB(AMPUSER/${QUEUEUSER}/queues/qnostate)}" != "ignorestate"]?AddQueueMember(${QUEUENO},Local/${QUEUEUSER}@from-queue/n,${DB(QPENALTY/${QUEUENO}/agents/${QUEUEUSER})},,${QUEUEUSERCIDNAME},hint:${QUEUEUSER}@ext-local)) | |
507 | exten => s,n,ExecIf($["${DB(AMPUSER/${QUEUEUSER}/queues/qnostate)}" = "ignorestate"]?AddQueueMember(${QUEUENO},Local/${QUEUEUSER}@from-queue/n,${DB(QPENALTY/${QUEUENO}/agents/${QUEUEUSER})},,${QUEUEUSERCIDNAME})) | |
508 | exten => s,n,UserEvent(AgentLogin,Agent: ${QUEUEUSER}) | |
509 | exten => s,n,QueueLog(${QUEUENO},MANAGER,${IF($[${LEN(${QUEUEUSERCIDNAME})}>0]?${QUEUEUSERCIDNAME}:${QUEUEUSER})},ADDMEMBER,) | |
510 | exten => s,n,MacroExit() | |
511 | exten => s,n(invalid),Playback(pbx-invalid) | |
512 | exten => s,n,Set(QAGENT_UNAUTHORIZED=1) | |
513 | exten => s,n,MacroExit() | |
514 | ||
515 | ;--== end of [macro-toggle-add-agent] ==--; | |
516 | ||
517 | ||
518 | [app-queue-pause-toggle] | |
519 | include => app-queue-pause-toggle-custom | |
520 | exten => s,1(start),Answer | |
521 | exten => s,n,Wait(1) | |
522 | exten => s,n,Macro(user-callerid,) | |
523 | exten => s,n,Set(QUEUEUSER=${IF($[${LEN(${ARG2})}>0]?${ARG2}:${AMPUSER})}) | |
524 | exten => s,n,Set(MEMBR=Local/${QUEUEUSER}@from-queue/n) | |
525 | exten => s,n,Set(PAUSE_STATE=${QUEUE_MEMBER(${ARG1},paused,${MEMBR})}) | |
526 | exten => s,n,Set(QUEUE_MEMBER(${ARG1},paused,${MEMBR})=${IF($[${PAUSE_STATE}]?0:1)}) | |
527 | exten => s,n,Playback(dictate/pause&${IF($[${PAUSE_STATE}]?de-activated:activated)}) | |
528 | exten => s,n,ExecIf($[${ARG2}]?Return()) | |
529 | exten => s,n,Macro(hangupcall,) | |
530 | ||
531 | ;--== end of [app-queue-pause-toggle] ==--; | |
532 | ||
533 | ||
534 | [app-all-queue-pause-toggle] | |
535 | include => app-all-queue-pause-toggle-custom | |
536 | exten => s,1(start),Answer | |
537 | exten => s,n,Wait(1) | |
538 | exten => s,n,Macro(user-callerid,) | |
539 | exten => s,n,AGI(queue_devstate.agi,toggle-pause-all,${AMPUSER}) | |
540 | exten => s,n,Playback(dictate/pause&${IF($[${TOGGLEPAUSED}]?activated:de-activated)}) | |
541 | exten => s,n,Macro(hangupcall,) | |
542 | ||
543 | ;--== end of [app-all-queue-pause-toggle] ==--; | |
544 | ||
545 | ||
546 | [ext-queues] | |
547 | include => ext-queues-custom | |
548 | exten => 111,1,Macro(user-callerid,) | |
549 | exten => 111,n,Answer | |
550 | exten => 111,n,Macro(blkvm-set,reset) | |
551 | exten => 111,n,ExecIf($["${REGEX("(M[(]auto-blkvm[)])" ${DIAL_OPTIONS})}" != "1"]?Set(_DIAL_OPTIONS=${DIAL_OPTIONS}M(auto-blkvm))) | |
552 | exten => 111,n,Set(__NODEST=${EXTEN}) | |
553 | exten => 111,n,Set(QCIDPP=${IF($[${LEN(${VQ_CIDPP})}>0]?${VQ_CIDPP}: )}) | |
554 | exten => 111,n,Set(VQ_CIDPP=) | |
555 | exten => 111,n,ExecIf($["${QCIDPP}"!=""]?Macro(prepend-cid,${QCIDPP})) | |
556 | exten => 111,n,Set(QAINFO=${IF($[${LEN(${VQ_AINFO})}>0]?${VQ_AINFO}: )}) | |
557 | exten => 111,n,Set(VQ_AINFO=) | |
558 | exten => 111,n,ExecIf($["${QAINFO}"!=""]?Set(__ALERT_INFO=${QAINFO})) | |
559 | exten => 111,n,Set(QJOINMSG=${IF($[${LEN(${VQ_JOINMSG})}>0]?${IF($["${VQ_JOINMSG}"!="0"]?${VQ_JOINMSG}: )}: )}) | |
560 | exten => 111,n,Set(VQ_JOINMSG=) | |
561 | exten => 111,n,Set(QRETRY=${IF($[${LEN(${VQ_RETRY})}>0]?${VQ_RETRY}: )}) | |
562 | exten => 111,n,Set(VQ_RETRY=) | |
563 | exten => 111,n(qoptions),Set(QOPTIONS=${IF($[${LEN(${VQ_OPTIONS})}>0]?${VQ_OPTIONS}:t)}${QCANCELMISSED}${QRINGOPTS}${QRETRY}) | |
564 | exten => 111,n,Set(VQ_OPTIONS=) | |
565 | exten => 111,n(qgosub),Set(QGOSUB=${IF($[${LEN(${VQ_GOSUB})}>0]?${VQ_GOSUB}:${QGOSUB})}) | |
566 | exten => 111,n,Set(VQ_GOSUB=) | |
567 | exten => 111,n(qagi),Set(QAGI=${IF($[${LEN(${VQ_AGI})}>0]?${VQ_AGI}:${QAGI})}) | |
568 | exten => 111,n,Set(VQ_AGI=) | |
569 | exten => 111,n(qrule),Set(QRULE=${IF($[${LEN(${VQ_RULE})}>0]?${IF($["${VQ_RULE}"!="0"]?${VQ_RULE}: )}:${QRULE})}) | |
570 | exten => 111,n,Set(VQ_RULE=) | |
571 | exten => 111,n(qposition),Set(QPOSITION=${IF($[${LEN(${VQ_POSITION})}>0]?${VQ_POSITION}:${QPOSITION})}) | |
572 | exten => 111,n,Set(VQ_POSITION=) | |
573 | exten => 111,n,Gosub(sub-record-check,s,1(q,111,dontcare)) | |
574 | exten => 111,n,Set(__CWIGNORE=TRUE) | |
575 | exten => 111,n,ExecIf($["${QJOINMSG}"!=""]?Playback(${QJOINMSG}, )) | |
576 | exten => 111,n,QueueLog(111,${UNIQUEID},NONE,DID,${FROM_DID}) | |
577 | exten => 111,n,Set(QAANNOUNCE=${IF($[${LEN(${VQ_AANNOUNCE})}>0]?${IF($["${VQ_AANNOUNCE}"!="0"]?${VQ_AANNOUNCE}: )}: )}) | |
578 | exten => 111,n,Set(VQ_AANNOUNCE=) | |
579 | exten => 111,n,Set(QMOH=${IF($["${VQ_MOH}"!=""]?${VQ_MOH}: )}) | |
580 | exten => 111,n,Set(VQ_MOH=) | |
581 | exten => 111,n,ExecIf($["${QMOH}"!=""]?Set(__MOHCLASS=${QMOH})) | |
582 | exten => 111,n,ExecIf($["${MOHCLASS}"!=""]?Set(CHANNEL(musicclass)=${MOHCLASS})) | |
583 | exten => 111,n,Set(QMAXWAIT=${IF($[${LEN(${VQ_MAXWAIT})}>0]?${VQ_MAXWAIT}: )}) | |
584 | exten => 111,n,Set(VQ_MAXWAIT=) | |
585 | exten => 111,n,Set(QUEUENUM=111) | |
586 | exten => 111,n,Set(QUEUEJOINTIME=${EPOCH}) | |
587 | exten => 111,n(qcall),Queue(111,${QOPTIONS},,${QAANNOUNCE},${QMAXWAIT},${QAGI},,${QGOSUB},${QRULE},${QPOSITION}) | |
588 | exten => 111,n,Macro(blkvm-clr,) | |
589 | exten => 111,n,Gosub(sub-record-cancel,s,1()) | |
590 | exten => 111,n,Set(__NODEST=) | |
591 | exten => 111,n,Set(_QUEUE_PRIO=0) | |
592 | exten => 111,n,Set(__CWIGNORE=) | |
593 | exten => 111,n,Set(QDEST=${VQ_DEST}) | |
594 | exten => 111,n,Set(VQ_DEST=) | |
595 | exten => 111,n(gotodest),GotoIf($["${QDEST}"=""]?from-did-direct,1,1:${CUT(QDEST,^,1)},${CUT(QDEST,^,2)},${CUT(QDEST,^,3)}) | |
596 | ||
597 | exten => 111*,1,Macro(agent-add,111,) | |
598 | ||
599 | exten => 111**,1,Macro(agent-del,111) | |
600 | ||
601 | exten => *45111,1,Set(QUEUENO=111) | |
602 | exten => *45111,n,Goto(app-queue-toggle,s,start) | |
603 | ||
604 | exten => *46111,1,Gosub(app-queue-pause-toggle,s,1(111)) | |
605 | ||
606 | exten => _*45X*XXX,1,Set(QUEUENO=${EXTEN:5:3}) | |
607 | exten => _*45X*XXX,n,Set(QUEUEUSER=${EXTEN:3:1}) | |
608 | exten => _*45X*XXX,n,Goto(app-queue-toggle,s,start) | |
609 | exten => _*45X*XXX,hint,Custom:QUEUE${EXTEN:3} | |
610 | ||
611 | exten => *45,1,Goto(app-all-queue-toggle,s,start) | |
612 | ||
613 | exten => _*45*X.,1,Goto(app-all-queue-toggle,s,start) | |
614 | ||
615 | exten => _*45*X,1,Goto(app-all-queue-toggle,s,start) | |
616 | ||
617 | exten => *46,1,Goto(app-all-queue-pause-toggle,s,1) | |
618 | ||
619 | exten => _*46*X.,1,Goto(app-all-queue-pause-toggle,s,1) | |
620 | ||
621 | exten => _*46*X,1,Goto(app-all-queue-pause-toggle,s,1) | |
622 | ||
623 | exten => h,1,Macro(hangupcall,) | |
624 | ||
625 | ;--== end of [ext-queues] ==--; | |
626 | ||
627 | ||
628 | [from-queue] | |
629 | include => from-queue-custom | |
630 | exten => 111,1,Goto(from-internal,${QAGENT},1) | |
631 | ||
632 | exten => _.,1,Set(QAGENT=${EXTEN}) | |
633 | exten => _.,n,Goto(${NODEST},1) | |
634 | ||
635 | ;--== end of [from-queue] ==--; | |
636 | ||
637 | ||
638 | [app-queue-caller-count] | |
639 | include => app-queue-caller-count-custom | |
640 | exten => s,1,Answer | |
641 | exten => s,n,Wait(1) | |
642 | exten => s,n,Set(QUEUES=${ARG1}) | |
643 | exten => s,n,Set(COUNT=0) | |
644 | exten => s,n,Set(LOOPCNT=${FIELDQTY(QUEUES,&)}) | |
645 | exten => s,n,Set(ITER=1) | |
646 | exten => s,n(begin1),Set(QUEUE=${CUT(QUEUES,&,${ITER})}) | |
647 | exten => s,n,Set(COUNT=$[${COUNT} + ${QUEUE_WAITING_COUNT(${QUEUE})}]) | |
648 | exten => s,n(end1),Set(ITER=$[${ITER} + 1]) | |
649 | exten => s,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin1) | |
650 | exten => s,n,SayNumber(${COUNT},f) | |
651 | exten => s,n,Playback(queue-quantity2) | |
652 | exten => s,n,Return() | |
653 | ||
654 | ;--== end of [app-queue-caller-count] ==--; | |
655 | ||
656 | ||
657 | [from-queue-exten-internal] | |
658 | include => from-queue-exten-internal-custom | |
659 | include => from-queue-exten-only | |
660 | include => from-internal | |
661 | exten => foo,1,Noop(bar) | |
662 | ||
663 | ;--== end of [from-queue-exten-internal] ==--; | |
664 | ||
665 | ||
666 | [from-queue-exten-only] | |
667 | include => from-queue-exten-only-custom | |
668 | exten => 1,1,Set(RingGroupMethod=none) | |
669 | exten => 1,n,Set(QDOPTS=${IF($["${CALLER_DEST}"!=""]?g)}${IF($["${AGENT_DEST}"!=""]?F(${AGENT_DEST}))}) | |
670 | exten => 1,n(checkrecord),Set(CALLTYPE_OVERRIDE=external) | |
671 | exten => 1,n,ExecIf($[!${LEN(${FROMEXTEN})}]?Set(FROMEXTEN=${IF(${LEN(${NODEST})}?${NODEST}:external)})) | |
672 | exten => 1,n,Gosub(sub-record-check,s,1(exten,1,)) | |
673 | exten => 1,n,Macro(dial-one,,${DIAL_OPTIONS}${QDOPTS},1) | |
674 | exten => 1,n,GotoIf($["${CALLER_DEST}"!=""]?${CUT(CALLER_DEST,^,1)},${CUT(CALLER_DEST,^,2)},${CUT(CALLER_DEST,^,3)}) | |
675 | exten => 1,n,Hangup | |
676 | ||
677 | exten => 2,1,Set(RingGroupMethod=none) | |
678 | exten => 2,n,Set(QDOPTS=${IF($["${CALLER_DEST}"!=""]?g)}${IF($["${AGENT_DEST}"!=""]?F(${AGENT_DEST}))}) | |
679 | exten => 2,n(checkrecord),Set(CALLTYPE_OVERRIDE=external) | |
680 | exten => 2,n,ExecIf($[!${LEN(${FROMEXTEN})}]?Set(FROMEXTEN=${IF(${LEN(${NODEST})}?${NODEST}:external)})) | |
681 | exten => 2,n,Gosub(sub-record-check,s,1(exten,2,)) | |
682 | exten => 2,n,Macro(dial-one,,${DIAL_OPTIONS}${QDOPTS},2) | |
683 | exten => 2,n,GotoIf($["${CALLER_DEST}"!=""]?${CUT(CALLER_DEST,^,1)},${CUT(CALLER_DEST,^,2)},${CUT(CALLER_DEST,^,3)}) | |
684 | exten => 2,n,Hangup | |
685 | ||
686 | exten => 3,1,Set(RingGroupMethod=none) | |
687 | exten => 3,n,Set(QDOPTS=${IF($["${CALLER_DEST}"!=""]?g)}${IF($["${AGENT_DEST}"!=""]?F(${AGENT_DEST}))}) | |
688 | exten => 3,n(checkrecord),Set(CALLTYPE_OVERRIDE=external) | |
689 | exten => 3,n,ExecIf($[!${LEN(${FROMEXTEN})}]?Set(FROMEXTEN=${IF(${LEN(${NODEST})}?${NODEST}:external)})) | |
690 | exten => 3,n,Gosub(sub-record-check,s,1(exten,3,)) | |
691 | exten => 3,n,Macro(dial-one,,${DIAL_OPTIONS}${QDOPTS},3) | |
692 | exten => 3,n,GotoIf($["${CALLER_DEST}"!=""]?${CUT(CALLER_DEST,^,1)},${CUT(CALLER_DEST,^,2)},${CUT(CALLER_DEST,^,3)}) | |
693 | exten => 3,n,Hangup | |
694 | ||
695 | exten => 4,1,Set(RingGroupMethod=none) | |
696 | exten => 4,n,Set(QDOPTS=${IF($["${CALLER_DEST}"!=""]?g)}${IF($["${AGENT_DEST}"!=""]?F(${AGENT_DEST}))}) | |
697 | exten => 4,n(checkrecord),Set(CALLTYPE_OVERRIDE=external) | |
698 | exten => 4,n,ExecIf($[!${LEN(${FROMEXTEN})}]?Set(FROMEXTEN=${IF(${LEN(${NODEST})}?${NODEST}:external)})) | |
699 | exten => 4,n,Gosub(sub-record-check,s,1(exten,4,)) | |
700 | exten => 4,n,Macro(dial-one,,${DIAL_OPTIONS}${QDOPTS},4) | |
701 | exten => 4,n,GotoIf($["${CALLER_DEST}"!=""]?${CUT(CALLER_DEST,^,1)},${CUT(CALLER_DEST,^,2)},${CUT(CALLER_DEST,^,3)}) | |
702 | exten => 4,n,Hangup | |
703 | ||
704 | exten => 5,1,Set(RingGroupMethod=none) | |
705 | exten => 5,n,Set(QDOPTS=${IF($["${CALLER_DEST}"!=""]?g)}${IF($["${AGENT_DEST}"!=""]?F(${AGENT_DEST}))}) | |
706 | exten => 5,n(checkrecord),Set(CALLTYPE_OVERRIDE=external) | |
707 | exten => 5,n,ExecIf($[!${LEN(${FROMEXTEN})}]?Set(FROMEXTEN=${IF(${LEN(${NODEST})}?${NODEST}:external)})) | |
708 | exten => 5,n,Gosub(sub-record-check,s,1(exten,5,)) | |
709 | exten => 5,n,Macro(dial-one,,${DIAL_OPTIONS}${QDOPTS},5) | |
710 | exten => 5,n,GotoIf($["${CALLER_DEST}"!=""]?${CUT(CALLER_DEST,^,1)},${CUT(CALLER_DEST,^,2)},${CUT(CALLER_DEST,^,3)}) | |
711 | exten => 5,n,Hangup | |
712 | ||
713 | exten => 6,1,Set(RingGroupMethod=none) | |
714 | exten => 6,n,Set(QDOPTS=${IF($["${CALLER_DEST}"!=""]?g)}${IF($["${AGENT_DEST}"!=""]?F(${AGENT_DEST}))}) | |
715 | exten => 6,n(checkrecord),Set(CALLTYPE_OVERRIDE=external) | |
716 | exten => 6,n,ExecIf($[!${LEN(${FROMEXTEN})}]?Set(FROMEXTEN=${IF(${LEN(${NODEST})}?${NODEST}:external)})) | |
717 | exten => 6,n,Gosub(sub-record-check,s,1(exten,6,)) | |
718 | exten => 6,n,Macro(dial-one,,${DIAL_OPTIONS}${QDOPTS},6) | |
719 | exten => 6,n,GotoIf($["${CALLER_DEST}"!=""]?${CUT(CALLER_DEST,^,1)},${CUT(CALLER_DEST,^,2)},${CUT(CALLER_DEST,^,3)}) | |
720 | exten => 6,n,Hangup | |
721 | ||
722 | exten => h,1,Macro(hangupcall,) | |
723 | ||
724 | ;--== end of [from-queue-exten-only] ==--; | |
725 | ||
726 | ||
727 | [macro-agent-add] | |
728 | include => macro-agent-add-custom | |
729 | exten => lang-playback,1,GosubIf($[${DIALPLAN_EXISTS(app-queue-caller-count,${CHANNEL(language)})}]?app-queue-caller-count,${CHANNEL(language)},${ARG1}():app-queue-caller-count,en,${ARG1}()) | |
730 | exten => lang-playback,n,Return() | |
731 | ||
732 | exten => s,1,Wait(1) | |
733 | exten => s,n,Set(QUEUENO=${ARG1}) | |
734 | exten => s,n,Macro(user-callerid,SKIPTTL) | |
735 | exten => s,n(a3),Read(CALLBACKNUM,agent-login,,,,) | |
736 | exten => s,n,GotoIf($[${LEN(${CALLBACKNUM})}=0]?a5:a7) | |
737 | exten => s,n(a5),Set(CALLBACKNUM=${IF($[${LEN(${AMPUSER})}=0]?${CALLERID(number)}:${AMPUSER})}) | |
738 | exten => s,n,Set(THISDEVICE=${DB(DEVICE/${REALCALLERIDNUM}/dial)}) | |
739 | exten => s,n,GotoIf($["${CALLBACKNUM}" = ""]?a3) | |
740 | exten => s,n(a7),GotoIf($["${CALLBACKNUM}" = "${QUEUENO}"]?invalid) | |
741 | exten => s,n,GotoIf($["${ARG3}" = "EXTEN" & ${DB_EXISTS(AMPUSER/${CALLBACKNUM}/cidname)} = 0]?invalid) | |
742 | exten => s,n,GotoIf($["${DB(QPENALTY/${QUEUENO}/dynmemberonly)}" = "yes" & ${DB_EXISTS(QPENALTY/${QUEUENO}/agents/${CALLBACKNUM})} != 1]?invalid) | |
743 | exten => s,n,ExecIf($["${QREGEX}" != ""]?GotoIf($["${REGEX("${QREGEX}" ${CALLBACKNUM})}" = "0"]?invalid)) | |
744 | exten => s,n,ExecIf($["${ARG2}" != ""]?Authenticate(${ARG2})) | |
745 | exten => s,n,Set(STATE=INUSE) | |
746 | exten => s,n,Gosub(app-queue-toggle,sstate,1()) | |
747 | exten => s,n,ExecIf($[${DB_EXISTS(AMPUSER/${CALLBACKNUM}/cidname)} = 1 & "${DB(AMPUSER/${CALLBACKNUM}/queues/qnostate)}" != "ignorestate"]?AddQueueMember(${QUEUENO},Local/${CALLBACKNUM}@from-queue/n,${DB(QPENALTY/${QUEUENO}/agents/${CALLBACKNUM})},,${DB(AMPUSER/${CALLBACKNUM}/cidname)},hint:${CALLBACKNUM}@ext-local)) | |
748 | exten => s,n,ExecIf($[${DB_EXISTS(AMPUSER/${CALLBACKNUM}/cidname)} = 1 & "${DB(AMPUSER/${CALLBACKNUM}/queues/qnostate)}" = "ignorestate"]?AddQueueMember(${QUEUENO},Local/${CALLBACKNUM}@from-queue/n,${DB(QPENALTY/${QUEUENO}/agents/${CALLBACKNUM})},,${DB(AMPUSER/${CALLBACKNUM}/cidname)})) | |
749 | exten => s,n,ExecIf($[${DB_EXISTS(AMPUSER/${CALLBACKNUM}/cidname)} = 0]?AddQueueMember(${QUEUENO},Local/${CALLBACKNUM}@from-queue/n,${DB(QPENALTY/${QUEUENO}/agents/${CALLBACKNUM})})) | |
750 | exten => s,n,UserEvent(Agentlogin,Agent: ${CALLBACKNUM}) | |
751 | exten => s,n,Wait(1) | |
752 | exten => s,n,Gosub(app-queue-caller-count,lang-playback,1(hook_0)) | |
753 | exten => s,n,Hangup | |
754 | exten => s,n,MacroExit() | |
755 | exten => s,n(invalid),Playback(pbx-invalid) | |
756 | exten => s,n,Goto(a3) | |
757 | ||
758 | exten => en,1(hook_0),Playback(agent-loginok&with&extension) | |
759 | exten => en,n,SayDigits(${CALLBACKNUM}) | |
760 | exten => en,n,Return() | |
761 | ||
762 | exten => ja,1(hook_0),Playback(extension) | |
763 | exten => ja,n,SayDigits(${CALLBACKNUM}) | |
764 | exten => ja,n,Playback(jp-kara&agent-loginok) | |
765 | exten => ja,n,Return() | |
766 | ||
767 | ;--== end of [macro-agent-add] ==--; | |
768 | ||
769 | ||
770 | [macro-agent-del] | |
771 | include => macro-agent-del-custom | |
772 | exten => s,1,Wait(1) | |
773 | exten => s,n,Set(QUEUENO=${ARG1}) | |
774 | exten => s,n,Macro(user-callerid,SKIPTTL) | |
775 | exten => s,n(a3),Read(CALLBACKNUM,agent-logoff,,,,) | |
776 | exten => s,n,GotoIf($[${LEN(${CALLBACKNUM})}=0]?a5:a7) | |
777 | exten => s,n(a5),Set(CALLBACKNUM=${IF($[${LEN(${AMPUSER})}=0]?${CALLERID(number)}:${AMPUSER})}) | |
778 | exten => s,n,GotoIf($["${CALLBACKNUM}" = ""]?a3) | |
779 | exten => s,n,Set(STATE=NOT_INUSE) | |
780 | exten => s,n,Gosub(app-queue-toggle,sstate,1()) | |
781 | exten => s,n(a7),RemoveQueueMember(${QUEUENO},Local/${CALLBACKNUM}@from-queue/n) | |
782 | exten => s,n,RemoveQueueMember(${QUEUENO},Local/${CALLBACKNUM}@from-internal/n) | |
783 | exten => s,n,UserEvent(RefreshQueue) | |
784 | exten => s,n,Wait(1) | |
785 | exten => s,n,Playback(agent-loggedoff) | |
786 | exten => s,n,Hangup | |
787 | ||
788 | ;--== end of [macro-agent-del] ==--; | |
789 | ||
790 | ||
791 | [systemrecording-gui] | |
792 | include => systemrecording-gui-custom | |
793 | exten => dorecord,1,Record(${RECFILE}.wav,,,k) | |
794 | ||
795 | exten => h,1,System(touch ${RECFILE}.finished) | |
796 | exten => h,n(exit),Hangup | |
797 | ||
798 | ;--== end of [systemrecording-gui] ==--; | |
799 | ||
800 | ||
801 | [macro-systemrecording] | |
802 | include => macro-systemrecording-custom | |
803 | exten => s,1,GotoIf($["${ARG2}" = ""]?invalid) | |
804 | exten => s,n,Set(TMPLANG=${CHANNEL(language)}) | |
805 | exten => s,n,Set(RECFILE=${TMPLANG}/${ARG2}) | |
806 | exten => s,n,Set(LISTEN=docheck) | |
807 | exten => s,n,ExecIf($["${ARG3}" != ""]?Authenticate(${ARG3})) | |
808 | exten => s,n,Goto(${ARG1},1) | |
809 | ||
810 | exten => dorecord,1,Set(TMPRECFILE=${RECFILE}-TMP) | |
811 | exten => dorecord,n,Background(say-temp-msg-prs-pound,,${CHANNEL(language)}) | |
812 | exten => dorecord,n,Record(${TMPRECFILE}.wav,,,k) | |
813 | exten => dorecord,n,Set(LISTEN=dochecknolanguage) | |
814 | exten => dorecord,n,Goto(confmenu,1) | |
815 | ||
816 | exten => dochecknolanguage,1,Playback(beep) | |
817 | exten => dochecknolanguage,n(dc_start),Background(${TMPRECFILE},m,,macro-systemrecording) | |
818 | exten => dochecknolanguage,n,Wait(1) | |
819 | exten => dochecknolanguage,n,Goto(confmenu,1) | |
820 | ||
821 | exten => docheck,1,Playback(beep) | |
822 | exten => docheck,n(dc_start),Background(${RECFILE},m,${CHANNEL(language)},macro-systemrecording) | |
823 | exten => docheck,n,Wait(1) | |
824 | exten => docheck,n,Goto(confmenu,1) | |
825 | ||
826 | exten => confmenu,1,Background(to-listen-to-it&press-1&to-accept-recording&press-2&to-rerecord-it&press-star&language&press-3,m,${CHANNEL(language)},macro-systemrecording) | |
827 | exten => confmenu,n,Read(RECRESULT,,1,,,4) | |
828 | exten => confmenu,n,GotoIf($["x${RECRESULT}"="x*"]?dorecord,1) | |
829 | exten => confmenu,n,GotoIf($["x${RECRESULT}"="x1"]?${LISTEN},2) | |
830 | exten => confmenu,n,GotoIf($["x${RECRESULT}"="x2"]?doaccept,1) | |
831 | exten => confmenu,n,GotoIf($["x${RECRESULT}"="x3"]?switchlang,1) | |
832 | exten => confmenu,n,Goto(1) | |
833 | ||
834 | exten => doaccept,1,Set(EXISTS=${STAT(e,${ASTVARLIBDIR}/sounds/${TMPRECFILE}.wav)}) | |
835 | exten => doaccept,n,Noop(${EXISTS}) | |
836 | exten => doaccept,n,GotoIf($["${EXISTS}" != "1"]?exit) | |
837 | exten => doaccept,n,System(touch ${ASTVARLIBDIR}/sounds/${RECFILE}.finished) | |
838 | exten => doaccept,n,GotoIf($["x${TMPRECFILE}"="x"]?exit) | |
839 | exten => doaccept,n,System(mv ${ASTVARLIBDIR}/sounds/${TMPRECFILE}.wav ${ASTVARLIBDIR}/sounds/${RECFILE}.wav) | |
840 | exten => doaccept,n,Set(TMPRECFILE=${RECFILE}) | |
841 | exten => doaccept,n(exit),Playback(auth-thankyou) | |
842 | exten => doaccept,n,Goto(confmenu,1) | |
843 | ||
844 | exten => switchlang,1,Playback(language&is-set-to) | |
845 | exten => switchlang,n,SayAlpha(${TMPLANG}) | |
846 | exten => switchlang,n,Playback(after-the-tone) | |
847 | exten => switchlang,n,Background(press-1) | |
848 | exten => switchlang,n,SayAlpha(en) | |
849 | exten => switchlang,n,Playback(beep) | |
850 | exten => switchlang,n,Read(LANGRESULT,,1,,,4) | |
851 | exten => switchlang,n,ExecIf($["x${LANGRESULT}"="x1"]?Set(TMPLANG=en)) | |
852 | exten => switchlang,n,Set(RECFILE=${TMPLANG}/${ARG2}) | |
853 | exten => switchlang,n,Playback(language&is-set-to) | |
854 | exten => switchlang,n,SayAlpha(${TMPLANG}) | |
855 | exten => switchlang,n,Goto(confmenu,1) | |
856 | ||
857 | exten => invalid,1,Playback(pm-invalid-option) | |
858 | exten => invalid,n,Hangup | |
859 | ||
860 | exten => 1,1,Goto(${LISTEN},dc_start) | |
861 | ||
862 | exten => 2,1,Goto(doaccept,1) | |
863 | ||
864 | exten => 3,1,Goto(switchlang,1) | |
865 | ||
866 | exten => *,1,Goto(dorecord,1) | |
867 | ||
868 | exten => t,1,Playback(goodbye) | |
869 | exten => t,n,Hangup | |
870 | ||
871 | exten => i,1,Playback(pm-invalid-option) | |
872 | exten => i,n,Goto(confmenu,1) | |
873 | ||
874 | exten => h,1,System(touch ${ASTVARLIBDIR}/sounds/${RECFILE}.finished) | |
875 | exten => h,n,GotoIf($["x${TMPRECFILE}"="x"]?exit) | |
876 | exten => h,n,System(mv ${ASTVARLIBDIR}/sounds/${TMPRECFILE}.wav ${ASTVARLIBDIR}/sounds/${CHANNEL(language)}/${RECFILE}.wav) | |
877 | exten => h,n(exit),Hangup | |
878 | ||
879 | ;--== end of [macro-systemrecording] ==--; | |
880 | ||
881 | ||
882 | [vm-callme] | |
883 | include => vm-callme-custom | |
884 | exten => s,1,Answer | |
885 | exten => s,n,Wait(1) | |
886 | exten => s,n(repeat),Background(${MSG}&silence/2&vm-repeat&vm-starmain) | |
887 | exten => s,n,WaitExten(15,) | |
888 | ||
889 | exten => 5,1,Goto(s,repeat) | |
890 | ||
891 | exten => #,1,Playback(vm-goodbye) | |
892 | exten => #,n,Hangup | |
893 | ||
894 | exten => *,1,Macro(get-vmcontext,${MBOX}) | |
895 | exten => *,n,VoiceMailMain(${MBOX}@${VMCONTEXT},s) | |
896 | ||
897 | exten => i,1,Playback(pm-invalid-option) | |
898 | exten => i,n,Goto(s,repeat) | |
899 | ||
900 | exten => t,1,Playback(vm-goodbye) | |
901 | exten => t,n,Hangup | |
902 | ||
903 | exten => h,1,Hangup | |
904 | ||
905 | ;--== end of [vm-callme] ==--; | |
906 | ||
907 | ||
908 | [app-dialvm] | |
909 | include => app-dialvm-custom | |
910 | exten => *98,1,Macro(user-callerid,) | |
911 | exten => *98,n,Answer | |
912 | exten => *98,n(start),Wait(1) | |
913 | exten => *98,n,Noop(app-dialvm: Asking for mailbox) | |
914 | exten => *98,n,Read(MAILBOX,vm-login,,,3,2) | |
915 | exten => *98,n(check),Noop(app-dialvm: Got Mailbox ${MAILBOX}) | |
916 | exten => *98,n,Macro(get-vmcontext,${MAILBOX}) | |
917 | exten => *98,n,Set(VMBOXEXISTSSTATUS=${IF(${VM_INFO(${MAILBOX}@${VMCONTEXT},exists)}?SUCCESS:FAILED)}) | |
918 | exten => *98,n,GotoIf($["${VMBOXEXISTSSTATUS}" = "SUCCESS"]?good:bad) | |
919 | exten => *98,n,Macro(hangupcall,) | |
920 | exten => *98,n(good),Noop(app-dialvm: Good mailbox ${MAILBOX}@${VMCONTEXT}) | |
921 | exten => *98,n,VoiceMailMain(${MAILBOX}@${VMCONTEXT}) | |
922 | exten => *98,n,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?playret) | |
923 | exten => *98,n,Macro(hangupcall,) | |
924 | exten => *98,n(bad),Noop(app-dialvm: BAD mailbox ${MAILBOX}@${VMCONTEXT}) | |
925 | exten => *98,n,Wait(1) | |
926 | exten => *98,n,Noop(app-dialvm: Asking for password so people can't probe for existence of a mailbox) | |
927 | exten => *98,n,Read(FAKEPW,vm-password,,,3,2) | |
928 | exten => *98,n,Noop(app-dialvm: Asking for mailbox again) | |
929 | exten => *98,n,Read(MAILBOX,vm-incorrect-mailbox,,,3,2) | |
930 | exten => *98,n,Goto(check) | |
931 | exten => *98,n,Macro(hangupcall,) | |
932 | exten => *98,n(playret),Playback(beep&you-will-be-transfered-menu&silence/1) | |
933 | exten => *98,n,Goto(${IVR_CONTEXT},return,1) | |
934 | ||
935 | exten => _dvm.,1,Answer | |
936 | exten => _dvm.,n,Wait(1) | |
937 | exten => _dvm.,n,Macro(get-vmcontext,${EXTEN:3}) | |
938 | exten => _dvm.,n,VoiceMailMain(${EXTEN:3}@${VMCONTEXT}) | |
939 | exten => _dvm.,n,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?${IVR_CONTEXT},return,1) | |
940 | exten => _dvm.,n,Macro(hangupcall,) | |
941 | ||
942 | exten => _*98X.,hint,MWI:${EXTEN:3}@${DB(AMPUSER/${EXTEN:3}/voicemail)} | |
943 | ;--== end of [app-dialvm] ==--; | |
944 | ||
945 | ||
946 | [app-vmmain] | |
947 | include => app-vmmain-custom | |
948 | exten => *97,1,Answer | |
949 | exten => *97,n,Wait(1) | |
950 | exten => *97,n,Macro(user-callerid,) | |
951 | exten => *97,n,Macro(get-vmcontext,${AMPUSER}) | |
952 | exten => *97,n(check),Set(VMBOXEXISTSSTATUS=${IF(${VM_INFO(${AMPUSER}@${VMCONTEXT},exists)}?SUCCESS:FAILED)}) | |
953 | exten => *97,n,GotoIf($["${VMBOXEXISTSSTATUS}" = "SUCCESS"]?mbexist) | |
954 | exten => *97,n,VoiceMailMain() | |
955 | exten => *97,n,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?playret) | |
956 | exten => *97,n,Macro(hangupcall,) | |
957 | exten => *97,check+101(mbexist),GotoIf($["${DB(AMPUSER/${AMPUSER}/novmpw)}"!=""]?novmpw:vmpw) | |
958 | exten => *97,n(novmpw),Noop(Verifying channel ${CHANNEL} is actually ${AMPUSER}) | |
959 | exten => *97,n,GotoIf($["${REGEX("^${DB(DEVICE/${AMPUSER}/dial)}-[0-9a-fx]+$" ${CHANNEL})}"!="1"]?vmpws) | |
960 | exten => *97,n,VoiceMailMain(${AMPUSER}@${VMCONTEXT},s) | |
961 | exten => *97,n,Goto(vmend) | |
962 | exten => *97,n(vmpws),Noop(Channel ${CHANNEL} is NOT ${AMPUSER} forcing VM Password) | |
963 | exten => *97,n(vmpw),VoiceMailMain(${AMPUSER}@${VMCONTEXT}) | |
964 | exten => *97,n,Goto(vmend) | |
965 | exten => *97,n(vmend),GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?playret) | |
966 | exten => *97,n,Macro(hangupcall,) | |
967 | exten => *97,n(playret),Playback(beep&you-will-be-transfered-menu&silence/1) | |
968 | exten => *97,n,Goto(${IVR_CONTEXT},return,1) | |
969 | ||
970 | ;--== end of [app-vmmain] ==--; | |
971 | ||
972 | ||
973 | [app-userlogonoff] | |
974 | include => app-userlogonoff-custom | |
975 | exten => *12,1,Macro(user-logoff,) | |
976 | exten => *12,n(hook_off),Hangup | |
977 | ||
978 | exten => *11,1,Macro(user-logon,) | |
979 | exten => *11,n(hook_on_1),Hangup | |
980 | ||
981 | exten => _*11.,1,Macro(user-logon,${EXTEN:3},) | |
982 | exten => _*11.,n(hook_on_2),Hangup | |
983 | ||
984 | ;--== end of [app-userlogonoff] ==--; | |
985 | ||
986 | ||
987 | [macro-dial] | |
988 | include => macro-dial-custom | |
989 | exten => s,1,Noop(Blind Transfer: ${BLINDTRANSFER}, Attended Transfer: ${ATTENDEDTRANSFER}, User: ${AMPUSER}, Alert Info: ${ALERT_INFO}) | |
990 | exten => s,n,ExecIf($["${ALERT_INFO}"="" & ${LEN(${AMPUSER})}!=0 & ${LEN(${BLINDTRANSFER})}=0 & ${LEN(${ATTENDEDTRANSFER})}=0]?Set(ALERT_INFO=)) | |
991 | exten => s,n,ExecIf($[${LEN(${BLINDTRANSFER})}!=0]?Set(ALERT_INFO=)) | |
992 | exten => s,n,ExecIf($[${LEN(${ATTENDEDTRANSFER})}!=0]?Set(ALERT_INFO=)) | |
993 | exten => s,n,GotoIf($["${MOHCLASS}" = ""]?dial) | |
994 | exten => s,n,Set(CHANNEL(musicclass)=${MOHCLASS}) | |
995 | exten => s,n(dial),AGI(dialparties.agi) | |
996 | exten => s,n,Noop(Returned from dialparties with no extensions to call and DIALSTATUS: ${DIALSTATUS}) | |
997 | exten => s,n+2(normdial),Dial(${ds}b(func-apply-sipheaders^s^1),) | |
998 | exten => s,n,Set(DIALSTATUS=${IF($["${DIALSTATUS_CW}"!="" ]?${DIALSTATUS_CW}:${DIALSTATUS})}) | |
999 | exten => s,n,GosubIf($[("${SCREEN}" != "" & ("${DIALSTATUS}" = "TORTURE" | "${DIALSTATUS}" = "DONTCALL")) | "${DIALSTATUS}" = "ANSWER"]?${DIALSTATUS},1()) | |
1000 | exten => s,20(huntdial),Noop(Returned from dialparties with hunt groups to dial ) | |
1001 | exten => s,n,Set(HuntLoop=0) | |
1002 | exten => s,n(a22),GotoIf($[${HuntMembers} >= 1]?a30) | |
1003 | exten => s,n,Noop(Returning there are no members left in the hunt group to ring) | |
1004 | exten => s,n+2(a30),Set(HuntMember=HuntMember${HuntLoop}) | |
1005 | exten => s,n,GotoIf($[$["${CALLTRACE_HUNT}" != "" ] & $[$["${RingGroupMethod}" = "hunt" ] | $["${RingGroupMethod}" = "firstavailable"] | $["${RingGroupMethod}" = "firstnotonphone"]]]?a32:a35) | |
1006 | exten => s,n(a32),Set(CT_EXTEN=${CUT(FILTERED_DIAL,,$[${HuntLoop} + 1])}) | |
1007 | exten => s,n,Set(DB(CALLTRACE/${CT_EXTEN})=${CALLTRACE_HUNT}) | |
1008 | exten => s,n,Goto(s,a42) | |
1009 | exten => s,n(a35),GotoIf($[$["${CALLTRACE_HUNT}" != "" ] & $["${RingGroupMethod}" = "memoryhunt" ]]?a36:a50) | |
1010 | exten => s,n(a36),Set(CTLoop=0) | |
1011 | exten => s,n(a37),GotoIf($[${CTLoop} > ${HuntLoop}]?a42) | |
1012 | exten => s,n,Set(CT_EXTEN=${CUT(FILTERED_DIAL,,$[${CTLoop} + 1])}) | |
1013 | exten => s,n,Set(DB(CALLTRACE/${CT_EXTEN})=${CALLTRACE_HUNT}) | |
1014 | exten => s,n,Set(CTLoop=$[1 + ${CTLoop}]) | |
1015 | exten => s,n,Goto(s,a37) | |
1016 | exten => s,n(a42),Dial(${${HuntMember}}${ds},) | |
1017 | exten => s,n,GotoIf($["${DIALSTATUS}" = "ANSWER"]?ANSWER,1) | |
1018 | exten => s,n,Set(HuntLoop=$[1 + ${HuntLoop}]) | |
1019 | exten => s,n,GotoIf($[$[$["foo${RingGroupMethod}" != "foofirstavailable"] & $["foo${RingGroupMethod}" != "foofirstnotonphone"]] | $["foo${DialStatus}" = "fooBUSY"]]?a46) | |
1020 | exten => s,n,Set(HuntMembers=0) | |
1021 | exten => s,n(a46),Set(HuntMembers=$[${HuntMembers} - 1]) | |
1022 | exten => s,n,Goto(s,a22) | |
1023 | exten => s,n(a50),Noop(Deleting: CALLTRACE/${CT_EXTEN} ${DB_DELETE(CALLTRACE/${CT_EXTEN})}) | |
1024 | exten => s,n,Goto(s,a42) | |
1025 | ||
1026 | exten => NOANSWER,1,Macro(vm,${SCREEN_EXTEN},BUSY,${IVR_RETVM}) | |
1027 | exten => NOANSWER,n,GotoIf($["${IVR_RETVM}" != "RETURN" | "${IVR_CONTEXT}" = ""]?bye) | |
1028 | exten => NOANSWER,n,Return() | |
1029 | exten => NOANSWER,n(bye),Macro(hangupcall,) | |
1030 | ||
1031 | exten => TORTURE,1,Goto(app-blackhole,musiconhold,1) | |
1032 | exten => TORTURE,n,Macro(hangupcall,) | |
1033 | ||
1034 | exten => DONTCALL,1,Answer | |
1035 | exten => DONTCALL,n,Wait(1) | |
1036 | exten => DONTCALL,n,Zapateller() | |
1037 | exten => DONTCALL,n,Playback(ss-noservice) | |
1038 | exten => DONTCALL,n,Macro(hangupcall,) | |
1039 | ||
1040 | exten => ANSWER,1,Noop(Call successfully answered - Hanging up now) | |
1041 | exten => ANSWER,n,Macro(hangupcall,) | |
1042 | ||
1043 | exten => h,1,Macro(hangupcall,) | |
1044 | ||
1045 | ;--== end of [macro-dial] ==--; | |
1046 | ||
1047 | ||
1048 | [ext-local-confirm] | |
1049 | include => ext-local-confirm-custom | |
1050 | exten => _LC-.,1,Dial(${DB(DEVICE/${EXTEN:3}/dial)},${RT},${DIAL_OPTIONS}M(auto-confirm^${RG_IDX})b(func-apply-sipheaders^s^1)) | |
1051 | ||
1052 | ;--== end of [ext-local-confirm] ==--; | |
1053 | ||
1054 | ||
1055 | [findmefollow-ringallv2] | |
1056 | include => findmefollow-ringallv2-custom | |
1057 | exten => _FMPR-.,1,Set(CDR_PROP(disable)=true) | |
1058 | exten => _FMPR-.,n,Set(RingGroupMethod=) | |
1059 | exten => _FMPR-.,n,Set(USE_CONFIRMATION=) | |
1060 | exten => _FMPR-.,n,Set(RINGGROUP_INDEX=) | |
1061 | exten => _FMPR-.,n,Macro(simple-dial,${EXTEN:5},${FMREALPRERING}) | |
1062 | exten => _FMPR-.,n,ExecIf($["${DIALSTATUS}" = "BUSY"]?Set(SHARED(FM_DND,${FMUNIQUE})=DND)) | |
1063 | exten => _FMPR-.,n,Hangup | |
1064 | ||
1065 | exten => _FMGL-.,1,Set(CDR_PROP(disable)=true) | |
1066 | exten => _FMGL-.,n,Set(ENDLOOP=$[${EPOCH} + ${FMPRERING} + 2]) | |
1067 | exten => _FMGL-.,n(start),GotoIf($["${SHARED(FM_DND,${FMUNIQUE})}" = "DND"]?dodnd) | |
1068 | exten => _FMGL-.,n,Wait(1) | |
1069 | exten => _FMGL-.,n,GotoIf($[${EPOCH} < ${ENDLOOP}]?start) | |
1070 | exten => _FMGL-.,n,Set(SHARED(FM_DND,${FMUNIQUE})=) | |
1071 | exten => _FMGL-.,n(dodial),Macro(dial,${FMGRPTIME},${DIAL_OPTIONS},${EXTEN:5}) | |
1072 | exten => _FMGL-.,n,Hangup | |
1073 | exten => _FMGL-.,n+10(dodnd),Set(SHARED(FM_DND,${FMUNIQUE})=) | |
1074 | exten => _FMGL-.,n,GotoIf($["${FMPRIME}" = "FALSE"]?dodial) | |
1075 | exten => _FMGL-.,n,Hangup | |
1076 | ||
1077 | ;--== end of [findmefollow-ringallv2] ==--; | |
1078 | ||
1079 | ||
1080 | [app-pickup] | |
1081 | include => app-pickup-custom | |
1082 | exten => _**.,1,Macro(user-callerid,) | |
1083 | exten => _**.,n,Set(PICKUP_EXTEN=${AMPUSER}) | |
1084 | exten => _**.,n,Pickup(${EXTEN:2}&${EXTEN:2}@PICKUPMARK) | |
1085 | exten => _**.,n,Hangup | |
1086 | ||
1087 | exten => _***80.,1,Macro(user-callerid,) | |
1088 | exten => _***80.,n,Set(PICKUP_EXTEN=${AMPUSER}) | |
1089 | exten => _***80.,n,Pickup(${EXTEN:5}&${EXTEN:5}@PICKUPMARK) | |
1090 | exten => _***80.,n,Hangup | |
1091 | ||
1092 | ;--== end of [app-pickup] ==--; | |
1093 | ||
1094 | ||
1095 | [app-chanspy] | |
1096 | include => app-chanspy-custom | |
1097 | exten => 555,1,Macro(user-callerid,) | |
1098 | exten => 555,n,Answer | |
1099 | exten => 555,n,Wait(1) | |
1100 | exten => 555,n,ChanSpy() | |
1101 | exten => 555,n,Hangup | |
1102 | ||
1103 | ;--== end of [app-chanspy] ==--; | |
1104 | ||
1105 | ||
1106 | [ext-test] | |
1107 | include => ext-test-custom | |
1108 | exten => 7777,1,Macro(user-callerid,) | |
1109 | exten => 7777,n,Goto(from-pstn,${EXTEN},1) | |
1110 | ||
1111 | exten => h,1,Macro(hangupcall,) | |
1112 | ||
1113 | ;--== end of [ext-test] ==--; | |
1114 | ||
1115 | ||
1116 | [ext-did] | |
1117 | include => ext-did-custom | |
1118 | include => ext-did-0001 | |
1119 | include => ext-did-0002 | |
1120 | exten => foo,1,Noop(bar) | |
1121 | ||
1122 | ;--== end of [ext-did] ==--; | |
1123 | ||
1124 | ||
1125 | [ext-did-0001] | |
1126 | include => ext-did-0001-custom | |
1127 | exten => s,1,ExecIf($["${FROM_DID}" = ""]?Set(__FROM_DID=${EXTEN})) | |
1128 | exten => s,n,Set(CDR(did)=${FROM_DID}) | |
1129 | exten => s,n,ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)})) | |
1130 | exten => s,n,Set(CHANNEL(musicclass)=default) | |
1131 | exten => s,n,Set(__MOHCLASS=default) | |
1132 | exten => s,n,Set(__REVERSAL_REJECT=FALSE) | |
1133 | exten => s,n,GotoIf($["${REVERSAL_REJECT}"!="TRUE"]?post-reverse-charge) | |
1134 | exten => s,n,GotoIf($["${CHANNEL(reversecharge)}"="1"]?macro-hangupcall) | |
1135 | exten => s,n(post-reverse-charge),Noop() | |
1136 | exten => s,n,Set(__CALLINGNAMEPRES_SV=${CALLERID(name-pres)}) | |
1137 | exten => s,n,Set(__CALLINGNUMPRES_SV=${CALLERID(num-pres)}) | |
1138 | exten => s,n,Set(CALLERID(name-pres)=allowed_not_screened) | |
1139 | exten => s,n,Set(CALLERID(num-pres)=allowed_not_screened) | |
1140 | exten => s,n,Set(__ALERT_INFO= ) | |
1141 | exten => s,n(did-cid-hook),Noop(CallerID Entry Point) | |
1142 | exten => s,n(dest-ext),Goto(from-did-direct,5,1) | |
1143 | ||
1144 | ;--== end of [ext-did-0001] ==--; | |
1145 | ||
1146 | ||
1147 | [ext-did-catchall] | |
1148 | include => ext-did-catchall-custom | |
1149 | exten => _.,1,Noop(Catch-All DID Match - Found ${EXTEN} - You probably want a DID for this.) | |
1150 | exten => _.,n,Log(WARNING,Friendly Scanner from ${CUT(CUT(SIP_HEADER(Via), ,2),:,1)}) | |
1151 | exten => _.,n,Set(__FROM_DID=${EXTEN}) | |
1152 | exten => _.,n,Goto(ext-did,s,1) | |
1153 | ||
1154 | ;--== end of [ext-did-catchall] ==--; | |
1155 | ||
1156 | ||
1157 | [ext-local] | |
1158 | include => ext-local-custom | |
1159 | exten => 1,1,Set(__RINGTIMER=${IF($["${DB(AMPUSER/1/ringtimer)}" > "0"]?${DB(AMPUSER/1/ringtimer)}:${RINGTIMER_DEFAULT})}) | |
1160 | exten => 1,n,Macro(exten-vm,novm,1,0,0,0) | |
1161 | exten => 1,n(dest),Set(__PICKUPMARK=) | |
1162 | exten => 1,n,Goto(${IVR_CONTEXT},return,1) | |
1163 | exten => 1,hint,SIP/1,CustomPresence:1 | |
1164 | ||
1165 | exten => 2,1,Set(__RINGTIMER=${IF($["${DB(AMPUSER/2/ringtimer)}" > "0"]?${DB(AMPUSER/2/ringtimer)}:${RINGTIMER_DEFAULT})}) | |
1166 | exten => 2,n,Macro(exten-vm,novm,2,0,0,0) | |
1167 | exten => 2,n(dest),Set(__PICKUPMARK=) | |
1168 | exten => 2,n,Goto(${IVR_CONTEXT},return,1) | |
1169 | exten => 2,hint,SIP/2,CustomPresence:2 | |
1170 | ||
1171 | exten => 3,1,Set(__RINGTIMER=${IF($["${DB(AMPUSER/3/ringtimer)}" > "0"]?${DB(AMPUSER/3/ringtimer)}:${RINGTIMER_DEFAULT})}) | |
1172 | exten => 3,n,Macro(exten-vm,novm,3,0,0,0) | |
1173 | exten => 3,n(dest),Set(__PICKUPMARK=) | |
1174 | exten => 3,n,Goto(${IVR_CONTEXT},return,1) | |
1175 | exten => 3,hint,PJSIP/3,CustomPresence:3 | |
1176 | ||
1177 | exten => 4,1,Set(__RINGTIMER=${IF($["${DB(AMPUSER/4/ringtimer)}" > "0"]?${DB(AMPUSER/4/ringtimer)}:${RINGTIMER_DEFAULT})}) | |
1178 | exten => 4,n,Macro(exten-vm,novm,4,0,0,0) | |
1179 | exten => 4,n(dest),Set(__PICKUPMARK=) | |
1180 | exten => 4,n,Goto(${IVR_CONTEXT},return,1) | |
1181 | exten => 4,hint,PJSIP/4,CustomPresence:4 | |
1182 | ||
1183 | exten => 5,1,Set(__RINGTIMER=${IF($["${DB(AMPUSER/5/ringtimer)}" > "0"]?${DB(AMPUSER/5/ringtimer)}:${RINGTIMER_DEFAULT})}) | |
1184 | exten => 5,n,Macro(exten-vm,novm,5,0,0,0) | |
1185 | exten => 5,n(dest),Set(__PICKUPMARK=) | |
1186 | exten => 5,n,Goto(${IVR_CONTEXT},return,1) | |
1187 | exten => 5,hint,PJSIP/5,CustomPresence:5 | |
1188 | ||
1189 | exten => 6,1,Set(__RINGTIMER=${IF($["${DB(AMPUSER/6/ringtimer)}" > "0"]?${DB(AMPUSER/6/ringtimer)}:${RINGTIMER_DEFAULT})}) | |
1190 | exten => 6,n,Macro(exten-vm,novm,6,0,0,0) | |
1191 | exten => 6,n(dest),Set(__PICKUPMARK=) | |
1192 | exten => 6,n,Goto(${IVR_CONTEXT},return,1) | |
1193 | exten => 6,hint,PJSIP/6,CustomPresence:6 | |
1194 | ||
1195 | exten => vmret,1,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?playret) | |
1196 | exten => vmret,n,Hangup | |
1197 | exten => vmret,n(playret),Playback(exited-vm-will-be-transfered&silence/1) | |
1198 | exten => vmret,n,Goto(${IVR_CONTEXT},return,1) | |
1199 | ||
1200 | exten => h,1,Macro(hangupcall,) | |
1201 | ||
1202 | exten => *801,hint,SIP/1,CustomPresence:1 | |
1203 | exten => *802,hint,SIP/2,CustomPresence:2 | |
1204 | exten => *803,hint,PJSIP/3,CustomPresence:3 | |
1205 | exten => *804,hint,PJSIP/4,CustomPresence:4 | |
1206 | exten => *805,hint,PJSIP/5,CustomPresence:5 | |
1207 | exten => *806,hint,PJSIP/6,CustomPresence:6 | |
1208 | ;--== end of [ext-local] ==--; | |
1209 | ||
1210 | ||
1211 | [from-did-direct-ivr] | |
1212 | include => from-did-direct-ivr-custom | |
1213 | exten => 1,1,Macro(blkvm-clr,) | |
1214 | exten => 1,n,Set(__NODEST=) | |
1215 | exten => 1,n,Goto(from-did-direct,1,1) | |
1216 | ||
1217 | exten => 2,1,Macro(blkvm-clr,) | |
1218 | exten => 2,n,Set(__NODEST=) | |
1219 | exten => 2,n,Goto(from-did-direct,2,1) | |
1220 | ||
1221 | exten => 3,1,Macro(blkvm-clr,) | |
1222 | exten => 3,n,Set(__NODEST=) | |
1223 | exten => 3,n,Goto(from-did-direct,3,1) | |
1224 | ||
1225 | exten => 4,1,Macro(blkvm-clr,) | |
1226 | exten => 4,n,Set(__NODEST=) | |
1227 | exten => 4,n,Goto(from-did-direct,4,1) | |
1228 | ||
1229 | exten => 5,1,Macro(blkvm-clr,) | |
1230 | exten => 5,n,Set(__NODEST=) | |
1231 | exten => 5,n,Goto(from-did-direct,5,1) | |
1232 | ||
1233 | exten => 6,1,Macro(blkvm-clr,) | |
1234 | exten => 6,n,Set(__NODEST=) | |
1235 | exten => 6,n,Goto(from-did-direct,6,1) | |
1236 | ||
1237 | ;--== end of [from-did-direct-ivr] ==--; | |
1238 | ||
1239 | ||
1240 | [ext-trunk] | |
1241 | include => ext-trunk-custom | |
1242 | exten => 1,1,Set(TDIAL_STRING=DAHDI/g0) | |
1243 | exten => 1,n,Set(DIAL_TRUNK=1) | |
1244 | exten => 1,n,Goto(ext-trunk,tdial,1) | |
1245 | ||
1246 | exten => 2,1,Set(TDIAL_STRING=SIP/flowroute1) | |
1247 | exten => 2,n,Set(DIAL_TRUNK=2) | |
1248 | exten => 2,n,Goto(ext-trunk,tdial,1) | |
1249 | ||
1250 | exten => tdial,1,Set(OUTBOUND_GROUP=OUT_${DIAL_TRUNK}) | |
1251 | exten => tdial,n,GotoIf($["${OUTMAXCHANS_${DIAL_TRUNK}}" = ""]?nomax) | |
1252 | exten => tdial,n,GotoIf($[${GROUP_COUNT(OUT_${DIAL_TRUNK})} >= ${OUTMAXCHANS_${DIAL_TRUNK}}]?hangit) | |
1253 | exten => tdial,n(nomax),ExecIf($["${CALLINGNAMEPRES_SV}" != ""]?Set(CALLERPRES(name-pres)=${CALLINGNAMEPRES_SV})) | |
1254 | exten => tdial,n,ExecIf($["${CALLINGNUMPRES_SV}" != ""]?Set(CALLERPRES(num-pres)=${CALLINGNUMPRES_SV})) | |
1255 | exten => tdial,n,Set(DIAL_NUMBER=${FROM_DID}) | |
1256 | exten => tdial,n,GosubIf($["${PREFIX_TRUNK_${DIAL_TRUNK}}" != ""]?sub-flp-${DIAL_TRUNK},s,1()) | |
1257 | exten => tdial,n,Set(OUTNUM=${OUTPREFIX_${DIAL_TRUNK}}${DIAL_NUMBER}) | |
1258 | exten => tdial,n,Set(DIAL_TRUNK_OPTIONS=${IF($["${DB_EXISTS(TRUNK/${DIAL_TRUNK}/dialopts)}" = "1"]?${DB_RESULT}:${TRUNK_OPTIONS})}) | |
1259 | exten => tdial,n,Dial(${TDIAL_STRING}/${OUTNUM}${TDIAL_SUFFIX},${TRUNK_RING_TIMER},${DIAL_TRUNK_OPTIONS}) | |
1260 | exten => tdial,n,Set(CALLERID(number)=${CALLERID(number):0:40}) | |
1261 | exten => tdial,n,Set(CALLERID(name)=${CALLERID(name):0:40}) | |
1262 | exten => tdial,n(hangit),Hangup | |
1263 | ||
1264 | ;--== end of [ext-trunk] ==--; | |
1265 | ||
1266 | ||
1267 | [from-trunk-sip-flowroute1] | |
1268 | include => from-trunk-sip-flowroute1-custom | |
1269 | exten => _.,1,Set(GROUP()=OUT_2) | |
1270 | exten => _.,n,Goto(from-trunk,${EXTEN},1) | |
1271 | ||
1272 | ;--== end of [from-trunk-sip-flowroute1] ==--; | |
1273 | ||
1274 | ||
1275 | [sub-flp-2] | |
1276 | include => sub-flp-2-custom | |
1277 | exten => s,1,ExecIf($[${REGEX("^[2-9][0-9][0-9][2-9][0-9][0-9][0-9][0-9][0-9][0-9]$" ${DIAL_NUMBER})} = 1]?Set(TARGET_FLP_2=1${DIAL_NUMBER})) | |
1278 | exten => s,n,GotoIf($[${LEN(${TARGET_FLP_2})} != 0]?match) | |
1279 | exten => s,n,Return() | |
1280 | exten => s,n(match),Set(DIAL_NUMBER=${TARGET_FLP_2}) | |
1281 | exten => s,n,Return() | |
1282 | ||
1283 | ;--== end of [sub-flp-2] ==--; | |
1284 | ||
1285 | ||
1286 | [macro-prepend-cid] | |
1287 | include => macro-prepend-cid-custom | |
1288 | exten => s,1,GotoIf($["${RGPREFIX}" = ""]?REPCID) | |
1289 | exten => s,n,GotoIf($["${RGPREFIX}" != "${CALLERID(name):0:${LEN(${RGPREFIX})}}"]?REPCID) | |
1290 | exten => s,n,Set(CALLERID(name)=${CALLERID(name):${LEN(${RGPREFIX})}}) | |
1291 | exten => s,n,Set(_RGPREFIX=) | |
1292 | exten => s,n(REPCID),Set(_RGPREFIX=${ARG1}) | |
1293 | exten => s,n,Set(CALLERID(name)=${RGPREFIX}${CALLERID(name)}) | |
1294 | ||
1295 | ;--== end of [macro-prepend-cid] ==--; | |
1296 | ||
1297 | ||
1298 | [outbound-allroutes] | |
1299 | include => outbound-allroutes-custom | |
1300 | include => outrt-1 ; AOutbound | |
1301 | exten => foo,1,Noop(bar) | |
1302 | ||
1303 | ;--== end of [outbound-allroutes] ==--; | |
1304 | ||
1305 | ||
1306 | [outrt-1] ; AOutbound | |
1307 | include => outrt-1-custom | |
1308 | exten => _NXXNXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,) | |
1309 | exten => _NXXNXXXXXX,n,Gosub(sub-record-check,s,1(out,${EXTEN},dontcare)) | |
1310 | exten => _NXXNXXXXXX,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})}) | |
1311 | exten => _NXXNXXXXXX,n,ExecIf($["${KEEPCID}"!="TRUE" & ${LEN(${DB(AMPUSER/${AMPUSER}/outboundcid)})}=0 & ${LEN(${TRUNKCIDOVERRIDE})}=0]?Set(TRUNKCIDOVERRIDE=OutboundTest)) | |
1312 | exten => _NXXNXXXXXX,n,Set(_NODEST=) | |
1313 | exten => _NXXNXXXXXX,n,Macro(dialout-trunk,2,1${EXTEN},,off) | |
1314 | exten => _NXXNXXXXXX,n,Macro(dialout-trunk,1,1${EXTEN},,off) | |
1315 | exten => _NXXNXXXXXX,n,Macro(outisbusy,) | |
1316 | ||
1317 | ;--== end of [outrt-1] ==--; | |
1318 | ||
1319 | ||
1320 | [app-blackhole] | |
1321 | include => app-blackhole-custom | |
1322 | exten => hangup,1,Noop(Blackhole Dest: Hangup) | |
1323 | exten => hangup,n,Hangup | |
1324 | ||
1325 | exten => zapateller,1,Noop(Blackhole Dest: Play SIT Tone) | |
1326 | exten => zapateller,n,Answer | |
1327 | exten => zapateller,n,Zapateller() | |
1328 | ||
1329 | exten => musiconhold,1,Noop(Blackhole Dest: Put caller on hold forever) | |
1330 | exten => musiconhold,n,Answer | |
1331 | exten => musiconhold,n,MusicOnHold() | |
1332 | ||
1333 | exten => congestion,1,Noop(Blackhole Dest: Congestion) | |
1334 | exten => congestion,n,Progress | |
1335 | exten => congestion,n,Playtones(congestion) | |
1336 | exten => congestion,n,Congestion(20) | |
1337 | exten => congestion,n,Hangup | |
1338 | ||
1339 | exten => busy,1,Noop(Blackhole Dest: Busy) | |
1340 | exten => busy,n,Progress | |
1341 | exten => busy,n,Busy(20) | |
1342 | exten => busy,n,Hangup | |
1343 | ||
1344 | exten => ring,1,Noop(Blackhole Dest: Ring) | |
1345 | exten => ring,n,Answer | |
1346 | exten => ring,n,Playtones(ring) | |
1347 | exten => ring,n,Wait(300) | |
1348 | exten => ring,n,Hangup | |
1349 | ||
1350 | exten => no-service,1,Noop(Blackhole Dest: No service) | |
1351 | exten => no-service,n,Answer | |
1352 | exten => no-service,n,Wait(1) | |
1353 | exten => no-service,n,Zapateller() | |
1354 | exten => no-service,n,Playback(ss-noservice) | |
1355 | exten => no-service,n,Hangup | |
1356 | ||
1357 | ;--== end of [app-blackhole] ==--; | |
1358 | ||
1359 | ||
1360 | [bad-number] | |
1361 | include => bad-number-custom | |
1362 | exten => _X.,1,ResetCDR() | |
1363 | exten => _X.,n,NoCDR() | |
1364 | exten => _X.,n,Progress | |
1365 | exten => _X.,n,Wait(1) | |
1366 | exten => _X.,n,Progress | |
1367 | exten => _X.,n,Playback(silence/1&cannot-complete-as-dialed&check-number-dial-again,noanswer) | |
1368 | exten => _X.,n,Wait(1) | |
1369 | exten => _X.,n,Congestion(20) | |
1370 | exten => _X.,n,Hangup | |
1371 | ||
1372 | ;--== end of [bad-number] ==--; | |
1373 | ||
1374 | ||
1375 | [sub-presencestate-display] | |
1376 | include => sub-presencestate-display-custom | |
1377 | exten => s,1,Goto(state-${TOLOWER(${PRESENCE_STATE(CustomPresence:${ARG1},value)})},1) | |
1378 | ||
1379 | exten => state-available,1,Set(PRESENCESTATE_DISPLAY=(Available)) | |
1380 | exten => state-available,n,Return() | |
1381 | ||
1382 | exten => state-chat,1,Set(PRESENCESTATE_DISPLAY=(Chatty)) | |
1383 | exten => state-chat,n,Return() | |
1384 | ||
1385 | exten => state-away,1,Set(PRESENCESTATE_DISPLAY=(Away)) | |
1386 | exten => state-away,n,Return() | |
1387 | ||
1388 | exten => state-dnd,1,Set(PRESENCESTATE_DISPLAY=(DND)) | |
1389 | exten => state-dnd,n,Return() | |
1390 | ||
1391 | exten => state-xa,1,Set(PRESENCESTATE_DISPLAY=(Extended Away)) | |
1392 | exten => state-xa,n,Return() | |
1393 | ||
1394 | exten => state-unavailable,1,Set(PRESENCESTATE_DISPLAY=(Unavailable)) | |
1395 | exten => state-unavailable,n,Return() | |
1396 | ||
1397 | exten => _state-.,1,Set(PRESENCESTATE_DISPLAY=) | |
1398 | exten => _state-.,n,Return() | |
1399 | ||
1400 | exten => state-,1,Set(PRESENCESTATE_DISPLAY=) | |
1401 | exten => state-,n,Return() | |
1402 | ||
1403 | ;--== end of [sub-presencestate-display] ==--; | |
1404 | ||
1405 | ||
1406 | [macro-confirm] | |
1407 | include => macro-confirm-custom | |
1408 | exten => s,1,Set(LOOPCOUNT=0) | |
1409 | exten => s,n,Set(__MACRO_RESULT=ABORT) | |
1410 | exten => s,n,Set(MSG1=${IF($["${ARG1}${ALT_CONFIRM_MSG}"=""]?incoming-call-1-accept-2-decline:${IF($[${LEN(${ALT_CONFIRM_MSG})}>0]?${ALT_CONFIRM_MSG}:${ARG1})})}) | |
1411 | exten => s,n(start),Background(${MSG1},m,${CHANNEL(language)},macro-confirm) | |
1412 | exten => s,n,Read(INPUT,,1,,,4) | |
1413 | exten => s,n,GotoIf($[${LEN(${INPUT})} > 0]?${INPUT},1:t,1) | |
1414 | ||
1415 | exten => 1,1,GotoIf($["${DB_EXISTS(RG/${ARG3}/${UNIQCHAN})}"="0" & "${SHARED(ANSWER_STATUS,${FORCE_CONFIRM})}"=""]?toolate,1) | |
1416 | exten => 1,n,Noop(Deleting: RG/${ARG3}/${UNIQCHAN} ${DB_DELETE(RG/${ARG3}/${UNIQCHAN})}) | |
1417 | exten => 1,n,Macro(blkvm-clr,) | |
1418 | exten => 1,n,Set(SHARED(ANSWER_STATUS,${FORCE_CONFIRM})=) | |
1419 | exten => 1,n(skip),Set(__MACRO_RESULT=) | |
1420 | exten => 1,n,ExecIf($[("${MOHCLASS}"!="default") & ("${MOHCLASS}"!="")]?Set(CHANNEL(musicclass)=${MOHCLASS})) | |
1421 | exten => 1,n(exitopt1),MacroExit() | |
1422 | ||
1423 | exten => 2,1,Goto(noanswer,1) | |
1424 | ||
1425 | exten => 3,1,SayDigits(${CALLCONFIRMCID}) | |
1426 | exten => 3,n,GotoIf($["${DB_EXISTS(RG/${ARG3}/${UNIQCHAN})}"="0" & "${SHARED(ANSWER_STATUS,${FORCE_CONFIRM})}"=""]?toolate,1:s,start) | |
1427 | ||
1428 | exten => t,1,GotoIf($["${DB_EXISTS(RG/${ARG3}/${UNIQCHAN})}"="0" & "${SHARED(ANSWER_STATUS,${FORCE_CONFIRM})}"=""]?toolate,1) | |
1429 | exten => t,n,Set(LOOPCOUNT=$[ ${LOOPCOUNT} + 1 ]) | |
1430 | exten => t,n,GotoIf($[ ${LOOPCOUNT} < 5 ]?s,start:noanswer,1) | |
1431 | ||
1432 | exten => _X,1,Background(invalid,m,${CHANNEL(language)},macro-confirm) | |
1433 | exten => _X,n,GotoIf($["${DB_EXISTS(RG/${ARG3}/${UNIQCHAN})}"="0" | "${SHARED(ANSWER_STATUS,${FORCE_CONFIRM})}"=""]?toolate,1) | |
1434 | exten => _X,n,Set(LOOPCOUNT=$[ ${LOOPCOUNT} + 1 ]) | |
1435 | exten => _X,n,GotoIf($[ ${LOOPCOUNT} < 5 ]?s,start:noanswer,1) | |
1436 | ||
1437 | exten => noanswer,1,Set(__MACRO_RESULT=ABORT) | |
1438 | exten => noanswer,n(exitnoanswer),MacroExit() | |
1439 | ||
1440 | exten => toolate,1,Set(MSG2=${IF($["foo${ARG2}" != "foo"]?${ARG2}:"incoming-call-no-longer-avail")}) | |
1441 | exten => toolate,n,Playback(${MSG2}) | |
1442 | exten => toolate,n,Set(__MACRO_RESULT=ABORT) | |
1443 | exten => toolate,n(exittoolate),MacroExit() | |
1444 | ||
1445 | exten => h,1,Macro(hangupcall,) | |
1446 | ||
1447 | ;--== end of [macro-confirm] ==--; | |
1448 | ||
1449 | ||
1450 | [macro-auto-confirm] | |
1451 | include => macro-auto-confirm-custom | |
1452 | exten => s,1,Set(__MACRO_RESULT=) | |
1453 | exten => s,n,Set(CFIGNORE=) | |
1454 | exten => s,n,Set(MASTER_CHANNEL(CFIGNORE)=) | |
1455 | exten => s,n,Set(FORWARD_CONTEXT=from-internal) | |
1456 | exten => s,n,Set(MASTER_CHANNEL(FORWARD_CONTEXT)=from-internal) | |
1457 | exten => s,n,Macro(blkvm-clr,) | |
1458 | exten => s,n,Noop(Deleting: RG/${ARG1}/${UNIQCHAN} ${DB_DELETE(RG/${ARG1}/${UNIQCHAN})}) | |
1459 | exten => s,n,ExecIf($[!${REGEX("[^0-9]" ${DIALEDPEERNUMBER})} && "${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(MASTER_CHANNEL(CONNECTEDLINE(num))=${DIALEDPEERNUMBER})) | |
1460 | exten => s,n,ExecIf($[!${REGEX("[^0-9]" ${DIALEDPEERNUMBER})} && "${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(MASTER_CHANNEL(CONNECTEDLINE(name))=${DB(AMPUSER/${DIALEDPEERNUMBER}/cidname)})) | |
1461 | ||
1462 | ;--== end of [macro-auto-confirm] ==--; | |
1463 | ||
1464 | ||
1465 | [macro-auto-blkvm] | |
1466 | include => macro-auto-blkvm-custom | |
1467 | exten => s,1,Set(__MACRO_RESULT=) | |
1468 | exten => s,n,Set(CFIGNORE=) | |
1469 | exten => s,n,Set(MASTER_CHANNEL(CFIGNORE)=) | |
1470 | exten => s,n,Set(FORWARD_CONTEXT=from-internal) | |
1471 | exten => s,n,Set(MASTER_CHANNEL(FORWARD_CONTEXT)=from-internal) | |
1472 | exten => s,n,Macro(blkvm-clr,) | |
1473 | exten => s,n,ExecIf($[!${REGEX("[^0-9]" ${DIALEDPEERNUMBER})} && "${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(MASTER_CHANNEL(CONNECTEDLINE(num))=${DIALEDPEERNUMBER})) | |
1474 | exten => s,n,ExecIf($[!${REGEX("[^0-9]" ${DIALEDPEERNUMBER})} && "${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(MASTER_CHANNEL(CONNECTEDLINE(name))=${DB(AMPUSER/${DIALEDPEERNUMBER}/cidname)})) | |
1475 | ||
1476 | ;--== end of [macro-auto-blkvm] ==--; | |
1477 | ||
1478 | ||
1479 | [sub-pincheck] | |
1480 | include => sub-pincheck-custom | |
1481 | exten => s,1,Authenticate(${ARG3},) | |
1482 | exten => s,n,ResetCDR() | |
1483 | exten => s,n,Return() | |
1484 | ||
1485 | ;--== end of [sub-pincheck] ==--; | |
1486 | ||
1487 | ||
1488 | [macro-dialout-trunk] | |
1489 | include => macro-dialout-trunk-custom | |
1490 | exten => s,1,Set(DIAL_TRUNK=${ARG1}) | |
1491 | exten => s,n,GosubIf($[$["${ARG3}" != ""] & $["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]]?sub-pincheck,s,1()) | |
1492 | exten => s,n,GotoIf($["x${OUTDISABLE_${DIAL_TRUNK}}" = "xon"]?disabletrunk,1) | |
1493 | exten => s,n,Set(DIAL_NUMBER=${ARG2}) | |
1494 | exten => s,n,Set(DIAL_TRUNK_OPTIONS=${DIAL_OPTIONS}) | |
1495 | exten => s,n,Set(OUTBOUND_GROUP=OUT_${DIAL_TRUNK}) | |
1496 | exten => s,n,GotoIf($["${OUTMAXCHANS_${DIAL_TRUNK}}foo" = "foo"]?nomax) | |
1497 | exten => s,n,GotoIf($[ ${GROUP_COUNT(OUT_${DIAL_TRUNK})} >= ${OUTMAXCHANS_${DIAL_TRUNK}} ]?chanfull) | |
1498 | exten => s,n(nomax),GotoIf($["${INTRACOMPANYROUTE}" = "YES"]?skipoutcid) | |
1499 | exten => s,n,Set(DIAL_TRUNK_OPTIONS=${IF($["${DB_EXISTS(TRUNK/${DIAL_TRUNK}/dialopts)}" = "1"]?${DB_RESULT}:${TRUNK_OPTIONS})}) | |
1500 | exten => s,n,Macro(outbound-callerid,${DIAL_TRUNK}) | |
1501 | exten => s,n(skipoutcid),GosubIf($["${PREFIX_TRUNK_${DIAL_TRUNK}}" != ""]?sub-flp-${DIAL_TRUNK},s,1()) | |
1502 | exten => s,n,Set(OUTNUM=${OUTPREFIX_${DIAL_TRUNK}}${DIAL_NUMBER}) | |
1503 | exten => s,n,Set(custom=${CUT(OUT_${DIAL_TRUNK},:,1)}) | |
1504 | exten => s,n,ExecIf($["${MOHCLASS}"!="default" & "${MOHCLASS}"!="" & "${FORCE_CONFIRM}"="" ]?Set(DIAL_TRUNK_OPTIONS=M(setmusic^${MOHCLASS})${DIAL_TRUNK_OPTIONS})) | |
1505 | exten => s,n,ExecIf($["${FORCE_CONFIRM}"!="" ]?Set(DIAL_TRUNK_OPTIONS=${DIAL_TRUNK_OPTIONS}M(confirm))) | |
1506 | exten => s,n(gocall),Macro(dialout-trunk-predial-hook,) | |
1507 | exten => s,n,GotoIf($["${PREDIAL_HOOK_RET}" = "BYPASS"]?bypass,1) | |
1508 | exten => s,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(CONNECTEDLINE(num,i)=${DIAL_NUMBER})) | |
1509 | exten => s,n,ExecIf($[$["${DB(AMPUSER/${AMPUSER}/cidname)}" != ""] & $["${CALLERID(name)}"!="hidden"]]?Set(CONNECTEDLINE(name,i)=CID:${CALLERID(number)})) | |
1510 | exten => s,n,ExecIf($[$["${DB(AMPUSER/${AMPUSER}/cidname)}" != ""] & $["${CALLERID(name)}"="hidden"]]?Set(CONNECTEDLINE(name,i)=CID:(Hidden)${CALLERID(number)})) | |
1511 | exten => s,n,GotoIf($["${custom}" = "AMP"]?customtrunk) | |
1512 | exten => s,n,Dial(${OUT_${DIAL_TRUNK}}/${OUTNUM}${OUT_${DIAL_TRUNK}_SUFFIX},${TRUNK_RING_TIMER},${DIAL_TRUNK_OPTIONS}) | |
1513 | exten => s,n,Noop(Dial failed for some reason with DIALSTATUS = ${DIALSTATUS} and HANGUPCAUSE = ${HANGUPCAUSE}) | |
1514 | exten => s,n,GotoIf($["${ARG4}" = "on"]?continue,1:s-${DIALSTATUS},1) | |
1515 | exten => s,n(customtrunk),Set(pre_num=${CUT(OUT_${DIAL_TRUNK},$,1)}) | |
1516 | exten => s,n,Set(the_num=${CUT(OUT_${DIAL_TRUNK},$,2)}) | |
1517 | exten => s,n,Set(post_num=${CUT(OUT_${DIAL_TRUNK},$,3)}) | |
1518 | exten => s,n,GotoIf($["${the_num}" = "OUTNUM"]?outnum:skipoutnum) | |
1519 | exten => s,n(outnum),Set(the_num=${OUTNUM}) | |
1520 | exten => s,n(skipoutnum),Dial(${pre_num:4}${the_num}${post_num},${TRUNK_RING_TIMER},${DIAL_TRUNK_OPTIONS}) | |
1521 | exten => s,n,Noop(Dial failed for some reason with DIALSTATUS = ${DIALSTATUS} and HANGUPCAUSE = ${HANGUPCAUSE}) | |
1522 | exten => s,n,GotoIf($["${ARG4}" = "on"]?continue,1:s-${DIALSTATUS},1) | |
1523 | exten => s,n(chanfull),Noop(max channels used up) | |
1524 | ||
1525 | exten => s-BUSY,1,Noop(Dial failed due to trunk reporting BUSY - giving up) | |
1526 | exten => s-BUSY,n,Playtones(busy) | |
1527 | exten => s-BUSY,n,Busy(20) | |
1528 | ||
1529 | exten => s-ANSWER,1,Noop(Call successfully answered - Hanging up now) | |
1530 | exten => s-ANSWER,n,Macro(hangupcall,) | |
1531 | ||
1532 | exten => s-NOANSWER,1,Noop(Dial failed due to trunk reporting NOANSWER - giving up) | |
1533 | exten => s-NOANSWER,n,Progress | |
1534 | exten => s-NOANSWER,n,Playback(number-not-answering,noanswer) | |
1535 | exten => s-NOANSWER,n,Congestion(20) | |
1536 | ||
1537 | exten => s-INVALIDNMBR,1,Noop(Dial failed due to trunk reporting Address Incomplete - giving up) | |
1538 | exten => s-INVALIDNMBR,n,Progress | |
1539 | exten => s-INVALIDNMBR,n,Playback(ss-noservice,noanswer) | |
1540 | exten => s-INVALIDNMBR,n,Busy(20) | |
1541 | ||
1542 | exten => s-CHANGED,1,Noop(Dial failed due to trunk reporting Number Changed - giving up) | |
1543 | exten => s-CHANGED,n,Playtones(busy) | |
1544 | exten => s-CHANGED,n,Busy(20) | |
1545 | ||
1546 | exten => _s-.,1,Set(RC=${IF($[${ISNULL(${HANGUPCAUSE})}]?0:${HANGUPCAUSE})}) | |
1547 | exten => _s-.,n,Goto(${RC},1) | |
1548 | ||
1549 | exten => 17,1,Goto(s-BUSY,1) | |
1550 | ||
1551 | exten => 18,1,Goto(s-NOANSWER,1) | |
1552 | ||
1553 | exten => 22,1,Goto(s-CHANGED,1) | |
1554 | ||
1555 | exten => 23,1,Goto(s-CHANGED,1) | |
1556 | ||
1557 | exten => 1,1,Goto(s-INVALIDNMBR,1) | |
1558 | ||
1559 | exten => 28,1,Goto(s-INVALIDNMBR,1) | |
1560 | ||
1561 | exten => _X,1,Goto(continue,1) | |
1562 | ||
1563 | exten => _X.,1,Goto(continue,1) | |
1564 | ||
1565 | exten => continue,1(noreport),Noop(TRUNK Dial failed due to ${DIALSTATUS} HANGUPCAUSE: ${HANGUPCAUSE} - failing through to other trunks) | |
1566 | exten => continue,n,ExecIf($["${AMPUSER}"!="" ]?Set(CALLERID(number)=${AMPUSER})) | |
1567 | ||
1568 | exten => disabletrunk,1,Noop(TRUNK: ${OUT_${DIAL_TRUNK}} DISABLED - falling through to next trunk) | |
1569 | ||
1570 | exten => bypass,1,Noop(TRUNK: ${OUT_${DIAL_TRUNK}} BYPASSING because dialout-trunk-predial-hook) | |
1571 | ||
1572 | exten => h,1,Macro(hangupcall,) | |
1573 | ||
1574 | ;--== end of [macro-dialout-trunk] ==--; | |
1575 | ||
1576 | ||
1577 | [macro-privacy-mgr] | |
1578 | include => macro-privacy-mgr-custom | |
1579 | exten => s,1,Set(KEEPCID=${CALLERID(num)}) | |
1580 | exten => s,n,Set(TESTCID=${IF($["${CALLERID(num):0:1}"="+"]?${MATH(1+${CALLERID(num):1})}:${MATH(1+${CALLERID(num)})})}) | |
1581 | exten => s,n,ExecIf($[${LEN(${TESTCID})}=0]?Set(CALLERID(num)=)) | |
1582 | exten => s,n,PrivacyManager(${ARG1},${ARG2}) | |
1583 | exten => s,n,GotoIf($["${PRIVACYMGRSTATUS}"="FAILED"]?fail) | |
1584 | exten => s,n,GosubIf($["${CALLED_BLACKLIST}"="1"]?app-blacklist-check,s,1()) | |
1585 | exten => s,n,Set(CALLERID(num-pres)=allowed_passed_screen) | |
1586 | exten => s,n,MacroExit() | |
1587 | exten => s,n(fail),Noop(STATUS: ${PRIVACYMGRSTATUS} CID: ${CALLERID(num)} ${CALLERID(name)} CALLPRES: ${CALLLINGPRES}) | |
1588 | exten => s,n,Playback(sorry-youre-having-problems&goodbye) | |
1589 | exten => s,n,Playtones(congestion) | |
1590 | exten => s,n,Congestion(20) | |
1591 | ||
1592 | exten => h,1,Hangup | |
1593 | ||
1594 | ;--== end of [macro-privacy-mgr] ==--; | |
1595 | ||
1596 | ||
1597 | [macro-user-callerid] | |
1598 | include => macro-user-callerid-custom | |
1599 | exten => lang-playback,1,GosubIf($[${DIALPLAN_EXISTS(macro-user-callerid,${CHANNEL(language)})}]?macro-user-callerid,${CHANNEL(language)},${ARG1}():macro-user-callerid,en,${ARG1}()) | |
1600 | exten => lang-playback,n,Return() | |
1601 | ||
1602 | exten => s,1,Set(TOUCH_MONITOR=${UNIQUEID}) | |
1603 | exten => s,n,Set(AMPUSER=${IF($["${AMPUSER}" = ""]?${CALLERID(number)}:${AMPUSER})}) | |
1604 | exten => s,n,GotoIf($["${CUT(CHANNEL,@,2):5:5}"="queue" | ${LEN(${AMPUSERCIDNAME})}]?report) | |
1605 | exten => s,n,ExecIf($["${REALCALLERIDNUM:1:2}" = ""]?Set(REALCALLERIDNUM=${CALLERID(number)})) | |
1606 | exten => s,n,Set(AMPUSER=${DB(DEVICE/${REALCALLERIDNUM}/user)}) | |
1607 | exten => s,n,GotoIf($["${AMPUSER}" = "none"]?limit) | |
1608 | exten => s,n,Set(AMPUSERCIDNAME=${DB(AMPUSER/${AMPUSER}/cidname)}) | |
1609 | exten => s,n,GotoIf($["${AMPUSERCIDNAME:1:2}" = ""]?report) | |
1610 | exten => s,n,Set(AMPUSERCID=${IF($["${ARG2}" != "EXTERNAL" & "${DB_EXISTS(AMPUSER/${AMPUSER}/cidnum)}" = "1"]?${DB_RESULT}:${AMPUSER})}) | |
1611 | exten => s,n,Set(__DIAL_OPTIONS=${IF($["${DB_EXISTS(AMPUSER/${AMPUSER}/dialopts)}" = "1"]?${DB_RESULT}:${DIAL_OPTIONS})}) | |
1612 | exten => s,n,Set(CALLERID(all)="${AMPUSERCIDNAME}" <${AMPUSERCID}>) | |
1613 | exten => s,n,GotoIf($["${ARG1}"="LIMIT" & ${LEN(${AMPUSER})} & ${DB_EXISTS(AMPUSER/${AMPUSER}/concurrency_limit)} & ${DB(AMPUSER/${AMPUSER}/concurrency_limit)}>0 & ${GROUP_COUNT(${AMPUSER}@concurrency_limit)}>=${DB(AMPUSER/${AMPUSER}/concurrency_limit)}]?limit) | |
1614 | exten => s,n,ExecIf($["${ARG1}"="LIMIT" & ${LEN(${AMPUSER})}]?Set(GROUP(concurrency_limit)=${AMPUSER})) | |
1615 | exten => s,n(report),GotoIf($[ "${ARG1}" = "SKIPTTL" | "${ARG1}" = "LIMIT" ]?continue) | |
1616 | exten => s,n(report2),Set(__TTL=${IF($["foo${TTL}" = "foo"]?64:$[ ${TTL} - 1 ])}) | |
1617 | exten => s,n,GotoIf($[ ${TTL} > 0 ]?continue) | |
1618 | exten => s,n,Wait(${RINGTIMER}) | |
1619 | exten => s,n,Answer | |
1620 | exten => s,n,Wait(1) | |
1621 | exten => s,n,Gosub(macro-user-callerid,lang-playback,1(hook_0)) | |
1622 | exten => s,n,Macro(hangupcall,) | |
1623 | exten => s,n(limit),Answer | |
1624 | exten => s,n,Wait(1) | |
1625 | exten => s,n,Gosub(macro-user-callerid,lang-playback,1(hook_1)) | |
1626 | exten => s,n,Macro(hangupcall,) | |
1627 | exten => s,n,Congestion(20) | |
1628 | exten => s,n(continue),Set(CALLERID(number)=${CALLERID(number):0:40}) | |
1629 | exten => s,n,Set(CALLERID(name)=${CALLERID(name):0:40}) | |
1630 | exten => s,n,Set(CDR(cnum)=${CALLERID(num)}) | |
1631 | exten => s,n,Set(CDR(cnam)=${CALLERID(name)}) | |
1632 | exten => s,n,Set(CHANNEL(language)=${MASTER_CHANNEL(CHANNEL(language))}) | |
1633 | ||
1634 | exten => h,1,Macro(hangupcall,) | |
1635 | ||
1636 | exten => en,1(hook_0),Playback(im-sorry&an-error-has-occured&with&call-forwarding) | |
1637 | exten => en,n,Return() | |
1638 | exten => en,n(hook_1),Playback(beep&im-sorry&your&simul-call-limit-reached&goodbye) | |
1639 | exten => en,n,Return() | |
1640 | ||
1641 | exten => ja,1(hook_0),Playback(im-sorry&call-forwarding&jp-no&an-error-has-occured) | |
1642 | exten => ja,n,Return() | |
1643 | exten => ja,n(hook_1),Playback(beep&im-sorry&simul-call-limit-reached) | |
1644 | exten => ja,n,Return() | |
1645 | ||
1646 | ;--== end of [macro-user-callerid] ==--; | |
1647 | ||
1648 | ||
1649 | [macro-outbound-callerid] | |
1650 | include => macro-outbound-callerid-custom | |
1651 | exten => s,1,ExecIf($["${CALLINGNAMEPRES_SV}" != ""]?Set(CALLERPRES(name-pres)=${CALLINGNAMEPRES_SV})) | |
1652 | exten => s,n,ExecIf($["${CALLINGNUMPRES_SV}" != ""]?Set(CALLERPRES(num-pres)=${CALLINGNUMPRES_SV})) | |
1653 | exten => s,n,ExecIf($["${REALCALLERIDNUM:1:2}" = ""]?Set(REALCALLERIDNUM=${CALLERID(number)})) | |
1654 | exten => s,n(start),GotoIf($[ $["${REALCALLERIDNUM}" = ""] | $["${KEEPCID}" != "TRUE"] | $["${OUTKEEPCID_${ARG1}}" = "on"] ]?normcid) | |
1655 | exten => s,n,Set(USEROUTCID=${REALCALLERIDNUM}) | |
1656 | exten => s,n,GotoIf($["foo${DB(AMPUSER/${REALCALLERIDNUM}/device)}" = "foo"]?bypass) | |
1657 | exten => s,n(normcid),Set(USEROUTCID=${DB(AMPUSER/${AMPUSER}/outboundcid)}) | |
1658 | exten => s,n(bypass),Set(EMERGENCYCID=${DB(DEVICE/${REALCALLERIDNUM}/emergency_cid)}) | |
1659 | exten => s,n,Set(TRUNKOUTCID=${OUTCID_${ARG1}}) | |
1660 | exten => s,n,GotoIf($["${EMERGENCYROUTE:1:2}" = "" | "${EMERGENCYCID:1:2}" = ""]?trunkcid) | |
1661 | exten => s,n,Set(CALLERID(all)=${EMERGENCYCID}) | |
1662 | exten => s,n,Set(CDR(outbound_cnum)=${CALLERID(num)}) | |
1663 | exten => s,n,Set(CDR(outbound_cnam)=${CALLERID(name)}) | |
1664 | exten => s,n(exit),MacroExit() | |
1665 | exten => s,n(trunkcid),ExecIf($[${LEN(${TRUNKOUTCID})} != 0]?Set(CALLERID(all)=${TRUNKOUTCID})) | |
1666 | exten => s,n(usercid),ExecIf($[${LEN(${USEROUTCID})} != 0]?Set(CALLERID(all)=${USEROUTCID})) | |
1667 | exten => s,n,ExecIf($[${LEN(${TRUNKCIDOVERRIDE})} != 0 | ${LEN(${FORCEDOUTCID_${ARG1}})} != 0]?Set(CALLERID(all)=${IF($[${LEN(${FORCEDOUTCID_${ARG1}})}=0]?${TRUNKCIDOVERRIDE}:${FORCEDOUTCID_${ARG1}})})) | |
1668 | exten => s,n(hidecid),ExecIf($["${CALLERID(name)}"="hidden"]?Set(CALLERPRES(name-pres)=prohib_passed_screen)) | |
1669 | exten => s,n,ExecIf($["${CALLERID(name)}"="hidden"]?Set(CALLERPRES(num-pres)=prohib_passed_screen)) | |
1670 | exten => s,n,Set(CDR(outbound_cnum)=${CALLERID(num)}) | |
1671 | exten => s,n,Set(CDR(outbound_cnam)=${CALLERID(name)}) | |
1672 | ||
1673 | ;--== end of [macro-outbound-callerid] ==--; | |
1674 | ||
1675 | ||
1676 | [from-zaptel] | |
1677 | include => from-zaptel-custom | |
1678 | include => from-dahdi | |
1679 | exten => foo,1,Noop(bar) | |
1680 | ||
1681 | ;--== end of [from-zaptel] ==--; | |
1682 | ||
1683 | ||
1684 | [from-dahdi] | |
1685 | include => from-dahdi-custom | |
1686 | exten => _X.,1,Set(DID=${EXTEN}) | |
1687 | exten => _X.,n,Goto(s,1) | |
1688 | ||
1689 | exten => s,1,Noop(Entering from-dahdi with DID == ${DID}) | |
1690 | exten => s,n,Ringing() | |
1691 | exten => s,n,Set(DID=${IF($["${DID}"= ""]?s:${DID})}) | |
1692 | exten => s,n,Noop(DID is now ${DID}) | |
1693 | exten => s,n,GotoIf($["${CHANNEL:0:5}"="DAHDI"]?dahdiok:checkzap) | |
1694 | exten => s,n(checkzap),GotoIf($["${CHANNEL:0:3}"="Zap"]?zapok:neither) | |
1695 | exten => s,n(neither),Goto(from-pstn,${DID},1) | |
1696 | exten => s,n,Macro(Hangupcall,dummy) | |
1697 | exten => s,n(dahdiok),Noop(Is a DAHDi Channel) | |
1698 | exten => s,n,Set(CHAN=${CHANNEL:6}) | |
1699 | exten => s,n,Set(CHAN=${CUT(CHAN,-,1)}) | |
1700 | exten => s,n,Macro(from-dahdi-${CHAN},${DID},1) | |
1701 | exten => s,n,Noop(Returned from Macro from-dahdi-${CHAN}) | |
1702 | exten => s,n,Goto(from-pstn,${DID},1) | |
1703 | exten => s,n(zapok),Noop(Is a Zaptel Channel) | |
1704 | exten => s,n,Set(CHAN=${CHANNEL:4}) | |
1705 | exten => s,n,Set(CHAN=${CUT(CHAN,-,1)}) | |
1706 | exten => s,n,Macro(from-dahdi-${CHAN},${DID},1) | |
1707 | exten => s,n,Noop(Returned from Macro from-dahdi-${CHAN}) | |
1708 | exten => s,n,Goto(from-pstn,${DID},1) | |
1709 | ||
1710 | ;--== end of [from-dahdi] ==--; | |
1711 | ||
1712 | ||
1713 | [macro-dial-confirm] | |
1714 | include => macro-dial-confirm-custom | |
1715 | exten => s,1,Set(DB(RG/${ARG4}/${CHANNEL})=RINGING) | |
1716 | exten => s,n,Set(__UNIQCHAN=${CHANNEL}) | |
1717 | exten => s,n,Set(USE_CONFIRMATION=TRUE) | |
1718 | exten => s,n,Set(RINGGROUP_INDEX=${ARG4}) | |
1719 | exten => s,n,Set(FORCE_CONFIRM=) | |
1720 | exten => s,n,Set(ARG4=) | |
1721 | exten => s,n,Macro(dial,${ARG1},${ARG2},${ARG3}) | |
1722 | exten => s,n,Noop(Deleting: RG/${RINGGROUP_INDEX}/${CHANNEL} ${DB_DELETE(RG/${RINGGROUP_INDEX}/${CHANNEL})}) | |
1723 | exten => s,n,Set(USE_CONFIRMATION=) | |
1724 | exten => s,n,Set(RINGGROUP_INDEX=) | |
1725 | ||
1726 | ;--== end of [macro-dial-confirm] ==--; | |
1727 | ||
1728 | ||
1729 | [macro-setmusic] | |
1730 | include => macro-setmusic-custom | |
1731 | exten => s,1,Set(CHANNEL(musicclass)=${ARG1}) | |
1732 | ||
1733 | ;--== end of [macro-setmusic] ==--; | |
1734 | ||
1735 | ||
1736 | [macro-block-cf] | |
1737 | include => macro-block-cf-custom | |
1738 | exten => _X.,1,Hangup | |
1739 | ||
1740 | exten => s-ANSWER,1,Noop(Call successfully answered - Hanging up now) | |
1741 | exten => s-ANSWER,n,Macro(hangupcall,) | |
1742 | ||
1743 | ;--== end of [macro-block-cf] ==--; | |
1744 | ||
1745 | ||
1746 | [macro-vm] | |
1747 | include => macro-vm-custom | |
1748 | exten => s,1,Macro(user-callerid,SKIPTTL) | |
1749 | exten => s,n,Set(VMGAIN=${IF($["foo${VM_GAIN}"!="foo"]?"g(${VM_GAIN})": )}) | |
1750 | exten => s,n,Macro(blkvm-check,) | |
1751 | exten => s,n,GotoIf($["${GOSUB_RETVAL}" != "TRUE"]?vmx,1) | |
1752 | exten => s,n,Hangup | |
1753 | ||
1754 | exten => vmx,1,Set(MEXTEN=${ARG1}) | |
1755 | exten => vmx,n,Set(MMODE=${ARG2}) | |
1756 | exten => vmx,n,Set(RETVM=${ARG3}) | |
1757 | exten => vmx,n,Set(MODE=${IF($["${MMODE}"="BUSY"]?busy:unavail)}) | |
1758 | exten => vmx,n,Macro(get-vmcontext,${MEXTEN}) | |
1759 | exten => vmx,n,Set(MODE=${IF($[(${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/temp.wav)} = 1) || (${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/temp.WAV)} = 1)]?temp:${MODE})}) | |
1760 | exten => vmx,n,Noop(MODE IS: ${MODE}) | |
1761 | exten => vmx,n,GotoIf($["${DB(AMPUSER/${MEXTEN}/vmx/${MODE}/state)}" != "enabled"]?chknomsg) | |
1762 | exten => vmx,n,Set(VM_OPTS=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/vmxopts/timeout)}" = "1"]?${DB_RESULT}:${VM_OPTS})}) | |
1763 | exten => vmx,n(chknomsg),GotoIf($["${MMODE}"="NOMESSAGE"]?s-${MMODE},1) | |
1764 | exten => vmx,n,GotoIf($["${MMODE}" != "DIRECTDIAL"]?notdirect) | |
1765 | exten => vmx,n,Set(MODE=${IF($["${REGEX("[b]" ${VM_DDTYPE})}" = "1"]?busy:${MODE})}) | |
1766 | exten => vmx,n(notdirect),Noop(Checking if ext ${MEXTEN} is enabled: ${DB(AMPUSER/${MEXTEN}/vmx/${MODE}/state)}) | |
1767 | exten => vmx,n,GotoIf($["${DB(AMPUSER/${MEXTEN}/vmx/${MODE}/state)}" != "enabled"]?s-${MMODE},1) | |
1768 | exten => vmx,n,GotoIf($[(${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/temp.wav)} = 1) || (${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/temp.WAV)} = 1)]?tmpgreet) | |
1769 | exten => vmx,n,GotoIf($[(${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/${MODE}.wav)} = 0) && (${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/${MODE}.WAV)} = 0)]?nofile) | |
1770 | exten => vmx,n,Set(VMX_TIMEOUT=) | |
1771 | exten => vmx,n,Set(VMX_REPEAT=) | |
1772 | exten => vmx,n,Set(VMX_LOOPS=) | |
1773 | exten => vmx,n,Set(LOOPCOUNT=0) | |
1774 | exten => vmx,n,Set(VMX_REPEAT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/repeat)}" = "1"]?${DB_RESULT}:${VMX_REPEAT})}) | |
1775 | exten => vmx,n(vmxtime),Set(VMX_TIMEOUT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/timeout)}" = "1"]?${DB_RESULT}:${VMX_TIMEOUT})}) | |
1776 | exten => vmx,n(vmxloops),Set(VMX_LOOPS=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/loops)}" = "1"]?${DB_RESULT}:${VMX_LOOPS})}) | |
1777 | exten => vmx,n(vmxanswer),Answer | |
1778 | exten => vmx,n(loopstart),Read(ACTION,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/${MODE},1,skip,${VMX_REPEAT},${VMX_TIMEOUT}) | |
1779 | exten => vmx,n,GotoIf($["${EXISTS(${ACTION})}" = "1"]?checkopt) | |
1780 | exten => vmx,n(noopt),Noop(Timeout: going to timeout dest) | |
1781 | exten => vmx,n,Set(VMX_OPTS=${DB(AMPUSER/${MEXTEN}/vmx/${MODE}/vmxopts/timeout)}) | |
1782 | exten => vmx,n(chktime),GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/timedest/ext)}" = "0"]?dotime) | |
1783 | exten => vmx,n,Set(VMX_TIMEDEST_EXT=${DB_RESULT}) | |
1784 | exten => vmx,n,Set(VMX_TIMEDEST_CONTEXT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/timedest/context)}" = "1"]?${DB_RESULT}:${VMX_TIMEDEST_CONTEXT})}) | |
1785 | exten => vmx,n(timepri),Set(VMX_TIMEDEST_PRI=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/timedest/pri)}" = "1"]?${DB_RESULT}:${VMX_TIMEDEST_PRI})}) | |
1786 | exten => vmx,n(dotime),Goto(${VMX_TIMEDEST_CONTEXT},${VMX_TIMEDEST_EXT},${VMX_TIMEDEST_PRI}) | |
1787 | exten => vmx,n(checkopt),GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/${ACTION}/ext)}" = "1"]?doopt) | |
1788 | exten => vmx,n,GotoIf($["${ACTION}" = "0"]?o,1) | |
1789 | exten => vmx,n,GotoIf($["${ACTION}" = "*"]?adef,1) | |
1790 | exten => vmx,n,Set(LOOPCOUNT=$[${LOOPCOUNT} + 1]) | |
1791 | exten => vmx,n,GotoIf($["${LOOPCOUNT}" > "${VMX_LOOPS}"]?toomany) | |
1792 | exten => vmx,n,Playback(pm-invalid-option&please-try-again) | |
1793 | exten => vmx,n,Goto(loopstart) | |
1794 | exten => vmx,n(toomany),Noop(Too Many invalid entries, got to invalid dest) | |
1795 | exten => vmx,n,Set(VMX_OPTS=${VMX_OPTS_LOOP}) | |
1796 | exten => vmx,n,Set(VMX_OPTS=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/vmxopts/loops)}" = "1"]?${DB_RESULT}:${VMX_OPTS})}) | |
1797 | exten => vmx,n(chkloop),GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/loopdest/ext)}" = "0"]?doloop) | |
1798 | exten => vmx,n,Set(VMX_LOOPDEST_EXT=${DB_RESULT}) | |
1799 | exten => vmx,n,Set(VMX_LOOPDEST_CONTEXT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/loopdest/context)}" = "1"]?${DB_RESULT}:${VMX_LOOPDEST_CONTEXT})}) | |
1800 | exten => vmx,n(looppri),Set(VMX_LOOPDEST_PRI=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/loopdest/pri)}" = "1"]?${DB_RESULT}:${VMX_LOOPDEST_PRI})}) | |
1801 | exten => vmx,n(doloop),Goto(${VMX_LOOPDEST_CONTEXT},${VMX_LOOPDEST_EXT},${VMX_LOOPDEST_PRI}) | |
1802 | exten => vmx,n(doopt),Noop(Got a valid option: ${DB_RESULT}) | |
1803 | exten => vmx,n,Set(VMX_EXT=${DB_RESULT}) | |
1804 | exten => vmx,n,GotoIf($["${VMX_EXT}" != "dovm"]?getdest) | |
1805 | exten => vmx,n(vmxopts),Set(VMX_OPTS=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/vmxopts/dovm)}" = "1"]?${DB_RESULT}:${VMX_OPTS_DOVM})}) | |
1806 | exten => vmx,n(vmxdovm),Goto(dovm,1) | |
1807 | exten => vmx,n(getdest),Set(VMX_CONTEXT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/${ACTION}/context)}" = "1"]?${DB_RESULT}:${VMX_CONTEXT})}) | |
1808 | exten => vmx,n(vmxpri),Set(VMX_PRI=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/${ACTION}/pri)}" = "1"]?${DB_RESULT}:${VMX_PRI})}) | |
1809 | exten => vmx,n(vmxgoto),Goto(${VMX_CONTEXT},${VMX_EXT},${VMX_PRI}) | |
1810 | exten => vmx,n(nofile),Noop(File for mode: ${MODE} does not exist, SYSTEMSTATUS: ${SYSTEMSTATUS}, going to normal voicemail) | |
1811 | exten => vmx,n,Goto(s-${MMODE},1) | |
1812 | exten => vmx,n(tmpgreet),Noop(Temporary Greeting Detected, going to normal voicemail) | |
1813 | exten => vmx,n,Goto(s-${MMODE},1) | |
1814 | ||
1815 | exten => dovm,1,Noop(VMX Timeout - go to voicemail) | |
1816 | exten => dovm,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VMX_OPTS}${VMGAIN}) | |
1817 | exten => dovm,n,Goto(exit-${VMSTATUS},1) | |
1818 | ||
1819 | exten => s-BUSY,1,Noop(BUSY voicemail) | |
1820 | exten => s-BUSY,n,Macro(get-vmcontext,${MEXTEN}) | |
1821 | exten => s-BUSY,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VM_OPTS}b${VMGAIN}) | |
1822 | exten => s-BUSY,n,Goto(exit-${VMSTATUS},1) | |
1823 | ||
1824 | exten => s-NOMESSAGE,1,Noop(NOMESSAGE (beep only) voicemail) | |
1825 | exten => s-NOMESSAGE,n,Macro(get-vmcontext,${MEXTEN}) | |
1826 | exten => s-NOMESSAGE,n,VoiceMail(${MEXTEN}@${VMCONTEXT},s${VM_OPTS}${VMGAIN}) | |
1827 | exten => s-NOMESSAGE,n,Goto(exit-${VMSTATUS},1) | |
1828 | ||
1829 | exten => s-INSTRUCT,1,Noop(NOMESSAGE (beeb only) voicemail) | |
1830 | exten => s-INSTRUCT,n,Macro(get-vmcontext,${MEXTEN}) | |
1831 | exten => s-INSTRUCT,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VM_OPTS}${VMGAIN}) | |
1832 | exten => s-INSTRUCT,n,Goto(exit-${VMSTATUS},1) | |
1833 | ||
1834 | exten => s-DIRECTDIAL,1,Noop(DIRECTDIAL voicemail) | |
1835 | exten => s-DIRECTDIAL,n,Macro(get-vmcontext,${MEXTEN}) | |
1836 | exten => s-DIRECTDIAL,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VM_OPTS}${VM_DDTYPE}${VMGAIN}) | |
1837 | exten => s-DIRECTDIAL,n,Goto(exit-${VMSTATUS},1) | |
1838 | ||
1839 | exten => _s-.,1,Macro(get-vmcontext,${MEXTEN}) | |
1840 | exten => _s-.,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VM_OPTS}u${VMGAIN}) | |
1841 | exten => _s-.,n,Goto(exit-${VMSTATUS},1) | |
1842 | ||
1843 | exten => o,1,Playback(one-moment-please) | |
1844 | exten => o,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/0/ext)}" = "0"]?doopdef) | |
1845 | exten => o,n,Set(VMX_OPDEST_EXT=${DB_RESULT}) | |
1846 | exten => o,n(opcontext),Set(VMX_OPDEST_CONTEXT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/0/context)}" = "1"]?${DB_RESULT}:${VMX_CONTEXT})}) | |
1847 | exten => o,n(oppri),Set(VMX_OPDEST_PRI=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/0/pri)}" = "1"]?${DB_RESULT}:${VMX_PRI})}) | |
1848 | exten => o,n,Goto(${VMX_OPDEST_CONTEXT},${VMX_OPDEST_EXT},${VMX_OPDEST_PRI}) | |
1849 | exten => o,n(doopdef),GotoIf($["x${OPERATOR_XTN}"="x"]?nooper:from-internal,${OPERATOR_XTN},1) | |
1850 | exten => o,n(nooper),GotoIf($["x${FROM_DID}"="x"]?nodid) | |
1851 | exten => o,n,Dial(Local/${FROM_DID}@from-pstn,) | |
1852 | exten => o,n,Macro(hangup,) | |
1853 | exten => o,n(nodid),Dial(Local/s@from-pstn,) | |
1854 | exten => o,n,Macro(hangup,) | |
1855 | ||
1856 | exten => a,1,Macro(get-vmcontext,${MEXTEN}) | |
1857 | exten => a,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/novmstar)}" = "1"]?s,1) | |
1858 | exten => a,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/*/ext)}" = "0"]?adef,1) | |
1859 | exten => a,n,Set(VMX_ADEST_EXT=${DB_RESULT}) | |
1860 | exten => a,n(acontext),Set(VMX_ADEST_CONTEXT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/*/context)}" = "1"]?${DB_RESULT}:${VMX_CONTEXT})}) | |
1861 | exten => a,n(apri),Set(VMX_ADEST_PRI=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/*/pri)}" = "1"]?${DB_RESULT}:${VMX_PRI})}) | |
1862 | exten => a,n,Goto(${VMX_ADEST_CONTEXT},${VMX_ADEST_EXT},${VMX_ADEST_PRI}) | |
1863 | ||
1864 | exten => adef,1,VoiceMailMain(${MEXTEN}@${VMCONTEXT}) | |
1865 | exten => adef,n,GotoIf($["${RETVM}" = "RETURN"]?exit-RETURN,1) | |
1866 | exten => adef,n,Hangup | |
1867 | ||
1868 | exten => exit-FAILED,1,Playback(im-sorry&an-error-has-occured) | |
1869 | exten => exit-FAILED,n,GotoIf($["${RETVM}" = "RETURN"]?exit-RETURN,1) | |
1870 | exten => exit-FAILED,n,Hangup | |
1871 | ||
1872 | exten => exit-SUCCESS,1,GotoIf($["${RETVM}" = "RETURN"]?exit-RETURN,1) | |
1873 | exten => exit-SUCCESS,n,Playback(goodbye) | |
1874 | exten => exit-SUCCESS,n,Hangup | |
1875 | ||
1876 | exten => exit-USEREXIT,1,GotoIf($["${RETVM}" = "RETURN"]?exit-RETURN,1) | |
1877 | exten => exit-USEREXIT,n,Playback(goodbye) | |
1878 | exten => exit-USEREXIT,n,Hangup | |
1879 | ||
1880 | exten => exit-RETURN,1,Noop(Returning From Voicemail because macro) | |
1881 | ||
1882 | exten => t,1,Hangup | |
1883 | ||
1884 | ;--== end of [macro-vm] ==--; | |
1885 | ||
1886 | ||
1887 | [macro-exten-vm] | |
1888 | include => macro-exten-vm-custom | |
1889 | exten => s,1,Macro(user-callerid,) | |
1890 | exten => s,n,Set(RingGroupMethod=none) | |
1891 | exten => s,n,Set(__EXTTOCALL=${ARG2}) | |
1892 | exten => s,n,Set(__PICKUPMARK=${ARG2}) | |
1893 | exten => s,n,Set(RT=${IF($["${ARG1}"!="novm" | "${DB(CFU/${EXTTOCALL})}"!="" | "${DB(CFB/${EXTTOCALL})}"!="" | "${ARG3}"="1" | "${ARG4}"="1" | "${ARG5}"="1"]?${RINGTIMER}:)}) | |
1894 | exten => s,n(checkrecord),Gosub(sub-record-check,s,1(exten,${EXTTOCALL},dontcare)) | |
1895 | exten => s,n,GotoIf($["${AMPUSER}"=""|${LEN(${FROM_DID})}|"${DB(AMPUSER/${EXTTOCALL}/answermode)}"!="intercom"|${LEN(${BLINDTRANSFER})}|"${EXTENSION_STATE(${EXTTOCALL})}"!="NOT_INUSE"|"${CC_RECALL}"!=""]?macrodial) | |
1896 | exten => s,n,Set(INTERCOM_EXT_DOPTIONS=${DIAL_OPTIONS}) | |
1897 | exten => s,n,Set(INTERCOM_RETURN=TRUE) | |
1898 | exten => s,n,Gosub(ext-intercom,*80${EXTTOCALL},1()) | |
1899 | exten => s,n,Set(INTERCOM_RETURN=) | |
1900 | exten => s,n,Set(INTERCOM_EXT_DOPTIONS=) | |
1901 | exten => s,n(macrodial),GosubIf($["${INTERCOM_CALL}"="TRUE" & ${LEN(${BLINDTRANSFER})}]?clrheader,1()) | |
1902 | exten => s,n,Macro(dial-one,${RT},${DIAL_OPTIONS},${EXTTOCALL}) | |
1903 | exten => s,n,Set(SV_DIALSTATUS=${DIALSTATUS}) | |
1904 | exten => s,n(calldocfu),GosubIf($[("${SV_DIALSTATUS}"="NOANSWER"|"${SV_DIALSTATUS}"="CHANUNAVAIL") & "${DB(CFU/${EXTTOCALL})}"!="" & "${SCREEN}"=""]?docfu,1()) | |
1905 | exten => s,n(calldocfb),GosubIf($["${SV_DIALSTATUS}"="BUSY" & "${DB(CFB/${EXTTOCALL})}"!="" & "${SCREEN}"=""]?docfb,1()) | |
1906 | exten => s,n,Set(DIALSTATUS=${SV_DIALSTATUS}) | |
1907 | exten => s,n,ExecIf($[("${DIALSTATUS}"="NOANSWER"&"${ARG3}"="1")|("${DIALSTATUS}"="BUSY"&"${ARG4}"="1")|("${DIALSTATUS}"="CHANUNAVAIL"&"${ARG5}"="1")]?MacroExit()) | |
1908 | exten => s,n,GotoIf($["${ARG1}"="novm"]?s-${DIALSTATUS},1) | |
1909 | exten => s,n,Macro(vm,${ARG1},${DIALSTATUS},${IVR_RETVM}) | |
1910 | ||
1911 | exten => docfu,1(docfu),ExecIf($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="-1"|("${ARG1}"="novm"&"${ARG3}"="1")]?StackPop()) | |
1912 | exten => docfu,n,GotoIf($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="-1"|("${ARG1}"="novm"&"${ARG3}"="1")]?from-internal,${DB(CFU/${EXTTOCALL})},1) | |
1913 | exten => docfu,n,Set(RTCF=${IF($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="0"]?${RT}:${DB(AMPUSER/${EXTTOCALL}/cfringtimer)})}) | |
1914 | exten => docfu,n,Dial(Local/${DB(CFU/${EXTTOCALL})}@from-internal/n,${RTCF},${DIAL_OPTIONS}) | |
1915 | exten => docfu,n,Return() | |
1916 | ||
1917 | exten => docfb,1(docfu),ExecIf($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="-1"|("${ARG1}"="novm"&"${ARG4}"="1")]?StackPop()) | |
1918 | exten => docfb,n,GotoIf($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="-1"|("${ARG1}"="novm"&"${ARG4}"="1")]?from-internal,${DB(CFB/${EXTTOCALL})},1) | |
1919 | exten => docfb,n,Set(RTCF=${IF($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="0"]?${RT}:${DB(AMPUSER/${EXTTOCALL}/cfringtimer)})}) | |
1920 | exten => docfb,n,Dial(Local/${DB(CFB/${EXTTOCALL})}@from-internal/n,${RTCF},${DIAL_OPTIONS}) | |
1921 | exten => docfb,n,Return() | |
1922 | ||
1923 | exten => clrheader,1,ExecIf($[${LEN(${SIPURI})}&"${SIPURI}"="${SIP_URI_OPTIONS}"]?Set(SIP_URI_OPTIONS=)) | |
1924 | exten => clrheader,n,ExecIf($[${LEN(${ALERTINFO})}]?SIPRemoveHeader(${ALERTINFO})) | |
1925 | exten => clrheader,n,ExecIf($[${LEN(${CALLINFO})}]?SIPRemoveHeader(${CALLINFO})) | |
1926 | exten => clrheader,n,Return() | |
1927 | ||
1928 | exten => s-BUSY,1,GotoIf($["${IVR_RETVM}"="RETURN" & "${IVR_CONTEXT}"!=""]?exit,1) | |
1929 | exten => s-BUSY,n,Playtones(busy) | |
1930 | exten => s-BUSY,n,Busy(20) | |
1931 | ||
1932 | exten => _s-!,1,GotoIf($["${IVR_RETVM}"="RETURN" & "${IVR_CONTEXT}"!=""]?exit,1) | |
1933 | exten => _s-!,n,Playtones(congestion) | |
1934 | exten => _s-!,n,Congestion(10) | |
1935 | ||
1936 | exten => exit,1,Playback(beep&line-busy-transfer-menu&silence/1) | |
1937 | exten => exit,n,MacroExit() | |
1938 | ||
1939 | ;--== end of [macro-exten-vm] ==--; | |
1940 | ||
1941 | ||
1942 | [macro-simple-dial] | |
1943 | include => macro-simple-dial-custom | |
1944 | exten => s,1,Set(__EXTTOCALL=${ARG1}) | |
1945 | exten => s,n,Set(RT=${ARG2}) | |
1946 | exten => s,n,Set(CFUEXT=${DB(CFU/${EXTTOCALL})}) | |
1947 | exten => s,n,Set(CFBEXT=${DB(CFB/${EXTTOCALL})}) | |
1948 | exten => s,n,Set(CWI_TMP=${CWIGNORE}) | |
1949 | exten => s,n(macrodial),Macro(dial-one,${RT},${DIAL_OPTIONS},${EXTTOCALL}) | |
1950 | exten => s,n,Set(__CWIGNORE=${CWI_TMP}) | |
1951 | exten => s,n,Set(PR_DIALSTATUS=${DIALSTATUS}) | |
1952 | exten => s,n(calldocfu),GosubIf($["${PR_DIALSTATUS}"="NOANSWER" & "${CFUEXT}"!=""]?docfu,1()) | |
1953 | exten => s,n(calldocfb),GosubIf($["${PR_DIALSTATUS}"="BUSY" & "${CFBEXT}"!=""]?docfb,1()) | |
1954 | exten => s,n,Set(DIALSTATUS=${PR_DIALSTATUS}) | |
1955 | exten => s,n,Goto(s-${DIALSTATUS},1) | |
1956 | ||
1957 | exten => docfu,1,GotoIf($["${DB(AMPUSER/${CFUEXT}/device)}" = "" ]?chlocal) | |
1958 | exten => docfu,n,Dial(Local/${CFUEXT}@ext-local,${RT},${DIAL_OPTIONS}) | |
1959 | exten => docfu,n,Return() | |
1960 | exten => docfu,n(chlocal),Dial(Local/${CFUEXT}@from-internal/n,${RT},${DIAL_OPTIONS}) | |
1961 | exten => docfu,n,Return() | |
1962 | ||
1963 | exten => docfb,1,GotoIf($["${DB(AMPUSER/${CFBEXT}/device)}" = "" ]?chlocal) | |
1964 | exten => docfb,n,Dial(Local/${CFBEXT}@ext-local,${RT},${DIAL_OPTIONS}) | |
1965 | exten => docfb,n,Return() | |
1966 | exten => docfb,n(chlocal),Dial(Local/${CFBEXT}@from-internal/n,${RT},${DIAL_OPTIONS}) | |
1967 | exten => docfb,n,Return() | |
1968 | ||
1969 | exten => _s-.,1,Noop(Extension is reporting ${EXTEN}) | |
1970 | ||
1971 | ;--== end of [macro-simple-dial] ==--; | |
1972 | ||
1973 | ||
1974 | [originate-skipvm] | |
1975 | include => originate-skipvm-custom | |
1976 | exten => _.X,1,Macro(blkvm-set,) | |
1977 | exten => _.X,n,Goto(from-internal,${EXTEN},1) | |
1978 | ||
1979 | ;--== end of [originate-skipvm] ==--; | |
1980 | ||
1981 | ||
1982 | [macro-blkvm-setifempty] | |
1983 | include => macro-blkvm-setifempty-custom | |
1984 | exten => s,1,GotoIf($[!${EXISTS(${BLKVM_CHANNEL})}]?init) | |
1985 | exten => s,n,Set(GOSUB_RETVAL=${SHARED(BLKVM,${BLKVM_CHANNEL})}) | |
1986 | exten => s,n,MacroExit() | |
1987 | exten => s,n(init),Set(__BLKVM_CHANNEL=${CHANNEL}) | |
1988 | exten => s,n,Set(SHARED(BLKVM,${BLKVM_CHANNEL})=TRUE) | |
1989 | exten => s,n,Set(GOSUB_RETVAL=TRUE) | |
1990 | exten => s,n,MacroExit() | |
1991 | ||
1992 | ;--== end of [macro-blkvm-setifempty] ==--; | |
1993 | ||
1994 | ||
1995 | [macro-blkvm-set] | |
1996 | include => macro-blkvm-set-custom | |
1997 | exten => s,1,ExecIf($[!${EXISTS(${BLKVM_CHANNEL})} | "{ARG1}" = "reset"]?Set(__BLKVM_CHANNEL=${CHANNEL})) | |
1998 | exten => s,n,Set(SHARED(BLKVM,${BLKVM_CHANNEL})=TRUE) | |
1999 | exten => s,n,Set(GOSUB_RETVAL=TRUE) | |
2000 | exten => s,n,MacroExit() | |
2001 | ||
2002 | ;--== end of [macro-blkvm-set] ==--; | |
2003 | ||
2004 | ||
2005 | [macro-blkvm-clr] | |
2006 | include => macro-blkvm-clr-custom | |
2007 | exten => s,1,Set(SHARED(BLKVM,${BLKVM_CHANNEL})=) | |
2008 | exten => s,n,Set(GOSUB_RETVAL=) | |
2009 | exten => s,n,MacroExit() | |
2010 | ||
2011 | ;--== end of [macro-blkvm-clr] ==--; | |
2012 | ||
2013 | ||
2014 | [macro-blkvm-check] | |
2015 | include => macro-blkvm-check-custom | |
2016 | exten => s,1,Set(GOSUB_RETVAL=${SHARED(BLKVM,${BLKVM_CHANNEL})}) | |
2017 | exten => s,n,ExecIf($["${GOSUB_RETVAL}"="" & "${CC_RECALL}"="1"]?Set(GOSUB_RETVAL=TRUE)) | |
2018 | exten => s,n,MacroExit() | |
2019 | ||
2020 | ;--== end of [macro-blkvm-check] ==--; | |
2021 | ||
2022 | ||
2023 | [macro-hangupcall] | |
2024 | include => macro-hangupcall-custom | |
2025 | exten => s,1(start),GotoIf($["${USE_CONFIRMATION}"="" | "${RINGGROUP_INDEX}"="" | "${CHANNEL}"!="${UNIQCHAN}"]?theend) | |
2026 | exten => s,n(delrgi),Noop(Deleting: RG/${RINGGROUP_INDEX}/${CHANNEL} ${DB_DELETE(RG/${RINGGROUP_INDEX}/${CHANNEL})}) | |
2027 | exten => s,n(theend),ExecIf($["${ONETOUCH_RECFILE}"!="" & "${CDR(recordingfile)}"=""]?Set(CDR(recordingfile)=${ONETOUCH_RECFILE})) | |
2028 | exten => s,n,Hangup | |
2029 | exten => s,n,MacroExit() | |
2030 | ||
2031 | ;--== end of [macro-hangupcall] ==--; | |
2032 | ||
2033 | ||
2034 | [macro-dial-one] | |
2035 | include => macro-dial-one-custom | |
2036 | exten => s,1,Set(DEXTEN=${ARG3}) | |
2037 | exten => s,n,Set(DIALSTATUS_CW=) | |
2038 | exten => s,n,GosubIf($["${FROM_DID}"!="" & "${SCREEN}"="" & "${DB(AMPUSER/${DEXTEN}/screen)}"!=""]?screen,1()) | |
2039 | exten => s,n,GosubIf($["${DB(CF/${DEXTEN})}"!=""]?cf,1()) | |
2040 | exten => s,n,GotoIf($["${DEXTEN:-1}"="#" | "${DB(DND/${DEXTEN})}"=""]?skip1) | |
2041 | exten => s,n,Set(DEXTEN=) | |
2042 | exten => s,n,Set(DIALSTATUS=BUSY) | |
2043 | exten => s,n(skip1),GotoIf($["${DEXTEN}"=""]?nodial) | |
2044 | exten => s,n,GotoIf($["${DEXTEN:-1}"="#"]?continue) | |
2045 | exten => s,n,Set(EXTHASCW=${IF($["${CWIGNORE}"!=""]? :${DB(CW/${DEXTEN})})}) | |
2046 | exten => s,n,GotoIf($["${EXTHASCW}"="" | "${DB(CFB/${DEXTEN})}"!="" | "${DB(CFU/${DEXTEN})}"!=""]?next1:cwinusebusy) | |
2047 | exten => s,n(next1),GotoIf($["${DB(CFU/${DEXTEN})}"!="" & ("${EXTENSION_STATE(${DEXTEN})}"="UNAVAILABLE" | "${EXTENSION_STATE(${DEXTEN})}"="UNKNOWN")]?docfu:skip3) | |
2048 | exten => s,n(docfu),Set(DEXTEN=) | |
2049 | exten => s,n,Set(DIALSTATUS=NOANSWER) | |
2050 | exten => s,n,Goto(nodial) | |
2051 | exten => s,n(skip3),GotoIf($["${EXTHASCW}"="" | "${DB(CFB/${DEXTEN})}"!=""]?next2:continue) | |
2052 | exten => s,n(next2),GotoIf($["${EXTENSION_STATE(${DEXTEN})}"="NOT_INUSE" | "${EXTENSION_STATE(${DEXTEN})}"="UNAVAILABLE" | "${EXTENSION_STATE(${DEXTEN})}"="UNKNOWN"]?continue) | |
2053 | exten => s,n,ExecIf($["${DB(CFB/${DEXTEN})}"!="" & "${CFIGNORE}"=""]?Set(DIALSTATUS=BUSY)) | |
2054 | exten => s,n,GotoIf($["${EXTHASCW}"!="" | "${DEXTEN:-1}"="#"]?cwinusebusy) | |
2055 | exten => s,n,Set(DEXTEN=) | |
2056 | exten => s,n,Set(DIALSTATUS=BUSY) | |
2057 | exten => s,n,Goto(nodial) | |
2058 | exten => s,n(cwinusebusy),GotoIf($["${EXTHASCW}"!="" & "${CWINUSEBUSY}"="true"]?next3:continue) | |
2059 | exten => s,n(next3),ExecIf($["${EXTENSION_STATE(${DEXTEN})}"!="UNAVAILABLE" & "${EXTENSION_STATE(${DEXTEN})}"!="NOT_INUSE" & "${EXTENSION_STATE(${DEXTEN})}"!="UNKNOWN"]?Set(DIALSTATUS_CW=BUSY)) | |
2060 | exten => s,n(continue),GotoIf($["${DEXTEN}"=""]?nodial) | |
2061 | exten => s,n,GosubIf($["${DEXTEN:-1}"!="#"]?dstring,1():dlocal,1()) | |
2062 | exten => s,n,GotoIf($[${LEN(${DSTRING})}=0]?nodial) | |
2063 | exten => s,n,GotoIf($["${DEXTEN:-1}"="#"]?skiptrace) | |
2064 | exten => s,n,GosubIf($[${REGEX("^[\+]?[0-9]+$" ${CALLERID(number)})} = 1]?ctset,1():ctclear,1()) | |
2065 | exten => s,n(skiptrace),Set(D_OPTIONS=${IF($["${NODEST}"!="" & ${REGEX("(M[(]auto-blkvm[)])" ${ARG2})} != 1]?${ARG2}M(auto-blkvm):${ARG2})}) | |
2066 | exten => s,n,Noop(Blind Transfer: ${BLINDTRANSFER}, Attended Transfer: ${ATTENDEDTRANSFER}, User: ${AMPUSER}, Alert Info: ${ALERT_INFO}) | |
2067 | exten => s,n,ExecIf($["${ALERT_INFO}"="" & ${LEN(${AMPUSER})}!=0 & ${LEN(${BLINDTRANSFER})}=0 & ${LEN(${ATTENDEDTRANSFER})}=0]?Set(ALERT_INFO=)) | |
2068 | exten => s,n,ExecIf($[${LEN(${BLINDTRANSFER})}!=0]?Set(ALERT_INFO=)) | |
2069 | exten => s,n,ExecIf($[${LEN(${ATTENDEDTRANSFER})}!=0]?Set(ALERT_INFO=)) | |
2070 | exten => s,n,GosubIf($["${ALERT_INFO}"!="" & "${ALERT_INFO}"!=" "]?func-set-sipheader,s,1(Alert-Info,${ALERT_INFO})) | |
2071 | exten => s,n,ExecIf($["${MOHCLASS}"!=""]?Set(CHANNEL(musicclass)=${MOHCLASS})) | |
2072 | exten => s,n,GosubIf($["${QUEUEWAIT}"!=""]?qwait,1()) | |
2073 | exten => s,n,Set(__CWIGNORE=${CWIGNORE}) | |
2074 | exten => s,n,Set(__KEEPCID=TRUE) | |
2075 | exten => s,n,GotoIf($["${USEGOTO}"="1"]?usegoto,1) | |
2076 | exten => s,n,GotoIf($["${DB(AMPUSER/${EXTTOCALL}/cidname)}" = "" || "${DB(AMPUSER/${AMPUSER}/cidname)}" = ""]?godial) | |
2077 | exten => s,n,Gosub(sub-presencestate-display,s,1(${EXTTOCALL})) | |
2078 | exten => s,n,Set(CONNECTEDLINE(name,i)=${DB(AMPUSER/${EXTTOCALL}/cidname)}${PRESENCESTATE_DISPLAY}) | |
2079 | exten => s,n,Set(CONNECTEDLINE(num)=${EXTTOCALL}) | |
2080 | exten => s,n,Set(D_OPTIONS=${D_OPTIONS}I) | |
2081 | exten => s,n(godial),Macro(dialout-one-predial-hook,) | |
2082 | exten => s,n,Dial(${DSTRING},${ARG1},${D_OPTIONS}b(func-apply-sipheaders^s^1)) | |
2083 | exten => s,n,ExecIf($["${DIALSTATUS}"="ANSWER" & "${CALLER_DEST}"!=""]?MacroExit()) | |
2084 | exten => s,n,ExecIf($["${DIALSTATUS_CW}"!=""]?Set(DIALSTATUS=${DIALSTATUS_CW})) | |
2085 | exten => s,n,GosubIf($[("${SCREEN}"!=""&("${DIALSTATUS}"="TORTURE"|"${DIALSTATUS}"="DONTCALL"))|"${DIALSTATUS}"="ANSWER"]?s-${DIALSTATUS},1()) | |
2086 | exten => s,n,MacroExit() | |
2087 | exten => s,n(nodial),ExecIf($["${DIALSTATUS}" = ""]?Set(DIALSTATUS=NOANSWER)) | |
2088 | exten => s,n,Noop(Returned from dial-one with nothing to call and DIALSTATUS: ${DIALSTATUS}) | |
2089 | exten => s,n,MacroExit() | |
2090 | ||
2091 | exten => h,1,Macro(hangupcall,) | |
2092 | ||
2093 | exten => usegoto,1,Set(USEGOTO=) | |
2094 | exten => usegoto,n,Goto(from-internal,${DSTRING},1) | |
2095 | ||
2096 | exten => screen,1,GotoIf($["${DB(AMPUSER/${DEXTEN}/screen)}"!="nomemory" | "${CALLERID(number)}"=""]?memory) | |
2097 | exten => screen,n,ExecIf($[${REGEX("^[0-9a-zA-Z ]+$" ${CALLERID(number)})} = 1]?System(rm -f ${ASTVARLIBDIR}/sounds/priv-callerintros/${CALLERID(number)}.*)) | |
2098 | exten => screen,n(memory),Set(__SCREEN=${DB(AMPUSER/${DEXTEN}/screen)}) | |
2099 | exten => screen,n,Set(__SCREEN_EXTEN=${DEXTEN}) | |
2100 | exten => screen,n,Set(ARG2=${ARG2}p) | |
2101 | exten => screen,n,Return() | |
2102 | ||
2103 | exten => cf,1,Set(CFAMPUSER=${IF($["${AMPUSER}"=""]?${CALLERID(number)}:${AMPUSER})}) | |
2104 | exten => cf,n,ExecIf($["${DB(CF/${DEXTEN})}"="${CFAMPUSER}" | "${DB(CF/${DEXTEN})}"="${REALCALLERIDNUM}" | "${CUT(CUT(BLINDTRANSFER,-,1),/,1)}" = "${DB(CF/${DEXTEN})}" | "${DEXTEN}"="${DB(CF/${DEXTEN})}"]?Return()) | |
2105 | exten => cf,n,ExecIf($["${DB(AMPUSER/${DEXTEN}/cfringtimer)}" != "0" & "${DB(AMPUSER/${DEXTEN}/cfringtimer)}" != ""]?Set(ARG1=${IF($["${DB(AMPUSER/${DEXTEN}/cfringtimer)}"="-1"]? : ${DB(AMPUSER/${DEXTEN}/cfringtimer)})})) | |
2106 | exten => cf,n,Set(DEXTEN=${IF($["${CFIGNORE}"=""]?"${DB(CF/${DEXTEN})}#": )}) | |
2107 | exten => cf,n,ExecIf($["${DEXTEN}"!=""]?Return()) | |
2108 | exten => cf,n,Set(DIALSTATUS=NOANSWER) | |
2109 | exten => cf,n,Return() | |
2110 | ||
2111 | exten => qwait,1,ExecIf($["${SAVEDCIDNAME}" = ""]?Set(__SAVEDCIDNAME=${CALLERID(name)})) | |
2112 | exten => qwait,n,Set(ELAPSED=${MATH($[${EPOCH}+30-${QUEUEWAIT}]/60,int)}) | |
2113 | exten => qwait,n,Set(CALLERID(name)=M${ELAPSED}:${SAVEDCIDNAME}) | |
2114 | exten => qwait,n,Return() | |
2115 | ||
2116 | exten => ctset,1,Set(DB(CALLTRACE/${DEXTEN})=${CALLERID(number)}) | |
2117 | exten => ctset,n,Return() | |
2118 | ||
2119 | exten => ctclear,1,Noop(Deleting: CALLTRACE/${DEXTEN} ${DB_DELETE(CALLTRACE/${DEXTEN})}) | |
2120 | exten => ctclear,n,Return() | |
2121 | ||
2122 | exten => dstring,1,Set(DSTRING=) | |
2123 | exten => dstring,n,Set(DEVICES=${DB(AMPUSER/${DEXTEN}/device)}) | |
2124 | exten => dstring,n,ExecIf($["${DEVICES}"=""]?Return()) | |
2125 | exten => dstring,n,ExecIf($["${DEVICES:0:1}"="&"]?Set(DEVICES=${DEVICES:1})) | |
2126 | exten => dstring,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)}) | |
2127 | exten => dstring,n,Set(ITER=1) | |
2128 | exten => dstring,n(begin),Set(THISDIAL=${DB(DEVICE/${CUT(DEVICES,&,${ITER})}/dial)}) | |
2129 | exten => dstring,n,GosubIf($["${ASTCHANDAHDI}" = "1"]?zap2dahdi,1()) | |
2130 | exten => dstring,n,GotoIf($["${THISDIAL:0:5}"!="PJSIP"]?docheck) | |
2131 | exten => dstring,n,Noop(Debug: Found PJSIP Destination ${THISDIAL}, updating with PJSIP_DIAL_CONTACTS) | |
2132 | exten => dstring,n,Set(THISDIAL=${PJSIP_DIAL_CONTACTS(${THISDIAL:6})}) | |
2133 | exten => dstring,n(docheck),GotoIf($["${THISDIAL}"=""]?skipset) | |
2134 | exten => dstring,n(doset),Set(DSTRING=${DSTRING}${THISDIAL}&) | |
2135 | exten => dstring,n(skipset),Set(ITER=$[${ITER}+1]) | |
2136 | exten => dstring,n,GotoIf($[${ITER}<=${LOOPCNT}]?begin) | |
2137 | exten => dstring,n,ExecIf($["${DSTRING:-1}"!="&"]?Return()) | |
2138 | exten => dstring,n,Set(DSTRING=${DSTRING:0:$[${LEN(${DSTRING})}-1]}) | |
2139 | exten => dstring,n,Return() | |
2140 | ||
2141 | exten => dlocal,1,Set(DSTRING=${IF($["${ARG1}"=""]?${DEXTEN:0:${MATH(${LEN(${DEXTEN})}-1,int)}}:Local/${DEXTEN:0:${MATH(${LEN(${DEXTEN})}-1,int)}}@from-internal/n)}) | |
2142 | exten => dlocal,n,Set(USEGOTO=${IF($["${ARG1}"=""]?1:0)}) | |
2143 | exten => dlocal,n,Return() | |
2144 | ||
2145 | exten => zap2dahdi,1,ExecIf($["${THISDIAL}" = ""]?Return()) | |
2146 | exten => zap2dahdi,n,Set(NEWDIAL=) | |
2147 | exten => zap2dahdi,n,Set(LOOPCNT2=${FIELDQTY(THISDIAL,&)}) | |
2148 | exten => zap2dahdi,n,Set(ITER2=1) | |
2149 | exten => zap2dahdi,n(begin2),Set(THISPART2=${CUT(THISDIAL,&,${ITER2})}) | |
2150 | exten => zap2dahdi,n,ExecIf($["${THISPART2:0:3}" = "ZAP"]?Set(THISPART2=DAHDI${THISPART2:3})) | |
2151 | exten => zap2dahdi,n,Set(NEWDIAL=${NEWDIAL}${THISPART2}&) | |
2152 | exten => zap2dahdi,n,Set(ITER2=$[${ITER2} + 1]) | |
2153 | exten => zap2dahdi,n,GotoIf($[${ITER2} <= ${LOOPCNT2}]?begin2) | |
2154 | exten => zap2dahdi,n,Set(THISDIAL=${NEWDIAL:0:$[${LEN(${NEWDIAL})}-1]}) | |
2155 | exten => zap2dahdi,n,Return() | |
2156 | ||
2157 | exten => s-TORTURE,1,Goto(app-blackhole,musiconhold,1) | |
2158 | exten => s-TORTURE,n,Macro(hangupcall,) | |
2159 | ||
2160 | exten => s-DONTCALL,1,Answer | |
2161 | exten => s-DONTCALL,n,Wait(1) | |
2162 | exten => s-DONTCALL,n,Zapateller() | |
2163 | exten => s-DONTCALL,n,Playback(ss-noservice) | |
2164 | exten => s-DONTCALL,n,Macro(hangupcall,) | |
2165 | ||
2166 | exten => s-CHANUNAVAIL,1,Macro(vm,${SCREEN_EXTEN},BUSY,${IVR_RETVM}) | |
2167 | exten => s-CHANUNAVAIL,n,ExecIf($["${IVR_RETVM}"!="RETURN" | "${IVR_CONTEXT}"=""]?Hangup()) | |
2168 | exten => s-CHANUNAVAIL,n,Return() | |
2169 | ||
2170 | exten => s-NOANSWER,1,Macro(vm,${SCREEN_EXTEN},BUSY,${IVR_RETVM}) | |
2171 | exten => s-NOANSWER,n,ExecIf($["${IVR_RETVM}"!="RETURN" | "${IVR_CONTEXT}"=""]?Hangup()) | |
2172 | exten => s-NOANSWER,n,Return() | |
2173 | ||
2174 | exten => s-BUSY,1,Macro(vm,${SCREEN_EXTEN},BUSY,${IVR_RETVM}) | |
2175 | exten => s-BUSY,n,ExecIf($["${IVR_RETVM}"!="RETURN" | "${IVR_CONTEXT}"=""]?Hangup()) | |
2176 | exten => s-BUSY,n,Return() | |
2177 | ||
2178 | ;--== end of [macro-dial-one] ==--; | |
2179 | ||
2180 | ||
2181 | [func-set-sipheader] | |
2182 | include => func-set-sipheader-custom | |
2183 | exten => s,1,Noop(Sip Add Header function called. Adding ${ARG1} = ${ARG2}) | |
2184 | exten => s,n,Set(HASH(_SIPHEADERS,${ARG1})=${ARG2}) | |
2185 | exten => s,n,Return() | |
2186 | ||
2187 | ;--== end of [func-set-sipheader] ==--; | |
2188 | ||
2189 | ||
2190 | [func-apply-sipheaders] | |
2191 | include => func-apply-sipheaders-custom | |
2192 | exten => s,1,Noop(Applying SIP Headers to channel) | |
2193 | exten => s,n,Set(SIPHEADERKEYS=${HASHKEYS(SIPHEADERS)}) | |
2194 | exten => s,n,While($["${SET(sipkey=${SHIFT(SIPHEADERKEYS)})}" != ""]) | |
2195 | exten => s,n,Set(sipheader=${HASH(SIPHEADERS,${sipkey})}) | |
2196 | exten => s,n,SIPAddHeader(${sipkey}: ${sipheader}) | |
2197 | exten => s,n,Set(PJSIP_HEADER(add,${sipkey})=${sipheader}) | |
2198 | exten => s,n,EndWhile | |
2199 | exten => s,n,Return() | |
2200 | ||
2201 | ;--== end of [func-apply-sipheaders] ==--; | |
2202 | ||
2203 | ||
2204 | [macro-parked-call] | |
2205 | include => macro-parked-call-custom | |
2206 | exten => s,1,Gosub(sub-record-check,s,1(parking,${AMPUSER},${AMPUSER})) | |
2207 | ||
2208 | ;--== end of [macro-parked-call] ==--; | |
2209 | ||
2210 | ||
2211 | [from-internal-additional] | |
2212 | include => from-internal-additional-custom | |
2213 | include => app-calltrace | |
2214 | include => app-echo-test | |
2215 | include => app-speakextennum | |
2216 | include => app-speakingclock | |
2217 | include => ext-queues | |
2218 | include => app-queue-toggle | |
2219 | include => app-queue-caller-count | |
2220 | include => app-recordings | |
2221 | include => app-dialvm | |
2222 | include => app-vmmain | |
2223 | include => app-userlogonoff | |
2224 | include => ext-local-confirm | |
2225 | include => findmefollow-ringallv2 | |
2226 | include => app-pickup | |
2227 | include => app-chanspy | |
2228 | include => ext-test | |
2229 | include => ext-local | |
2230 | include => outbound-allroutes | |
2231 | exten => h,1,Hangup | |
2232 | ||
2233 | ;--== end of [from-internal-additional] ==--; | |
2234 | ||
2235 | ||
2236 | [from-internal-noxfer-additional] | |
2237 | include => from-internal-noxfer-additional-custom | |
2238 | exten => h,1,Hangup | |
2239 | ||
2240 | ;--== end of [from-internal-noxfer-additional] ==--; |