Advertisement
Guest User

Untitled

a guest
Oct 27th, 2016
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 124.90 KB | None | 0 0
  1. [root@tuntokavkaz ~]# cat /etc/asterisk/extensions_additional.conf
  2. ;--------------------------------------------------------------------------------;
  3. ; Do NOT edit this file as it is auto-generated by FreePBX. All modifications to ;
  4. ; this file must be done via the web gui. There are alternative files to make ;
  5. ; custom modifications, details at: http://freepbx.org/configuration_files ;
  6. ;--------------------------------------------------------------------------------;
  7. ;
  8.  
  9. [globals]
  10. CAMPONTOGGLE = *84
  11. DYNAMIC_FEATURES = apprecord
  12. INTERCOMCODE = *80
  13. ASTETCDIR = /etc/asterisk
  14. ASTMODDIR = /usr/lib/asterisk/modules
  15. ASTVARLIBDIR = /var/lib/asterisk
  16. ASTAGIDIR = /var/lib/asterisk/agi-bin
  17. ASTSPOOLDIR = /var/spool/asterisk
  18. ASTRUNDIR = /var/run/asterisk
  19. ASTLOGDIR = /var/log/asterisk
  20. CWINUSEBUSY = true
  21. AMPMGRUSER = admin
  22. AMPMGRPASS = amp111
  23. AMPDBENGINE = mysql
  24. AMPDBHOST = localhost
  25. AMPDBNAME = asterisk
  26. AMPDBUSER = asteriskuser
  27. AMPDBPASS = amp109
  28. VMX_CONTEXT = from-internal
  29. VMX_PRI = 1
  30. VMX_TIMEDEST_CONTEXT =
  31. VMX_TIMEDEST_EXT = dovm
  32. VMX_TIMEDEST_PRI = 1
  33. VMX_LOOPDEST_CONTEXT =
  34. VMX_LOOPDEST_EXT = dovm
  35. VMX_LOOPDEST_PRI = 1
  36. MIXMON_DIR =
  37. MIXMON_POST =
  38. DIAL_OPTIONS = Ttr
  39. TRUNK_OPTIONS = Tt
  40. TRUNK_RING_TIMER = 300
  41. MIXMON_FORMAT = wav
  42. REC_POLICY = caller
  43. RINGTIMER_DEFAULT = 15
  44. TRANSFER_CONTEXT = from-internal-xfer
  45. ASTVERSION = 11.15.1
  46. ASTCHANDAHDI = 1
  47. NULL = ""
  48. OUT_1 = DAHDI/g0
  49. OUTCID_1 =
  50. OUTMAXCHANS_1 =
  51. OUTFAIL_1 =
  52. OUTPREFIX_1 =
  53. OUTDISABLE_1 = off
  54. OUTKEEPCID_1 =
  55. FORCEDOUTCID_1 =
  56. PREFIX_TRUNK_1 =
  57. OUT_2 = AMP:dongle/i:356356042597845/$OUTNUM$
  58. OUTCID_2 =
  59. OUTMAXCHANS_2 =
  60. OUTFAIL_2 =
  61. OUTPREFIX_2 =
  62. OUTDISABLE_2 = off
  63. OUTKEEPCID_2 = off
  64. FORCEDOUTCID_2 =
  65. PREFIX_TRUNK_2 =
  66. OUT_3 = AMP:dongle/i:353443042619010/$OUTNUM$
  67. OUTCID_3 =
  68. OUTMAXCHANS_3 =
  69. OUTFAIL_3 =
  70. OUTPREFIX_3 =
  71. OUTDISABLE_3 = off
  72. OUTKEEPCID_3 = off
  73. FORCEDOUTCID_3 =
  74. PREFIX_TRUNK_3 =
  75. OUT_4 = AMP:dongle/i:867884004771480/$OUTNUM$
  76. OUTCID_4 =
  77. OUTMAXCHANS_4 =
  78. OUTFAIL_4 =
  79. OUTPREFIX_4 =
  80. OUTDISABLE_4 = off
  81. OUTKEEPCID_4 = off
  82. FORCEDOUTCID_4 =
  83. PREFIX_TRUNK_4 =
  84. OUT_5 = AMP:dongle/i:354807043241132/$OUTNUM$
  85. OUTCID_5 =
  86. OUTMAXCHANS_5 =
  87. OUTFAIL_5 =
  88. OUTPREFIX_5 =
  89. OUTDISABLE_5 = off
  90. OUTKEEPCID_5 = off
  91. FORCEDOUTCID_5 =
  92. PREFIX_TRUNK_5 =
  93. OUT_6 = AMP:dongle/i:356225040574447/$OUTNUM$
  94. OUTCID_6 =
  95. OUTMAXCHANS_6 =
  96. OUTFAIL_6 =
  97. OUTPREFIX_6 =
  98. OUTDISABLE_6 = off
  99. OUTKEEPCID_6 = off
  100. FORCEDOUTCID_6 =
  101. PREFIX_TRUNK_6 =
  102. OUT_7 = AMP:dongle/i:356356042597845/$OUTNUM$
  103. OUTCID_7 =
  104. OUTMAXCHANS_7 =
  105. OUTFAIL_7 =
  106. OUTPREFIX_7 =
  107. OUTDISABLE_7 = off
  108. OUTKEEPCID_7 = off
  109. FORCEDOUTCID_7 =
  110. PREFIX_TRUNK_7 =
  111. OUT_8 = AMP:dongle/i:355615044476337/$OUTNUM$
  112. OUTCID_8 =
  113. OUTMAXCHANS_8 =
  114. OUTFAIL_8 =
  115. OUTPREFIX_8 =
  116. OUTDISABLE_8 = off
  117. OUTKEEPCID_8 = off
  118. FORCEDOUTCID_8 =
  119. PREFIX_TRUNK_8 =
  120. OUT_9 = AMP:dongle/i:861496015325457/$OUTNUM$
  121. OUTCID_9 =
  122. OUTMAXCHANS_9 =
  123. OUTFAIL_9 =
  124. OUTPREFIX_9 =
  125. OUTDISABLE_9 = off
  126. OUTKEEPCID_9 = off
  127. FORCEDOUTCID_9 =
  128. PREFIX_TRUNK_9 =
  129. OUT_10 = AMP:dongle/i:352216044917751/$OUTNUM$
  130. OUTCID_10 =
  131. OUTMAXCHANS_10 =
  132. OUTFAIL_10 =
  133. OUTPREFIX_10 =
  134. OUTDISABLE_10 = off
  135. OUTKEEPCID_10 = off
  136. FORCEDOUTCID_10 =
  137. PREFIX_TRUNK_10 =
  138. OUT_11 = AMP:dongle/i:356356048778829/$OUTNUM$
  139. OUTCID_11 =
  140. OUTMAXCHANS_11 =
  141. OUTFAIL_11 =
  142. OUTPREFIX_11 =
  143. OUTDISABLE_11 = off
  144. OUTKEEPCID_11 = off
  145. FORCEDOUTCID_11 =
  146. PREFIX_TRUNK_11 =
  147. OUT_12 = AMP:dongle/i:354807045380441/$OUTNUM$
  148. OUTCID_12 =
  149. OUTMAXCHANS_12 =
  150. OUTFAIL_12 =
  151. OUTPREFIX_12 =
  152. OUTDISABLE_12 = off
  153. OUTKEEPCID_12 = off
  154. FORCEDOUTCID_12 =
  155. PREFIX_TRUNK_12 =
  156. OUT_13 = AMP:dongle/i:354807047343652/$OUTNUM$
  157. OUTCID_13 =
  158. OUTMAXCHANS_13 =
  159. OUTFAIL_13 =
  160. OUTPREFIX_13 =
  161. OUTDISABLE_13 = off
  162. OUTKEEPCID_13 = off
  163. FORCEDOUTCID_13 =
  164. PREFIX_TRUNK_13 =
  165. OUT_14 = AMP:dongle/i:351911049126538/$OUTNUM$
  166. OUTCID_14 =
  167. OUTMAXCHANS_14 =
  168. OUTFAIL_14 =
  169. OUTPREFIX_14 =
  170. OUTDISABLE_14 = off
  171. OUTKEEPCID_14 = off
  172. FORCEDOUTCID_14 =
  173. PREFIX_TRUNK_14 =
  174. SIPLANG =
  175. ALLOW_SIP_ANON = no
  176. #include globals_custom.conf
  177.  
  178. ;end of [globals]
  179.  
  180. [app-calltrace]
  181. include => app-calltrace-custom
  182. exten => *69,1,Goto(app-calltrace-perform,s,1)
  183.  
  184. ;--== end of [app-calltrace] ==--;
  185.  
  186.  
  187. [app-calltrace-perform]
  188. include => app-calltrace-perform-custom
  189. exten => s,1,Answer
  190. exten => s,n,Wait(1)
  191. exten => s,n,Macro(user-callerid,)
  192. exten => s,n,Playback(info-about-last-call&telephone-number)
  193. exten => s,n,Set(lastcaller=${DB(CALLTRACE/${AMPUSER})})
  194. exten => s,n,GotoIf($[ $[ "${lastcaller}" = "" ] | $[ "${lastcaller}" = "unknown" ] ]?noinfo)
  195. exten => s,n,SayDigits(${lastcaller})
  196. exten => s,n,Set(TIMEOUT(digit)=3)
  197. exten => s,n,Set(TIMEOUT(response)=7)
  198. exten => s,n,Background(to-call-this-number&press-1)
  199. exten => s,n,Goto(fin)
  200. exten => s,n(noinfo),Playback(from-unknown-caller)
  201. exten => s,n,Macro(hangupcall,)
  202. exten => s,n(fin),Noop(Waiting for input)
  203. exten => s,n,WaitExten(60,)
  204. exten => s,n,Playback(sorry-youre-having-problems&goodbye)
  205.  
  206. exten => 1,1,Goto(from-internal,${lastcaller},1)
  207.  
  208. exten => i,1,Playback(vm-goodbye)
  209. exten => i,n,Macro(hangupcall,)
  210.  
  211. exten => t,1,Playback(vm-goodbye)
  212. exten => t,n,Macro(hangupcall,)
  213.  
  214. ;--== end of [app-calltrace-perform] ==--;
  215.  
  216.  
  217. [app-echo-test]
  218. include => app-echo-test-custom
  219. exten => *43,1,Answer
  220. exten => *43,n,Macro(user-callerid,)
  221. exten => *43,n,Wait(1)
  222. exten => *43,n,Playback(demo-echotest)
  223. exten => *43,n,Echo()
  224. exten => *43,n,Playback(demo-echodone)
  225. exten => *43,n,Hangup
  226.  
  227. ;--== end of [app-echo-test] ==--;
  228.  
  229.  
  230. [app-speakextennum]
  231. include => app-speakextennum-custom
  232. exten => *65,1,Answer
  233. exten => *65,n,Wait(1)
  234. exten => *65,n,Macro(user-callerid,)
  235. exten => *65,n,Playback(your)
  236. exten => *65,n,Playback(extension)
  237. exten => *65,n,Playback(number)
  238. exten => *65,n,Playback(is)
  239. exten => *65,n,SayDigits(${AMPUSER})
  240. exten => *65,n,Wait(2)
  241. exten => *65,n,Hangup
  242.  
  243. ;--== end of [app-speakextennum] ==--;
  244.  
  245.  
  246. [sub-hr12format]
  247. include => sub-hr12format-custom
  248. exten => s,1,Goto(${CHANNEL(language)},1)
  249. exten => s,n,GotoIf($[${DIALPLAN_EXISTS(sub-hr12format,${CHANNEL(language)},1)}]?${CHANNEL(language)},1:en,1)
  250.  
  251. exten => i,1,Playback(at-tone-time-exactly)
  252. exten => i,n,SayUnixTime(${FutureTime},,IM 'and' S 'seconds' p)
  253. exten => i,n,Return()
  254.  
  255. exten => de,1,Playback(at-tone-time-exactly)
  256. exten => de,n,SayUnixTime(${FutureTime},,IMSp)
  257. exten => de,n,Return()
  258. exten => de,n,Playback(at-tone-time-exactly)
  259. exten => de,n,SayUnixTime(${FutureTime},,IMSp)
  260. exten => de,n,Return()
  261.  
  262. exten => en,1,Playback(at-tone-time-exactly)
  263. exten => en,n,SayUnixTime(${FutureTime},,IM 'and' S 'seconds' p)
  264. exten => en,n,Return()
  265.  
  266. ;--== end of [sub-hr12format] ==--;
  267.  
  268.  
  269. [app-speakingclock]
  270. include => app-speakingclock-custom
  271. exten => *60,1,Macro(user-callerid,)
  272. exten => *60,n,Answer
  273. exten => *60,n,Wait(1)
  274. exten => *60,n,Set(NumLoops=0)
  275. exten => *60,n(start),Set(FutureTime=$[${EPOCH} + 11])
  276. exten => *60,n,Gosub(sub-hr12format,s,1())
  277. exten => *60,n(waitloop),Set(TimeLeft=$[${FutureTime} - ${EPOCH}])
  278. exten => *60,n,GotoIf($[${TimeLeft} < 1]?playbeep)
  279. exten => *60,n,Wait(1)
  280. exten => *60,n,Goto(waitloop)
  281. exten => *60,n(playbeep),Playback(beep)
  282. exten => *60,n,Wait(5)
  283. exten => *60,n,Set(NumLoops=$[${NumLoops} + 1])
  284. exten => *60,n,GotoIf($[${NumLoops} < 5]?start)
  285. exten => *60,n,Playback(goodbye)
  286. exten => *60,n,Hangup
  287.  
  288. ;--== end of [app-speakingclock] ==--;
  289.  
  290.  
  291. [sub-hr24format]
  292. include => sub-hr24format-custom
  293. exten => s,1,GotoIf($[${DIALPLAN_EXISTS(sub-hr24format,${CHANNEL(language)},1)}]?${CHANNEL(language)},1:en,1)
  294.  
  295. exten => en,1,Playback(at-tone-time-exactly)
  296. exten => en,n,SayUnixTime(${FutureTime},,kM 'and' S 'seconds')
  297. exten => en,n,Return()
  298.  
  299. exten => de,1,Playback(at-tone-time-exactly)
  300. exten => de,n,SayUnixTime(${FutureTime},,kMS)
  301. exten => de,n,Return()
  302.  
  303. ;--== end of [sub-hr24format] ==--;
  304.  
  305.  
  306. [app-dialvm]
  307. include => app-dialvm-custom
  308. exten => *98,1,Macro(user-callerid,)
  309. exten => *98,n,Answer
  310. exten => *98,n(start),Wait(1)
  311. exten => *98,n,Noop(app-dialvm: Asking for mailbox)
  312. exten => *98,n,Read(MAILBOX,vm-login,,,3,2)
  313. exten => *98,n(check),Noop(app-dialvm: Got Mailbox ${MAILBOX})
  314. exten => *98,n,Macro(get-vmcontext,${MAILBOX})
  315. exten => *98,n,Set(VMBOXEXISTSSTATUS=${IF(${VM_INFO(${MAILBOX}@${VMCONTEXT},exists)}?SUCCESS:FAILED)})
  316. exten => *98,n,GotoIf($["${VMBOXEXISTSSTATUS}" = "SUCCESS"]?good:bad)
  317. exten => *98,n,Macro(hangupcall,)
  318. exten => *98,n(good),Noop(app-dialvm: Good mailbox ${MAILBOX}@${VMCONTEXT})
  319. exten => *98,n,VoiceMailMain(${MAILBOX}@${VMCONTEXT})
  320. exten => *98,n,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?playret)
  321. exten => *98,n,Macro(hangupcall,)
  322. exten => *98,n(bad),Noop(app-dialvm: BAD mailbox ${MAILBOX}@${VMCONTEXT})
  323. exten => *98,n,Wait(1)
  324. exten => *98,n,Noop(app-dialvm: Asking for password so people can't probe for existence of a mailbox)
  325. exten => *98,n,Read(FAKEPW,vm-password,,,3,2)
  326. exten => *98,n,Noop(app-dialvm: Asking for mailbox again)
  327. exten => *98,n,Read(MAILBOX,vm-incorrect-mailbox,,,3,2)
  328. exten => *98,n,Goto(check)
  329. exten => *98,n,Macro(hangupcall,)
  330. exten => *98,n(playret),Playback(beep&you-will-be-transfered-menu&silence/1)
  331. exten => *98,n,Goto(${IVR_CONTEXT},return,1)
  332.  
  333. exten => _*98.,1,Answer
  334. exten => _*98.,n,Wait(1)
  335. exten => _*98.,n,Macro(get-vmcontext,${EXTEN:3})
  336. exten => _*98.,n,VoiceMailMain(${EXTEN:3}@${VMCONTEXT})
  337. exten => _*98.,n,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?${IVR_CONTEXT},return,1)
  338. exten => _*98.,n,Macro(hangupcall,)
  339.  
  340. ;--== end of [app-dialvm] ==--;
  341.  
  342.  
  343. [app-vmmain]
  344. include => app-vmmain-custom
  345. exten => *97,1,Answer
  346. exten => *97,n,Wait(1)
  347. exten => *97,n,Macro(user-callerid,)
  348. exten => *97,n,Macro(get-vmcontext,${AMPUSER})
  349. exten => *97,n(check),Set(VMBOXEXISTSSTATUS=${IF(${VM_INFO(${AMPUSER}@${VMCONTEXT},exists)}?SUCCESS:FAILED)})
  350. exten => *97,n,GotoIf($["${VMBOXEXISTSSTATUS}" = "SUCCESS"]?mbexist)
  351. exten => *97,n,VoiceMailMain()
  352. exten => *97,n,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?playret)
  353. exten => *97,n,Macro(hangupcall,)
  354. exten => *97,check+101(mbexist),VoiceMailMain(${AMPUSER}@${VMCONTEXT})
  355. exten => *97,n,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?playret)
  356. exten => *97,n,Macro(hangupcall,)
  357. exten => *97,n(playret),Playback(beep&you-will-be-transfered-menu&silence/1)
  358. exten => *97,n,Goto(${IVR_CONTEXT},return,1)
  359.  
  360. ;--== end of [app-vmmain] ==--;
  361.  
  362.  
  363. [cidlookup]
  364. include => cidlookup-custom
  365. exten => cidlookup_1,1,Set(CURLOPT(httptimeout)=7)
  366. exten => cidlookup_1,n,Set(CALLERID(name)=${CURL(https://api.opencnam.com/v2/phone/${CALLERID(num)}?format=pbx&ref=freepbx)})
  367. exten => cidlookup_1,n,Set(current_hour=${STRFTIME(,,%Y-%m-%d %H)})
  368. exten => cidlookup_1,n,Set(last_query_hour=${DB(cidlookup/opencnam_last_query_hour)})
  369. exten => cidlookup_1,n,Set(total_hourly_queries=${DB(cidlookup/opencnam_total_hourly_queries)})
  370. exten => cidlookup_1,n,ExecIf($["${last_query_hour}" != "${current_hour}"]?Set(DB(cidlookup/opencnam_total_hourly_queries)=0))
  371. exten => cidlookup_1,n,ExecIf($["${total_hourly_queries}" = ""]?Set(DB(cidlookup/opencnam_total_hourly_queries)=0))
  372. exten => cidlookup_1,n,Set(DB(cidlookup/opencnam_total_hourly_queries)=${MATH(${DB(cidlookup/opencnam_total_hourly_queries)}+1,i)})
  373. exten => cidlookup_1,n,ExecIf($[${DB(cidlookup/opencnam_total_hourly_queries)} >= 60]?System(${ASTVARLIBDIR}/bin/opencnam-alert.php))
  374. exten => cidlookup_1,n,Set(DB(cidlookup/opencnam_last_query_hour)=${current_hour})
  375. exten => cidlookup_1,n,Return()
  376.  
  377. exten => cidlookup_return,1,ExecIf($["${DB(cidname/${CALLERID(num)})}" != ""]?Set(CALLERID(name)=${DB(cidname/${CALLERID(num)})}))
  378. exten => cidlookup_return,n,Return()
  379.  
  380. ;--== end of [cidlookup] ==--;
  381.  
  382.  
  383. [app-recordings]
  384. include => app-recordings-custom
  385. exten => *77,1,Macro(user-callerid,)
  386. exten => *77,n,Wait(2)
  387. exten => *77,n,Macro(systemrecording,dorecord)
  388.  
  389. exten => *99,1,Macro(user-callerid,)
  390. exten => *99,n,Wait(2)
  391. exten => *99,n,Macro(systemrecording,docheck)
  392.  
  393. ;--== end of [app-recordings] ==--;
  394.  
  395.  
  396. [macro-systemrecording]
  397. include => macro-systemrecording-custom
  398. exten => s,1,Set(RECFILE=${IF($["${ARG2}" = ""]?/var/spool/asterisk/tmp/${AMPUSER}-ivrrecording:${ARG2})})
  399. exten => s,n,ExecIf($["${ARG3}" != ""]?Authenticate(${ARG3}))
  400. exten => s,n,Goto(${ARG1},1)
  401.  
  402. exten => dorecord,1,GotoIf($["${ARG2}" = ""]?skipremove)
  403. exten => dorecord,n,System(rm ${ASTVARLIBDIR}/sounds/${RECFILE}.*)
  404. exten => dorecord,n(skipremove),Record(${RECFILE}.wav,,,k)
  405. exten => dorecord,n,Wait(1)
  406. exten => dorecord,n,Goto(confmenu,1)
  407.  
  408. exten => docheck,1,Playback(beep)
  409. exten => docheck,n(dc_start),Background(${RECFILE},m,${CHANNEL(language)},macro-systemrecording)
  410. exten => docheck,n,Wait(1)
  411. exten => docheck,n,Goto(confmenu,1)
  412.  
  413. exten => confmenu,1,Background(to-listen-to-it&press-1&to-rerecord-it&press-star&astcc-followed-by-pound,m,${CHANNEL(language)},macro-systemrecording)
  414. exten => confmenu,n,Read(RECRESULT,,1,,,4)
  415. exten => confmenu,n,GotoIf($["x${RECRESULT}"="x*"]?dorecord,1)
  416. exten => confmenu,n,GotoIf($["x${RECRESULT}"="x1"]?docheck,2)
  417. exten => confmenu,n,Goto(1)
  418.  
  419. exten => 1,1,Goto(docheck,dc_start)
  420.  
  421. exten => *,1,Goto(dorecord,1)
  422.  
  423. exten => t,1,Playback(goodbye)
  424. exten => t,n,Hangup
  425.  
  426. exten => i,1,Playback(pm-invalid-option)
  427. exten => i,n,Goto(confmenu,1)
  428.  
  429. exten => h,1,Hangup
  430.  
  431. ;--== end of [macro-systemrecording] ==--;
  432.  
  433.  
  434. [app-callwaiting-cwoff]
  435. include => app-callwaiting-cwoff-custom
  436. exten => *71,1,Answer
  437. exten => *71,n,Wait(1)
  438. exten => *71,n,Macro(user-callerid,)
  439. exten => *71,n,Noop(Deleting: CW/${AMPUSER} ${DB_DELETE(CW/${AMPUSER})})
  440. exten => *71,n(hook_1),Playback(call-waiting&de-activated)
  441. exten => *71,n,Macro(hangupcall,)
  442.  
  443. ;--== end of [app-callwaiting-cwoff] ==--;
  444.  
  445.  
  446. [app-callwaiting-cwon]
  447. include => app-callwaiting-cwon-custom
  448. exten => *70,1,Answer
  449. exten => *70,n,Wait(1)
  450. exten => *70,n,Macro(user-callerid,)
  451. exten => *70,n,Set(DB(CW/${AMPUSER})=ENABLED)
  452. exten => *70,n(hook_1),Playback(call-waiting&activated)
  453. exten => *70,n,Macro(hangupcall,)
  454.  
  455. ;--== end of [app-callwaiting-cwon] ==--;
  456.  
  457.  
  458. [app-dnd-off]
  459. include => app-dnd-off-custom
  460. exten => *79,1,Answer
  461. exten => *79,n,Wait(1)
  462. exten => *79,n,Macro(user-callerid,)
  463. exten => *79,n,Noop(Deleting: DND/${AMPUSER} ${DB_DELETE(DND/${AMPUSER})})
  464. exten => *79,n(hook_1),Playback(do-not-disturb&de-activated)
  465. exten => *79,n,Macro(hangupcall,)
  466.  
  467. ;--== end of [app-dnd-off] ==--;
  468.  
  469.  
  470. [app-dnd-on]
  471. include => app-dnd-on-custom
  472. exten => *78,1,Answer
  473. exten => *78,n,Wait(1)
  474. exten => *78,n,Macro(user-callerid,)
  475. exten => *78,n,Set(DB(DND/${AMPUSER})=YES)
  476. exten => *78,n(hook_1),Playback(do-not-disturb&activated)
  477. exten => *78,n,Macro(hangupcall,)
  478.  
  479. ;--== end of [app-dnd-on] ==--;
  480.  
  481.  
  482. [app-dnd-toggle]
  483. include => app-dnd-toggle-custom
  484. exten => *76,1,Answer
  485. exten => *76,n,Wait(1)
  486. exten => *76,n,Macro(user-callerid,)
  487. exten => *76,n,GotoIf($["${DB(DND/${AMPUSER})}" = ""]?activate:deactivate)
  488. exten => *76,n(activate),Set(DB(DND/${AMPUSER})=YES)
  489. exten => *76,n(hook_on),Playback(do-not-disturb&activated)
  490. exten => *76,n,Macro(hangupcall,)
  491. exten => *76,n(deactivate),Noop(Deleting: DND/${AMPUSER} ${DB_DELETE(DND/${AMPUSER})})
  492. exten => *76,n(hook_off),Playback(do-not-disturb&de-activated)
  493. exten => *76,n,Macro(hangupcall,)
  494.  
  495. ;--== end of [app-dnd-toggle] ==--;
  496.  
  497.  
  498. [app-blacklist]
  499. include => app-blacklist-custom
  500. exten => ,1,Macro(user-callerid,)
  501.  
  502. exten => *30,1,Goto(app-blacklist-add,s,1)
  503.  
  504. exten => *32,1,Goto(app-blacklist-last,s,1)
  505.  
  506. exten => *31,1,Goto(app-blacklist-remove,s,1)
  507.  
  508. ;--== end of [app-blacklist] ==--;
  509.  
  510.  
  511. [app-blacklist-check]
  512. include => app-blacklist-check-custom
  513. exten => s,1(check),GotoIf($["${BLACKLIST()}"="1"]?blacklisted)
  514. exten => s,n,Set(CALLED_BLACKLIST=1)
  515. exten => s,n,Return()
  516. exten => s,n(blacklisted),Answer
  517. exten => s,n,Wait(1)
  518. exten => s,n,Zapateller()
  519. exten => s,n,Playback(ss-noservice)
  520. exten => s,n,Hangup
  521.  
  522. ;--== end of [app-blacklist-check] ==--;
  523.  
  524.  
  525. [app-blacklist-add]
  526. include => app-blacklist-add-custom
  527. exten => s,1,Answer
  528. exten => s,n,Wait(1)
  529. exten => s,n,Set(NumLoops=0)
  530. exten => s,n(start),Playback(enter-num-blacklist)
  531. exten => s,n,Set(TIMEOUT(digit)=5)
  532. exten => s,n,Set(TIMEOUT(response)=60)
  533. exten => s,n,Read(blacknr,then-press-pound,,,,)
  534. exten => s,n,SayDigits(${blacknr})
  535. exten => s,n,Playback(if-correct-press&digits/1)
  536. exten => s,n,Noop(Waiting for input)
  537. exten => s,n(end),WaitExten(60,)
  538. exten => s,n,Playback(sorry-youre-having-problems&goodbye)
  539.  
  540. exten => 1,1,GotoIf($[ "${blacknr}" != ""]?:app-blacklist-add-invalid,s,1)
  541. exten => 1,n,Set(DB(blacklist/${blacknr})=1)
  542. exten => 1,n,Playback(num-was-successfully&added)
  543. exten => 1,n,Wait(1)
  544. exten => 1,n,Hangup
  545.  
  546. ;--== end of [app-blacklist-add] ==--;
  547.  
  548.  
  549. [app-blacklist-add-invalid]
  550. include => app-blacklist-add-invalid-custom
  551. exten => s,1,Set(NumLoops=$[${NumLoops} + 1])
  552. exten => s,n,Playback(pm-invalid-option)
  553. exten => s,n,GotoIf($[${NumLoops} < 3]?app-blacklist-add,s,start)
  554. exten => s,n,Playback(goodbye)
  555. exten => s,n,Hangup
  556.  
  557. ;--== end of [app-blacklist-add-invalid] ==--;
  558.  
  559.  
  560. [app-blacklist-last]
  561. include => app-blacklist-last-custom
  562. exten => s,1,Answer
  563. exten => s,n,Wait(1)
  564. exten => s,n,Set(lastcaller=${DB(CALLTRACE/${CALLERID(number)})})
  565. exten => s,n,GotoIf($[ $[ "${lastcaller}" = "" ] | $[ "${lastcaller}" = "unknown" ] ]?noinfo)
  566. exten => s,n,Playback(privacy-to-blacklist-last-caller&telephone-number)
  567. exten => s,n,SayDigits(${lastcaller})
  568. exten => s,n,Set(TIMEOUT(digit)=3)
  569. exten => s,n,Set(TIMEOUT(response)=7)
  570. exten => s,n,Playback(if-correct-press&digits/1)
  571. exten => s,n,Goto(end)
  572. exten => s,n(noinfo),Playback(unidentified-no-callback)
  573. exten => s,n,Hangup
  574. exten => s,n,Noop(Waiting for input)
  575. exten => s,n(end),WaitExten(60,)
  576. exten => s,n,Playback(sorry-youre-having-problems&goodbye)
  577.  
  578. exten => 1,1,Set(DB(blacklist/${lastcaller})=1)
  579. exten => 1,n,Playback(num-was-successfully)
  580. exten => 1,n,Playback(added)
  581. exten => 1,n,Wait(1)
  582. exten => 1,n,Hangup
  583.  
  584. ;--== end of [app-blacklist-last] ==--;
  585.  
  586.  
  587. [app-blacklist-remove]
  588. include => app-blacklist-remove-custom
  589. exten => s,1,Answer
  590. exten => s,n,Wait(1)
  591. exten => s,n,Playback(entr-num-rmv-blklist)
  592. exten => s,n,Set(TIMEOUT(digit)=5)
  593. exten => s,n,Set(TIMEOUT(response)=60)
  594. exten => s,n,Read(blacknr,then-press-pound,,,,)
  595. exten => s,n,SayDigits(${blacknr})
  596. exten => s,n,Playback(if-correct-press&digits/1)
  597. exten => s,n,Noop(Waiting for input)
  598. exten => s,n(end),WaitExten(60,)
  599. exten => s,n,Playback(sorry-youre-having-problems&goodbye)
  600.  
  601. exten => 1,1,Noop(Deleting: blacklist/${blacknr} ${DB_DELETE(blacklist/${blacknr})})
  602. exten => 1,n,Playback(num-was-successfully&removed)
  603. exten => 1,n,Wait(1)
  604. exten => 1,n,Hangup
  605.  
  606. ;--== end of [app-blacklist-remove] ==--;
  607.  
  608.  
  609. [ext-featurecodes]
  610. include => ext-featurecodes-custom
  611. exten => *30,1,Goto(from-internal,*30,1)
  612.  
  613. exten => *31,1,Goto(from-internal,*31,1)
  614.  
  615. exten => 555,1,Goto(from-internal,555,1)
  616.  
  617. exten => 7777,1,Goto(from-internal,7777,1)
  618.  
  619. exten => 888,1,Goto(from-internal,888,1)
  620.  
  621. exten => 666,1,Goto(from-internal,666,1)
  622.  
  623. exten => *43,1,Goto(from-internal,*43,1)
  624.  
  625. exten => *60,1,Goto(from-internal,*60,1)
  626.  
  627. exten => *85,1,Goto(from-internal,*85,1)
  628.  
  629. exten => *98,1,Goto(from-internal,*98,1)
  630.  
  631. ;--== end of [ext-featurecodes] ==--;
  632.  
  633.  
  634. [ext-intercom]
  635. include => ext-intercom-custom
  636. exten => _*80.,1,Macro(user-callerid,)
  637. exten => _*80.,n,Set(dialnumber=${EXTEN:3})
  638. exten => _*80.,n,Set(INTERCOM_CALL=TRUE)
  639. exten => _*80.,n,Gosub(sub-record-check,s,1(exten,${dialnumber}))
  640. exten => _*80.,n,GotoIf($["${DB(AMPUSER/${AMPUSER}/intercom/block)}" = "blocked"]?end)
  641. exten => _*80.,n,GotoIf($["${DB(DND/${dialnumber})}" = "YES"]?end)
  642. exten => _*80.,n,GotoIf($["${DB(AMPUSER/${dialnumber}/intercom/${AMPUSER})}" = "allow" ]?allow)
  643. exten => _*80.,n,GotoIf($["${DB(AMPUSER/${dialnumber}/intercom/${AMPUSER})}" = "deny" ]?nointercom)
  644. exten => _*80.,n,GotoIf($["${DB(AMPUSER/${dialnumber}/intercom)}" = "disabled" ]?nointercom)
  645. exten => _*80.,n(allow),Set(DEVICES=${DB(AMPUSER/${dialnumber}/device)})
  646. exten => _*80.,n,GotoIf($["${DEVICES}" = "" ]?end)
  647. exten => _*80.,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)})
  648. exten => _*80.,n,Set(_SIPURI=)
  649. exten => _*80.,n,Set(_ALERTINFO=Alert-Info: Ring Answer)
  650. exten => _*80.,n,Set(_CALLINFO=Call-Info: <uri>\;answer-after=0)
  651. exten => _*80.,n,Set(_SIPURI=intercom=true)
  652. exten => _*80.,n,Set(_DOPTIONS=A(beep))
  653. exten => _*80.,n,Set(_DTIME=5)
  654. exten => _*80.,n,Set(_ANSWERMACRO=)
  655. exten => _*80.,n,GotoIf($[${LOOPCNT} > 1 ]?pagemode)
  656. exten => _*80.,n,Macro(autoanswer,${DEVICES})
  657. exten => _*80.,n(check),ChanIsAvail(${DIAL},s)
  658. exten => _*80.,n,GotoIf($["${AVAILORIGCHAN}" = ""]?end)
  659. exten => _*80.,n,GotoIf($["${DB(AMPUSER/${EXTEN:3}/cidname)}" = ""]?godial)
  660. exten => _*80.,n,Set(CONNECTEDLINE(name,i)=${DB(AMPUSER/${EXTEN:3}/cidname)})
  661. exten => _*80.,n,Set(CONNECTEDLINE(num)=${EXTEN:3})
  662. exten => _*80.,n(godial),Dial(${DIAL},${DTIME},I${DOPTIONS}${INTERCOM_EXT_DOPTIONS})
  663. exten => _*80.,n(end),ExecIf($[${INTERCOM_RETURN}]?Return())
  664. exten => _*80.,n,Busy(20)
  665. exten => _*80.,n,Macro(hangupcall,)
  666. exten => _*80.,n(pagemode),Set(ITER=1)
  667. exten => _*80.,n,Set(DIALSTR=)
  668. exten => _*80.,n(begin),ChanIsAvail(${DB(DEVICE/${CUT(DEVICES,&,${ITER})}/dial)},s)
  669. exten => _*80.,n,GotoIf($["${AVAILORIGCHAN}" = ""]?skip)
  670. exten => _*80.,n,Set(DIALSTR=${DIALSTR}-${CUT(DEVICES,&,${ITER})})
  671. exten => _*80.,n(skip),Set(ITER=$[${ITER} + 1])
  672. exten => _*80.,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin)
  673. exten => _*80.,n,Set(DIALSTR=${DIALSTR:1})
  674. exten => _*80.,n,GotoIf($["${DIALSTR}" = ""]?end2)
  675. exten => _*80.,n,Set(_AMPUSER=${AMPUSER})
  676. exten => _*80.,n,Gosub(page,1(${DIALSTR}))
  677. exten => _*80.,n(end2),ExecIf($[${INTERCOM_RETURN}]?Return())
  678. exten => _*80.,n,Busy(20)
  679. exten => _*80.,n,Macro(hangupcall,)
  680. exten => _*80.,n(nointercom),Noop(Intercom disallowed by ${dialnumber})
  681. exten => _*80.,n,ExecIf($[${INTERCOM_RETURN}]?Return())
  682. exten => _*80.,n,Playback(intercom&for&extension)
  683. exten => _*80.,n,SayDigits(${dialnumber})
  684. exten => _*80.,n,Playback(is&disabled)
  685. exten => _*80.,n,Congestion(20)
  686.  
  687. exten => page,1,Set(PAGE_CONF=${EPOCH}${RAND(100,999)})
  688. exten => page,n,Set(PAGEMODE=PAGE)
  689. exten => page,n,Set(PAGE_MEMBERS=${ARG1})
  690. exten => page,n,Set(PAGE_CONF_OPTS=duplex)
  691. exten => page,n,AGI(page.agi)
  692. exten => page,n,Set(CONFBRIDGE(user,template)=page_user_duplex)
  693. exten => page,n,Set(CONFBRIDGE(user,admin)=yes)
  694. exten => page,n,Set(CONFBRIDGE(user,marked)=yes)
  695. exten => page,n,ConfBridge(${PAGE_CONF},,,admin_menu)
  696. exten => page,n,Hangup
  697.  
  698. ;--== end of [ext-intercom] ==--;
  699.  
  700.  
  701. [ext-intercom-users]
  702. include => ext-intercom-users-custom
  703. exten => *80001,1,Goto(ext-intercom,${EXTEN},1)
  704.  
  705. exten => *80002,1,Goto(ext-intercom,${EXTEN},1)
  706.  
  707. exten => *80003,1,Goto(ext-intercom,${EXTEN},1)
  708.  
  709. exten => *80004,1,Goto(ext-intercom,${EXTEN},1)
  710.  
  711. exten => *80005,1,Goto(ext-intercom,${EXTEN},1)
  712.  
  713. exten => *80006,1,Goto(ext-intercom,${EXTEN},1)
  714.  
  715. exten => *80007,1,Goto(ext-intercom,${EXTEN},1)
  716.  
  717. exten => *80008,1,Goto(ext-intercom,${EXTEN},1)
  718.  
  719. exten => *80009,1,Goto(ext-intercom,${EXTEN},1)
  720.  
  721. exten => *80010,1,Goto(ext-intercom,${EXTEN},1)
  722.  
  723. exten => *80011,1,Goto(ext-intercom,${EXTEN},1)
  724.  
  725. exten => *80429,1,Goto(ext-intercom,${EXTEN},1)
  726.  
  727. exten => *54,1,Answer
  728. exten => *54,n,Wait(1)
  729. exten => *54,n,Macro(user-callerid,)
  730. exten => *54,n,Set(DB(AMPUSER/${AMPUSER}/intercom)=enabled)
  731. exten => *54,n,Playback(intercom&enabled)
  732. exten => *54,n,Macro(hangupcall,)
  733.  
  734. exten => _*54.,1,Answer
  735. exten => _*54.,n,Wait(1)
  736. exten => _*54.,n,Macro(user-callerid,)
  737. exten => _*54.,n,GotoIf($["${DB(AMPUSER/${AMPUSER}/intercom/${EXTEN:3})}" = "allow" ]}?unset)
  738. exten => _*54.,n,GotoIf($[${DB_EXISTS(AMPUSER/${EXTEN:3}/device)} != 1]?invaliduser)
  739. exten => _*54.,n,Set(DB(AMPUSER/${AMPUSER}/intercom/${EXTEN:3})=allow)
  740. exten => _*54.,n,Playback(intercom&enabled&for&extension&number)
  741. exten => _*54.,n,SayDigits(${EXTEN:3})
  742. exten => _*54.,n,Macro(hangupcall,)
  743. exten => _*54.,n(unset),dbDeltree(AMPUSER/${AMPUSER}/intercom/${EXTEN:3})
  744. exten => _*54.,n,Playback(intercom&enabled&cancelled&for&extension&number)
  745. exten => _*54.,n,SayDigits(${EXTEN:3})
  746. exten => _*54.,n,Macro(hangupcall,)
  747. exten => _*54.,n(invaliduser),Playback(extension&number)
  748. exten => _*54.,n,SayDigits(${EXTEN:3})
  749. exten => _*54.,n,Playback(is&invalid)
  750. exten => _*54.,n,Macro(hangupcall,)
  751.  
  752. exten => *55,1,Answer
  753. exten => *55,n,Wait(1)
  754. exten => *55,n,Macro(user-callerid,)
  755. exten => *55,n,Set(DB(AMPUSER/${AMPUSER}/intercom)=disabled)
  756. exten => *55,n,Playback(intercom&disabled)
  757. exten => *55,n,Macro(hangupcall,)
  758.  
  759. exten => _*55.,1,Answer
  760. exten => _*55.,n,Wait(1)
  761. exten => _*55.,n,Macro(user-callerid,)
  762. exten => _*55.,n,GotoIf($["${DB(AMPUSER/${AMPUSER}/intercom/${EXTEN:3})}" = "deny" ]}?unset2)
  763. exten => _*55.,n,GotoIf($[${DB_EXISTS(AMPUSER/${EXTEN:3}/device)} != 1]?invaliduser2)
  764. exten => _*55.,n,Set(DB(AMPUSER/${AMPUSER}/intercom/${EXTEN:3})=deny)
  765. exten => _*55.,n,Playback(intercom&disabled&for&extension&number)
  766. exten => _*55.,n,SayDigits(${EXTEN:3})
  767. exten => _*55.,n,Macro(hangupcall,)
  768. exten => _*55.,n(unset2),dbDeltree(AMPUSER/${AMPUSER}/intercom/${EXTEN:3})
  769. exten => _*55.,n,Playback(intercom&disabled&cancelled&for&extension&number)
  770. exten => _*55.,n,SayDigits(${EXTEN:3})
  771. exten => _*55.,n,Macro(hangupcall,)
  772. exten => _*55.,n(invaliduser2),Playback(extension&number)
  773. exten => _*55.,n,SayDigits(${EXTEN:3})
  774. exten => _*55.,n,Playback(is&invalid)
  775. exten => _*55.,n,Macro(hangupcall,)
  776.  
  777. ;--== end of [ext-intercom-users] ==--;
  778.  
  779.  
  780. [macro-autoanswer]
  781. include => macro-autoanswer-custom
  782. exten => s,1,Set(DIAL=${DB(DEVICE/${ARG1}/dial)})
  783. exten => s,n,ExecIf($["${DIAL:0:3}" = "ZAP"]?Set(DIAL=DAHDI${DIAL:3}))
  784. exten => s,n,GotoIf($["${DB(DEVICE/${ARG1}/autoanswer/macro)}" != "" ]?macro)
  785. exten => s,n,Set(phone=${SIPPEER(${CUT(DIAL,/,2)}:useragent)})
  786. exten => s,n,ExecIf($["${phone:0:5}" = "Mitel"]?Set(CALLINFO=Call-Info: <sip:broadworks.net>\;answer-after=0))
  787. exten => s,n,ExecIf($["${phone:0:9}" = "Panasonic"]?Set(ALERTINFO=Alert-Info: Intercom))
  788. exten => s,n,ExecIf($["${phone:0:7}" = "Polycom"]?Set(ALERTINFO=Alert-Info: info=Auto Answer))
  789. exten => s,n,ExecIf($["${phone:0:6}" = "Digium"]?Set(ALERTINFO=Alert-Info: ring-answer))
  790. exten => s,n,ExecIf($["${ALERTINFO}" != ""]?SipAddHeader(${ALERTINFO}))
  791. exten => s,n,ExecIf($["${CALLINFO}" != ""]?SipAddHeader(${CALLINFO}))
  792. exten => s,n,ExecIf($["${SIPURI}" != ""]?Set(__SIP_URI_OPTIONS=${SIPURI}))
  793. exten => s,n+2(macro),Macro(${DB(DEVICE/${ARG1}/autoanswer/macro)},${ARG1})
  794.  
  795. ;--== end of [macro-autoanswer] ==--;
  796.  
  797.  
  798. [app-paging]
  799. include => app-paging-custom
  800. exten => ssetup,1,Set(_SIPURI=)
  801. exten => ssetup,n,Set(_ALERTINFO=Alert-Info: Ring Answer)
  802. exten => ssetup,n,Set(_CALLINFO=Call-Info: <uri>\;answer-after=0)
  803. exten => ssetup,n,Set(_SIPURI=intercom=true)
  804. exten => ssetup,n,Set(_DOPTIONS=A(beep))
  805. exten => ssetup,n,Set(_DTIME=5)
  806. exten => ssetup,n,Set(_ANSWERMACRO=)
  807. exten => ssetup,n,Set(PAGE_CONF=${EPOCH}${RAND(100,999)})
  808. exten => ssetup,n,Return()
  809.  
  810. exten => _PAGE.,1(SKIPCHECK),Macro(autoanswer,${EXTEN:4})
  811. exten => _PAGE.,n,Dial(${DIAL},${DTIME},${DOPTIONS})
  812. exten => _PAGE.,n(skipself),Hangup
  813.  
  814. exten => _SPAGE.,1(chanspy),ChanSpy(${SP_DEVICE}-,qW)
  815. exten => _SPAGE.,n,Hangup
  816.  
  817. ;--== end of [app-paging] ==--;
  818.  
  819.  
  820. [macro-parked-call]
  821. include => macro-parked-call-custom
  822. exten => s,1,AGI(parkfetch.agi,${ARG1})
  823. exten => s,n,GotoIf($["${REC_STATUS}" != "RECORDING"]?next)
  824. exten => s,n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)
  825. exten => s,n,Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT})
  826. exten => s,n,MixMonitor(${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MIXMON_FORMAT},a,${MIXMON_POST})
  827. exten => s,n(next),Set(CCSS_SETUP=TRUE)
  828. exten => s,n,Macro(user-callerid,)
  829. exten => s,n,GotoIf($["${ARG1}" = "" | ${DIALPLAN_EXISTS(${IF($["${ARG2}" = "default"]?parkedcalls:${ARG2})},${ARG1},1)} = 1]?pcall)
  830. exten => s,n,ResetCDR()
  831. exten => s,n,NoCDR()
  832. exten => s,n,Wait(1)
  833. exten => s,n,Playback(pbx-invalidpark)
  834. exten => s,n,Wait(1)
  835. exten => s,n,Hangup
  836. exten => s,n(pcall),Noop(User: ${CALLERID(all)} attempting to pick up Parked Call Slot ${ARG1})
  837. exten => s,n,ParkedCall(${ARG1},${ARG2})
  838.  
  839. exten => h,1,Macro(hangupcall,)
  840.  
  841. ;--== end of [macro-parked-call] ==--;
  842.  
  843.  
  844. [parkedcallstimeout]
  845. include => parkedcallstimeout-custom
  846. exten => _[0-9a-zA-Z*#].,1,Set(PARK_TARGET=${EXTEN})
  847. exten => _[0-9a-zA-Z*#].,n,GotoIf($["${REC_STATUS}" != "RECORDING"]?next)
  848. exten => _[0-9a-zA-Z*#].,n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)
  849. exten => _[0-9a-zA-Z*#].,n,MixMonitor(${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MIXMON_FORMAT},a,${MIXMON_POST})
  850. exten => _[0-9a-zA-Z*#].,n(next),Goto(park-return-routing,${PARKINGSLOT},1)
  851.  
  852. ;--== end of [parkedcallstimeout] ==--;
  853.  
  854.  
  855. [park-dial]
  856. include => park-dial-custom
  857. exten => t,1,Noop(WARNING: PARKRETURN to: [${EXTEN}] failed with: [${DIALSTATUS}]. Trying Alternate Dest On Parking Lot ${PARKINGSLOT})
  858. exten => t,n,Goto(park-orphan-routing,70,1)
  859.  
  860. exten => _[0-9a-zA-Z*#].,1,Noop(WARNING: PARKRETURN to: [${EXTEN}] failed with: [${DIALSTATUS}]. Trying Alternate Dest On Parking Lot ${PARKINGSLOT})
  861. exten => _[0-9a-zA-Z*#].,n,Goto(park-orphan-routing,70,1)
  862.  
  863. ;--== end of [park-dial] ==--;
  864.  
  865.  
  866. [park-orphan-routing]
  867. include => park-orphan-routing-custom
  868. exten => 70,1,Goto(app-blackhole,hangup,1)
  869.  
  870. ;--== end of [park-orphan-routing] ==--;
  871.  
  872.  
  873. [park-return-routing]
  874. include => park-return-routing-custom
  875. exten => 70,1,Set(PLOT=70)
  876. exten => 70,n,Goto(park-dial,${PARK_TARGET},1)
  877. exten => 70,n,Goto(app-blackhole,hangup,1)
  878.  
  879. exten => 71,1,Goto(70,1)
  880.  
  881. exten => 72,1,Goto(70,1)
  882.  
  883. exten => 73,1,Goto(70,1)
  884.  
  885. exten => 74,1,Goto(70,1)
  886.  
  887. exten => 75,1,Goto(70,1)
  888.  
  889. exten => 76,1,Goto(70,1)
  890.  
  891. exten => 77,1,Goto(70,1)
  892.  
  893. exten => 78,1,Goto(70,1)
  894.  
  895. ;--== end of [park-return-routing] ==--;
  896.  
  897.  
  898. [park-hints]
  899. include => park-hints-custom
  900. include => parkedcalls ; Default Lot
  901. exten => 71,1,Macro(parked-call,71,default)
  902. exten => 71,hint,park:71@parkedcalls
  903.  
  904. exten => 72,1,Macro(parked-call,72,default)
  905. exten => 72,hint,park:72@parkedcalls
  906.  
  907. exten => 73,1,Macro(parked-call,73,default)
  908. exten => 73,hint,park:73@parkedcalls
  909.  
  910. exten => 74,1,Macro(parked-call,74,default)
  911. exten => 74,hint,park:74@parkedcalls
  912.  
  913. exten => 75,1,Macro(parked-call,75,default)
  914. exten => 75,hint,park:75@parkedcalls
  915.  
  916. exten => 76,1,Macro(parked-call,76,default)
  917. exten => 76,hint,park:76@parkedcalls
  918.  
  919. exten => 77,1,Macro(parked-call,77,default)
  920. exten => 77,hint,park:77@parkedcalls
  921.  
  922. exten => 78,1,Macro(parked-call,78,default)
  923. exten => 78,hint,park:78@parkedcalls
  924.  
  925. exten => *85,1,Macro(parked-call,,default)
  926. exten => *85,hint,park:71@parkedcalls&park:72@parkedcalls&park:73@parkedcalls&park:74@parkedcalls&park:75@parkedcalls&park:76@parkedcalls&park:77@parkedcalls&park:78@parkedcalls
  927.  
  928. exten => *8570,1,Macro(parked-call,,default)
  929. exten => *8570,hint,park:71@parkedcalls&park:72@parkedcalls&park:73@parkedcalls&park:74@parkedcalls&park:75@parkedcalls&park:76@parkedcalls&park:77@parkedcalls&park:78@parkedcalls
  930.  
  931. ;--== end of [park-hints] ==--;
  932.  
  933.  
  934. [app-cf-busy-off]
  935. include => app-cf-busy-off-custom
  936. exten => *91,1,Answer
  937. exten => *91,n,Wait(1)
  938. exten => *91,n,Macro(user-callerid,)
  939. exten => *91,n,Set(fromext=${AMPUSER})
  940. exten => *91,n,Noop(Deleting: CFB/${fromext} ${DB_DELETE(CFB/${fromext})})
  941. exten => *91,n(hook_1),Playback(call-fwd-on-busy&de-activated)
  942. exten => *91,n,Macro(hangupcall,)
  943.  
  944. exten => _*91.,1,Answer
  945. exten => _*91.,n,Wait(1)
  946. exten => _*91.,n,Set(fromext=${EXTEN:3})
  947. exten => _*91.,n,Noop(Deleting: CFB/${fromext} ${DB_DELETE(CFB/${fromext})})
  948. exten => _*91.,n(hook_2),Playback(call-fwd-on-busy&for&extension)
  949. exten => _*91.,n,SayDigits(${fromext})
  950. exten => _*91.,n,Playback(cancelled)
  951. exten => _*91.,n,Macro(hangupcall,)
  952.  
  953. ;--== end of [app-cf-busy-off] ==--;
  954.  
  955.  
  956. [app-cf-busy-off-any]
  957. include => app-cf-busy-off-any-custom
  958. exten => *92,1,Answer
  959. exten => *92,n,Macro(user-callerid,)
  960. exten => *92,n,Wait(1)
  961. exten => *92,n,Read(fromext,please-enter-your&extension&then-press-pound,,,,)
  962. exten => *92,n,Set(fromext=${IF($["foo${fromext}"="foo"]?${AMPUSER}:${fromext})})
  963. exten => *92,n,Wait(1)
  964. exten => *92,n,Noop(Deleting: CFB/${fromext} ${DB_DELETE(CFB/${fromext})})
  965. exten => *92,n(hook_1),Playback(call-fwd-on-busy&for&extension)
  966. exten => *92,n,SayDigits(${fromext})
  967. exten => *92,n,Playback(cancelled)
  968. exten => *92,n,Macro(hangupcall,)
  969.  
  970. ;--== end of [app-cf-busy-off-any] ==--;
  971.  
  972.  
  973. [app-cf-busy-on]
  974. include => app-cf-busy-on-custom
  975. exten => *90,1,Answer
  976. exten => *90,n,Wait(1)
  977. exten => *90,n,Macro(user-callerid,)
  978. exten => *90,n,Set(fromext=${AMPUSER})
  979. exten => *90,n,GotoIf($["${fromext}"!=""]?startread)
  980. exten => *90,n,Playback(agent-loggedoff)
  981. exten => *90,n,Macro(hangupcall,)
  982. exten => *90,n(startread),Read(toext,ent-target-attendant&then-press-pound,,,,)
  983. exten => *90,n,GotoIf($["${toext}"=""]?startread)
  984. exten => *90,n,Wait(1)
  985. exten => *90,n,Set(DB(CFB/${fromext})=${toext})
  986. exten => *90,n(hook_1),Playback(call-fwd-on-busy&for&extension)
  987. exten => *90,n,SayDigits(${fromext})
  988. exten => *90,n,Playback(is-set-to)
  989. exten => *90,n,SayDigits(${toext})
  990. exten => *90,n,Macro(hangupcall,)
  991.  
  992. exten => _*90.,1,Answer
  993. exten => _*90.,n,Wait(1)
  994. exten => _*90.,n,Macro(user-callerid,)
  995. exten => _*90.,n,Set(fromext=${AMPUSER})
  996. exten => _*90.,n,Set(toext=${EXTEN:3})
  997. exten => _*90.,n,Set(DB(CFB/${fromext})=${toext})
  998. exten => _*90.,n(hook_2),Playback(call-fwd-on-busy&for&extension)
  999. exten => _*90.,n,SayDigits(${fromext})
  1000. exten => _*90.,n,Playback(is-set-to)
  1001. exten => _*90.,n,SayDigits(${toext})
  1002. exten => _*90.,n,Macro(hangupcall,)
  1003.  
  1004. ;--== end of [app-cf-busy-on] ==--;
  1005.  
  1006.  
  1007. [app-cf-busy-prompting-on]
  1008. include => app-cf-busy-prompting-on-custom
  1009. exten => *900,1,Answer
  1010. exten => *900,n,Wait(1)
  1011. exten => *900,n,Macro(user-callerid,)
  1012. exten => *900,n,Read(fromext,call-fwd-on-busy&please-enter-your&extension&then-press-pound,,,,)
  1013. exten => *900,n,Set(fromext=${IF($["${fromext}"=""]?${AMPUSER}:${fromext})})
  1014. exten => *900,n,Wait(1)
  1015. exten => *900,n(startread),Read(toext,ent-target-attendant&then-press-pound,,,,)
  1016. exten => *900,n,GotoIf($["${toext}"=""]?startread)
  1017. exten => *900,n,Wait(1)
  1018. exten => *900,n,Set(DB(CFB/${fromext})=${toext})
  1019. exten => *900,n(hook_1),Playback(call-fwd-on-busy&for&extension)
  1020. exten => *900,n,SayDigits(${fromext})
  1021. exten => *900,n,Playback(is-set-to)
  1022. exten => *900,n,SayDigits(${toext})
  1023. exten => *900,n,Macro(hangupcall,)
  1024.  
  1025. exten => _*900.,1,Answer
  1026. exten => _*900.,n,Wait(1)
  1027. exten => _*900.,n,Macro(user-callerid,)
  1028. exten => _*900.,n,Set(fromext=${AMPUSER})
  1029. exten => _*900.,n,Set(toext=${EXTEN:4})
  1030. exten => _*900.,n,Set(DB(CFB/${fromext})=${toext})
  1031. exten => _*900.,n(hook_2),Playback(call-fwd-on-busy&for&extension)
  1032. exten => _*900.,n,SayDigits(${fromext})
  1033. exten => _*900.,n,Playback(is-set-to)
  1034. exten => _*900.,n,SayDigits(${toext})
  1035. exten => _*900.,n,Macro(hangupcall,)
  1036.  
  1037. ;--== end of [app-cf-busy-prompting-on] ==--;
  1038.  
  1039.  
  1040. [app-cf-off]
  1041. include => app-cf-off-custom
  1042. exten => *73,1,Answer
  1043. exten => *73,n,Wait(1)
  1044. exten => *73,n,Macro(user-callerid,)
  1045. exten => *73,n,Set(fromext=${AMPUSER})
  1046. exten => *73,n,Noop(Deleting: CF/${fromext} ${DB_DELETE(CF/${fromext})})
  1047. exten => *73,n(hook_1),Playback(call-fwd-unconditional&de-activated)
  1048. exten => *73,n,Macro(hangupcall,)
  1049.  
  1050. exten => _*73.,1,Answer
  1051. exten => _*73.,n,Wait(1)
  1052. exten => _*73.,n,Set(fromext=${EXTEN:3})
  1053. exten => _*73.,n,Noop(Deleting: CF/${fromext} ${DB_DELETE(CF/${fromext})})
  1054. exten => _*73.,n(hook_2),Playback(call-fwd-unconditional&for&extension)
  1055. exten => _*73.,n,SayDigits(${fromext})
  1056. exten => _*73.,n,Playback(cancelled)
  1057. exten => _*73.,n,Macro(hangupcall,)
  1058.  
  1059. ;--== end of [app-cf-off] ==--;
  1060.  
  1061.  
  1062. [app-cf-off-any]
  1063. include => app-cf-off-any-custom
  1064. exten => *74,1,Answer
  1065. exten => *74,n,Macro(user-callerid,)
  1066. exten => *74,n,Wait(1)
  1067. exten => *74,n,Read(fromext,please-enter-your&extension&then-press-pound,,,,)
  1068. exten => *74,n,Set(fromext=${IF($["foo${fromext}"="foo"]?${AMPUSER}:${fromext})})
  1069. exten => *74,n,Wait(1)
  1070. exten => *74,n,Noop(Deleting: CF/${fromext} ${DB_DELETE(CF/${fromext})})
  1071. exten => *74,n(hook_1),Playback(call-fwd-unconditional&for&extension)
  1072. exten => *74,n,SayDigits(${fromext})
  1073. exten => *74,n,Playback(cancelled)
  1074. exten => *74,n,Macro(hangupcall,)
  1075.  
  1076. ;--== end of [app-cf-off-any] ==--;
  1077.  
  1078.  
  1079. [app-cf-on]
  1080. include => app-cf-on-custom
  1081. exten => *72,1,Answer
  1082. exten => *72,n,Wait(1)
  1083. exten => *72,n,Macro(user-callerid,)
  1084. exten => *72,n,Set(fromext=${AMPUSER})
  1085. exten => *72,n,GotoIf($["${fromext}"!=""]?startread)
  1086. exten => *72,n,Playback(agent-loggedoff)
  1087. exten => *72,n,Macro(hangupcall,)
  1088. exten => *72,n(startread),Read(toext,ent-target-attendant&then-press-pound,,,,)
  1089. exten => *72,n,GotoIf($["foo${toext}"="foo"]?startread)
  1090. exten => *72,n,Wait(1)
  1091. exten => *72,n,Set(DB(CF/${fromext})=${toext})
  1092. exten => *72,n(hook_1),Playback(call-fwd-unconditional&for&extension)
  1093. exten => *72,n,SayDigits(${fromext})
  1094. exten => *72,n,Playback(is-set-to)
  1095. exten => *72,n,SayDigits(${toext})
  1096. exten => *72,n,Macro(hangupcall,)
  1097.  
  1098. exten => _*72.,1,Answer
  1099. exten => _*72.,n,Wait(1)
  1100. exten => _*72.,n,Macro(user-callerid,)
  1101. exten => _*72.,n,Set(fromext=${AMPUSER})
  1102. exten => _*72.,n,Set(toext=${EXTEN:3})
  1103. exten => _*72.,n,Set(DB(CF/${fromext})=${toext})
  1104. exten => _*72.,n(hook_2),Playback(call-fwd-unconditional&for&extension)
  1105. exten => _*72.,n,SayDigits(${fromext})
  1106. exten => _*72.,n,Playback(is-set-to)
  1107. exten => _*72.,n,SayDigits(${toext})
  1108. exten => _*72.,n,Macro(hangupcall,)
  1109.  
  1110. ;--== end of [app-cf-on] ==--;
  1111.  
  1112.  
  1113. [app-cf-prompting-on]
  1114. include => app-cf-prompting-on-custom
  1115. exten => *720,1,Answer
  1116. exten => *720,n,Wait(1)
  1117. exten => *720,n,Macro(user-callerid,)
  1118. exten => *720,n,Read(fromext,call-fwd-unconditional&please-enter-your&extension&then-press-pound,,,,)
  1119. exten => *720,n,Set(fromext=${IF($["foo${fromext}"="foo"]?${AMPUSER}:${fromext})})
  1120. exten => *720,n,Wait(1)
  1121. exten => *720,n(startread),Read(toext,ent-target-attendant&then-press-pound,,,,)
  1122. exten => *720,n,GotoIf($["foo${toext}"="foo"]?startread)
  1123. exten => *720,n,Wait(1)
  1124. exten => *720,n,Set(DB(CF/${fromext})=${toext})
  1125. exten => *720,n(hook_1),Playback(call-fwd-unconditional&for&extension)
  1126. exten => *720,n,SayDigits(${fromext})
  1127. exten => *720,n,Playback(is-set-to)
  1128. exten => *720,n,SayDigits(${toext})
  1129. exten => *720,n,Macro(hangupcall,)
  1130.  
  1131. exten => _*720.,1,Answer
  1132. exten => _*720.,n,Wait(1)
  1133. exten => _*720.,n,Macro(user-callerid,)
  1134. exten => _*720.,n,Set(fromext=${AMPUSER})
  1135. exten => _*720.,n,Set(toext=${EXTEN:4})
  1136. exten => _*720.,n,Set(DB(CF/${fromext})=${toext})
  1137. exten => _*720.,n(hook_2),Playback(call-fwd-unconditional&for&extension)
  1138. exten => _*720.,n,SayDigits(${fromext})
  1139. exten => _*720.,n,Playback(is-set-to)
  1140. exten => _*720.,n,SayDigits(${toext})
  1141. exten => _*720.,n,Macro(hangupcall,)
  1142.  
  1143. ;--== end of [app-cf-prompting-on] ==--;
  1144.  
  1145.  
  1146. [app-cf-unavailable-off]
  1147. include => app-cf-unavailable-off-custom
  1148. exten => *53,1,Answer
  1149. exten => *53,n,Wait(1)
  1150. exten => *53,n,Macro(user-callerid,)
  1151. exten => *53,n,Set(fromext=${AMPUSER})
  1152. exten => *53,n,Noop(Deleting: CFU/${fromext} ${DB_DELETE(CFU/${fromext})})
  1153. exten => *53,n(hook_1),Playback(call-fwd-no-ans&de-activated)
  1154. exten => *53,n,Macro(hangupcall,)
  1155.  
  1156. exten => _*53.,1,Answer
  1157. exten => _*53.,n,Wait(1)
  1158. exten => _*53.,n,Set(fromext=${EXTEN:3})
  1159. exten => _*53.,n,Noop(Deleting: CFU/${fromext} ${DB_DELETE(CFU/${fromext})})
  1160. exten => _*53.,n(hook_2),Playback(call-fwd-no-ans&for&extension)
  1161. exten => _*53.,n,SayDigits(${fromext})
  1162. exten => _*53.,n,Playback(cancelled)
  1163. exten => _*53.,n,Macro(hangupcall,)
  1164.  
  1165. ;--== end of [app-cf-unavailable-off] ==--;
  1166.  
  1167.  
  1168. [app-cf-unavailable-on]
  1169. include => app-cf-unavailable-on-custom
  1170. exten => *52,1,Answer
  1171. exten => *52,n,Wait(1)
  1172. exten => *52,n,Macro(user-callerid,)
  1173. exten => *52,n,Set(fromext=${AMPUSER})
  1174. exten => *52,n,GotoIf($["${fromext}"!=""]?startread)
  1175. exten => *52,n,Playback(agent-loggedoff)
  1176. exten => *52,n,Macro(hangupcall,)
  1177. exten => *52,n(startread),Read(toext,ent-target-attendant&then-press-pound,,,,)
  1178. exten => *52,n,GotoIf($["${toext}"=""]?startread)
  1179. exten => *52,n,Wait(1)
  1180. exten => *52,n,Set(DB(CFU/${fromext})=${toext})
  1181. exten => *52,n(hook_1),Playback(call-fwd-no-ans&for&extension)
  1182. exten => *52,n,SayDigits(${fromext})
  1183. exten => *52,n,Playback(is-set-to)
  1184. exten => *52,n,SayDigits(${toext})
  1185. exten => *52,n,Macro(hangupcall,)
  1186.  
  1187. exten => _*52.,1,Answer
  1188. exten => _*52.,n,Wait(1)
  1189. exten => _*52.,n,Macro(user-callerid,)
  1190. exten => _*52.,n,Set(fromext=${AMPUSER})
  1191. exten => _*52.,n,Set(toext=${EXTEN:3})
  1192. exten => _*52.,n,Set(DB(CFU/${fromext})=${toext})
  1193. exten => _*52.,n(hook_2),Playback(call-fwd-no-ans&for&extension)
  1194. exten => _*52.,n,SayDigits(${fromext})
  1195. exten => _*52.,n,Playback(is-set-to)
  1196. exten => _*52.,n,SayDigits(${toext})
  1197. exten => _*52.,n,Macro(hangupcall,)
  1198.  
  1199. ;--== end of [app-cf-unavailable-on] ==--;
  1200.  
  1201.  
  1202. [app-cf-unavailable-prompt-on]
  1203. include => app-cf-unavailable-prompt-on-custom
  1204. exten => *520,1,Answer
  1205. exten => *520,n,Wait(1)
  1206. exten => *520,n,Macro(user-callerid,)
  1207. exten => *520,n,Read(fromext,call-fwd-no-ans&please-enter-your&extension&then-press-pound,,,,)
  1208. exten => *520,n,Set(fromext=${IF($["${fromext}"=""]?${AMPUSER}:${fromext})})
  1209. exten => *520,n,Wait(1)
  1210. exten => *520,n(startread),Read(toext,ent-target-attendant&then-press-pound,,,,)
  1211. exten => *520,n,GotoIf($["${toext}"=""]?startread)
  1212. exten => *520,n,Wait(1)
  1213. exten => *520,n,Set(DB(CFU/${fromext})=${toext})
  1214. exten => *520,n(hook_1),Playback(call-fwd-no-ans&for&extension)
  1215. exten => *520,n,SayDigits(${fromext})
  1216. exten => *520,n,Playback(is-set-to)
  1217. exten => *520,n,SayDigits(${toext})
  1218. exten => *520,n,Macro(hangupcall,)
  1219.  
  1220. exten => _*520.,1,Answer
  1221. exten => _*520.,n,Wait(1)
  1222. exten => _*520.,n,Macro(user-callerid,)
  1223. exten => _*520.,n,Set(fromext=${AMPUSER})
  1224. exten => _*520.,n,Set(toext=${EXTEN:4})
  1225. exten => _*520.,n,Set(DB(CFU/${fromext})=${toext})
  1226. exten => _*520.,n(hook_2),Playback(call-fwd-no-ans&for&extension)
  1227. exten => _*520.,n,SayDigits(${fromext})
  1228. exten => _*520.,n,Playback(is-set-to)
  1229. exten => _*520.,n,SayDigits(${toext})
  1230. exten => _*520.,n,Macro(hangupcall,)
  1231.  
  1232. ;--== end of [app-cf-unavailable-prompt-on] ==--;
  1233.  
  1234.  
  1235. [app-cf-toggle]
  1236. include => app-cf-toggle-custom
  1237. exten => *740,1,Answer
  1238. exten => *740,n,Wait(1)
  1239. exten => *740,n,Macro(user-callerid,)
  1240. exten => *740,n,Set(fromext=${AMPUSER})
  1241. exten => *740,n,GotoIf($["${DB(CF/${fromext})}" = ""]?activate:deactivate)
  1242. exten => *740,n(activate),Read(toext,ent-target-attendant&then-press-pound,,,,)
  1243. exten => *740,n,GotoIf($["${toext}"=""]?activate)
  1244. exten => *740,n,Wait(1)
  1245. exten => *740,n(toext),Set(DB(CF/${fromext})=${toext})
  1246. exten => *740,n(hook_on),Playback(call-fwd-unconditional&for&extension)
  1247. exten => *740,n,SayDigits(${fromext})
  1248. exten => *740,n,Playback(is-set-to)
  1249. exten => *740,n,SayDigits(${toext})
  1250. exten => *740,n,Macro(hangupcall,)
  1251. exten => *740,n(setdirect),Answer
  1252. exten => *740,n,Wait(1)
  1253. exten => *740,n,Macro(user-callerid,)
  1254. exten => *740,n,Goto(toext)
  1255. exten => *740,n(deactivate),Noop(Deleting: CF/${fromext} ${DB_DELETE(CF/${fromext})})
  1256. exten => *740,n(hook_off),Playback(call-fwd-unconditional&de-activated)
  1257. exten => *740,n,Macro(hangupcall,)
  1258.  
  1259. ;--== end of [app-cf-toggle] ==--;
  1260.  
  1261.  
  1262. [app-campon-cancel]
  1263. include => app-campon-cancel-custom
  1264. exten => *83,1,Answer
  1265. exten => *83,n,Set(CCSS_SETUP=TRUE)
  1266. exten => *83,n,Macro(user-callerid,)
  1267. exten => *83,n,CallCompletionCancel()
  1268. exten => *83,n,Playback(beep)
  1269. exten => *83,n,Macro(hangupcall,)
  1270.  
  1271. ;--== end of [app-campon-cancel] ==--;
  1272.  
  1273.  
  1274. [app-campon-request]
  1275. include => app-campon-request-custom
  1276. exten => *82,1,Answer
  1277. exten => *82,n,Set(CCSS_SETUP=TRUE)
  1278. exten => *82,n,Macro(user-callerid,)
  1279. exten => *82,n,CallCompletionRequest()
  1280. exten => *82,n,Playback(beep)
  1281. exten => *82,n,Macro(hangupcall,)
  1282.  
  1283. ;--== end of [app-campon-request] ==--;
  1284.  
  1285.  
  1286. [app-campon-toggle]
  1287. include => app-campon-toggle-custom
  1288. exten => *84,1,Answer
  1289. exten => *84,n,Set(CCSS_SETUP=TRUE)
  1290. exten => *84,n,Macro(user-callerid,)
  1291. exten => *84,n,ExecIf($["${EXTENSION_STATE(*84${AMPUSER}@ext-local)}" = "INUSE"]?CallCompletionCancel():CallCompletionRequest())
  1292. exten => *84,n,Playback(beep)
  1293. exten => *84,n,Macro(hangupcall,)
  1294.  
  1295. ;--== end of [app-campon-toggle] ==--;
  1296.  
  1297.  
  1298. [ext-local]
  1299. include => ext-local-custom
  1300. exten => *84001,1,Goto(app-campon-toggle,*84,1)
  1301. exten => *84001,hint,ccss:SIP/001
  1302.  
  1303. exten => *84002,1,Goto(app-campon-toggle,*84,1)
  1304. exten => *84002,hint,ccss:SIP/002
  1305.  
  1306. exten => *84003,1,Goto(app-campon-toggle,*84,1)
  1307. exten => *84003,hint,ccss:SIP/003
  1308.  
  1309. exten => *84004,1,Goto(app-campon-toggle,*84,1)
  1310. exten => *84004,hint,ccss:SIP/004
  1311.  
  1312. exten => *84005,1,Goto(app-campon-toggle,*84,1)
  1313. exten => *84005,hint,ccss:SIP/005
  1314.  
  1315. exten => *84006,1,Goto(app-campon-toggle,*84,1)
  1316. exten => *84006,hint,ccss:SIP/006
  1317.  
  1318. exten => *84007,1,Goto(app-campon-toggle,*84,1)
  1319. exten => *84007,hint,ccss:SIP/007
  1320.  
  1321. exten => *84008,1,Goto(app-campon-toggle,*84,1)
  1322. exten => *84008,hint,ccss:SIP/008
  1323.  
  1324. exten => *84009,1,Goto(app-campon-toggle,*84,1)
  1325. exten => *84009,hint,ccss:SIP/009
  1326.  
  1327. exten => *84010,1,Goto(app-campon-toggle,*84,1)
  1328. exten => *84010,hint,ccss:SIP/010
  1329.  
  1330. exten => *84011,1,Goto(app-campon-toggle,*84,1)
  1331. exten => *84011,hint,ccss:SIP/011
  1332.  
  1333. exten => *84429,1,Goto(app-campon-toggle,*84,1)
  1334. exten => *84429,hint,ccss:SIP/429
  1335.  
  1336. exten => 001,1,Set(__RINGTIMER=${IF($[${DB(AMPUSER/001/ringtimer)} > 0]?${DB(AMPUSER/001/ringtimer)}:${RINGTIMER_DEFAULT})})
  1337. exten => 001,n,Macro(exten-vm,novm,001,0,0,0)
  1338. exten => 001,n(dest),Set(__PICKUPMARK=)
  1339. exten => 001,n,Goto(${IVR_CONTEXT},return,1)
  1340. exten => 001,hint,SIP/001,CustomPresence:001
  1341.  
  1342. exten => 002,1,Set(__RINGTIMER=${IF($[${DB(AMPUSER/002/ringtimer)} > 0]?${DB(AMPUSER/002/ringtimer)}:${RINGTIMER_DEFAULT})})
  1343. exten => 002,n,Macro(exten-vm,novm,002,0,0,0)
  1344. exten => 002,n(dest),Set(__PICKUPMARK=)
  1345. exten => 002,n,Goto(${IVR_CONTEXT},return,1)
  1346. exten => 002,hint,SIP/002,CustomPresence:002
  1347.  
  1348. exten => 003,1,Set(__RINGTIMER=${IF($[${DB(AMPUSER/003/ringtimer)} > 0]?${DB(AMPUSER/003/ringtimer)}:${RINGTIMER_DEFAULT})})
  1349. exten => 003,n,Macro(exten-vm,novm,003,0,0,0)
  1350. exten => 003,n(dest),Set(__PICKUPMARK=)
  1351. exten => 003,n,Goto(${IVR_CONTEXT},return,1)
  1352. exten => 003,hint,SIP/003,CustomPresence:003
  1353.  
  1354. exten => 004,1,Set(__RINGTIMER=${IF($[${DB(AMPUSER/004/ringtimer)} > 0]?${DB(AMPUSER/004/ringtimer)}:${RINGTIMER_DEFAULT})})
  1355. exten => 004,n,Macro(exten-vm,novm,004,0,0,0)
  1356. exten => 004,n(dest),Set(__PICKUPMARK=)
  1357. exten => 004,n,Goto(${IVR_CONTEXT},return,1)
  1358. exten => 004,hint,SIP/004,CustomPresence:004
  1359.  
  1360. exten => 005,1,Set(__RINGTIMER=${IF($[${DB(AMPUSER/005/ringtimer)} > 0]?${DB(AMPUSER/005/ringtimer)}:${RINGTIMER_DEFAULT})})
  1361. exten => 005,n,Macro(exten-vm,novm,005,0,0,0)
  1362. exten => 005,n(dest),Set(__PICKUPMARK=)
  1363. exten => 005,n,Goto(${IVR_CONTEXT},return,1)
  1364. exten => 005,hint,SIP/005,CustomPresence:005
  1365.  
  1366. exten => 006,1,Set(__RINGTIMER=${IF($[${DB(AMPUSER/006/ringtimer)} > 0]?${DB(AMPUSER/006/ringtimer)}:${RINGTIMER_DEFAULT})})
  1367. exten => 006,n,Macro(exten-vm,novm,006,0,0,0)
  1368. exten => 006,n(dest),Set(__PICKUPMARK=)
  1369. exten => 006,n,Goto(${IVR_CONTEXT},return,1)
  1370. exten => 006,hint,SIP/006,CustomPresence:006
  1371.  
  1372. exten => 007,1,Set(__RINGTIMER=${IF($[${DB(AMPUSER/007/ringtimer)} > 0]?${DB(AMPUSER/007/ringtimer)}:${RINGTIMER_DEFAULT})})
  1373. exten => 007,n,Macro(exten-vm,novm,007,0,0,0)
  1374. exten => 007,n(dest),Set(__PICKUPMARK=)
  1375. exten => 007,n,Goto(${IVR_CONTEXT},return,1)
  1376. exten => 007,hint,SIP/007,CustomPresence:007
  1377.  
  1378. exten => 008,1,Set(__RINGTIMER=${IF($[${DB(AMPUSER/008/ringtimer)} > 0]?${DB(AMPUSER/008/ringtimer)}:${RINGTIMER_DEFAULT})})
  1379. exten => 008,n,Macro(exten-vm,novm,008,0,0,0)
  1380. exten => 008,n(dest),Set(__PICKUPMARK=)
  1381. exten => 008,n,Goto(${IVR_CONTEXT},return,1)
  1382. exten => 008,hint,SIP/008,CustomPresence:008
  1383.  
  1384. exten => 009,1,Set(__RINGTIMER=${IF($[${DB(AMPUSER/009/ringtimer)} > 0]?${DB(AMPUSER/009/ringtimer)}:${RINGTIMER_DEFAULT})})
  1385. exten => 009,n,Macro(exten-vm,novm,009,0,0,0)
  1386. exten => 009,n(dest),Set(__PICKUPMARK=)
  1387. exten => 009,n,Goto(${IVR_CONTEXT},return,1)
  1388. exten => 009,hint,SIP/009,CustomPresence:009
  1389.  
  1390. exten => 010,1,Set(__RINGTIMER=${IF($[${DB(AMPUSER/010/ringtimer)} > 0]?${DB(AMPUSER/010/ringtimer)}:${RINGTIMER_DEFAULT})})
  1391. exten => 010,n,Macro(exten-vm,novm,010,0,0,0)
  1392. exten => 010,n(dest),Set(__PICKUPMARK=)
  1393. exten => 010,n,Goto(${IVR_CONTEXT},return,1)
  1394. exten => 010,hint,SIP/010,CustomPresence:010
  1395.  
  1396. exten => 011,1,Set(__RINGTIMER=${IF($[${DB(AMPUSER/011/ringtimer)} > 0]?${DB(AMPUSER/011/ringtimer)}:${RINGTIMER_DEFAULT})})
  1397. exten => 011,n,Macro(exten-vm,novm,011,0,0,0)
  1398. exten => 011,n(dest),Set(__PICKUPMARK=)
  1399. exten => 011,n,Goto(${IVR_CONTEXT},return,1)
  1400. exten => 011,hint,SIP/011,CustomPresence:011
  1401.  
  1402. exten => 429,1,Set(__RINGTIMER=${IF($[${DB(AMPUSER/429/ringtimer)} > 0]?${DB(AMPUSER/429/ringtimer)}:${RINGTIMER_DEFAULT})})
  1403. exten => 429,n,Macro(exten-vm,novm,429,0,0,0)
  1404. exten => 429,n(dest),Set(__PICKUPMARK=)
  1405. exten => 429,n,Goto(${IVR_CONTEXT},return,1)
  1406. exten => 429,hint,SIP/429,CustomPresence:429
  1407.  
  1408. exten => vmret,1,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?playret)
  1409. exten => vmret,n,Hangup
  1410. exten => vmret,n(playret),Playback(exited-vm-will-be-transfered&silence/1)
  1411. exten => vmret,n,Goto(${IVR_CONTEXT},return,1)
  1412.  
  1413. exten => h,1,Macro(hangupcall,)
  1414.  
  1415. ;--== end of [ext-local] ==--;
  1416.  
  1417.  
  1418. [sub-ccss]
  1419. include => sub-ccss-custom
  1420. exten => s,1,ExecIf($[${LEN(${CCSS_SETUP})}]?Return())
  1421. exten => s,n,Set(CCSS_SETUP=TRUE)
  1422. exten => s,n(monitor),GosubIf($[${LEN(${DB(AMPUSER/${ARG2}/ccss/cc_monitor_policy)})}]?monitor_config,1(${ARG1},${ARG2}):monitor_default,1(${ARG1},${ARG2}))
  1423. exten => s,n(agent),GosubIf($[${LEN(${DB(AMPUSER/${AMPUSER}/ccss/cc_agent_policy)})}]?agent_config,1():agent_default,1())
  1424. exten => s,n,Set(DB(AMPUSER/${AMPUSER}/ccss/last_number)=${ARG2})
  1425. exten => s,n,Return(${GOSUB_RETVAL})
  1426.  
  1427. exten => monitor_config,1,Set(CALLCOMPLETION(cc_monitor_policy)=${DB(AMPUSER/${ARG2}/ccss/cc_monitor_policy)})
  1428. exten => monitor_config,n,GotoIf($["CALLCOMPLETION(cc_monitor_policy)" != "never"]?set_monitor)
  1429. exten => monitor_config,n,StackPop()
  1430. exten => monitor_config,n,Return(FALSE)
  1431. exten => monitor_config,n(set_monitor),Set(CALLCOMPLETION(cc_max_monitors)=${DB(AMPUSER/${ARG2}/ccss/max_monitors)})
  1432. exten => monitor_config,n,Return(TRUE)
  1433.  
  1434. exten => monitor_default,1,GotoIf($["${DB(AMPUSER/${ARG2}/cidname)}" != ""]?is_exten)
  1435. exten => monitor_default,n,StackPop()
  1436. exten => monitor_default,n,Return(FALSE)
  1437. exten => monitor_default,n(is_exten),Set(CALLCOMPLETION(cc_monitor_policy)=generic)
  1438. exten => monitor_default,n,Set(CALLCOMPLETION(cc_max_monitors)=5)
  1439. exten => monitor_default,n,Return(TRUE)
  1440.  
  1441. exten => agent_config,1,Set(CALLCOMPLETION(cc_agent_policy)=${DB(AMPUSER/${AMPUSER}/ccss/cc_agent_policy)})
  1442. exten => agent_config,n,Set(CALLCOMPLETION(cc_offer_timer)=${DB(AMPUSER/${AMPUSER}/ccss/cc_offer_timer)})
  1443. exten => agent_config,n,Set(CALLCOMPLETION(ccbs_available_timer)=${DB(AMPUSER/${AMPUSER}/ccss/ccbs_available_timer)})
  1444. exten => agent_config,n,Set(CALLCOMPLETION(ccnr_available_timer)=${DB(AMPUSER/${AMPUSER}/ccss/ccnr_available_timer)})
  1445. exten => agent_config,n,Set(CALLCOMPLETION(cc_callback_macro)=ccss-default)
  1446. exten => agent_config,n,ExecIf($["${CALLCOMPLETION(cc_agent_policy)}" = "generic"]?Set(CALLCOMPLETION(cc_recall_timer)=${DB(AMPUSER/${AMPUSER}/ccss/cc_recall_timer)}))
  1447. exten => agent_config,n,ExecIf($["${CALLCOMPLETION(cc_agent_policy)}" = "generic"]?Set(CALLCOMPLETION(cc_max_agents)=${DB(AMPUSER/${AMPUSER}/ccss/cc_max_agents)}))
  1448. exten => agent_config,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/ccss/cc_agent_dialstring)}" != ""]?Set(CALLCOMPLETION(cc_agent_dialstring)=Local/${AMPUSER}_${CALLERID(dnid)}@from-ccss-${DB(AMPUSER/${AMPUSER}/ccss/cc_agent_dialstring)}))
  1449. exten => agent_config,n,Set(CALLCOMPLETION(cc_callback_macro)=ccss-default)
  1450. exten => agent_config,n,Return()
  1451.  
  1452. exten => agent_default,1,Set(CALLCOMPLETION(cc_agent_policy)=generic)
  1453. exten => agent_default,n,Set(CALLCOMPLETION(cc_offer_timer)=30)
  1454. exten => agent_default,n,Set(CALLCOMPLETION(ccbs_available_timer)=4800)
  1455. exten => agent_default,n,Set(CALLCOMPLETION(ccnr_available_timer)=7200)
  1456. exten => agent_default,n,Set(CALLCOMPLETION(cc_callback_macro)=ccss-default)
  1457. exten => agent_default,n,Set(CALLCOMPLETION(cc_recall_timer)=15)
  1458. exten => agent_default,n,Set(CALLCOMPLETION(cc_agent_dialstring)=Local/${AMPUSER}_${CALLERID(dnid)}@from-ccss-extension)
  1459. exten => agent_default,n,Return(TRUE)
  1460.  
  1461. ;--== end of [sub-ccss] ==--;
  1462.  
  1463.  
  1464. [macro-ccss-default]
  1465. include => macro-ccss-default-custom
  1466. exten => s,1,Playback(beep&calling&extension)
  1467. exten => s,n,SayDigits(${CC_EXTEN})
  1468. exten => s,n(siprm),SIPRemoveHeader(${CC_HEADER})
  1469. exten => s,n,Set(CALLERID(dnid)=${CC_EXTEN})
  1470. exten => s,n,Set(CALLERID(name)=${CALLERID(name)})
  1471. exten => s,n,MacroExit()
  1472.  
  1473. ;--== end of [macro-ccss-default] ==--;
  1474.  
  1475.  
  1476. [from-ccss-internal]
  1477. include => from-ccss-internal-custom
  1478. exten => _X._X.,1,Gosub(sub-from-ccss,s,1(${CUT(EXTEN,_,2)}))
  1479. exten => _X._X.,n(no_alert),Goto(from-internal,${CUT(EXTEN,_,1)},1)
  1480.  
  1481. ;--== end of [from-ccss-internal] ==--;
  1482.  
  1483.  
  1484. [from-ccss-extension]
  1485. include => from-ccss-extension-custom
  1486. exten => _X._X.,1,Gosub(sub-from-ccss,s,1(${CUT(EXTEN,_,2)}))
  1487. exten => _X._X.,n,Goto(ext-local,${CUT(EXTEN,_,1)},1)
  1488.  
  1489. ;--== end of [from-ccss-extension] ==--;
  1490.  
  1491.  
  1492. [sub-from-ccss]
  1493. include => sub-from-ccss-custom
  1494. exten => s,1,Macro(blkvm-set,)
  1495. exten => s,n,Set(__CC_RECALL=1)
  1496. exten => s,n,Set(CALLERID(name)=${IF($[${LEN(${DB(AMPUSER/${ARG1}/cidname)})}]?${DB(AMPUSER/${ARG1}/cidname)}:CALLBACK)})
  1497. exten => s,n,Set(CALLERID(number)=${ARG1})
  1498. exten => s,n,Return()
  1499. exten => s,n,SIPAddHeader(Alert-Info: ${CC_HEADER})
  1500. exten => s,n,Return()
  1501.  
  1502. ;--== end of [sub-from-ccss] ==--;
  1503.  
  1504.  
  1505. [app-userlogonoff]
  1506. include => app-userlogonoff-custom
  1507. exten => *12,1,Macro(user-logoff,)
  1508. exten => *12,n(hook_off),Hangup
  1509.  
  1510. exten => *11,1,Macro(user-logon,)
  1511. exten => *11,n(hook_on_1),Hangup
  1512.  
  1513. exten => _*11.,1,Macro(user-logon,${EXTEN:3},)
  1514. exten => _*11.,n(hook_on_2),Hangup
  1515.  
  1516. ;--== end of [app-userlogonoff] ==--;
  1517.  
  1518.  
  1519. [ext-local-confirm]
  1520. include => ext-local-confirm-custom
  1521. exten => _LC-.,1,ExecIf($["${ALERT_INFO}"!=""]?SIPAddHeader(Alert-Info: ${ALERT_INFO}))
  1522. exten => _LC-.,n,Dial(${DB(DEVICE/${EXTEN:3}/dial)},${RT},${DIAL_OPTIONS}M(auto-confirm^${RG_IDX}))
  1523.  
  1524. ;--== end of [ext-local-confirm] ==--;
  1525.  
  1526.  
  1527. [findmefollow-ringallv2]
  1528. include => findmefollow-ringallv2-custom
  1529. exten => _FMPR-.,1,NoCDR()
  1530. exten => _FMPR-.,n,Set(RingGroupMethod=)
  1531. exten => _FMPR-.,n,Set(USE_CONFIRMATION=)
  1532. exten => _FMPR-.,n,Set(RINGGROUP_INDEX=)
  1533. exten => _FMPR-.,n,Macro(simple-dial,${EXTEN:5},${FMREALPRERING})
  1534. exten => _FMPR-.,n,ExecIf($["${DIALSTATUS}" = "BUSY"]?Set(SHARED(FM_DND,${FMUNIQUE})=DND))
  1535. exten => _FMPR-.,n,Hangup
  1536.  
  1537. exten => _FMGL-.,1,NoCDR()
  1538. exten => _FMGL-.,n,Set(ENDLOOP=$[${EPOCH} + ${FMPRERING} + 2])
  1539. exten => _FMGL-.,n(start),GotoIf($["${SHARED(FM_DND,${FMUNIQUE})}" = "DND"]?dodnd)
  1540. exten => _FMGL-.,n,Wait(1)
  1541. exten => _FMGL-.,n,GotoIf($[${EPOCH} < ${ENDLOOP}]?start)
  1542. exten => _FMGL-.,n,Set(SHARED(FM_DND,${FMUNIQUE})=)
  1543. exten => _FMGL-.,n(dodial),Macro(dial,${FMGRPTIME},${DIAL_OPTIONS},${EXTEN:5})
  1544. exten => _FMGL-.,n,Hangup
  1545. exten => _FMGL-.,n+10(dodnd),Set(SHARED(FM_DND,${FMUNIQUE})=)
  1546. exten => _FMGL-.,n,GotoIf($["${FMPRIME}" = "FALSE"]?dodial)
  1547. exten => _FMGL-.,n,Hangup
  1548.  
  1549. ;--== end of [findmefollow-ringallv2] ==--;
  1550.  
  1551.  
  1552. [app-pickup]
  1553. include => app-pickup-custom
  1554. exten => _**.,1,Macro(user-callerid,)
  1555. exten => _**.,n,Set(PICKUP_EXTEN=${AMPUSER})
  1556. exten => _**.,n,Pickup(${EXTEN:2}&${EXTEN:2}@PICKUPMARK)
  1557. exten => _**.,n,Hangup
  1558.  
  1559. exten => _***80.,1,Macro(user-callerid,)
  1560. exten => _***80.,n,Set(PICKUP_EXTEN=${AMPUSER})
  1561. exten => _***80.,n,Pickup(${EXTEN:5}&${EXTEN:5}@PICKUPMARK)
  1562. exten => _***80.,n,Hangup
  1563.  
  1564. ;--== end of [app-pickup] ==--;
  1565.  
  1566.  
  1567. [app-zapbarge]
  1568. include => app-zapbarge-custom
  1569. exten => 888,1,Macro(user-callerid,)
  1570. exten => 888,n,Set(GROUP()=${CALLERID(number)})
  1571. exten => 888,n,Answer
  1572. exten => 888,n,Wait(1)
  1573. exten => 888,n,DAHDIBarge()
  1574. exten => 888,n,Hangup
  1575.  
  1576. ;--== end of [app-zapbarge] ==--;
  1577.  
  1578.  
  1579. [app-chanspy]
  1580. include => app-chanspy-custom
  1581. exten => 555,1,Macro(user-callerid,)
  1582. exten => 555,n,Answer
  1583. exten => 555,n,Wait(1)
  1584. exten => 555,n,ChanSpy()
  1585. exten => 555,n,Hangup
  1586.  
  1587. ;--== end of [app-chanspy] ==--;
  1588.  
  1589.  
  1590. [ext-test]
  1591. include => ext-test-custom
  1592. exten => 7777,1,Macro(user-callerid,)
  1593. exten => 7777,n,Goto(from-pstn,${EXTEN},1)
  1594.  
  1595. exten => h,1,Macro(hangupcall,)
  1596.  
  1597. ;--== end of [ext-test] ==--;
  1598.  
  1599.  
  1600. [ext-did]
  1601. include => ext-did-custom
  1602. include => ext-did-0001
  1603. include => ext-did-0002
  1604. exten => foo,1,Noop(bar)
  1605.  
  1606. ;--== end of [ext-did] ==--;
  1607.  
  1608.  
  1609. [ext-did-0002]
  1610. include => ext-did-0002-custom
  1611. exten => +79011042079,1,Set(__FROM_DID=${EXTEN})
  1612. exten => +79011042079,n,Gosub(app-blacklist-check,s,1())
  1613. exten => +79011042079,n,Set(CDR(did)=${FROM_DID})
  1614. exten => +79011042079,n,ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
  1615. exten => +79011042079,n,Set(CHANNEL(musicclass)=default)
  1616. exten => +79011042079,n,Set(__MOHCLASS=default)
  1617. exten => +79011042079,n,Set(__CALLINGPRES_SV=${CALLERPRES()})
  1618. exten => +79011042079,n,Set(CALLERPRES()=allowed_not_screened)
  1619. exten => +79011042079,n(dest-ext),Goto(from-did-direct,003,1)
  1620.  
  1621. exten => +79181112381,1,Set(__FROM_DID=${EXTEN})
  1622. exten => +79181112381,n,Gosub(app-blacklist-check,s,1())
  1623. exten => +79181112381,n,Set(CDR(did)=${FROM_DID})
  1624. exten => +79181112381,n,ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
  1625. exten => +79181112381,n,Set(CHANNEL(musicclass)=default)
  1626. exten => +79181112381,n,Set(__MOHCLASS=default)
  1627. exten => +79181112381,n,Set(__CALLINGPRES_SV=${CALLERPRES()})
  1628. exten => +79181112381,n,Set(CALLERPRES()=allowed_not_screened)
  1629. exten => +79181112381,n(dest-ext),Goto(from-did-direct,005,1)
  1630.  
  1631. exten => +79528604288,1,Set(__FROM_DID=${EXTEN})
  1632. exten => +79528604288,n,Gosub(sub-record-check,s,1(force,${EXTEN},always))
  1633. exten => +79528604288,n,Gosub(app-blacklist-check,s,1())
  1634. exten => +79528604288,n,Set(CDR(did)=${FROM_DID})
  1635. exten => +79528604288,n,ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
  1636. exten => +79528604288,n,Set(CHANNEL(musicclass)=default)
  1637. exten => +79528604288,n,Set(__MOHCLASS=default)
  1638. exten => +79528604288,n,Set(__CALLINGPRES_SV=${CALLERPRES()})
  1639. exten => +79528604288,n,Set(CALLERPRES()=allowed_not_screened)
  1640. exten => +79528604288,n(dest-ext),Goto(from-did-direct,011,1)
  1641.  
  1642. exten => +79528622463,1,Set(__FROM_DID=${EXTEN})
  1643. exten => +79528622463,n,Gosub(sub-record-check,s,1(force,${EXTEN},always))
  1644. exten => +79528622463,n,Gosub(app-blacklist-check,s,1())
  1645. exten => +79528622463,n,Set(CDR(did)=${FROM_DID})
  1646. exten => +79528622463,n,ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
  1647. exten => +79528622463,n,Set(CHANNEL(musicclass)=default)
  1648. exten => +79528622463,n,Set(__MOHCLASS=default)
  1649. exten => +79528622463,n,Set(__CALLINGPRES_SV=${CALLERPRES()})
  1650. exten => +79528622463,n,Set(CALLERPRES()=allowed_not_screened)
  1651. exten => +79528622463,n(dest-ext),Goto(from-did-direct,009,1)
  1652.  
  1653. exten => +79528636290,1,Set(__FROM_DID=${EXTEN})
  1654. exten => +79528636290,n,Gosub(sub-record-check,s,1(force,${EXTEN},always))
  1655. exten => +79528636290,n,Gosub(app-blacklist-check,s,1())
  1656. exten => +79528636290,n,Set(CDR(did)=${FROM_DID})
  1657. exten => +79528636290,n,ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
  1658. exten => +79528636290,n,Set(CHANNEL(musicclass)=default)
  1659. exten => +79528636290,n,Set(__MOHCLASS=default)
  1660. exten => +79528636290,n,Set(__CALLINGPRES_SV=${CALLERPRES()})
  1661. exten => +79528636290,n,Set(CALLERPRES()=allowed_not_screened)
  1662. exten => +79528636290,n(dest-ext),Goto(from-did-direct,010,1)
  1663.  
  1664. exten => +79530792192,1,Set(__FROM_DID=${EXTEN})
  1665. exten => +79530792192,n,Gosub(app-blacklist-check,s,1())
  1666. exten => +79530792192,n,Set(CDR(did)=${FROM_DID})
  1667. exten => +79530792192,n,ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
  1668. exten => +79530792192,n,Set(CHANNEL(musicclass)=default)
  1669. exten => +79530792192,n,Set(__MOHCLASS=default)
  1670. exten => +79530792192,n,Set(__CALLINGPRES_SV=${CALLERPRES()})
  1671. exten => +79530792192,n,Set(CALLERPRES()=allowed_not_screened)
  1672. exten => +79530792192,n(dest-ext),Goto(from-did-direct,429,1)
  1673.  
  1674. exten => +79604931103,1,Set(__FROM_DID=${EXTEN})
  1675. exten => +79604931103,n,Gosub(app-blacklist-check,s,1())
  1676. exten => +79604931103,n,Set(CDR(did)=${FROM_DID})
  1677. exten => +79604931103,n,ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
  1678. exten => +79604931103,n,Set(CHANNEL(musicclass)=default)
  1679. exten => +79604931103,n,Set(__MOHCLASS=default)
  1680. exten => +79604931103,n,Set(__CALLINGPRES_SV=${CALLERPRES()})
  1681. exten => +79604931103,n,Set(CALLERPRES()=allowed_not_screened)
  1682. exten => +79604931103,n(dest-ext),Goto(from-did-direct,004,1)
  1683.  
  1684. exten => +79604931129,1,Set(__FROM_DID=${EXTEN})
  1685. exten => +79604931129,n,Gosub(app-blacklist-check,s,1())
  1686. exten => +79604931129,n,Set(CDR(did)=${FROM_DID})
  1687. exten => +79604931129,n,ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
  1688. exten => +79604931129,n,Set(CHANNEL(musicclass)=default)
  1689. exten => +79604931129,n,Set(__MOHCLASS=default)
  1690. exten => +79604931129,n,Set(__CALLINGPRES_SV=${CALLERPRES()})
  1691. exten => +79604931129,n,Set(CALLERPRES()=allowed_not_screened)
  1692. exten => +79604931129,n(dest-ext),Goto(from-did-direct,008,1)
  1693.  
  1694. exten => +79604931184,1,Set(__FROM_DID=${EXTEN})
  1695. exten => +79604931184,n,Gosub(app-blacklist-check,s,1())
  1696. exten => +79604931184,n,Set(CDR(did)=${FROM_DID})
  1697. exten => +79604931184,n,ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
  1698. exten => +79604931184,n,Set(CHANNEL(musicclass)=default)
  1699. exten => +79604931184,n,Set(__MOHCLASS=default)
  1700. exten => +79604931184,n,Set(__CALLINGPRES_SV=${CALLERPRES()})
  1701. exten => +79604931184,n,Set(CALLERPRES()=allowed_not_screened)
  1702. exten => +79604931184,n(dest-ext),Goto(from-did-direct,003,1)
  1703.  
  1704. exten => +79628619225,1,Set(__FROM_DID=${EXTEN})
  1705. exten => +79628619225,n,Gosub(app-blacklist-check,s,1())
  1706. exten => +79628619225,n,Set(CDR(did)=${FROM_DID})
  1707. exten => +79628619225,n,ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
  1708. exten => +79628619225,n,Set(CHANNEL(musicclass)=default)
  1709. exten => +79628619225,n,Set(__MOHCLASS=default)
  1710. exten => +79628619225,n,Set(__CALLINGPRES_SV=${CALLERPRES()})
  1711. exten => +79628619225,n,Set(CALLERPRES()=allowed_not_screened)
  1712. exten => +79628619225,n(dest-ext),Goto(from-did-direct,001,1)
  1713.  
  1714. exten => +79628619233,1,Set(__FROM_DID=${EXTEN})
  1715. exten => +79628619233,n,Gosub(app-blacklist-check,s,1())
  1716. exten => +79628619233,n,Set(CDR(did)=${FROM_DID})
  1717. exten => +79628619233,n,ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
  1718. exten => +79628619233,n,Set(CHANNEL(musicclass)=default)
  1719. exten => +79628619233,n,Set(__MOHCLASS=default)
  1720. exten => +79628619233,n,Set(__CALLINGPRES_SV=${CALLERPRES()})
  1721. exten => +79628619233,n,Set(CALLERPRES()=allowed_not_screened)
  1722. exten => +79628619233,n(dest-ext),Goto(from-did-direct,007,1)
  1723.  
  1724. ;--== end of [ext-did-0002] ==--;
  1725.  
  1726.  
  1727. [ext-did-catchall]
  1728. include => ext-did-catchall-custom
  1729. exten => s,1,Noop(No DID or CID Match)
  1730. exten => s,n(a2),Answer
  1731. exten => s,n,Wait(2)
  1732. exten => s,n,Playback(ss-noservice)
  1733. exten => s,n,SayAlpha(${FROM_DID})
  1734. exten => s,n,Hangup
  1735.  
  1736. exten => _.,1,Set(__FROM_DID=${EXTEN})
  1737. exten => _.,n,Noop(Received an unknown call with DID set to ${EXTEN})
  1738. exten => _.,n,Goto(s,a2)
  1739.  
  1740. exten => h,1,Hangup
  1741.  
  1742. ;--== end of [ext-did-catchall] ==--;
  1743.  
  1744.  
  1745. [from-did-direct-ivr]
  1746. include => from-did-direct-ivr-custom
  1747. exten => 001,1,Macro(blkvm-clr,)
  1748. exten => 001,n,Set(__NODEST=)
  1749. exten => 001,n,Goto(from-did-direct,001,1)
  1750.  
  1751. exten => 002,1,Macro(blkvm-clr,)
  1752. exten => 002,n,Set(__NODEST=)
  1753. exten => 002,n,Goto(from-did-direct,002,1)
  1754.  
  1755. exten => 003,1,Macro(blkvm-clr,)
  1756. exten => 003,n,Set(__NODEST=)
  1757. exten => 003,n,Goto(from-did-direct,003,1)
  1758.  
  1759. exten => 004,1,Macro(blkvm-clr,)
  1760. exten => 004,n,Set(__NODEST=)
  1761. exten => 004,n,Goto(from-did-direct,004,1)
  1762.  
  1763. exten => 005,1,Macro(blkvm-clr,)
  1764. exten => 005,n,Set(__NODEST=)
  1765. exten => 005,n,Goto(from-did-direct,005,1)
  1766.  
  1767. exten => 006,1,Macro(blkvm-clr,)
  1768. exten => 006,n,Set(__NODEST=)
  1769. exten => 006,n,Goto(from-did-direct,006,1)
  1770.  
  1771. exten => 007,1,Macro(blkvm-clr,)
  1772. exten => 007,n,Set(__NODEST=)
  1773. exten => 007,n,Goto(from-did-direct,007,1)
  1774.  
  1775. exten => 008,1,Macro(blkvm-clr,)
  1776. exten => 008,n,Set(__NODEST=)
  1777. exten => 008,n,Goto(from-did-direct,008,1)
  1778.  
  1779. exten => 009,1,Macro(blkvm-clr,)
  1780. exten => 009,n,Set(__NODEST=)
  1781. exten => 009,n,Goto(from-did-direct,009,1)
  1782.  
  1783. exten => 010,1,Macro(blkvm-clr,)
  1784. exten => 010,n,Set(__NODEST=)
  1785. exten => 010,n,Goto(from-did-direct,010,1)
  1786.  
  1787. exten => 011,1,Macro(blkvm-clr,)
  1788. exten => 011,n,Set(__NODEST=)
  1789. exten => 011,n,Goto(from-did-direct,011,1)
  1790.  
  1791. exten => 429,1,Macro(blkvm-clr,)
  1792. exten => 429,n,Set(__NODEST=)
  1793. exten => 429,n,Goto(from-did-direct,429,1)
  1794.  
  1795. ;--== end of [from-did-direct-ivr] ==--;
  1796.  
  1797.  
  1798. [ext-trunk]
  1799. include => ext-trunk-custom
  1800. exten => 1,1,Set(TDIAL_STRING=DAHDI/g0)
  1801. exten => 1,n,Set(DIAL_TRUNK=1)
  1802. exten => 1,n,Goto(ext-trunk,tdial,1)
  1803.  
  1804. exten => 2,1,Set(SS=$)
  1805. exten => 2,n,Set(TDIAL_STRING=dongle/i:356356042597845/${SS}{OUTNUM})
  1806. exten => 2,n,Set(DIAL_TRUNK=2)
  1807. exten => 2,n,Goto(ext-trunk,tcustom,1)
  1808.  
  1809. exten => 3,1,Set(SS=$)
  1810. exten => 3,n,Set(TDIAL_STRING=dongle/i:353443042619010/${SS}{OUTNUM})
  1811. exten => 3,n,Set(DIAL_TRUNK=3)
  1812. exten => 3,n,Goto(ext-trunk,tcustom,1)
  1813.  
  1814. exten => 4,1,Set(SS=$)
  1815. exten => 4,n,Set(TDIAL_STRING=dongle/i:867884004771480/${SS}{OUTNUM})
  1816. exten => 4,n,Set(DIAL_TRUNK=4)
  1817. exten => 4,n,Goto(ext-trunk,tcustom,1)
  1818.  
  1819. exten => 5,1,Set(SS=$)
  1820. exten => 5,n,Set(TDIAL_STRING=dongle/i:354807043241132/${SS}{OUTNUM})
  1821. exten => 5,n,Set(DIAL_TRUNK=5)
  1822. exten => 5,n,Goto(ext-trunk,tcustom,1)
  1823.  
  1824. exten => 6,1,Set(SS=$)
  1825. exten => 6,n,Set(TDIAL_STRING=dongle/i:356225040574447/${SS}{OUTNUM})
  1826. exten => 6,n,Set(DIAL_TRUNK=6)
  1827. exten => 6,n,Goto(ext-trunk,tcustom,1)
  1828.  
  1829. exten => 7,1,Set(SS=$)
  1830. exten => 7,n,Set(TDIAL_STRING=dongle/i:356356042597845/${SS}{OUTNUM})
  1831. exten => 7,n,Set(DIAL_TRUNK=7)
  1832. exten => 7,n,Goto(ext-trunk,tcustom,1)
  1833.  
  1834. exten => 8,1,Set(SS=$)
  1835. exten => 8,n,Set(TDIAL_STRING=dongle/i:355615044476337/${SS}{OUTNUM})
  1836. exten => 8,n,Set(DIAL_TRUNK=8)
  1837. exten => 8,n,Goto(ext-trunk,tcustom,1)
  1838.  
  1839. exten => 9,1,Set(SS=$)
  1840. exten => 9,n,Set(TDIAL_STRING=dongle/i:861496015325457/${SS}{OUTNUM})
  1841. exten => 9,n,Set(DIAL_TRUNK=9)
  1842. exten => 9,n,Goto(ext-trunk,tcustom,1)
  1843.  
  1844. exten => 10,1,Set(SS=$)
  1845. exten => 10,n,Set(TDIAL_STRING=dongle/i:352216044917751/${SS}{OUTNUM})
  1846. exten => 10,n,Set(DIAL_TRUNK=10)
  1847. exten => 10,n,Goto(ext-trunk,tcustom,1)
  1848.  
  1849. exten => 11,1,Set(SS=$)
  1850. exten => 11,n,Set(TDIAL_STRING=dongle/i:356356048778829/${SS}{OUTNUM})
  1851. exten => 11,n,Set(DIAL_TRUNK=11)
  1852. exten => 11,n,Goto(ext-trunk,tcustom,1)
  1853.  
  1854. exten => 12,1,Set(SS=$)
  1855. exten => 12,n,Set(TDIAL_STRING=dongle/i:354807045380441/${SS}{OUTNUM})
  1856. exten => 12,n,Set(DIAL_TRUNK=12)
  1857. exten => 12,n,Goto(ext-trunk,tcustom,1)
  1858.  
  1859. exten => 13,1,Set(SS=$)
  1860. exten => 13,n,Set(TDIAL_STRING=dongle/i:354807047343652/${SS}{OUTNUM})
  1861. exten => 13,n,Set(DIAL_TRUNK=13)
  1862. exten => 13,n,Goto(ext-trunk,tcustom,1)
  1863.  
  1864. exten => 14,1,Set(SS=$)
  1865. exten => 14,n,Set(TDIAL_STRING=dongle/i:351911049126538/${SS}{OUTNUM})
  1866. exten => 14,n,Set(DIAL_TRUNK=14)
  1867. exten => 14,n,Goto(ext-trunk,tcustom,1)
  1868.  
  1869. exten => tcustom,1,Set(OUTBOUND_GROUP=OUT_${DIAL_TRUNK})
  1870. exten => tcustom,n,GotoIf($["${OUTMAXCHANS_${DIAL_TRUNK}}" = ""]?nomax)
  1871. exten => tcustom,n,GotoIf($[${GROUP_COUNT(OUT_${DIAL_TRUNK})} >= ${OUTMAXCHANS_${DIAL_TRUNK}}]?hangit)
  1872. exten => tcustom,n(nomax),ExecIf($["${CALLINGPRES_SV}" != ""]?Set(CALLERPRES()=${CALLINGPRES_SV}))
  1873. exten => tcustom,n,Set(DIAL_NUMBER=${FROM_DID})
  1874. exten => tcustom,n,GosubIf($["${PREFIX_TRUNK_${DIAL_TRUNK}}" != ""]?sub-flp-${DIAL_TRUNK},s,1())
  1875. exten => tcustom,n,Set(OUTNUM=${OUTPREFIX_${DIAL_TRUNK}}${DIAL_NUMBER})
  1876. exten => tcustom,n,Set(CALLERID(number)=${CALLERID(number):0:40})
  1877. exten => tcustom,n,Set(CALLERID(name)=${CALLERID(name):0:40})
  1878. exten => tcustom,n,Set(DIAL_TRUNK_OPTIONS=${IF($["${DB_EXISTS(TRUNK/${DIAL_TRUNK}/dialopts)}" = "1"]?${DB_RESULT}:${TRUNK_OPTIONS})})
  1879. exten => tcustom,n,Dial(${EVAL(${TDIAL_STRING})},${TRUNK_RING_TIMER},${DIAL_TRUNK_OPTIONS})
  1880. exten => tcustom,n(hangit),Hangup
  1881.  
  1882. exten => tdial,1,Set(OUTBOUND_GROUP=OUT_${DIAL_TRUNK})
  1883. exten => tdial,n,GotoIf($["${OUTMAXCHANS_${DIAL_TRUNK}}" = ""]?nomax)
  1884. exten => tdial,n,GotoIf($[${GROUP_COUNT(OUT_${DIAL_TRUNK})} >= ${OUTMAXCHANS_${DIAL_TRUNK}}]?hangit)
  1885. exten => tdial,n(nomax),ExecIf($["${CALLINGPRES_SV}" != ""]?Set(CALLERPRES()=${CALLINGPRES_SV}))
  1886. exten => tdial,n,Set(DIAL_NUMBER=${FROM_DID})
  1887. exten => tdial,n,GosubIf($["${PREFIX_TRUNK_${DIAL_TRUNK}}" != ""]?sub-flp-${DIAL_TRUNK},s,1())
  1888. exten => tdial,n,Set(OUTNUM=${OUTPREFIX_${DIAL_TRUNK}}${DIAL_NUMBER})
  1889. exten => tdial,n,Set(DIAL_TRUNK_OPTIONS=${IF($["${DB_EXISTS(TRUNK/${DIAL_TRUNK}/dialopts)}" = "1"]?${DB_RESULT}:${TRUNK_OPTIONS})})
  1890. exten => tdial,n,Dial(${TDIAL_STRING}/${OUTNUM},${TRUNK_RING_TIMER},${DIAL_TRUNK_OPTIONS})
  1891. exten => tdial,n,Set(CALLERID(number)=${CALLERID(number):0:40})
  1892. exten => tdial,n,Set(CALLERID(name)=${CALLERID(name):0:40})
  1893. exten => tdial,n(hangit),Hangup
  1894.  
  1895. ;--== end of [ext-trunk] ==--;
  1896.  
  1897.  
  1898. [sub-record-cancel]
  1899. include => sub-record-cancel-custom
  1900. exten => s,1,Set(__REC_POLICY_MODE=${REC_POLICY_MODE_SAVE})
  1901. exten => s,n,ExecIf($["${REC_STATUS}"!="RECORDING"]?Return())
  1902. exten => s,n,StopMixMonitor()
  1903. exten => s,n,Set(__REC_STATUS=)
  1904. exten => s,n,Set(MON_BASE=${IF($[${LEN(${MIXMON_DIR})}]?${MIXMON_DIR}:${ASTSPOOLDIR}/monitor/)}${YEAR}/${MONTH}/${DAY}/)
  1905. exten => s,n,Set(__MON_FMT=${IF($[${LEN(${MIXMON_FORMAT})}]?${IF($["${MIXMON_FORMAT}"="wav49"]?WAV:${MIXMON_FORMAT})}:wav)})
  1906. exten => s,n,ExecIf($[${LEN(${CALLFILENAME})} & ${STAT(f,${MON_BASE}${CALLFILENAME}.${MON_FMT})}]?System(rm -f ${MON_BASE}${CALLFILENAME}.${MON_FMT}))
  1907. exten => s,n,Set(__CALLFILENAME=)
  1908. exten => s,n,Set(CDR(recordingfile)=)
  1909. exten => s,n,Return()
  1910.  
  1911. ;--== end of [sub-record-cancel] ==--;
  1912.  
  1913.  
  1914. [sub-record-check]
  1915. include => sub-record-check-custom
  1916. exten => s,1,Set(REC_POLICY_MODE_SAVE=${REC_POLICY_MODE})
  1917. exten => s,n,GotoIf($["${BLINDTRANSFER}" = ""]?check)
  1918. exten => s,n,ResetCDR()
  1919. exten => s,n,GotoIf($["${REC_STATUS}" != "RECORDING"]?check)
  1920. exten => s,n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)
  1921. exten => s,n,MixMonitor(${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MIXMON_FORMAT},a,${MIXMON_POST})
  1922. exten => s,n(check),Set(__MON_FMT=${IF($["${MIXMON_FORMAT}"="wav49"]?WAV:${MIXMON_FORMAT})})
  1923. exten => s,n,GotoIf($["${REC_STATUS}"!="RECORDING"]?next)
  1924. exten => s,n,Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT})
  1925. exten => s,n,Return()
  1926. exten => s,n(next),ExecIf($[!${LEN(${ARG1})}]?Return())
  1927. exten => s,n,ExecIf($["${REC_POLICY_MODE}"="" & "${ARG3}"!=""]?Set(__REC_POLICY_MODE=${ARG3}))
  1928. exten => s,n,GotoIf($["${REC_STATUS}"!=""]?${ARG1},1)
  1929. exten => s,n,Set(__REC_STATUS=INITIALIZED)
  1930. exten => s,n,Set(NOW=${EPOCH})
  1931. exten => s,n,Set(__DAY=${STRFTIME(${NOW},,%d)})
  1932. exten => s,n,Set(__MONTH=${STRFTIME(${NOW},,%m)})
  1933. exten => s,n,Set(__YEAR=${STRFTIME(${NOW},,%Y)})
  1934. exten => s,n,Set(__TIMESTR=${YEAR}${MONTH}${DAY}-${STRFTIME(${NOW},,%H%M%S)})
  1935. exten => s,n,Set(__FROMEXTEN=${IF($[${LEN(${AMPUSER})}]?${AMPUSER}:${IF($[${LEN(${REALCALLERIDNUM})}]?${REALCALLERIDNUM}:unknown)})})
  1936. exten => s,n,Set(__CALLFILENAME=${ARG1}-${ARG2}-${FROMEXTEN}-${TIMESTR}-${UNIQUEID})
  1937. exten => s,n,Goto(${ARG1},1)
  1938.  
  1939. exten => rg,1,GosubIf($["${REC_POLICY_MODE}"="always"]?record,1(${EXTEN},${REC_POLICY_MODE},${FROMEXTEN}))
  1940. exten => rg,n,Return()
  1941.  
  1942. exten => force,1,GosubIf($["${REC_POLICY_MODE}"="always"]?record,1(${EXTEN},${REC_POLICY_MODE},${FROMEXTEN}))
  1943. exten => force,n,Return()
  1944.  
  1945. exten => q,1,GosubIf($["${REC_POLICY_MODE}"="always"]?recq,1(${EXTEN},${ARG2},${FROMEXTEN}))
  1946. exten => q,n,Return()
  1947.  
  1948. exten => out,1,ExecIf($["${REC_POLICY_MODE}"=""]?Set(__REC_POLICY_MODE=${DB(AMPUSER/${FROMEXTEN}/recording/out/external)}))
  1949. exten => out,n,GosubIf($["${REC_POLICY_MODE}"="always"]?record,1(exten,${ARG2},${FROMEXTEN}))
  1950. exten => out,n,Return()
  1951.  
  1952. exten => exten,1,GotoIf($["${REC_POLICY_MODE}"!=""]?callee)
  1953. exten => exten,n,Set(__REC_POLICY_MODE=${IF($[${LEN(${FROM_DID})}]?${DB(AMPUSER/${ARG2}/recording/in/external)}:${DB(AMPUSER/${ARG2}/recording/in/internal)})})
  1954. exten => exten,n,GotoIf($["${REC_POLICY_MODE}"="dontcare"]?caller)
  1955. exten => exten,n,GotoIf($["${DB(AMPUSER/${FROMEXTEN}/recording/out/internal)}"="dontcare" | "${FROM_DID}"!=""]?callee)
  1956. exten => exten,n,ExecIf($[${LEN(${DB(AMPUSER/${FROMEXTEN}/recording/priority)})}]?Set(CALLER_PRI=${DB(AMPUSER/${FROMEXTEN}/recording/priority)}):Set(CALLER_PRI=0))
  1957. exten => exten,n,ExecIf($[${LEN(${DB(AMPUSER/${ARG2}/recording/priority)})}]?Set(CALLEE_PRI=${DB(AMPUSER/${ARG2}/recording/priority)}):Set(CALLEE_PRI=0))
  1958. exten => exten,n,GotoIf($["${CALLER_PRI}"="${CALLEE_PRI}"]?${REC_POLICY}:${IF($[${CALLER_PRI}>${CALLEE_PRI}]?caller:callee)})
  1959. exten => exten,n(callee),GosubIf($["${REC_POLICY_MODE}"="always"]?record,1(${EXTEN},${ARG2},${FROMEXTEN}))
  1960. exten => exten,n,Return()
  1961. exten => exten,n(caller),Set(__REC_POLICY_MODE=${DB(AMPUSER/${FROMEXTEN}/recording/out/internal)})
  1962. exten => exten,n,GosubIf($["${REC_POLICY_MODE}"="always"]?record,1(${EXTEN},${ARG2},${FROMEXTEN}))
  1963. exten => exten,n,Return()
  1964.  
  1965. exten => conf,1,Gosub(recconf,1(${EXTEN},${ARG2},${ARG2}))
  1966. exten => conf,n,Return()
  1967.  
  1968. exten => page,1,GosubIf($["${REC_POLICY_MODE}"="always"]?recconf,1(${EXTEN},${ARG2},${FROMEXTEN}))
  1969. exten => page,n,Return()
  1970.  
  1971. exten => record,1,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)
  1972. exten => record,n,MixMonitor(${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MIXMON_FORMAT},,${MIXMON_POST})
  1973. exten => record,n,Set(__REC_STATUS=RECORDING)
  1974. exten => record,n,Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT})
  1975. exten => record,n,Return()
  1976.  
  1977. exten => recq,1,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)
  1978. exten => recq,n,Set(MONITOR_FILENAME=${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME})
  1979. exten => recq,n,MixMonitor(${MONITOR_FILENAME}.${MIXMON_FORMAT},${MONITOR_OPTIONS},${MIXMON_POST})
  1980. exten => recq,n,Set(__REC_STATUS=RECORDING)
  1981. exten => recq,n,Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT})
  1982. exten => recq,n,Return()
  1983.  
  1984. exten => recconf,1,Set(__CALLFILENAME=${IF($[${CONFBRIDGE_INFO(parties,${ARG2})}]?${DB(RECCONF/${ARG2})}:${ARG1}-${ARG2}-${ARG3}-${TIMESTR}-${UNIQUEID})})
  1985. exten => recconf,n,ExecIf($[!${CONFBRIDGE_INFO(parties,${ARG2})}]?Set(DB(RECCONF/${ARG2})=${CALLFILENAME}))
  1986. exten => recconf,n,Set(CONFBRIDGE(bridge,record_file)=${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT})
  1987. exten => recconf,n,ExecIf($["${REC_POLICY_MODE}"!="always"]?Return())
  1988. exten => recconf,n,Set(CONFBRIDGE(bridge,record_conference)=yes)
  1989. exten => recconf,n,Set(__REC_STATUS=RECORDING)
  1990. exten => recconf,n,Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT})
  1991. exten => recconf,n,Return()
  1992.  
  1993. ;--== end of [sub-record-check] ==--;
  1994.  
  1995.  
  1996. [macro-one-touch-record]
  1997. include => macro-one-touch-record-custom
  1998. exten => s,1,Set(ONETOUCH_REC_SCRIPT_STATUS=)
  1999. exten => s,n,System(/var/lib/asterisk/bin/one_touch_record.php ${CHANNEL(name)})
  2000. exten => s,n,Noop(ONETOUCH_REC_SCRIPT_STATUS: [${ONETOUCH_REC_SCRIPT_STATUS}])
  2001. exten => s,n,ExecIf($["${ONETOUCH_REC}"="RECORDING"]?Playback(beep))
  2002. exten => s,n,ExecIf($["${ONETOUCH_REC}"="PAUSED"]?Playback(beep&beep))
  2003. exten => s,n,MacroExit()
  2004.  
  2005. ;--== end of [macro-one-touch-record] ==--;
  2006.  
  2007.  
  2008. [macro-prepend-cid]
  2009. include => macro-prepend-cid-custom
  2010. exten => s,1,GotoIf($["${RGPREFIX}" = ""]?REPCID)
  2011. exten => s,n,GotoIf($["${RGPREFIX}" != "${CALLERID(name):0:${LEN(${RGPREFIX})}}"]?REPCID)
  2012. exten => s,n,Set(CALLERID(name)=${CALLERID(name):${LEN(${RGPREFIX})}})
  2013. exten => s,n,Set(_RGPREFIX=)
  2014. exten => s,n(REPCID),Set(_RGPREFIX=${ARG1})
  2015. exten => s,n,Set(CALLERID(name)=${RGPREFIX}${CALLERID(name)})
  2016.  
  2017. ;--== end of [macro-prepend-cid] ==--;
  2018.  
  2019.  
  2020. [outbound-allroutes]
  2021. include => outbound-allroutes-custom
  2022. include => outrt-2 ; gsm-2
  2023. include => outrt-1 ; gsm
  2024. include => outrt-3 ; gsm-beeline-1
  2025. include => outrt-4 ; gsm-beeline-2
  2026. include => outrt-5 ; gsm-beeline-3
  2027. include => outrt-6 ; gsm-mts-1
  2028. include => outrt-7 ; gsm-beeline-4
  2029. include => outrt-8 ; gsm-beeline-5
  2030. include => outrt-9 ; gsm-tele2-2
  2031. include => outrt-10 ; gsm-tele2-3
  2032. include => outrt-11 ; gsm-tele2-4
  2033. include => outrt-12 ; gsm-tele2-5
  2034. exten => foo,1,Noop(bar)
  2035.  
  2036. ;--== end of [outbound-allroutes] ==--;
  2037.  
  2038.  
  2039. [outrt-2] ; gsm-2
  2040. include => outrt-2-custom
  2041. exten => _NXXXXXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2042.  
  2043. exten => _NXXXXXXXXXX/001,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2044. exten => _NXXXXXXXXXX/001,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  2045. exten => _NXXXXXXXXXX/001,n,Set(_NODEST=)
  2046. exten => _NXXXXXXXXXX/001,n,Gosub(sub-record-check,s,1(out,${EXTEN},))
  2047. exten => _NXXXXXXXXXX/001,n,Macro(dialout-trunk,3,${EXTEN},,off)
  2048. exten => _NXXXXXXXXXX/001,n,Macro(outisbusy,)
  2049.  
  2050. exten => _+7NXXXXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2051.  
  2052. exten => _+7NXXXXXXXXX/001,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2053. exten => _+7NXXXXXXXXX/001,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  2054. exten => _+7NXXXXXXXXX/001,n,Set(_NODEST=)
  2055. exten => _+7NXXXXXXXXX/001,n,Gosub(sub-record-check,s,1(out,${EXTEN},))
  2056. exten => _+7NXXXXXXXXX/001,n,Macro(dialout-trunk,3,8${EXTEN:2},,off)
  2057. exten => _+7NXXXXXXXXX/001,n,Macro(outisbusy,)
  2058.  
  2059. ;--== end of [outrt-2] ==--;
  2060.  
  2061.  
  2062. [outrt-1] ; gsm
  2063. include => outrt-1-custom
  2064. exten => 611,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2065.  
  2066. exten => 611/001,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2067. exten => 611/001,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  2068. exten => 611/001,n,Set(_NODEST=)
  2069. exten => 611/001,n,Gosub(sub-record-check,s,1(out,${EXTEN},))
  2070. exten => 611/001,n,Macro(dialout-trunk,2,${EXTEN},,off)
  2071. exten => 611/001,n,Macro(outisbusy,)
  2072.  
  2073. exten => 636,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2074.  
  2075. exten => 636/001,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2076. exten => 636/001,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  2077. exten => 636/001,n,Set(_NODEST=)
  2078. exten => 636/001,n,Gosub(sub-record-check,s,1(out,${EXTEN},))
  2079. exten => 636/001,n,Macro(dialout-trunk,2,${EXTEN},,off)
  2080. exten => 636/001,n,Macro(outisbusy,)
  2081.  
  2082. exten => _NXXXXXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2083.  
  2084. exten => _NXXXXXXXXXX/429,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2085. exten => _NXXXXXXXXXX/429,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  2086. exten => _NXXXXXXXXXX/429,n,Set(_NODEST=)
  2087. exten => _NXXXXXXXXXX/429,n,Gosub(sub-record-check,s,1(out,${EXTEN},))
  2088. exten => _NXXXXXXXXXX/429,n,Macro(dialout-trunk,2,${EXTEN},,off)
  2089. exten => _NXXXXXXXXXX/429,n,Macro(outisbusy,)
  2090.  
  2091. exten => _+7NXXXXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2092.  
  2093. exten => _+7NXXXXXXXXX/429,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2094. exten => _+7NXXXXXXXXX/429,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  2095. exten => _+7NXXXXXXXXX/429,n,Set(_NODEST=)
  2096. exten => _+7NXXXXXXXXX/429,n,Gosub(sub-record-check,s,1(out,${EXTEN},))
  2097. exten => _+7NXXXXXXXXX/429,n,Macro(dialout-trunk,2,8${EXTEN:2},,off)
  2098. exten => _+7NXXXXXXXXX/429,n,Macro(outisbusy,)
  2099.  
  2100. ;--== end of [outrt-1] ==--;
  2101.  
  2102.  
  2103. [outrt-3] ; gsm-beeline-1
  2104. include => outrt-3-custom
  2105. exten => _NXXXXXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2106.  
  2107. exten => _NXXXXXXXXXX/002,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2108. exten => _NXXXXXXXXXX/002,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  2109. exten => _NXXXXXXXXXX/002,n,Set(_NODEST=)
  2110. exten => _NXXXXXXXXXX/002,n,Gosub(sub-record-check,s,1(out,${EXTEN},))
  2111. exten => _NXXXXXXXXXX/002,n,Macro(dialout-trunk,4,${EXTEN},,off)
  2112. exten => _NXXXXXXXXXX/002,n,Macro(outisbusy,)
  2113.  
  2114. ;--== end of [outrt-3] ==--;
  2115.  
  2116.  
  2117. [outrt-4] ; gsm-beeline-2
  2118. include => outrt-4-custom
  2119. exten => _NXXXXXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2120.  
  2121. exten => _NXXXXXXXXXX/003,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2122. exten => _NXXXXXXXXXX/003,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  2123. exten => _NXXXXXXXXXX/003,n,Set(_NODEST=)
  2124. exten => _NXXXXXXXXXX/003,n,Gosub(sub-record-check,s,1(out,${EXTEN},))
  2125. exten => _NXXXXXXXXXX/003,n,Macro(dialout-trunk,5,${EXTEN},,off)
  2126. exten => _NXXXXXXXXXX/003,n,Macro(outisbusy,)
  2127.  
  2128. ;--== end of [outrt-4] ==--;
  2129.  
  2130.  
  2131. [outrt-5] ; gsm-beeline-3
  2132. include => outrt-5-custom
  2133. exten => _NXXXXXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2134.  
  2135. exten => _NXXXXXXXXXX/004,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2136. exten => _NXXXXXXXXXX/004,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  2137. exten => _NXXXXXXXXXX/004,n,Set(_NODEST=)
  2138. exten => _NXXXXXXXXXX/004,n,Gosub(sub-record-check,s,1(out,${EXTEN},))
  2139. exten => _NXXXXXXXXXX/004,n,Macro(dialout-trunk,6,${EXTEN},,off)
  2140. exten => _NXXXXXXXXXX/004,n,Macro(outisbusy,)
  2141.  
  2142. ;--== end of [outrt-5] ==--;
  2143.  
  2144.  
  2145. [outrt-6] ; gsm-mts-1
  2146. include => outrt-6-custom
  2147. exten => _NXXXXXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2148.  
  2149. exten => _NXXXXXXXXXX/005,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2150. exten => _NXXXXXXXXXX/005,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  2151. exten => _NXXXXXXXXXX/005,n,Set(_NODEST=)
  2152. exten => _NXXXXXXXXXX/005,n,Gosub(sub-record-check,s,1(out,${EXTEN},))
  2153. exten => _NXXXXXXXXXX/005,n,Macro(dialout-trunk,8,${EXTEN},,off)
  2154. exten => _NXXXXXXXXXX/005,n,Macro(outisbusy,)
  2155.  
  2156. ;--== end of [outrt-6] ==--;
  2157.  
  2158.  
  2159. [outrt-7] ; gsm-beeline-4
  2160. include => outrt-7-custom
  2161. exten => _NXXXXXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2162.  
  2163. exten => _NXXXXXXXXXX/006,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2164. exten => _NXXXXXXXXXX/006,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  2165. exten => _NXXXXXXXXXX/006,n,Set(_NODEST=)
  2166. exten => _NXXXXXXXXXX/006,n,Gosub(sub-record-check,s,1(out,${EXTEN},))
  2167. exten => _NXXXXXXXXXX/006,n,Macro(dialout-trunk,9,${EXTEN},,off)
  2168. exten => _NXXXXXXXXXX/006,n,Macro(outisbusy,)
  2169.  
  2170. ;--== end of [outrt-7] ==--;
  2171.  
  2172.  
  2173. [outrt-8] ; gsm-beeline-5
  2174. include => outrt-8-custom
  2175. exten => _NXXXXXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2176.  
  2177. exten => _NXXXXXXXXXX/007,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2178. exten => _NXXXXXXXXXX/007,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  2179. exten => _NXXXXXXXXXX/007,n,Set(_NODEST=)
  2180. exten => _NXXXXXXXXXX/007,n,Gosub(sub-record-check,s,1(out,${EXTEN},))
  2181. exten => _NXXXXXXXXXX/007,n,Macro(dialout-trunk,10,${EXTEN},,off)
  2182. exten => _NXXXXXXXXXX/007,n,Macro(outisbusy,)
  2183.  
  2184. ;--== end of [outrt-8] ==--;
  2185.  
  2186.  
  2187. [outrt-9] ; gsm-tele2-2
  2188. include => outrt-9-custom
  2189. exten => _NXXXXXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2190.  
  2191. exten => _NXXXXXXXXXX/008,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2192. exten => _NXXXXXXXXXX/008,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  2193. exten => _NXXXXXXXXXX/008,n,Set(_NODEST=)
  2194. exten => _NXXXXXXXXXX/008,n,Gosub(sub-record-check,s,1(out,${EXTEN},))
  2195. exten => _NXXXXXXXXXX/008,n,Macro(dialout-trunk,11,${EXTEN},,off)
  2196. exten => _NXXXXXXXXXX/008,n,Macro(outisbusy,)
  2197.  
  2198. ;--== end of [outrt-9] ==--;
  2199.  
  2200.  
  2201. [outrt-10] ; gsm-tele2-3
  2202. include => outrt-10-custom
  2203. exten => _NXXXXXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2204.  
  2205. exten => _NXXXXXXXXXX/009,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2206. exten => _NXXXXXXXXXX/009,n,Gosub(sub-record-check,s,1(force,${EXTEN},always))
  2207. exten => _NXXXXXXXXXX/009,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  2208. exten => _NXXXXXXXXXX/009,n,Set(_NODEST=)
  2209. exten => _NXXXXXXXXXX/009,n,Gosub(sub-record-check,s,1(out,${EXTEN},))
  2210. exten => _NXXXXXXXXXX/009,n,Macro(dialout-trunk,12,${EXTEN},,off)
  2211. exten => _NXXXXXXXXXX/009,n,Macro(outisbusy,)
  2212.  
  2213. ;--== end of [outrt-10] ==--;
  2214.  
  2215.  
  2216. [outrt-11] ; gsm-tele2-4
  2217. include => outrt-11-custom
  2218. exten => _NXXXXXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2219.  
  2220. exten => _NXXXXXXXXXX/010,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2221. exten => _NXXXXXXXXXX/010,n,Gosub(sub-record-check,s,1(force,${EXTEN},always))
  2222. exten => _NXXXXXXXXXX/010,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  2223. exten => _NXXXXXXXXXX/010,n,Set(_NODEST=)
  2224. exten => _NXXXXXXXXXX/010,n,Gosub(sub-record-check,s,1(out,${EXTEN},))
  2225. exten => _NXXXXXXXXXX/010,n,Macro(dialout-trunk,13,${EXTEN},,off)
  2226. exten => _NXXXXXXXXXX/010,n,Macro(outisbusy,)
  2227.  
  2228. ;--== end of [outrt-11] ==--;
  2229.  
  2230.  
  2231. [outrt-12] ; gsm-tele2-5
  2232. include => outrt-12-custom
  2233. exten => _NXXXXXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2234.  
  2235. exten => _NXXXXXXXXXX/011,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  2236. exten => _NXXXXXXXXXX/011,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  2237. exten => _NXXXXXXXXXX/011,n,Set(_NODEST=)
  2238. exten => _NXXXXXXXXXX/011,n,Gosub(sub-record-check,s,1(out,${EXTEN},))
  2239. exten => _NXXXXXXXXXX/011,n,Macro(dialout-trunk,14,${EXTEN},,off)
  2240. exten => _NXXXXXXXXXX/011,n,Macro(outisbusy,)
  2241.  
  2242. ;--== end of [outrt-12] ==--;
  2243.  
  2244.  
  2245. [app-blackhole]
  2246. include => app-blackhole-custom
  2247. exten => hangup,1,Noop(Blackhole Dest: Hangup)
  2248. exten => hangup,n,Hangup
  2249.  
  2250. exten => zapateller,1,Noop(Blackhole Dest: Play SIT Tone)
  2251. exten => zapateller,n,Answer
  2252. exten => zapateller,n,Zapateller()
  2253.  
  2254. exten => musiconhold,1,Noop(Blackhole Dest: Put caller on hold forever)
  2255. exten => musiconhold,n,Answer
  2256. exten => musiconhold,n,MusicOnHold()
  2257.  
  2258. exten => congestion,1,Noop(Blackhole Dest: Congestion)
  2259. exten => congestion,n,Playtones(congestion)
  2260. exten => congestion,n,Congestion(20)
  2261. exten => congestion,n,Hangup
  2262.  
  2263. exten => busy,1,Noop(Blackhole Dest: Busy)
  2264. exten => busy,n,Busy(20)
  2265. exten => busy,n,Hangup
  2266.  
  2267. exten => ring,1,Noop(Blackhole Dest: Ring)
  2268. exten => ring,n,Answer
  2269. exten => ring,n,Playtones(ring)
  2270. exten => ring,n,Wait(300)
  2271. exten => ring,n,Hangup
  2272.  
  2273. ;--== end of [app-blackhole] ==--;
  2274.  
  2275.  
  2276. [bad-number]
  2277. include => bad-number-custom
  2278. exten => _X.,1,ResetCDR()
  2279. exten => _X.,n,NoCDR()
  2280. exten => _X.,n,Progress
  2281. exten => _X.,n,Wait(1)
  2282. exten => _X.,n,Progress
  2283. exten => _X.,n,Playback(silence/1&cannot-complete-as-dialed&check-number-dial-again,noanswer)
  2284. exten => _X.,n,Wait(1)
  2285. exten => _X.,n,Congestion(20)
  2286. exten => _X.,n,Hangup
  2287.  
  2288. ;--== end of [bad-number] ==--;
  2289.  
  2290.  
  2291. [sub-presencestate-display]
  2292. include => sub-presencestate-display-custom
  2293. exten => s,1,Goto(state-${TOLOWER(${PRESENCE_STATE(CustomPresence:${ARG1},value)})},1)
  2294.  
  2295. exten => state-available,1,Set(PRESENCESTATE_DISPLAY=(Available))
  2296. exten => state-available,n,Return()
  2297.  
  2298. exten => state-chat,1,Set(PRESENCESTATE_DISPLAY=(Chatty))
  2299. exten => state-chat,n,Return()
  2300.  
  2301. exten => state-away,1,Set(PRESENCESTATE_DISPLAY=(Away))
  2302. exten => state-away,n,Return()
  2303.  
  2304. exten => state-dnd,1,Set(PRESENCESTATE_DISPLAY=(DND))
  2305. exten => state-dnd,n,Return()
  2306.  
  2307. exten => state-xa,1,Set(PRESENCESTATE_DISPLAY=(Extended Away))
  2308. exten => state-xa,n,Return()
  2309.  
  2310. exten => state-unavailable,1,Set(PRESENCESTATE_DISPLAY=(Unavailable))
  2311. exten => state-unavailable,n,Return()
  2312.  
  2313. exten => _state-.,1,Set(PRESENCESTATE_DISPLAY=)
  2314. exten => _state-.,n,Return()
  2315.  
  2316. exten => state-,1,Set(PRESENCESTATE_DISPLAY=)
  2317. exten => state-,n,Return()
  2318.  
  2319. ;--== end of [sub-presencestate-display] ==--;
  2320.  
  2321.  
  2322. [macro-confirm]
  2323. include => macro-confirm-custom
  2324. exten => s,1,Set(LOOPCOUNT=0)
  2325. exten => s,n,Set(__MACRO_RESULT=ABORT)
  2326. 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})})})
  2327. exten => s,n(start),Background(${MSG1},m,${CHANNEL(language)},macro-confirm)
  2328. exten => s,n,Read(INPUT,,1,,,4)
  2329. exten => s,n,GotoIf($[${LEN(${INPUT})} > 0]?${INPUT},1:t,1)
  2330.  
  2331. exten => 1,1,GotoIf($["${DB_EXISTS(RG/${ARG3}/${UNIQCHAN})}"="0" & "${SHARED(ANSWER_STATUS,${FORCE_CONFIRM})}"=""]?toolate,1)
  2332. exten => 1,n,Noop(Deleting: RG/${ARG3}/${UNIQCHAN} ${DB_DELETE(RG/${ARG3}/${UNIQCHAN})})
  2333. exten => 1,n,Macro(blkvm-clr,)
  2334. exten => 1,n,Set(SHARED(ANSWER_STATUS,${FORCE_CONFIRM})=)
  2335. exten => 1,n(skip),Set(__MACRO_RESULT=)
  2336. exten => 1,n,ExecIf($[("${MOHCLASS}"!="default") & ("${MOHCLASS}"!="")]?Set(CHANNEL(musicclass)=${MOHCLASS}))
  2337. exten => 1,n(exitopt1),MacroExit()
  2338.  
  2339. exten => 2,1,Goto(noanswer,1)
  2340.  
  2341. exten => 3,1,SayDigits(${CALLCONFIRMCID})
  2342. exten => 3,n,GotoIf($["${DB_EXISTS(RG/${ARG3}/${UNIQCHAN})}"="0" & "${SHARED(ANSWER_STATUS,${FORCE_CONFIRM})}"=""]?toolate,1:s,start)
  2343.  
  2344. exten => t,1,GotoIf($["${DB_EXISTS(RG/${ARG3}/${UNIQCHAN})}"="0" & "${SHARED(ANSWER_STATUS,${FORCE_CONFIRM})}"=""]?toolate,1)
  2345. exten => t,n,Set(LOOPCOUNT=$[ ${LOOPCOUNT} + 1 ])
  2346. exten => t,n,GotoIf($[ ${LOOPCOUNT} < 5 ]?s,start:noanswer,1)
  2347.  
  2348. exten => _X,1,Background(invalid,m,${CHANNEL(language)},macro-confirm)
  2349. exten => _X,n,GotoIf($["${DB_EXISTS(RG/${ARG3}/${UNIQCHAN})}"="0" | "${SHARED(ANSWER_STATUS,${FORCE_CONFIRM})}"=""]?toolate,1)
  2350. exten => _X,n,Set(LOOPCOUNT=$[ ${LOOPCOUNT} + 1 ])
  2351. exten => _X,n,GotoIf($[ ${LOOPCOUNT} < 5 ]?s,start:noanswer,1)
  2352.  
  2353. exten => noanswer,1,Set(__MACRO_RESULT=ABORT)
  2354. exten => noanswer,n(exitnoanswer),MacroExit()
  2355.  
  2356. exten => toolate,1,Set(MSG2=${IF($["foo${ARG2}" != "foo"]?${ARG2}:"incoming-call-no-longer-avail")})
  2357. exten => toolate,n,Playback(${MSG2})
  2358. exten => toolate,n,Set(__MACRO_RESULT=ABORT)
  2359. exten => toolate,n(exittoolate),MacroExit()
  2360.  
  2361. exten => h,1,Macro(hangupcall,)
  2362.  
  2363. ;--== end of [macro-confirm] ==--;
  2364.  
  2365.  
  2366. [macro-auto-confirm]
  2367. include => macro-auto-confirm-custom
  2368. exten => s,1,Set(__MACRO_RESULT=)
  2369. exten => s,n,Set(CFIGNORE=)
  2370. exten => s,n,Set(MASTER_CHANNEL(CFIGNORE)=)
  2371. exten => s,n,Set(FORWARD_CONTEXT=from-internal)
  2372. exten => s,n,Set(MASTER_CHANNEL(FORWARD_CONTEXT)=from-internal)
  2373. exten => s,n,Macro(blkvm-clr,)
  2374. exten => s,n,Noop(Deleting: RG/${ARG1}/${UNIQCHAN} ${DB_DELETE(RG/${ARG1}/${UNIQCHAN})})
  2375. exten => s,n,ExecIf($[!${REGEX("[^0-9]" ${DIALEDPEERNUMBER})} && "${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(MASTER_CHANNEL(CONNECTEDLINE(num))=${DIALEDPEERNUMBER}))
  2376. exten => s,n,ExecIf($[!${REGEX("[^0-9]" ${DIALEDPEERNUMBER})} && "${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(MASTER_CHANNEL(CONNECTEDLINE(name))=${DB(AMPUSER/${DIALEDPEERNUMBER}/cidname)}))
  2377.  
  2378. ;--== end of [macro-auto-confirm] ==--;
  2379.  
  2380.  
  2381. [macro-auto-blkvm]
  2382. include => macro-auto-blkvm-custom
  2383. exten => s,1,Set(__MACRO_RESULT=)
  2384. exten => s,n,Set(CFIGNORE=)
  2385. exten => s,n,Set(MASTER_CHANNEL(CFIGNORE)=)
  2386. exten => s,n,Set(FORWARD_CONTEXT=from-internal)
  2387. exten => s,n,Set(MASTER_CHANNEL(FORWARD_CONTEXT)=from-internal)
  2388. exten => s,n,Macro(blkvm-clr,)
  2389. exten => s,n,ExecIf($[!${REGEX("[^0-9]" ${DIALEDPEERNUMBER})} && "${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(MASTER_CHANNEL(CONNECTEDLINE(num))=${DIALEDPEERNUMBER}))
  2390. exten => s,n,ExecIf($[!${REGEX("[^0-9]" ${DIALEDPEERNUMBER})} && "${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(MASTER_CHANNEL(CONNECTEDLINE(name))=${DB(AMPUSER/${DIALEDPEERNUMBER}/cidname)}))
  2391.  
  2392. ;--== end of [macro-auto-blkvm] ==--;
  2393.  
  2394.  
  2395. [sub-pincheck]
  2396. include => sub-pincheck-custom
  2397. exten => s,1,Authenticate(${ARG3},)
  2398. exten => s,n,ResetCDR()
  2399. exten => s,n,Return()
  2400.  
  2401. ;--== end of [sub-pincheck] ==--;
  2402.  
  2403.  
  2404. [macro-dialout-trunk]
  2405. include => macro-dialout-trunk-custom
  2406. exten => s,1,Set(DIAL_TRUNK=${ARG1})
  2407. exten => s,n,GosubIf($[$["${ARG3}" != ""] & $["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]]?sub-pincheck,s,1())
  2408. exten => s,n,GotoIf($["x${OUTDISABLE_${DIAL_TRUNK}}" = "xon"]?disabletrunk,1)
  2409. exten => s,n,Set(DIAL_NUMBER=${ARG2})
  2410. exten => s,n,Set(DIAL_TRUNK_OPTIONS=${DIAL_OPTIONS})
  2411. exten => s,n,Set(OUTBOUND_GROUP=OUT_${DIAL_TRUNK})
  2412. exten => s,n,GotoIf($["${OUTMAXCHANS_${DIAL_TRUNK}}foo" = "foo"]?nomax)
  2413. exten => s,n,GotoIf($[ ${GROUP_COUNT(OUT_${DIAL_TRUNK})} >= ${OUTMAXCHANS_${DIAL_TRUNK}} ]?chanfull)
  2414. exten => s,n(nomax),GotoIf($["${INTRACOMPANYROUTE}" = "YES"]?skipoutcid)
  2415. exten => s,n,Set(DIAL_TRUNK_OPTIONS=${IF($["${DB_EXISTS(TRUNK/${DIAL_TRUNK}/dialopts)}" = "1"]?${DB_RESULT}:${TRUNK_OPTIONS})})
  2416. exten => s,n,Macro(outbound-callerid,${DIAL_TRUNK})
  2417. exten => s,n(skipoutcid),GosubIf($["${PREFIX_TRUNK_${DIAL_TRUNK}}" != ""]?sub-flp-${DIAL_TRUNK},s,1())
  2418. exten => s,n,Set(OUTNUM=${OUTPREFIX_${DIAL_TRUNK}}${DIAL_NUMBER})
  2419. exten => s,n,Set(custom=${CUT(OUT_${DIAL_TRUNK},:,1)})
  2420. exten => s,n,ExecIf($["${MOHCLASS}"!="default" & "${MOHCLASS}"!="" & "${FORCE_CONFIRM}"="" ]?Set(DIAL_TRUNK_OPTIONS=M(setmusic^${MOHCLASS})${DIAL_TRUNK_OPTIONS}))
  2421. exten => s,n,ExecIf($["${FORCE_CONFIRM}"!="" ]?Set(DIAL_TRUNK_OPTIONS=${DIAL_TRUNK_OPTIONS}M(confirm)))
  2422. exten => s,n(gocall),Macro(dialout-trunk-predial-hook,)
  2423. exten => s,n,GotoIf($["${PREDIAL_HOOK_RET}" = "BYPASS"]?bypass,1)
  2424. exten => s,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(CONNECTEDLINE(num,i)=${DIAL_NUMBER}))
  2425. exten => s,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(CONNECTEDLINE(name,i)=CID:${CALLERID(number)}))
  2426. exten => s,n,GotoIf($["${custom}" = "AMP"]?customtrunk)
  2427. exten => s,n,Dial(${OUT_${DIAL_TRUNK}}/${OUTNUM},${TRUNK_RING_TIMER},${DIAL_TRUNK_OPTIONS})
  2428. exten => s,n,Noop(Dial failed for some reason with DIALSTATUS = ${DIALSTATUS} and HANGUPCAUSE = ${HANGUPCAUSE})
  2429. exten => s,n,GotoIf($["${ARG4}" = "on"]?continue,1:s-${DIALSTATUS},1)
  2430. exten => s,n(customtrunk),Set(pre_num=${CUT(OUT_${DIAL_TRUNK},$,1)})
  2431. exten => s,n,Set(the_num=${CUT(OUT_${DIAL_TRUNK},$,2)})
  2432. exten => s,n,Set(post_num=${CUT(OUT_${DIAL_TRUNK},$,3)})
  2433. exten => s,n,GotoIf($["${the_num}" = "OUTNUM"]?outnum:skipoutnum)
  2434. exten => s,n(outnum),Set(the_num=${OUTNUM})
  2435. exten => s,n(skipoutnum),Dial(${pre_num:4}${the_num}${post_num},${TRUNK_RING_TIMER},${DIAL_TRUNK_OPTIONS})
  2436. exten => s,n,Noop(Dial failed for some reason with DIALSTATUS = ${DIALSTATUS} and HANGUPCAUSE = ${HANGUPCAUSE})
  2437. exten => s,n,GotoIf($["${ARG4}" = "on"]?continue,1:s-${DIALSTATUS},1)
  2438. exten => s,n(chanfull),Noop(max channels used up)
  2439.  
  2440. exten => s-BUSY,1,Noop(Dial failed due to trunk reporting BUSY - giving up)
  2441. exten => s-BUSY,n,Playtones(busy)
  2442. exten => s-BUSY,n,Busy(20)
  2443.  
  2444. exten => s-ANSWER,1,Noop(Call successfully answered - Hanging up now)
  2445. exten => s-ANSWER,n,Macro(hangupcall,)
  2446.  
  2447. exten => s-NOANSWER,1,Noop(Dial failed due to trunk reporting NOANSWER - giving up)
  2448. exten => s-NOANSWER,n,Progress
  2449. exten => s-NOANSWER,n,Playback(number-not-answering,noanswer)
  2450. exten => s-NOANSWER,n,Congestion(20)
  2451.  
  2452. exten => s-INVALIDNMBR,1,Noop(Dial failed due to trunk reporting Address Incomplete - giving up)
  2453. exten => s-INVALIDNMBR,n,Progress
  2454. exten => s-INVALIDNMBR,n,Playback(ss-noservice,noanswer)
  2455. exten => s-INVALIDNMBR,n,Busy(20)
  2456.  
  2457. exten => s-CHANGED,1,Noop(Dial failed due to trunk reporting Number Changed - giving up)
  2458. exten => s-CHANGED,n,Playtones(busy)
  2459. exten => s-CHANGED,n,Busy(20)
  2460.  
  2461. exten => _s-.,1,Set(RC=${IF($[${ISNULL(${HANGUPCAUSE})}]?0:${HANGUPCAUSE})})
  2462. exten => _s-.,n,Goto(${RC},1)
  2463.  
  2464. exten => 17,1,Goto(s-BUSY,1)
  2465.  
  2466. exten => 18,1,Goto(s-NOANSWER,1)
  2467.  
  2468. exten => 22,1,Goto(s-CHANGED,1)
  2469.  
  2470. exten => 23,1,Goto(s-CHANGED,1)
  2471.  
  2472. exten => 28,1,Goto(s-INVALIDNMBR,1)
  2473.  
  2474. exten => _X,1,Goto(continue,1)
  2475.  
  2476. exten => _X.,1,Goto(continue,1)
  2477.  
  2478. exten => continue,1(noreport),Noop(TRUNK Dial failed due to ${DIALSTATUS} HANGUPCAUSE: ${HANGUPCAUSE} - failing through to other trunks)
  2479. exten => continue,n,Set(CALLERID(number)=${AMPUSER})
  2480.  
  2481. exten => disabletrunk,1,Noop(TRUNK: ${OUT_${DIAL_TRUNK}} DISABLED - falling through to next trunk)
  2482.  
  2483. exten => bypass,1,Noop(TRUNK: ${OUT_${DIAL_TRUNK}} BYPASSING because dialout-trunk-predial-hook)
  2484.  
  2485. exten => h,1,Macro(hangupcall,)
  2486.  
  2487. ;--== end of [macro-dialout-trunk] ==--;
  2488.  
  2489.  
  2490. [macro-privacy-mgr]
  2491. include => macro-privacy-mgr-custom
  2492. exten => s,1,Set(KEEPCID=${CALLERID(num)})
  2493. exten => s,n,Set(TESTCID=${IF($["${CALLERID(num):0:1}"="+"]?${MATH(1+${CALLERID(num):1})}:${MATH(1+${CALLERID(num)})})})
  2494. exten => s,n,ExecIf($[${LEN(${TESTCID})}=0]?Set(CALLERID(num)=))
  2495. exten => s,n,PrivacyManager(${ARG1},${ARG2})
  2496. exten => s,n,GotoIf($["${PRIVACYMGRSTATUS}"="FAILED"]?fail)
  2497. exten => s,n,GosubIf($["${CALLED_BLACKLIST}"="1"]?app-blacklist-check,s,1())
  2498. exten => s,n,Set(CALLERID(num-pres)=allowed_passed_screen)
  2499. exten => s,n,MacroExit()
  2500. exten => s,n(fail),Noop(STATUS: ${PRIVACYMGRSTATUS} CID: ${CALLERID(num)} ${CALLERID(name)} CALLPRES: ${CALLLINGPRES})
  2501. exten => s,n,Playback(sorry-youre-having-problems&goodbye)
  2502. exten => s,n,Playtones(congestion)
  2503. exten => s,n,Congestion(20)
  2504.  
  2505. exten => h,1,Hangup
  2506.  
  2507. ;--== end of [macro-privacy-mgr] ==--;
  2508.  
  2509.  
  2510. [macro-user-callerid]
  2511. include => macro-user-callerid-custom
  2512. exten => s,1,Set(TOUCH_MONITOR=${UNIQUEID})
  2513. exten => s,n,Set(AMPUSER=${IF($["${AMPUSER}" = ""]?${CALLERID(number)}:${AMPUSER})})
  2514. exten => s,n,GotoIf($["${CUT(CHANNEL,@,2):5:5}"="queue" | ${LEN(${AMPUSERCIDNAME})}]?report)
  2515. exten => s,n,ExecIf($["${REALCALLERIDNUM:1:2}" = ""]?Set(REALCALLERIDNUM=${CALLERID(number)}))
  2516. exten => s,n,Set(AMPUSER=${DB(DEVICE/${REALCALLERIDNUM}/user)})
  2517. exten => s,n,GotoIf($["${AMPUSER}" = "none"]?limit)
  2518. exten => s,n,Set(AMPUSERCIDNAME=${DB(AMPUSER/${AMPUSER}/cidname)})
  2519. exten => s,n,GotoIf($["${AMPUSERCIDNAME:1:2}" = ""]?report)
  2520. exten => s,n,Set(AMPUSERCID=${IF($["${ARG2}" != "EXTERNAL" & "${DB_EXISTS(AMPUSER/${AMPUSER}/cidnum)}" = "1"]?${DB_RESULT}:${AMPUSER})})
  2521. exten => s,n,Set(__DIAL_OPTIONS=${IF($["${DB_EXISTS(AMPUSER/${AMPUSER}/dialopts)}" = "1"]?${DB_RESULT}:${DIAL_OPTIONS})})
  2522. exten => s,n,Set(CALLERID(all)="${AMPUSERCIDNAME}" <${AMPUSERCID}>)
  2523. exten => s,n,GotoIf($["${ARG1}"="LIMIT" & ${LEN(${AMPUSER})} & "${DB(AMPUSER/${AMPUSER}/concurrency_limit)}">"0" & "${GROUP_COUNT(${AMPUSER}@concurrency_limit)}">="${DB(AMPUSER/${AMPUSER}/concurrency_limit)}"]?limit)
  2524. exten => s,n,ExecIf($["${ARG1}"="LIMIT" & ${LEN(${AMPUSER})}]?Set(GROUP(concurrency_limit)=${AMPUSER}))
  2525. exten => s,n,GosubIf($[${LEN(${DB(AMPUSER/${AMPUSER}/ccss/cc_agent_policy)})} & "${DB(AMPUSER/${AMPUSER}/ccss/cc_agent_policy)}" != "never"]?sub-ccss,s,1(${MACRO_CONTEXT},${CALLERID(dnid)}))
  2526. exten => s,n(report),GotoIf($[ "${ARG1}" = "SKIPTTL" | "${ARG1}" = "LIMIT" ]?continue)
  2527. exten => s,n(report2),Set(__TTL=${IF($["foo${TTL}" = "foo"]?64:$[ ${TTL} - 1 ])})
  2528. exten => s,n,GotoIf($[ ${TTL} > 0 ]?continue)
  2529. exten => s,n,Wait(${RINGTIMER})
  2530. exten => s,n,Answer
  2531. exten => s,n,Wait(1)
  2532. exten => s,n,Playback(im-sorry&an-error-has-occured&with&call-forwarding)
  2533. exten => s,n,Macro(hangupcall,)
  2534. exten => s,n(limit),Answer
  2535. exten => s,n,Wait(1)
  2536. exten => s,n,Playback(beep&im-sorry&your&simul-call-limit-reached&goodbye)
  2537. exten => s,n,Macro(hangupcall,)
  2538. exten => s,n,Congestion(20)
  2539. exten => s,n(continue),Set(CALLERID(number)=${CALLERID(number):0:40})
  2540. exten => s,n,Set(CALLERID(name)=${CALLERID(name):0:40})
  2541. exten => s,n,Set(CDR(cnum)=${CALLERID(num)})
  2542. exten => s,n,Set(CDR(cnam)=${CALLERID(name)})
  2543. exten => s,n,Set(CHANNEL(language)=${MASTER_CHANNEL(CHANNEL(language))})
  2544.  
  2545. exten => h,1,Macro(hangupcall,)
  2546.  
  2547. ;--== end of [macro-user-callerid] ==--;
  2548.  
  2549.  
  2550. [macro-outbound-callerid]
  2551. include => macro-outbound-callerid-custom
  2552. exten => s,1,ExecIf($["${CALLINGPRES_SV}" != ""]?Set(CALLERPRES()=${CALLINGPRES_SV}))
  2553. exten => s,n,ExecIf($["${REALCALLERIDNUM:1:2}" = ""]?Set(REALCALLERIDNUM=${CALLERID(number)}))
  2554. exten => s,n(start),GotoIf($[ $["${REALCALLERIDNUM}" = ""] | $["${KEEPCID}" != "TRUE"] | $["${OUTKEEPCID_${ARG1}}" = "on"] ]?normcid)
  2555. exten => s,n,Set(USEROUTCID=${REALCALLERIDNUM})
  2556. exten => s,n,GotoIf($["foo${DB(AMPUSER/${REALCALLERIDNUM}/device)}" = "foo"]?bypass)
  2557. exten => s,n(normcid),Set(USEROUTCID=${DB(AMPUSER/${AMPUSER}/outboundcid)})
  2558. exten => s,n(bypass),Set(EMERGENCYCID=${DB(DEVICE/${REALCALLERIDNUM}/emergency_cid)})
  2559. exten => s,n,Set(TRUNKOUTCID=${OUTCID_${ARG1}})
  2560. exten => s,n,GotoIf($["${EMERGENCYROUTE:1:2}" = "" | "${EMERGENCYCID:1:2}" = ""]?trunkcid)
  2561. exten => s,n,Set(CALLERID(all)=${EMERGENCYCID})
  2562. exten => s,n,Set(CDR(outbound_cnum)=${CALLERID(num)})
  2563. exten => s,n,Set(CDR(outbound_cnam)=${CALLERID(name)})
  2564. exten => s,n(exit),MacroExit()
  2565. exten => s,n(trunkcid),ExecIf($[${LEN(${TRUNKOUTCID})} != 0]?Set(CALLERID(all)=${TRUNKOUTCID}))
  2566. exten => s,n(usercid),ExecIf($[${LEN(${USEROUTCID})} != 0]?Set(CALLERID(all)=${USEROUTCID}))
  2567. exten => s,n,ExecIf($[${LEN(${TRUNKCIDOVERRIDE})} != 0 | ${LEN(${FORCEDOUTCID_${ARG1}})} != 0]?Set(CALLERID(all)=${IF($[${LEN(${FORCEDOUTCID_${ARG1}})}=0]?${TRUNKCIDOVERRIDE}:${FORCEDOUTCID_${ARG1}})}))
  2568. exten => s,n(hidecid),ExecIf($["${CALLERID(name)}"="hidden"]?Set(CALLERPRES()=prohib_passed_screen))
  2569. exten => s,n,Set(CDR(outbound_cnum)=${CALLERID(num)})
  2570. exten => s,n,Set(CDR(outbound_cnam)=${CALLERID(name)})
  2571.  
  2572. ;--== end of [macro-outbound-callerid] ==--;
  2573.  
  2574.  
  2575. [from-zaptel]
  2576. include => from-zaptel-custom
  2577. include => from-dahdi
  2578. exten => foo,1,Noop(bar)
  2579.  
  2580. ;--== end of [from-zaptel] ==--;
  2581.  
  2582.  
  2583. [from-dahdi]
  2584. include => from-dahdi-custom
  2585. exten => _X.,1,Set(DID=${EXTEN})
  2586. exten => _X.,n,Goto(s,1)
  2587.  
  2588. exten => s,1,Noop(Entering from-dahdi with DID == ${DID})
  2589. exten => s,n,Ringing()
  2590. exten => s,n,Set(DID=${IF($["${DID}"= ""]?s:${DID})})
  2591. exten => s,n,Noop(DID is now ${DID})
  2592. exten => s,n,GotoIf($["${CHANNEL:0:5}"="DAHDI"]?dahdiok:checkzap)
  2593. exten => s,n(checkzap),GotoIf($["${CHANNEL:0:3}"="Zap"]?zapok:neither)
  2594. exten => s,n(neither),Goto(from-pstn,${DID},1)
  2595. exten => s,n,Macro(Hangupcall,dummy)
  2596. exten => s,n(dahdiok),Noop(Is a DAHDi Channel)
  2597. exten => s,n,Set(CHAN=${CHANNEL:6})
  2598. exten => s,n,Set(CHAN=${CUT(CHAN,-,1)})
  2599. exten => s,n,Macro(from-dahdi-${CHAN},${DID},1)
  2600. exten => s,n,Noop(Returned from Macro from-dahdi-${CHAN})
  2601. exten => s,n,Goto(from-pstn,${DID},1)
  2602. exten => s,n(zapok),Noop(Is a Zaptel Channel)
  2603. exten => s,n,Set(CHAN=${CHANNEL:4})
  2604. exten => s,n,Set(CHAN=${CUT(CHAN,-,1)})
  2605. exten => s,n,Macro(from-dahdi-${CHAN},${DID},1)
  2606. exten => s,n,Noop(Returned from Macro from-dahdi-${CHAN})
  2607. exten => s,n,Goto(from-pstn,${DID},1)
  2608.  
  2609. ;--== end of [from-dahdi] ==--;
  2610.  
  2611.  
  2612. [vm-callme]
  2613. include => vm-callme-custom
  2614. exten => s,1,Answer
  2615. exten => s,n,Wait(1)
  2616. exten => s,n(repeat),Background(${MSG}&silence/2&vm-repeat&vm-starmain)
  2617. exten => s,n,WaitExten(15,)
  2618.  
  2619. exten => 5,1,Goto(s,repeat)
  2620.  
  2621. exten => #,1,Playback(vm-goodbye)
  2622. exten => #,n,Hangup
  2623.  
  2624. exten => *,1,Macro(get-vmcontext,${MBOX})
  2625. exten => *,n,VoiceMailMain(${MBOX}@${VMCONTEXT},s)
  2626.  
  2627. exten => i,1,Playback(pm-invalid-option)
  2628. exten => i,n,Goto(s,repeat)
  2629.  
  2630. exten => t,1,Playback(vm-goodbye)
  2631. exten => t,n,Hangup
  2632.  
  2633. exten => h,1,Hangup
  2634.  
  2635. ;--== end of [vm-callme] ==--;
  2636.  
  2637.  
  2638. [macro-dial-confirm]
  2639. include => macro-dial-confirm-custom
  2640. exten => s,1,Set(DB(RG/${ARG4}/${CHANNEL})=RINGING)
  2641. exten => s,n,Set(__UNIQCHAN=${CHANNEL})
  2642. exten => s,n,Set(USE_CONFIRMATION=TRUE)
  2643. exten => s,n,Set(RINGGROUP_INDEX=${ARG4})
  2644. exten => s,n,Set(FORCE_CONFIRM=)
  2645. exten => s,n,Set(ARG4=)
  2646. exten => s,n,Macro(dial,${ARG1},${ARG2},${ARG3})
  2647. exten => s,n,Noop(Deleting: RG/${RINGGROUP_INDEX}/${CHANNEL} ${DB_DELETE(RG/${RINGGROUP_INDEX}/${CHANNEL})})
  2648. exten => s,n,Set(USE_CONFIRMATION=)
  2649. exten => s,n,Set(RINGGROUP_INDEX=)
  2650.  
  2651. ;--== end of [macro-dial-confirm] ==--;
  2652.  
  2653.  
  2654. [macro-setmusic]
  2655. include => macro-setmusic-custom
  2656. exten => s,1,Set(CHANNEL(musicclass)=${ARG1})
  2657.  
  2658. ;--== end of [macro-setmusic] ==--;
  2659.  
  2660.  
  2661. [macro-block-cf]
  2662. include => macro-block-cf-custom
  2663. exten => _X.,1,Hangup
  2664.  
  2665. exten => s-ANSWER,1,Noop(Call successfully answered - Hanging up now)
  2666. exten => s-ANSWER,n,Macro(hangupcall,)
  2667.  
  2668. ;--== end of [macro-block-cf] ==--;
  2669.  
  2670.  
  2671. [macro-vm]
  2672. include => macro-vm-custom
  2673. exten => s,1,Macro(user-callerid,SKIPTTL)
  2674. exten => s,n,Set(VMGAIN=${IF($["foo${VM_GAIN}"!="foo"]?"g(${VM_GAIN})": )})
  2675. exten => s,n,Macro(blkvm-check,)
  2676. exten => s,n,GotoIf($["${GOSUB_RETVAL}" != "TRUE"]?vmx,1)
  2677. exten => s,n,Hangup
  2678.  
  2679. exten => vmx,1,Set(MEXTEN=${ARG1})
  2680. exten => vmx,n,Set(MMODE=${ARG2})
  2681. exten => vmx,n,Set(RETVM=${ARG3})
  2682. exten => vmx,n,Set(MODE=${IF($["${MMODE}"="BUSY"]?busy:unavail)})
  2683. exten => vmx,n,GotoIf($["${DB(AMPUSER/${MEXTEN}/vmx/${MODE}/state)}" != "enabled"]?chknomsg)
  2684. exten => vmx,n,Set(VM_OPTS=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/vmxopts/timeout)}" = "1"]?${DB_RESULT}:${VM_OPTS})})
  2685. exten => vmx,n(chknomsg),GotoIf($["${MMODE}"="NOMESSAGE"]?s-${MMODE},1)
  2686. exten => vmx,n,GotoIf($["${MMODE}" != "DIRECTDIAL"]?notdirect)
  2687. exten => vmx,n,Set(MODE=${IF($["${REGEX("[b]" ${VM_DDTYPE})}" = "1"]?busy:${MODE})})
  2688. exten => vmx,n(notdirect),Noop(Checking if ext ${MEXTEN} is enabled: ${DB(AMPUSER/${MEXTEN}/vmx/${MODE}/state)})
  2689. exten => vmx,n,GotoIf($["${DB(AMPUSER/${MEXTEN}/vmx/${MODE}/state)}" != "enabled"]?s-${MMODE},1)
  2690. exten => vmx,n,Macro(get-vmcontext,${MEXTEN})
  2691. exten => vmx,n,GotoIf($[(${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/temp.wav)} = 1) || (${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/temp.WAV)} = 1)]?tmpgreet)
  2692. exten => vmx,n,GotoIf($[(${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/${MODE}.wav)} = 0) && (${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/${MODE}.WAV)} = 0)]?nofile)
  2693. exten => vmx,n,Set(LOOPCOUNT=0)
  2694. exten => vmx,n,Set(VMX_REPEAT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/repeat)}" = "1"]?${DB_RESULT}:${VMX_REPEAT})})
  2695. exten => vmx,n(vmxtime),Set(VMX_TIMEOUT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/timeout)}" = "1"]?${DB_RESULT}:${VMX_TIMEOUT})})
  2696. exten => vmx,n(vmxloops),Set(VMX_LOOPS=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/loops)}" = "1"]?${DB_RESULT}:${VMX_LOOPS})})
  2697. exten => vmx,n(vmxanswer),Answer
  2698. exten => vmx,n(loopstart),Read(ACTION,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/${MODE},1,skip,${VMX_REPEAT},${VMX_TIMEOUT})
  2699. exten => vmx,n,GotoIf($["${EXISTS(${ACTION})}" = "1"]?checkopt)
  2700. exten => vmx,n(noopt),Noop(Timeout: going to timeout dest)
  2701. exten => vmx,n,Set(VMX_OPTS=${DB(AMPUSER/${MEXTEN}/vmx/${MODE}/vmxopts/timeout)})
  2702. exten => vmx,n(chktime),GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/timedest/ext)}" = "0"]?dotime)
  2703. exten => vmx,n,Set(VMX_TIMEDEST_EXT=${DB_RESULT})
  2704. exten => vmx,n,Set(VMX_TIMEDEST_CONTEXT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/timedest/context)}" = "1"]?${DB_RESULT}:${VMX_TIMEDEST_CONTEXT})})
  2705. exten => vmx,n(timepri),Set(VMX_TIMEDEST_PRI=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/timedest/pri)}" = "1"]?${DB_RESULT}:${VMX_TIMEDEST_PRI})})
  2706. exten => vmx,n(dotime),Goto(${VMX_TIMEDEST_CONTEXT},${VMX_TIMEDEST_EXT},${VMX_TIMEDEST_PRI})
  2707. exten => vmx,n(checkopt),GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/${ACTION}/ext)}" = "1"]?doopt)
  2708. exten => vmx,n,GotoIf($["${ACTION}" = "0"]?o,1)
  2709. exten => vmx,n,GotoIf($["${ACTION}" = "*"]?adef,1)
  2710. exten => vmx,n,Set(LOOPCOUNT=$[${LOOPCOUNT} + 1])
  2711. exten => vmx,n,GotoIf($[${LOOPCOUNT} > ${VMX_LOOPS}]?toomany)
  2712. exten => vmx,n,Playback(pm-invalid-option&please-try-again)
  2713. exten => vmx,n,Goto(loopstart)
  2714. exten => vmx,n(toomany),Noop(Too Many invalid entries, got to invalid dest)
  2715. exten => vmx,n,Set(VMX_OPTS=${VMX_OPTS_LOOP})
  2716. exten => vmx,n,Set(VMX_OPTS=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/vmxopts/loops)}" = "1"]?${DB_RESULT}:${VMX_OPTS})})
  2717. exten => vmx,n(chkloop),GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/loopdest/ext)}" = "0"]?doloop)
  2718. exten => vmx,n,Set(VMX_LOOPDEST_EXT=${DB_RESULT})
  2719. exten => vmx,n,Set(VMX_LOOPDEST_CONTEXT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/loopdest/context)}" = "1"]?${DB_RESULT}:${VMX_LOOPDEST_CONTEXT})})
  2720. exten => vmx,n(looppri),Set(VMX_LOOPDEST_PRI=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/loopdest/pri)}" = "1"]?${DB_RESULT}:${VMX_LOOPDEST_PRI})})
  2721. exten => vmx,n(doloop),Goto(${VMX_LOOPDEST_CONTEXT},${VMX_LOOPDEST_EXT},${VMX_LOOPDEST_PRI})
  2722. exten => vmx,n(doopt),Noop(Got a valid option: ${DB_RESULT})
  2723. exten => vmx,n,Set(VMX_EXT=${DB_RESULT})
  2724. exten => vmx,n,GotoIf($["${VMX_EXT}" != "dovm"]?getdest)
  2725. exten => vmx,n(vmxopts),Set(VMX_OPTS=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/vmxopts/dovm)}" = "1"]?${DB_RESULT}:${VMX_OPTS_DOVM})})
  2726. exten => vmx,n(vmxdovm),Goto(dovm,1)
  2727. exten => vmx,n(getdest),Set(VMX_CONTEXT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/${ACTION}/context)}" = "1"]?${DB_RESULT}:${VMX_CONTEXT})})
  2728. exten => vmx,n(vmxpri),Set(VMX_PRI=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/${ACTION}/pri)}" = "1"]?${DB_RESULT}:${VMX_PRI})})
  2729. exten => vmx,n(vmxgoto),Goto(${VMX_CONTEXT},${VMX_EXT},${VMX_PRI})
  2730. exten => vmx,n(nofile),Noop(File for mode: ${MODE} does not exist, SYSTEMSTATUS: ${SYSTEMSTATUS}, going to normal voicemail)
  2731. exten => vmx,n,Goto(s-${MMODE},1)
  2732. exten => vmx,n(tmpgreet),Noop(Temporary Greeting Detected, going to normal voicemail)
  2733. exten => vmx,n,Goto(s-${MMODE},1)
  2734.  
  2735. exten => dovm,1,Noop(VMX Timeout - go to voicemail)
  2736. exten => dovm,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VMX_OPTS}${VMGAIN})
  2737. exten => dovm,n,Goto(exit-${VMSTATUS},1)
  2738.  
  2739. exten => s-BUSY,1,Noop(BUSY voicemail)
  2740. exten => s-BUSY,n,Macro(get-vmcontext,${MEXTEN})
  2741. exten => s-BUSY,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VM_OPTS}b${VMGAIN})
  2742. exten => s-BUSY,n,Goto(exit-${VMSTATUS},1)
  2743.  
  2744. exten => s-NOMESSAGE,1,Noop(NOMESSAGE (beeb only) voicemail)
  2745. exten => s-NOMESSAGE,n,Macro(get-vmcontext,${MEXTEN})
  2746. exten => s-NOMESSAGE,n,VoiceMail(${MEXTEN}@${VMCONTEXT},s${VM_OPTS}${VMGAIN})
  2747. exten => s-NOMESSAGE,n,Goto(exit-${VMSTATUS},1)
  2748.  
  2749. exten => s-DIRECTDIAL,1,Noop(DIRECTDIAL voicemail)
  2750. exten => s-DIRECTDIAL,n,Macro(get-vmcontext,${MEXTEN})
  2751. exten => s-DIRECTDIAL,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VM_OPTS}${VM_DDTYPE}${VMGAIN})
  2752. exten => s-DIRECTDIAL,n,Goto(exit-${VMSTATUS},1)
  2753.  
  2754. exten => _s-.,1,Macro(get-vmcontext,${MEXTEN})
  2755. exten => _s-.,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VM_OPTS}u${VMGAIN})
  2756. exten => _s-.,n,Goto(exit-${VMSTATUS},1)
  2757.  
  2758. exten => o,1,Playback(one-moment-please)
  2759. exten => o,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/0/ext)}" = "0"]?doopdef)
  2760. exten => o,n,Set(VMX_OPDEST_EXT=${DB_RESULT})
  2761. exten => o,n(opcontext),Set(VMX_OPDEST_CONTEXT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/0/context)}" = "1"]?${DB_RESULT}:${VMX_CONTEXT})})
  2762. exten => o,n(oppri),Set(VMX_OPDEST_PRI=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/0/pri)}" = "1"]?${DB_RESULT}:${VMX_PRI})})
  2763. exten => o,n,Goto(${VMX_OPDEST_CONTEXT},${VMX_OPDEST_EXT},${VMX_OPDEST_PRI})
  2764. exten => o,n(doopdef),GotoIf($["x${OPERATOR_XTN}"="x"]?nooper:from-internal,${OPERATOR_XTN},1)
  2765. exten => o,n(nooper),GotoIf($["x${FROM_DID}"="x"]?nodid)
  2766. exten => o,n,Dial(Local/${FROM_DID}@from-pstn,)
  2767. exten => o,n,Macro(hangup,)
  2768. exten => o,n(nodid),Dial(Local/s@from-pstn,)
  2769. exten => o,n,Macro(hangup,)
  2770.  
  2771. exten => a,1,Macro(get-vmcontext,${MEXTEN})
  2772. exten => a,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/*/ext)}" = "0"]?adef,1)
  2773. exten => a,n,Set(VMX_ADEST_EXT=${DB_RESULT})
  2774. exten => a,n(acontext),Set(VMX_ADEST_CONTEXT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/*/context)}" = "1"]?${DB_RESULT}:${VMX_CONTEXT})})
  2775. exten => a,n(apri),Set(VMX_ADEST_PRI=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/*/pri)}" = "1"]?${DB_RESULT}:${VMX_PRI})})
  2776. exten => a,n,Goto(${VMX_ADEST_CONTEXT},${VMX_ADEST_EXT},${VMX_ADEST_PRI})
  2777.  
  2778. exten => adef,1,VoiceMailMain(${MEXTEN}@${VMCONTEXT})
  2779. exten => adef,n,GotoIf($["${RETVM}" = "RETURN"]?exit-RETURN,1)
  2780. exten => adef,n,Hangup
  2781.  
  2782. exten => exit-FAILED,1,Playback(im-sorry&an-error-has-occured)
  2783. exten => exit-FAILED,n,GotoIf($["${RETVM}" = "RETURN"]?exit-RETURN,1)
  2784. exten => exit-FAILED,n,Hangup
  2785.  
  2786. exten => exit-SUCCESS,1,GotoIf($["${RETVM}" = "RETURN"]?exit-RETURN,1)
  2787. exten => exit-SUCCESS,n,Playback(goodbye)
  2788. exten => exit-SUCCESS,n,Hangup
  2789.  
  2790. exten => exit-USEREXIT,1,GotoIf($["${RETVM}" = "RETURN"]?exit-RETURN,1)
  2791. exten => exit-USEREXIT,n,Playback(goodbye)
  2792. exten => exit-USEREXIT,n,Hangup
  2793.  
  2794. exten => exit-RETURN,1,Noop(Returning From Voicemail because macro)
  2795.  
  2796. exten => t,1,Hangup
  2797.  
  2798. ;--== end of [macro-vm] ==--;
  2799.  
  2800.  
  2801. [macro-exten-vm]
  2802. include => macro-exten-vm-custom
  2803. exten => s,1,Macro(user-callerid,)
  2804. exten => s,n,Set(RingGroupMethod=none)
  2805. exten => s,n,Set(__EXTTOCALL=${ARG2})
  2806. exten => s,n,Set(__PICKUPMARK=${ARG2})
  2807. exten => s,n,Set(RT=${IF($["${ARG1}"!="novm" | "${DB(CFU/${EXTTOCALL})}"!="" | "${DB(CFB/${EXTTOCALL})}"!="" | "${ARG3}"="1" | "${ARG4}"="1" | "${ARG5}"="1"]?${RINGTIMER}:)})
  2808. exten => s,n,ExecIf($[$["${REDIRECTING(reason)}" = "send_to_vm" | "${SIP_HEADER(X-Digium-Call-Feature)}" = "feature_send_to_vm"] & "${ARG1}" != "novm"]?Macro(vm,${ARG1},DIRECTDIAL,${IVR_RETVM}))
  2809. exten => s,n,ExecIf($[$["${REDIRECTING(reason)}" = "send_to_vm" | "${SIP_HEADER(X-Digium-Call-Feature)}" = "feature_send_to_vm"] & "${ARG1}" != "novm"]?MacroExit())
  2810. exten => s,n(checkrecord),Gosub(sub-record-check,s,1(exten,${EXTTOCALL},))
  2811. exten => s,n,GotoIf($["${AMPUSER}"=""|${LEN(${FROM_DID})}|"${DB(AMPUSER/${EXTTOCALL}/answermode)}"!="intercom"|${LEN(${BLINDTRANSFER})}|"${EXTENSION_STATE(${EXTTOCALL})}"!="NOT_INUSE"|"${CC_RECALL}"!=""]?macrodial)
  2812. exten => s,n,Set(INTERCOM_EXT_DOPTIONS=${DIAL_OPTIONS})
  2813. exten => s,n,Set(INTERCOM_RETURN=TRUE)
  2814. exten => s,n,Gosub(ext-intercom,*80${EXTTOCALL},1())
  2815. exten => s,n,Set(INTERCOM_RETURN=)
  2816. exten => s,n,Set(INTERCOM_EXT_DOPTIONS=)
  2817. exten => s,n(macrodial),GosubIf($["${INTERCOM_CALL}"="TRUE" & ${LEN(${BLINDTRANSFER})}]?clrheader,1())
  2818. exten => s,n,Macro(dial-one,${RT},${DIAL_OPTIONS},${EXTTOCALL})
  2819. exten => s,n,Set(SV_DIALSTATUS=${DIALSTATUS})
  2820. exten => s,n(calldocfu),GosubIf($[("${SV_DIALSTATUS}"="NOANSWER"|"${SV_DIALSTATUS}"="CHANUNAVAIL") & "${DB(CFU/${EXTTOCALL})}"!="" & "${SCREEN}"=""]?docfu,1())
  2821. exten => s,n(calldocfb),GosubIf($["${SV_DIALSTATUS}"="BUSY" & "${DB(CFB/${EXTTOCALL})}"!="" & "${SCREEN}"=""]?docfb,1())
  2822. exten => s,n,Set(DIALSTATUS=${SV_DIALSTATUS})
  2823. exten => s,n,ExecIf($[("${DIALSTATUS}"="NOANSWER"&"${ARG3}"="1")|("${DIALSTATUS}"="BUSY"&"${ARG4}"="1")|("${DIALSTATUS}"="CHANUNAVAIL"&"${ARG5}"="1")]?MacroExit())
  2824. exten => s,n,GotoIf($["${ARG1}"="novm"]?s-${DIALSTATUS},1)
  2825. exten => s,n,Macro(vm,${ARG1},${DIALSTATUS},${IVR_RETVM})
  2826.  
  2827. exten => docfu,1(docfu),ExecIf($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="-1"|("${ARG1}"="novm"&"${ARG3}"="1")]?StackPop())
  2828. exten => docfu,n,GotoIf($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="-1"|("${ARG1}"="novm"&"${ARG3}"="1")]?from-internal,${DB(CFU/${EXTTOCALL})},1)
  2829. exten => docfu,n,Set(RTCF=${IF($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="0"]?${RT}:${DB(AMPUSER/${EXTTOCALL}/cfringtimer)})})
  2830. exten => docfu,n,Dial(Local/${DB(CFU/${EXTTOCALL})}@from-internal/n,${RTCF},${DIAL_OPTIONS})
  2831. exten => docfu,n,Return()
  2832.  
  2833. exten => docfb,1(docfu),ExecIf($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="-1"|("${ARG1}"="novm"&"${ARG4}"="1")]?StackPop())
  2834. exten => docfb,n,GotoIf($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="-1"|("${ARG1}"="novm"&"${ARG4}"="1")]?from-internal,${DB(CFB/${EXTTOCALL})},1)
  2835. exten => docfb,n,Set(RTCF=${IF($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="0"]?${RT}:${DB(AMPUSER/${EXTTOCALL}/cfringtimer)})})
  2836. exten => docfb,n,Dial(Local/${DB(CFB/${EXTTOCALL})}@from-internal/n,${RTCF},${DIAL_OPTIONS})
  2837. exten => docfb,n,Return()
  2838.  
  2839. exten => clrheader,1,ExecIf($[${LEN(${SIPURI})}&"${SIPURI}"="${SIP_URI_OPTIONS}"]?Set(SIP_URI_OPTIONS=))
  2840. exten => clrheader,n,ExecIf($[${LEN(${ALERTINFO})}]?SIPRemoveHeader(${ALERTINFO}))
  2841. exten => clrheader,n,ExecIf($[${LEN(${CALLINFO})}]?SIPRemoveHeader(${CALLINFO}))
  2842. exten => clrheader,n,Return()
  2843.  
  2844. exten => s-BUSY,1,GotoIf($["${IVR_RETVM}"="RETURN" & "${IVR_CONTEXT}"!=""]?exit,1)
  2845. exten => s-BUSY,n,Playtones(busy)
  2846. exten => s-BUSY,n,Busy(20)
  2847.  
  2848. exten => _s-!,1,GotoIf($["${IVR_RETVM}"="RETURN" & "${IVR_CONTEXT}"!=""]?exit,1)
  2849. exten => _s-!,n,Playtones(congestion)
  2850. exten => _s-!,n,Congestion(10)
  2851.  
  2852. exten => exit,1,Playback(beep&line-busy-transfer-menu&silence/1)
  2853. exten => exit,n,MacroExit()
  2854.  
  2855. ;--== end of [macro-exten-vm] ==--;
  2856.  
  2857.  
  2858. [macro-simple-dial]
  2859. include => macro-simple-dial-custom
  2860. exten => s,1,Set(__EXTTOCALL=${ARG1})
  2861. exten => s,n,Set(RT=${ARG2})
  2862. exten => s,n,Set(CFUEXT=${DB(CFU/${EXTTOCALL})})
  2863. exten => s,n,Set(CFBEXT=${DB(CFB/${EXTTOCALL})})
  2864. exten => s,n,Set(CWI_TMP=${CWIGNORE})
  2865. exten => s,n(macrodial),Macro(dial-one,${RT},${DIAL_OPTIONS},${EXTTOCALL})
  2866. exten => s,n,Set(__CWIGNORE=${CWI_TMP})
  2867. exten => s,n,Set(PR_DIALSTATUS=${DIALSTATUS})
  2868. exten => s,n(calldocfu),GosubIf($["${PR_DIALSTATUS}"="NOANSWER" & "${CFUEXT}"!=""]?docfu,1())
  2869. exten => s,n(calldocfb),GosubIf($["${PR_DIALSTATUS}"="BUSY" & "${CFBEXT}"!=""]?docfb,1())
  2870. exten => s,n,Set(DIALSTATUS=${PR_DIALSTATUS})
  2871. exten => s,n,Goto(s-${DIALSTATUS},1)
  2872.  
  2873. exten => docfu,1,GotoIf($["${DB(AMPUSER/${CFUEXT}/device)}" = "" ]?chlocal)
  2874. exten => docfu,n,Dial(Local/${CFUEXT}@ext-local,${RT},${DIAL_OPTIONS})
  2875. exten => docfu,n,Return()
  2876. exten => docfu,n(chlocal),Dial(Local/${CFUEXT}@from-internal/n,${RT},${DIAL_OPTIONS})
  2877. exten => docfu,n,Return()
  2878.  
  2879. exten => docfb,1,GotoIf($["${DB(AMPUSER/${CFBEXT}/device)}" = "" ]?chlocal)
  2880. exten => docfb,n,Dial(Local/${CFBEXT}@ext-local,${RT},${DIAL_OPTIONS})
  2881. exten => docfb,n,Return()
  2882. exten => docfb,n(chlocal),Dial(Local/${CFBEXT}@from-internal/n,${RT},${DIAL_OPTIONS})
  2883. exten => docfb,n,Return()
  2884.  
  2885. exten => _s-.,1,Noop(Extension is reporting ${EXTEN})
  2886.  
  2887. ;--== end of [macro-simple-dial] ==--;
  2888.  
  2889.  
  2890. [macro-blkvm-setifempty]
  2891. include => macro-blkvm-setifempty-custom
  2892. exten => s,1,GotoIf($[!${EXISTS(${BLKVM_CHANNEL})}]?init)
  2893. exten => s,n,Set(GOSUB_RETVAL=${SHARED(BLKVM,${BLKVM_CHANNEL})})
  2894. exten => s,n,MacroExit()
  2895. exten => s,n(init),Set(__BLKVM_CHANNEL=${CHANNEL})
  2896. exten => s,n,Set(SHARED(BLKVM,${BLKVM_CHANNEL})=TRUE)
  2897. exten => s,n,Set(GOSUB_RETVAL=TRUE)
  2898. exten => s,n,MacroExit()
  2899.  
  2900. ;--== end of [macro-blkvm-setifempty] ==--;
  2901.  
  2902.  
  2903. [macro-blkvm-set]
  2904. include => macro-blkvm-set-custom
  2905. exten => s,1,ExecIf($[!${EXISTS(${BLKVM_CHANNEL})} | "{ARG1}" = "reset"]?Set(__BLKVM_CHANNEL=${CHANNEL}))
  2906. exten => s,n,Set(SHARED(BLKVM,${BLKVM_CHANNEL})=TRUE)
  2907. exten => s,n,Set(GOSUB_RETVAL=TRUE)
  2908. exten => s,n,MacroExit()
  2909.  
  2910. ;--== end of [macro-blkvm-set] ==--;
  2911.  
  2912.  
  2913. [macro-blkvm-clr]
  2914. include => macro-blkvm-clr-custom
  2915. exten => s,1,Set(SHARED(BLKVM,${BLKVM_CHANNEL})=)
  2916. exten => s,n,Set(GOSUB_RETVAL=)
  2917. exten => s,n,MacroExit()
  2918.  
  2919. ;--== end of [macro-blkvm-clr] ==--;
  2920.  
  2921.  
  2922. [macro-blkvm-check]
  2923. include => macro-blkvm-check-custom
  2924. exten => s,1,Set(GOSUB_RETVAL=${SHARED(BLKVM,${BLKVM_CHANNEL})})
  2925. exten => s,n,ExecIf($["${GOSUB_RETVAL}"="" & "${CC_RECALL}"="1"]?Set(GOSUB_RETVAL=TRUE))
  2926. exten => s,n,MacroExit()
  2927.  
  2928. ;--== end of [macro-blkvm-check] ==--;
  2929.  
  2930.  
  2931. [macro-hangupcall]
  2932. include => macro-hangupcall-custom
  2933. exten => s,1(start),GotoIf($["${USE_CONFIRMATION}"="" | "${RINGGROUP_INDEX}"="" | "${CHANNEL}"!="${UNIQCHAN}"]?theend)
  2934. exten => s,n(delrgi),Noop(Deleting: RG/${RINGGROUP_INDEX}/${CHANNEL} ${DB_DELETE(RG/${RINGGROUP_INDEX}/${CHANNEL})})
  2935. exten => s,n(theend),ExecIf($["${ONETOUCH_RECFILE}"!="" & "${CDR(recordingfile)}"=""]?Set(CDR(recordingfile)=${ONETOUCH_RECFILE}))
  2936. exten => s,n,Hangup
  2937. exten => s,n,MacroExit()
  2938.  
  2939. ;--== end of [macro-hangupcall] ==--;
  2940.  
  2941.  
  2942. [macro-dial-one]
  2943. include => macro-dial-one-custom
  2944. exten => s,1,Set(DEXTEN=${ARG3})
  2945. exten => s,n,Set(DIALSTATUS_CW=)
  2946. exten => s,n,GosubIf($["${FROM_DID}"!="" & "${SCREEN}"="" & "${DB(AMPUSER/${DEXTEN}/screen)}"!=""]?screen,1())
  2947. exten => s,n,GosubIf($["${DB(CF/${DEXTEN})}"!=""]?cf,1())
  2948. exten => s,n,GotoIf($["${DEXTEN:-1}"="#" | "${DB(DND/${DEXTEN})}"=""]?skip1)
  2949. exten => s,n,Set(DEXTEN=)
  2950. exten => s,n,Set(DIALSTATUS=BUSY)
  2951. exten => s,n(skip1),GotoIf($["${DEXTEN}"=""]?nodial)
  2952. exten => s,n,GotoIf($["${DEXTEN:-1}"="#"]?continue)
  2953. exten => s,n,Set(EXTHASCW=${IF($["${CWIGNORE}"!=""]? :${DB(CW/${DEXTEN})})})
  2954. exten => s,n,GotoIf($["${EXTHASCW}"="" | "${DB(CFB/${DEXTEN})}"!="" | "${DB(CFU/${DEXTEN})}"!=""]?next1:cwinusebusy)
  2955. exten => s,n(next1),GotoIf($["${DB(CFU/${DEXTEN})}"!="" & ("${EXTENSION_STATE(${DEXTEN})}"="UNAVAILABLE" | "${EXTENSION_STATE(${DEXTEN})}"="UNKNOWN")]?docfu:skip3)
  2956. exten => s,n(docfu),Set(DEXTEN=)
  2957. exten => s,n,Set(DIALSTATUS=NOANSWER)
  2958. exten => s,n,Goto(nodial)
  2959. exten => s,n(skip3),GotoIf($["${EXTHASCW}"="" | "${DB(CFB/${DEXTEN})}"!=""]?next2:continue)
  2960. exten => s,n(next2),GotoIf($["${EXTENSION_STATE(${DEXTEN})}"="NOT_INUSE" | "${EXTENSION_STATE(${DEXTEN})}"="UNAVAILABLE" | "${EXTENSION_STATE(${DEXTEN})}"="UNKNOWN"]?continue)
  2961. exten => s,n,ExecIf($["${DB(CFB/${DEXTEN})}"!="" & "${CFIGNORE}"=""]?Set(DIALSTATUS=BUSY))
  2962. exten => s,n,GotoIf($["${EXTHASCW}"!="" | "${DEXTEN:-1}"="#"]?cwinusebusy)
  2963. exten => s,n,Set(DEXTEN=)
  2964. exten => s,n,Set(DIALSTATUS=BUSY)
  2965. exten => s,n,Goto(nodial)
  2966. exten => s,n(cwinusebusy),GotoIf($["${EXTHASCW}"!="" & "${CWINUSEBUSY}"="true"]?next3:continue)
  2967. exten => s,n(next3),ExecIf($["${EXTENSION_STATE(${DEXTEN})}"!="UNAVAILABLE" & "${EXTENSION_STATE(${DEXTEN})}"!="NOT_INUSE" & "${EXTENSION_STATE(${DEXTEN})}"!="UNKNOWN"]?Set(DIALSTATUS_CW=BUSY))
  2968. exten => s,n(continue),GotoIf($["${DEXTEN}"=""]?nodial)
  2969. exten => s,n,GosubIf($["${DEXTEN:-1}"!="#"]?dstring,1():dlocal,1())
  2970. exten => s,n,GotoIf($[${LEN(${DSTRING})}=0]?nodial)
  2971. exten => s,n,GotoIf($["${DEXTEN:-1}"="#"]?skiptrace)
  2972. exten => s,n,GosubIf($[${REGEX("^[\+]?[0-9]+$" ${CALLERID(number)})} = 1]?ctset,1():ctclear,1())
  2973. exten => s,n(skiptrace),Set(D_OPTIONS=${IF($["${NODEST}"!="" & ${REGEX("(M[(]auto-blkvm[)])" ${ARG2})} != 1]?${ARG2}M(auto-blkvm):${ARG2})})
  2974. exten => s,n,ExecIf($["${ALERT_INFO}"!=""]?SIPAddHeader(Alert-Info: ${ALERT_INFO}))
  2975. exten => s,n,ExecIf($["${SIPADDHEADER}"!=""]?SIPAddHeader(${SIPADDHEADER}))
  2976. exten => s,n,ExecIf($["${MOHCLASS}"!=""]?Set(CHANNEL(musicclass)=${MOHCLASS}))
  2977. exten => s,n,GosubIf($["${QUEUEWAIT}"!=""]?qwait,1())
  2978. exten => s,n,Set(__CWIGNORE=${CWIGNORE})
  2979. exten => s,n,Set(__KEEPCID=TRUE)
  2980. exten => s,n,GotoIf($["${USEGOTO}"="1"]?usegoto,1)
  2981. exten => s,n,GotoIf($["${DB(AMPUSER/${EXTTOCALL}/cidname)}" = "" || "${DB(AMPUSER/${AMPUSER}/cidname)}" = ""]?godial)
  2982. exten => s,n,Gosub(sub-presencestate-display,s,1(${EXTTOCALL}))
  2983. exten => s,n,Set(CONNECTEDLINE(name,i)=${DB(AMPUSER/${EXTTOCALL}/cidname)}${PRESENCESTATE_DISPLAY})
  2984. exten => s,n,Set(CONNECTEDLINE(num)=${EXTTOCALL})
  2985. exten => s,n,Set(D_OPTIONS=${D_OPTIONS}I)
  2986. exten => s,n(godial),Dial(${DSTRING},${ARG1},${D_OPTIONS})
  2987. exten => s,n,ExecIf($["${DIALSTATUS}"="ANSWER" & "${CALLER_DEST}"!=""]?MacroExit())
  2988. exten => s,n,ExecIf($["${DIALSTATUS_CW}"!=""]?Set(DIALSTATUS=${DIALSTATUS_CW}))
  2989. exten => s,n,GosubIf($[("${SCREEN}"!=""&("${DIALSTATUS}"="TORTURE"|"${DIALSTATUS}"="DONTCALL"))|"${DIALSTATUS}"="ANSWER"]?s-${DIALSTATUS},1())
  2990. exten => s,n,MacroExit()
  2991. exten => s,n(nodial),ExecIf($["${DIALSTATUS}" = ""]?Set(DIALSTATUS=NOANSWER))
  2992. exten => s,n,Noop(Returned from dial-one with nothing to call and DIALSTATUS: ${DIALSTATUS})
  2993. exten => s,n,MacroExit()
  2994.  
  2995. exten => h,1,Macro(hangupcall,)
  2996.  
  2997. exten => usegoto,1,Set(USEGOTO=)
  2998. exten => usegoto,n,Goto(from-internal,${DSTRING},1)
  2999.  
  3000. exten => screen,1,GotoIf($["${DB(AMPUSER/${DEXTEN}/screen)}"!="nomemory" | "${CALLERID(number)}"=""]?memory)
  3001. exten => screen,n,ExecIf($[${REGEX("^[0-9a-zA-Z ]+$" ${CALLERID(number)})} = 1]?System(rm -f ${ASTVARLIBDIR}/sounds/priv-callerintros/${CALLERID(number)}.*))
  3002. exten => screen,n(memory),Set(__SCREEN=${DB(AMPUSER/${DEXTEN}/screen)})
  3003. exten => screen,n,Set(__SCREEN_EXTEN=${DEXTEN})
  3004. exten => screen,n,Set(ARG2=${ARG2}p)
  3005. exten => screen,n,Return()
  3006.  
  3007. exten => cf,1,Set(CFAMPUSER=${IF($["${AMPUSER}"=""]?${CALLERID(number)}:${AMPUSER})})
  3008. 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())
  3009. 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)})}))
  3010. exten => cf,n,Set(DEXTEN=${IF($["${CFIGNORE}"=""]?"${DB(CF/${DEXTEN})}#": )})
  3011. exten => cf,n,ExecIf($["${DEXTEN}"!=""]?Return())
  3012. exten => cf,n,Set(DIALSTATUS=NOANSWER)
  3013. exten => cf,n,Return()
  3014.  
  3015. exten => qwait,1,ExecIf($["${SAVEDCIDNAME}" = ""]?Set(__SAVEDCIDNAME=${CALLERID(name)}))
  3016. exten => qwait,n,Set(ELAPSED=${MATH($[${EPOCH}+30-${QUEUEWAIT}]/60,int)})
  3017. exten => qwait,n,Set(CALLERID(name)=M${ELAPSED}:${SAVEDCIDNAME})
  3018. exten => qwait,n,Return()
  3019.  
  3020. exten => ctset,1,Set(DB(CALLTRACE/${DEXTEN})=${CALLERID(number)})
  3021. exten => ctset,n,Return()
  3022.  
  3023. exten => ctclear,1,Noop(Deleting: CALLTRACE/${DEXTEN} ${DB_DELETE(CALLTRACE/${DEXTEN})})
  3024. exten => ctclear,n,Return()
  3025.  
  3026. exten => dstring,1,Set(DSTRING=)
  3027. exten => dstring,n,Set(DEVICES=${DB(AMPUSER/${DEXTEN}/device)})
  3028. exten => dstring,n,ExecIf($["${DEVICES}"=""]?Return())
  3029. exten => dstring,n,ExecIf($["${DEVICES:0:1}"="&"]?Set(DEVICES=${DEVICES:1}))
  3030. exten => dstring,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)})
  3031. exten => dstring,n,Set(ITER=1)
  3032. exten => dstring,n(begin),Set(THISDIAL=${DB(DEVICE/${CUT(DEVICES,&,${ITER})}/dial)})
  3033. exten => dstring,n,GosubIf($["${ASTCHANDAHDI}" = "1"]?zap2dahdi,1())
  3034. exten => dstring,n,Set(DSTRING=${DSTRING}${THISDIAL}&)
  3035. exten => dstring,n,Set(ITER=$[${ITER}+1])
  3036. exten => dstring,n,GotoIf($[${ITER}<=${LOOPCNT}]?begin)
  3037. exten => dstring,n,Set(DSTRING=${DSTRING:0:$[${LEN(${DSTRING})}-1]})
  3038. exten => dstring,n,Return()
  3039.  
  3040. 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)})
  3041. exten => dlocal,n,Set(USEGOTO=${IF($["${ARG1}"=""]?1:0)})
  3042. exten => dlocal,n,Return()
  3043.  
  3044. exten => zap2dahdi,1,ExecIf($["${THISDIAL}" = ""]?Return())
  3045. exten => zap2dahdi,n,Set(NEWDIAL=)
  3046. exten => zap2dahdi,n,Set(LOOPCNT2=${FIELDQTY(THISDIAL,&)})
  3047. exten => zap2dahdi,n,Set(ITER2=1)
  3048. exten => zap2dahdi,n(begin2),Set(THISPART2=${CUT(THISDIAL,&,${ITER2})})
  3049. exten => zap2dahdi,n,ExecIf($["${THISPART2:0:3}" = "ZAP"]?Set(THISPART2=DAHDI${THISPART2:3}))
  3050. exten => zap2dahdi,n,Set(NEWDIAL=${NEWDIAL}${THISPART2}&)
  3051. exten => zap2dahdi,n,Set(ITER2=$[${ITER2} + 1])
  3052. exten => zap2dahdi,n,GotoIf($[${ITER2} <= ${LOOPCNT2}]?begin2)
  3053. exten => zap2dahdi,n,Set(THISDIAL=${NEWDIAL:0:$[${LEN(${NEWDIAL})}-1]})
  3054. exten => zap2dahdi,n,Return()
  3055.  
  3056. exten => s-TORTURE,1,Goto(app-blackhole,musiconhold,1)
  3057. exten => s-TORTURE,n,Macro(hangupcall,)
  3058.  
  3059. exten => s-DONTCALL,1,Answer
  3060. exten => s-DONTCALL,n,Wait(1)
  3061. exten => s-DONTCALL,n,Zapateller()
  3062. exten => s-DONTCALL,n,Playback(ss-noservice)
  3063. exten => s-DONTCALL,n,Macro(hangupcall,)
  3064.  
  3065. exten => s-CHANUNAVAIL,1,Macro(vm,${SCREEN_EXTEN},BUSY,${IVR_RETVM})
  3066. exten => s-CHANUNAVAIL,n,ExecIf($["${IVR_RETVM}"!="RETURN" | "${IVR_CONTEXT}"=""]?Hangup())
  3067. exten => s-CHANUNAVAIL,n,Return()
  3068.  
  3069. exten => s-NOANSWER,1,Macro(vm,${SCREEN_EXTEN},BUSY,${IVR_RETVM})
  3070. exten => s-NOANSWER,n,ExecIf($["${IVR_RETVM}"!="RETURN" | "${IVR_CONTEXT}"=""]?Hangup())
  3071. exten => s-NOANSWER,n,Return()
  3072.  
  3073. exten => s-BUSY,1,Macro(vm,${SCREEN_EXTEN},BUSY,${IVR_RETVM})
  3074. exten => s-BUSY,n,ExecIf($["${IVR_RETVM}"!="RETURN" | "${IVR_CONTEXT}"=""]?Hangup())
  3075. exten => s-BUSY,n,Return()
  3076.  
  3077. ;--== end of [macro-dial-one] ==--;
  3078.  
  3079.  
  3080. [from-internal-additional]
  3081. include => from-internal-additional-custom
  3082. include => app-calltrace
  3083. include => app-echo-test
  3084. include => app-speakextennum
  3085. include => app-speakingclock
  3086. include => app-dialvm
  3087. include => app-vmmain
  3088. include => app-recordings
  3089. include => vmblast-grp
  3090. include => app-callwaiting-cwoff
  3091. include => app-callwaiting-cwon
  3092. include => app-dnd-off
  3093. include => app-dnd-on
  3094. include => app-dnd-toggle
  3095. include => app-blacklist
  3096. include => ext-intercom-users
  3097. include => park-hints
  3098. include => ext-meetme
  3099. include => app-cf-busy-off
  3100. include => app-cf-busy-off-any
  3101. include => app-cf-busy-on
  3102. include => app-cf-busy-prompting-on
  3103. include => app-cf-off
  3104. include => app-cf-off-any
  3105. include => app-cf-on
  3106. include => app-cf-prompting-on
  3107. include => app-cf-unavailable-off
  3108. include => app-cf-unavailable-on
  3109. include => app-cf-unavailable-prompt-on
  3110. include => app-cf-toggle
  3111. include => app-campon-cancel
  3112. include => app-campon-request
  3113. include => app-campon-toggle
  3114. include => app-userlogonoff
  3115. include => ext-local-confirm
  3116. include => findmefollow-ringallv2
  3117. include => app-pickup
  3118. include => app-zapbarge
  3119. include => app-chanspy
  3120. include => ext-test
  3121. include => ext-local
  3122. include => outbound-allroutes
  3123. exten => h,1,Hangup
  3124.  
  3125. ;--== end of [from-internal-additional] ==--;
  3126.  
  3127.  
  3128. [from-internal-noxfer-additional]
  3129. include => from-internal-noxfer-additional-custom
  3130. exten => h,1,Hangup
  3131.  
  3132. ;--== end of [from-internal-noxfer-additional] ==--;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement