Advertisement
Guest User

Untitled

a guest
Nov 19th, 2014
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 61.95 KB | None | 0 0
  1. ;--------------------------------------------------------------------------------;
  2. ; Do NOT edit this file as it is auto-generated by FreePBX. All modifications to ;
  3. ; this file must be done via the web gui. There are alternative files to make ;
  4. ; custom modifications, details at: http://freepbx.org/configuration_files ;
  5. ;--------------------------------------------------------------------------------;
  6. ;
  7.  
  8. [globals]
  9. DYNAMIC_FEATURES = apprecord
  10. INTERCOMCODE = nointercom
  11. ASTETCDIR = /etc/asterisk
  12. ASTMODDIR = /usr/lib64/asterisk/modules
  13. ASTVARLIBDIR = /var/lib/asterisk
  14. ASTAGIDIR = /var/lib/asterisk/agi-bin
  15. ASTSPOOLDIR = /var/spool/asterisk
  16. ASTRUNDIR = /var/run/asterisk
  17. ASTLOGDIR = /var/log/asterisk
  18. CWINUSEBUSY = true
  19. AMPMGRUSER = admin
  20. AMPMGRPASS = amp111
  21. AMPDBENGINE = mysql
  22. AMPDBHOST =
  23. AMPDBNAME = asterisk
  24. AMPDBUSER = asteriskuser
  25. AMPDBPASS = amp109
  26. VMX_CONTEXT = from-internal
  27. VMX_PRI = 1
  28. VMX_TIMEDEST_CONTEXT =
  29. VMX_TIMEDEST_EXT = dovm
  30. VMX_TIMEDEST_PRI = 1
  31. VMX_LOOPDEST_CONTEXT =
  32. VMX_LOOPDEST_EXT = dovm
  33. VMX_LOOPDEST_PRI = 1
  34. MIXMON_DIR =
  35. MIXMON_POST =
  36. DIAL_OPTIONS = Ttr
  37. TRUNK_OPTIONS = Tt
  38. TRUNK_RING_TIMER = 300
  39. MIXMON_FORMAT = wav
  40. REC_POLICY = caller
  41. RINGTIMER_DEFAULT = 15
  42. TRANSFER_CONTEXT = from-internal-xfer
  43. ASTVERSION = 11.12.0
  44. ASTCHANDAHDI = 1
  45. NULL = ""
  46. ALLOW_SIP_ANON = no
  47. OUT_1 = DAHDI/G0
  48. OUTCID_1 =
  49. OUTMAXCHANS_1 =
  50. OUTFAIL_1 =
  51. OUTPREFIX_1 =
  52. OUTDISABLE_1 = off
  53. OUTKEEPCID_1 = off
  54. FORCEDOUTCID_1 =
  55. PREFIX_TRUNK_1 =
  56. OUT_2 = DAHDI/g1
  57. OUTCID_2 =
  58. OUTMAXCHANS_2 =
  59. OUTFAIL_2 =
  60. OUTPREFIX_2 =
  61. OUTDISABLE_2 = off
  62. OUTKEEPCID_2 = off
  63. FORCEDOUTCID_2 =
  64. PREFIX_TRUNK_2 =
  65. OUT_3 = DAHDI/g0
  66. OUTCID_3 =
  67. OUTMAXCHANS_3 =
  68. OUTFAIL_3 =
  69. OUTPREFIX_3 =
  70. OUTDISABLE_3 = off
  71. OUTKEEPCID_3 = off
  72. FORCEDOUTCID_3 =
  73. PREFIX_TRUNK_3 =
  74. #include globals_custom.conf
  75.  
  76. ;end of [globals]
  77.  
  78. [ext-featurecodes]
  79. include => ext-featurecodes-custom
  80. exten => 555,1,Goto(from-internal,555,1)
  81.  
  82. exten => 7777,1,Goto(from-internal,7777,1)
  83.  
  84. exten => 888,1,Goto(from-internal,888,1)
  85.  
  86. exten => *43,1,Goto(from-internal,*43,1)
  87.  
  88. exten => *60,1,Goto(from-internal,*60,1)
  89.  
  90. exten => *98,1,Goto(from-internal,*98,1)
  91.  
  92. ;--== end of [ext-featurecodes] ==--;
  93.  
  94.  
  95. [app-dialvm]
  96. include => app-dialvm-custom
  97. exten => *98,1,Answer
  98. exten => *98,n(start),Wait(1)
  99. exten => *98,n,Noop(app-dialvm: Asking for mailbox)
  100. exten => *98,n,Read(MAILBOX,vm-login,,,3,2)
  101. exten => *98,n(check),Noop(app-dialvm: Got Mailbox ${MAILBOX})
  102. exten => *98,n,Macro(get-vmcontext,${MAILBOX})
  103. exten => *98,n,Set(VMBOXEXISTSSTATUS=${IF(${MAILBOX_EXISTS(${MAILBOX}@${VMCONTEXT})}?SUCCESS:FAILED)})
  104. exten => *98,n,GotoIf($["${VMBOXEXISTSSTATUS}" = "SUCCESS"]?good:bad)
  105. exten => *98,n,Macro(hangupcall,)
  106. exten => *98,n(good),Noop(app-dialvm: Good mailbox ${MAILBOX}@${VMCONTEXT})
  107. exten => *98,n,VoiceMailMain(${MAILBOX}@${VMCONTEXT})
  108. exten => *98,n,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?playret)
  109. exten => *98,n,Macro(hangupcall,)
  110. exten => *98,n(bad),Noop(app-dialvm: BAD mailbox ${MAILBOX}@${VMCONTEXT})
  111. exten => *98,n,Wait(1)
  112. exten => *98,n,Noop(app-dialvm: Asking for password so people can't probe for existence of a mailbox)
  113. exten => *98,n,Read(FAKEPW,vm-password,,,3,2)
  114. exten => *98,n,Noop(app-dialvm: Asking for mailbox again)
  115. exten => *98,n,Read(MAILBOX,vm-incorrect-mailbox,,,3,2)
  116. exten => *98,n,Goto(check)
  117. exten => *98,n,Macro(hangupcall,)
  118. exten => *98,n(playret),Playback(beep&you-will-be-transfered-menu&silence/1)
  119. exten => *98,n,Goto(${IVR_CONTEXT},return,1)
  120.  
  121. exten => _*98.,1,Answer
  122. exten => _*98.,n,Wait(1)
  123. exten => _*98.,n,Macro(get-vmcontext,${EXTEN:3})
  124. exten => _*98.,n,VoiceMailMain(${EXTEN:3}@${VMCONTEXT})
  125. exten => _*98.,n,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?${IVR_CONTEXT},return,1)
  126. exten => _*98.,n,Macro(hangupcall,)
  127.  
  128. ;--== end of [app-dialvm] ==--;
  129.  
  130.  
  131. [app-vmmain]
  132. include => app-vmmain-custom
  133. exten => *97,1,Answer
  134. exten => *97,n,Wait(1)
  135. exten => *97,n,Macro(user-callerid,)
  136. exten => *97,n,Macro(get-vmcontext,${AMPUSER})
  137. exten => *97,n(check),Set(VMBOXEXISTSSTATUS=${IF(${MAILBOX_EXISTS(${AMPUSER}@${VMCONTEXT})}?SUCCESS:FAILED)})
  138. exten => *97,n,GotoIf($["${VMBOXEXISTSSTATUS}" = "SUCCESS"]?mbexist)
  139. exten => *97,n,VoiceMailMain()
  140. exten => *97,n,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?playret)
  141. exten => *97,n,Macro(hangupcall,)
  142. exten => *97,check+101(mbexist),VoiceMailMain(${AMPUSER}@${VMCONTEXT})
  143. exten => *97,n,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?playret)
  144. exten => *97,n,Macro(hangupcall,)
  145. exten => *97,n(playret),Playback(beep&you-will-be-transfered-menu&silence/1)
  146. exten => *97,n,Goto(${IVR_CONTEXT},return,1)
  147.  
  148. ;--== end of [app-vmmain] ==--;
  149.  
  150.  
  151. [app-calltrace]
  152. include => app-calltrace-custom
  153. exten => *69,1,Goto(app-calltrace-perform,s,1)
  154.  
  155. ;--== end of [app-calltrace] ==--;
  156.  
  157.  
  158. [app-calltrace-perform]
  159. include => app-calltrace-perform-custom
  160. exten => s,1,Answer
  161. exten => s,n,Wait(1)
  162. exten => s,n,Macro(user-callerid,)
  163. exten => s,n,Playback(info-about-last-call&telephone-number)
  164. exten => s,n,Set(lastcaller=${DB(CALLTRACE/${AMPUSER})})
  165. exten => s,n,GotoIf($[ $[ "${lastcaller}" = "" ] | $[ "${lastcaller}" = "unknown" ] ]?noinfo)
  166. exten => s,n,SayDigits(${lastcaller})
  167. exten => s,n,Set(TIMEOUT(digit)=3)
  168. exten => s,n,Set(TIMEOUT(response)=7)
  169. exten => s,n,Background(to-call-this-number&press-1)
  170. exten => s,n,Goto(fin)
  171. exten => s,n(noinfo),Playback(from-unknown-caller)
  172. exten => s,n,Macro(hangupcall,)
  173. exten => s,n(fin),Noop(Waiting for input)
  174. exten => s,n,WaitExten(60,)
  175. exten => s,n,Playback(sorry-youre-having-problems&goodbye)
  176.  
  177. exten => 1,1,Goto(from-internal,${lastcaller},1)
  178.  
  179. exten => i,1,Playback(vm-goodbye)
  180. exten => i,n,Macro(hangupcall,)
  181.  
  182. exten => t,1,Playback(vm-goodbye)
  183. exten => t,n,Macro(hangupcall,)
  184.  
  185. ;--== end of [app-calltrace-perform] ==--;
  186.  
  187.  
  188. [app-echo-test]
  189. include => app-echo-test-custom
  190. exten => *43,1,Answer
  191. exten => *43,n,Wait(1)
  192. exten => *43,n,Playback(demo-echotest)
  193. exten => *43,n,Echo()
  194. exten => *43,n,Playback(demo-echodone)
  195. exten => *43,n,Hangup
  196.  
  197. ;--== end of [app-echo-test] ==--;
  198.  
  199.  
  200. [app-speakextennum]
  201. include => app-speakextennum-custom
  202. exten => *65,1,Answer
  203. exten => *65,n,Wait(1)
  204. exten => *65,n,Macro(user-callerid,)
  205. exten => *65,n,Playback(your)
  206. exten => *65,n,Playback(extension)
  207. exten => *65,n,Playback(number)
  208. exten => *65,n,Playback(is)
  209. exten => *65,n,SayDigits(${AMPUSER})
  210. exten => *65,n,Wait(2)
  211. exten => *65,n,Hangup
  212.  
  213. ;--== end of [app-speakextennum] ==--;
  214.  
  215.  
  216. [sub-hr12format]
  217. include => sub-hr12format-custom
  218. exten => s,1,Goto(${CHANNEL(language)},1)
  219. exten => s,n,GotoIf($[${DIALPLAN_EXISTS(sub-hr12format,${CHANNEL(language)},1)}]?${CHANNEL(language)},1:en,1)
  220.  
  221. exten => i,1,Playback(at-tone-time-exactly)
  222. exten => i,n,SayUnixTime(${FutureTime},,IM 'and' S 'seconds' p)
  223. exten => i,n,Return()
  224.  
  225. exten => de,1,Playback(at-tone-time-exactly)
  226. exten => de,n,SayUnixTime(${FutureTime},,IMSp)
  227. exten => de,n,Return()
  228. exten => de,n,Playback(at-tone-time-exactly)
  229. exten => de,n,SayUnixTime(${FutureTime},,IMSp)
  230. exten => de,n,Return()
  231.  
  232. exten => en,1,Playback(at-tone-time-exactly)
  233. exten => en,n,SayUnixTime(${FutureTime},,IM 'and' S 'seconds' p)
  234. exten => en,n,Return()
  235.  
  236. ;--== end of [sub-hr12format] ==--;
  237.  
  238.  
  239. [app-speakingclock]
  240. include => app-speakingclock-custom
  241. exten => *60,1,Answer
  242. exten => *60,n,Wait(1)
  243. exten => *60,n,Set(NumLoops=0)
  244. exten => *60,n(start),Set(FutureTime=$[${EPOCH} + 11])
  245. exten => *60,n,Gosub(sub-hr12format,s,1())
  246. exten => *60,n(waitloop),Set(TimeLeft=$[${FutureTime} - ${EPOCH}])
  247. exten => *60,n,GotoIf($[${TimeLeft} < 1]?playbeep)
  248. exten => *60,n,Wait(1)
  249. exten => *60,n,Goto(waitloop)
  250. exten => *60,n(playbeep),Playback(beep)
  251. exten => *60,n,Wait(5)
  252. exten => *60,n,Set(NumLoops=$[${NumLoops} + 1])
  253. exten => *60,n,GotoIf($[${NumLoops} < 5]?start)
  254. exten => *60,n,Playback(goodbye)
  255. exten => *60,n,Hangup
  256.  
  257. ;--== end of [app-speakingclock] ==--;
  258.  
  259.  
  260. [sub-hr24format]
  261. include => sub-hr24format-custom
  262. exten => s,1,GotoIf($[${DIALPLAN_EXISTS(sub-hr24format,${CHANNEL(language)},1)}]?${CHANNEL(language)},1:en,1)
  263.  
  264. exten => en,1,Playback(at-tone-time-exactly)
  265. exten => en,n,SayUnixTime(${FutureTime},,kM 'and' S 'seconds')
  266. exten => en,n,Return()
  267.  
  268. exten => de,1,Playback(at-tone-time-exactly)
  269. exten => de,n,SayUnixTime(${FutureTime},,kMS)
  270. exten => de,n,Return()
  271.  
  272. ;--== end of [sub-hr24format] ==--;
  273.  
  274.  
  275. [app-recordings]
  276. include => app-recordings-custom
  277. exten => *77,1,Macro(user-callerid,)
  278. exten => *77,n,Wait(2)
  279. exten => *77,n,Macro(systemrecording,dorecord)
  280.  
  281. exten => *99,1,Macro(user-callerid,)
  282. exten => *99,n,Wait(2)
  283. exten => *99,n,Macro(systemrecording,docheck)
  284.  
  285. ;--== end of [app-recordings] ==--;
  286.  
  287.  
  288. [macro-systemrecording]
  289. include => macro-systemrecording-custom
  290. exten => s,1,Set(RECFILE=${IF($["${ARG2}" = ""]?/var/spool/asterisk/tmp/${AMPUSER}-ivrrecording:${ARG2})})
  291. exten => s,n,ExecIf($["${ARG3}" != ""]?Authenticate(${ARG3}))
  292. exten => s,n,Goto(${ARG1},1)
  293.  
  294. exten => dorecord,1,GotoIf($["${ARG2}" = ""]?skipremove)
  295. exten => dorecord,n,System(rm ${ASTVARLIBDIR}/sounds/${RECFILE}.*)
  296. exten => dorecord,n(skipremove),Record(${RECFILE}.wav,,,k)
  297. exten => dorecord,n,Wait(1)
  298. exten => dorecord,n,Goto(confmenu,1)
  299.  
  300. exten => docheck,1,Playback(beep)
  301. exten => docheck,n(dc_start),Background(${RECFILE},m,${CHANNEL(language)},macro-systemrecording)
  302. exten => docheck,n,Wait(1)
  303. exten => docheck,n,Goto(confmenu,1)
  304.  
  305. exten => confmenu,1,Background(to-listen-to-it&press-1&to-rerecord-it&press-star&astcc-followed-by-pound,m,${CHANNEL(language)},macro-systemrecording)
  306. exten => confmenu,n,Read(RECRESULT,,1,,,4)
  307. exten => confmenu,n,GotoIf($["x${RECRESULT}"="x*"]?dorecord,1)
  308. exten => confmenu,n,GotoIf($["x${RECRESULT}"="x1"]?docheck,2)
  309. exten => confmenu,n,Goto(1)
  310.  
  311. exten => 1,1,Goto(docheck,dc_start)
  312.  
  313. exten => *,1,Goto(dorecord,1)
  314.  
  315. exten => t,1,Playback(goodbye)
  316. exten => t,n,Hangup
  317.  
  318. exten => i,1,Playback(pm-invalid-option)
  319. exten => i,n,Goto(confmenu,1)
  320.  
  321. exten => h,1,Hangup
  322.  
  323. ;--== end of [macro-systemrecording] ==--;
  324.  
  325.  
  326. [app-userlogonoff]
  327. include => app-userlogonoff-custom
  328. exten => *12,1,Macro(user-logoff,)
  329. exten => *12,n(hook_off),Hangup
  330.  
  331. exten => *11,1,Macro(user-logon,)
  332. exten => *11,n(hook_on_1),Hangup
  333.  
  334. exten => _*11.,1,Macro(user-logon,${EXTEN:3},)
  335. exten => _*11.,n(hook_on_2),Hangup
  336.  
  337. ;--== end of [app-userlogonoff] ==--;
  338.  
  339.  
  340. [ext-local-confirm]
  341. include => ext-local-confirm-custom
  342. exten => _LC-.,1,ExecIf($["${ALERT_INFO}"!=""]?SIPAddHeader(Alert-Info: ${ALERT_INFO}))
  343. exten => _LC-.,n,Dial(${DB(DEVICE/${EXTEN:3}/dial)},${RT},${DIAL_OPTIONS}M(auto-confirm^${RG_IDX}))
  344.  
  345. ;--== end of [ext-local-confirm] ==--;
  346.  
  347.  
  348. [findmefollow-ringallv2]
  349. include => findmefollow-ringallv2-custom
  350. exten => _FMPR-.,1,NoCDR()
  351. exten => _FMPR-.,n,Set(RingGroupMethod=)
  352. exten => _FMPR-.,n,Set(USE_CONFIRMATION=)
  353. exten => _FMPR-.,n,Set(RINGGROUP_INDEX=)
  354. exten => _FMPR-.,n,Macro(simple-dial,${EXTEN:5},${FMREALPRERING})
  355. exten => _FMPR-.,n,ExecIf($["${DIALSTATUS}" = "BUSY"]?Set(SHARED(FM_DND,${FMUNIQUE})=DND))
  356. exten => _FMPR-.,n,Hangup
  357.  
  358. exten => _FMGL-.,1,NoCDR()
  359. exten => _FMGL-.,n,Set(ENDLOOP=$[${EPOCH} + ${FMPRERING} + 2])
  360. exten => _FMGL-.,n(start),GotoIf($["${SHARED(FM_DND,${FMUNIQUE})}" = "DND"]?dodnd)
  361. exten => _FMGL-.,n,Wait(1)
  362. exten => _FMGL-.,n,GotoIf($[${EPOCH} < ${ENDLOOP}]?start)
  363. exten => _FMGL-.,n,Set(SHARED(FM_DND,${FMUNIQUE})=)
  364. exten => _FMGL-.,n(dodial),Macro(dial,${FMGRPTIME},${DIAL_OPTIONS},${EXTEN:5})
  365. exten => _FMGL-.,n,Hangup
  366. exten => _FMGL-.,n+10(dodnd),Set(SHARED(FM_DND,${FMUNIQUE})=)
  367. exten => _FMGL-.,n,GotoIf($["${FMPRIME}" = "FALSE"]?dodial)
  368. exten => _FMGL-.,n,Hangup
  369.  
  370. ;--== end of [findmefollow-ringallv2] ==--;
  371.  
  372.  
  373. [app-pickup]
  374. include => app-pickup-custom
  375. exten => _**.,1,Macro(user-callerid,)
  376. exten => _**.,n,Set(PICKUP_EXTEN=${AMPUSER})
  377. exten => _**.,n,Pickup(${EXTEN:2}&${EXTEN:2}@PICKUPMARK)
  378. exten => _**.,n,Hangup
  379.  
  380. ;--== end of [app-pickup] ==--;
  381.  
  382.  
  383. [app-zapbarge]
  384. include => app-zapbarge-custom
  385. exten => 888,1,Macro(user-callerid,)
  386. exten => 888,n,Set(GROUP()=${CALLERID(number)})
  387. exten => 888,n,Answer
  388. exten => 888,n,Wait(1)
  389. exten => 888,n,DAHDIBarge()
  390. exten => 888,n,Hangup
  391.  
  392. ;--== end of [app-zapbarge] ==--;
  393.  
  394.  
  395. [app-chanspy]
  396. include => app-chanspy-custom
  397. exten => 555,1,Macro(user-callerid,)
  398. exten => 555,n,Answer
  399. exten => 555,n,Wait(1)
  400. exten => 555,n,ChanSpy()
  401. exten => 555,n,Hangup
  402.  
  403. ;--== end of [app-chanspy] ==--;
  404.  
  405.  
  406. [ext-test]
  407. include => ext-test-custom
  408. exten => 7777,1,Goto(from-pstn,${EXTEN},1)
  409.  
  410. exten => h,1,Macro(hangupcall,)
  411.  
  412. ;--== end of [ext-test] ==--;
  413.  
  414.  
  415. [ext-did]
  416. include => ext-did-custom
  417. include => ext-did-0001
  418. include => ext-did-0002
  419. exten => foo,1,Noop(bar)
  420.  
  421. ;--== end of [ext-did] ==--;
  422.  
  423.  
  424. [ext-did-0002]
  425. include => ext-did-0002-custom
  426. exten => _.,1,Set(__FROM_DID=${EXTEN})
  427. exten => _.,n,Gosub(sub-record-check,s,1(force,${EXTEN},always))
  428. exten => _.,n,Set(CDR(did)=${FROM_DID})
  429. exten => _.,n,ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
  430. exten => _.,n,Ringing()
  431. exten => _.,n,Set(__CALLINGPRES_SV=${CALLERPRES()})
  432. exten => _.,n,Set(CALLERPRES()=allowed_not_screened)
  433. exten => _.,n(dest-ext),Goto(ext-trunk,2,1)
  434.  
  435. ;--== end of [ext-did-0002] ==--;
  436.  
  437.  
  438. [ext-did-catchall]
  439. include => ext-did-catchall-custom
  440. exten => s,1,Noop(No DID or CID Match)
  441. exten => s,n(a2),Answer
  442. exten => s,n,Wait(2)
  443. exten => s,n,Playback(ss-noservice)
  444. exten => s,n,SayAlpha(${FROM_DID})
  445. exten => s,n,Hangup
  446.  
  447. exten => _.,1,Set(__FROM_DID=${EXTEN})
  448. exten => _.,n,Noop(Received an unknown call with DID set to ${EXTEN})
  449. exten => _.,n,Goto(s,a2)
  450.  
  451. exten => h,1,Hangup
  452.  
  453. ;--== end of [ext-did-catchall] ==--;
  454.  
  455.  
  456. [ext-local]
  457. include => ext-local-custom
  458. exten => 100,1,Set(__RINGTIMER=${IF($[${DB(AMPUSER/100/ringtimer)} > 0]?${DB(AMPUSER/100/ringtimer)}:${RINGTIMER_DEFAULT})})
  459. exten => 100,n,Macro(exten-vm,novm,100,0,0,0)
  460. exten => 100,n(dest),Set(__PICKUPMARK=)
  461. exten => 100,n,Goto(${IVR_CONTEXT},return,1)
  462. exten => 100,n,Goto(from-internal,100,1)
  463. exten => 100,hint,SIP/100
  464.  
  465. exten => vmret,1,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?playret)
  466. exten => vmret,n,Hangup
  467. exten => vmret,n(playret),Playback(exited-vm-will-be-transfered&silence/1)
  468. exten => vmret,n,Goto(${IVR_CONTEXT},return,1)
  469.  
  470. exten => h,1,Macro(hangupcall,)
  471.  
  472. ;--== end of [ext-local] ==--;
  473.  
  474.  
  475. [from-did-direct-ivr]
  476. include => from-did-direct-ivr-custom
  477. exten => 100,1,Macro(blkvm-clr,)
  478. exten => 100,n,Set(__NODEST=)
  479. exten => 100,n,Goto(from-did-direct,100,1)
  480.  
  481. ;--== end of [from-did-direct-ivr] ==--;
  482.  
  483.  
  484. [ext-trunk]
  485. include => ext-trunk-custom
  486. exten => 1,1,Set(TDIAL_STRING=DAHDI/G0)
  487. exten => 1,n,Set(DIAL_TRUNK=1)
  488. exten => 1,n,Goto(ext-trunk,tdial,1)
  489.  
  490. exten => 2,1,Set(TDIAL_STRING=DAHDI/g1)
  491. exten => 2,n,Set(DIAL_TRUNK=2)
  492. exten => 2,n,Goto(ext-trunk,tdial,1)
  493.  
  494. exten => 3,1,Set(TDIAL_STRING=DAHDI/g0)
  495. exten => 3,n,Set(DIAL_TRUNK=3)
  496. exten => 3,n,Goto(ext-trunk,tdial,1)
  497.  
  498. exten => tdial,1,Set(OUTBOUND_GROUP=OUT_${DIAL_TRUNK})
  499. exten => tdial,n,GotoIf($["${OUTMAXCHANS_${DIAL_TRUNK}}" = ""]?nomax)
  500. exten => tdial,n,GotoIf($[${GROUP_COUNT(OUT_${DIAL_TRUNK})} >= ${OUTMAXCHANS_${DIAL_TRUNK}}]?hangit)
  501. exten => tdial,n(nomax),ExecIf($["${CALLINGPRES_SV}" != ""]?Set(CALLERPRES()=${CALLINGPRES_SV}))
  502. exten => tdial,n,Set(DIAL_NUMBER=${FROM_DID})
  503. exten => tdial,n,GosubIf($["${PREFIX_TRUNK_${DIAL_TRUNK}}" != ""]?sub-flp-${DIAL_TRUNK},s,1())
  504. exten => tdial,n,Set(OUTNUM=${OUTPREFIX_${DIAL_TRUNK}}${DIAL_NUMBER})
  505. exten => tdial,n,Set(DIAL_TRUNK_OPTIONS=${IF($["${DB_EXISTS(TRUNK/${DIAL_TRUNK}/dialopts)}" = "1"]?${DB_RESULT}:${TRUNK_OPTIONS})})
  506. exten => tdial,n,Dial(${TDIAL_STRING}/${OUTNUM},${TRUNK_RING_TIMER},${DIAL_TRUNK_OPTIONS})
  507. exten => tdial,n,Set(CALLERID(number)=${CALLERID(number):0:40})
  508. exten => tdial,n,Set(CALLERID(name)=${CALLERID(name):0:40})
  509. exten => tdial,n(hangit),Hangup
  510.  
  511. ;--== end of [ext-trunk] ==--;
  512.  
  513.  
  514. [sub-record-cancel]
  515. include => sub-record-cancel-custom
  516. exten => s,1,Set(__REC_POLICY_MODE=${REC_POLICY_MODE_SAVE})
  517. exten => s,n,ExecIf($["${REC_STATUS}"!="RECORDING"]?Return())
  518. exten => s,n,StopMixMonitor()
  519. exten => s,n,Set(__REC_STATUS=)
  520. exten => s,n,Set(MON_BASE=${IF($[${LEN(${MIXMON_DIR})}]?${MIXMON_DIR}:${ASTSPOOLDIR}/monitor/)}${YEAR}/${MONTH}/${DAY}/)
  521. exten => s,n,Set(__MON_FMT=${IF($[${LEN(${MIXMON_FORMAT})}]?${IF($["${MIXMON_FORMAT}"="wav49"]?WAV:${MIXMON_FORMAT})}:wav)})
  522. exten => s,n,ExecIf($[${LEN(${CALLFILENAME})} & ${STAT(f,${MON_BASE}${CALLFILENAME}.${MON_FMT})}]?System(rm -f ${MON_BASE}${CALLFILENAME}.${MON_FMT}))
  523. exten => s,n,Set(__CALLFILENAME=)
  524. exten => s,n,Set(CDR(recordingfile)=)
  525. exten => s,n,Return()
  526.  
  527. ;--== end of [sub-record-cancel] ==--;
  528.  
  529.  
  530. [sub-record-check]
  531. include => sub-record-check-custom
  532. exten => s,1,Set(REC_POLICY_MODE_SAVE=${REC_POLICY_MODE})
  533. exten => s,n,GotoIf($["${BLINDTRANSFER}" = ""]?check)
  534. exten => s,n,ResetCDR()
  535. exten => s,n,GotoIf($["${REC_STATUS}" != "RECORDING"]?check)
  536. exten => s,n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)
  537. exten => s,n,MixMonitor(${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MIXMON_FORMAT},a,${MIXMON_POST})
  538. exten => s,n(check),Set(__MON_FMT=${IF($["${MIXMON_FORMAT}"="wav49"]?WAV:${MIXMON_FORMAT})})
  539. exten => s,n,GotoIf($["${REC_STATUS}"!="RECORDING"]?next)
  540. exten => s,n,Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT})
  541. exten => s,n,Return()
  542. exten => s,n(next),ExecIf($[!${LEN(${ARG1})}]?Return())
  543. exten => s,n,ExecIf($["${REC_POLICY_MODE}"="" & "${ARG3}"!=""]?Set(__REC_POLICY_MODE=${ARG3}))
  544. exten => s,n,GotoIf($["${REC_STATUS}"!=""]?${ARG1},1)
  545. exten => s,n,Set(__REC_STATUS=INITIALIZED)
  546. exten => s,n,Set(NOW=${EPOCH})
  547. exten => s,n,Set(__DAY=${STRFTIME(${NOW},,%d)})
  548. exten => s,n,Set(__MONTH=${STRFTIME(${NOW},,%m)})
  549. exten => s,n,Set(__YEAR=${STRFTIME(${NOW},,%Y)})
  550. exten => s,n,Set(__TIMESTR=${YEAR}${MONTH}${DAY}-${STRFTIME(${NOW},,%H%M%S)})
  551. exten => s,n,Set(__FROMEXTEN=${IF($[${LEN(${AMPUSER})}]?${AMPUSER}:${IF($[${LEN(${REALCALLERIDNUM})}]?${REALCALLERIDNUM}:unknown)})})
  552. exten => s,n,Set(__CALLFILENAME=${ARG1}-${ARG2}-${FROMEXTEN}-${TIMESTR}-${UNIQUEID})
  553. exten => s,n,Goto(${ARG1},1)
  554.  
  555. exten => rg,1,GosubIf($["${REC_POLICY_MODE}"="always"]?record,1(${EXTEN},${REC_POLICY_MODE},${FROMEXTEN}))
  556. exten => rg,n,Return()
  557.  
  558. exten => force,1,GosubIf($["${REC_POLICY_MODE}"="always"]?record,1(${EXTEN},${REC_POLICY_MODE},${FROMEXTEN}))
  559. exten => force,n,Return()
  560.  
  561. exten => q,1,GosubIf($["${REC_POLICY_MODE}"="always"]?recq,1(${EXTEN},${ARG2},${FROMEXTEN}))
  562. exten => q,n,Return()
  563.  
  564. exten => out,1,ExecIf($["${REC_POLICY_MODE}"=""]?Set(__REC_POLICY_MODE=${DB(AMPUSER/${FROMEXTEN}/recording/out/external)}))
  565. exten => out,n,GosubIf($["${REC_POLICY_MODE}"="always"]?record,1(exten,${ARG2},${FROMEXTEN}))
  566. exten => out,n,Return()
  567.  
  568. exten => exten,1,GotoIf($["${REC_POLICY_MODE}"!=""]?callee)
  569. exten => exten,n,Set(__REC_POLICY_MODE=${IF($[${LEN(${FROM_DID})}]?${DB(AMPUSER/${ARG2}/recording/in/external)}:${DB(AMPUSER/${ARG2}/recording/in/internal)})})
  570. exten => exten,n,GotoIf($["${REC_POLICY_MODE}"="dontcare"]?caller)
  571. exten => exten,n,GotoIf($["${DB(AMPUSER/${FROMEXTEN}/recording/out/internal)}"="dontcare" | "${FROM_DID}"!=""]?callee)
  572. exten => exten,n,ExecIf($[${LEN(${DB(AMPUSER/${FROMEXTEN}/recording/priority)})}]?Set(CALLER_PRI=${DB(AMPUSER/${FROMEXTEN}/recording/priority)}):Set(CALLER_PRI=0))
  573. exten => exten,n,ExecIf($[${LEN(${DB(AMPUSER/${ARG2}/recording/priority)})}]?Set(CALLEE_PRI=${DB(AMPUSER/${ARG2}/recording/priority)}):Set(CALLEE_PRI=0))
  574. exten => exten,n,GotoIf($["${CALLER_PRI}"="${CALLEE_PRI}"]?${REC_POLICY}:${IF($[${CALLER_PRI}>${CALLEE_PRI}]?caller:callee)})
  575. exten => exten,n(callee),GosubIf($["${REC_POLICY_MODE}"="always"]?record,1(${EXTEN},${ARG2},${FROMEXTEN}))
  576. exten => exten,n,Return()
  577. exten => exten,n(caller),Set(__REC_POLICY_MODE=${DB(AMPUSER/${FROMEXTEN}/recording/out/internal)})
  578. exten => exten,n,GosubIf($["${REC_POLICY_MODE}"="always"]?record,1(${EXTEN},${ARG2},${FROMEXTEN}))
  579. exten => exten,n,Return()
  580.  
  581. exten => conf,1,Gosub(recconf,1(${EXTEN},${ARG2},${ARG2}))
  582. exten => conf,n,Return()
  583.  
  584. exten => page,1,GosubIf($["${REC_POLICY_MODE}"="always"]?recconf,1(${EXTEN},${ARG2},${FROMEXTEN}))
  585. exten => page,n,Return()
  586.  
  587. exten => record,1,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)
  588. exten => record,n,MixMonitor(${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MIXMON_FORMAT},,${MIXMON_POST})
  589. exten => record,n,Set(__REC_STATUS=RECORDING)
  590. exten => record,n,Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT})
  591. exten => record,n,Return()
  592.  
  593. exten => recq,1,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)
  594. exten => recq,n,Set(MONITOR_FILENAME=${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME})
  595. exten => recq,n,MixMonitor(${MONITOR_FILENAME}.${MIXMON_FORMAT},${MONITOR_OPTIONS},${MIXMON_POST})
  596. exten => recq,n,Set(__REC_STATUS=RECORDING)
  597. exten => recq,n,Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT})
  598. exten => recq,n,Return()
  599.  
  600. exten => recconf,1,Set(__CALLFILENAME=${IF($[${MEETME_INFO(parties,${ARG2})}]?${DB(RECCONF/${ARG2})}:${ARG1}-${ARG2}-${ARG3}-${TIMESTR}-${UNIQUEID})})
  601. exten => recconf,n,ExecIf($[!${MEETME_INFO(parties,${ARG2})}]?Set(DB(RECCONF/${ARG2})=${CALLFILENAME}))
  602. exten => recconf,n,Set(MEETME_RECORDINGFILE=${IF($[${LEN(${MIXMON_DIR})}]?${MIXMON_DIR}:${ASTSPOOLDIR}/monitor/)}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME})
  603. exten => recconf,n,Set(MEETME_RECORDINGFORMAT=${MIXMON_FORMAT})
  604. exten => recconf,n,ExecIf($["${REC_POLICY_MODE}"!="always"]?Return())
  605. exten => recconf,n,Set(__REC_STATUS=RECORDING)
  606. exten => recconf,n,Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT})
  607. exten => recconf,n,Return()
  608.  
  609. ;--== end of [sub-record-check] ==--;
  610.  
  611.  
  612. [macro-one-touch-record]
  613. include => macro-one-touch-record-custom
  614. exten => s,1,Set(ONETOUCH_REC_SCRIPT_STATUS=)
  615. exten => s,n,System(/var/lib/asterisk/bin/one_touch_record.php ${CHANNEL(name)})
  616. exten => s,n,Noop(ONETOUCH_REC_SCRIPT_STATUS: [${ONETOUCH_REC_SCRIPT_STATUS}])
  617. exten => s,n,ExecIf($["${ONETOUCH_REC}"="RECORDING"]?Playback(beep))
  618. exten => s,n,ExecIf($["${ONETOUCH_REC}"="PAUSED"]?Playback(beep&beep))
  619. exten => s,n,MacroExit()
  620.  
  621. ;--== end of [macro-one-touch-record] ==--;
  622.  
  623.  
  624. [macro-prepend-cid]
  625. include => macro-prepend-cid-custom
  626. exten => s,1,GotoIf($["${RGPREFIX}" = ""]?REPCID)
  627. exten => s,n,GotoIf($["${RGPREFIX}" != "${CALLERID(name):0:${LEN(${RGPREFIX})}}"]?REPCID)
  628. exten => s,n,Set(CALLERID(name)=${CALLERID(name):${LEN(${RGPREFIX})}})
  629. exten => s,n,Set(_RGPREFIX=)
  630. exten => s,n(REPCID),Set(_RGPREFIX=${ARG1})
  631. exten => s,n,Set(CALLERID(name)=${RGPREFIX}${CALLERID(name)})
  632.  
  633. ;--== end of [macro-prepend-cid] ==--;
  634.  
  635.  
  636. [outbound-allroutes]
  637. include => outbound-allroutes-custom
  638. include => outrt-1 ; Default-Outbound
  639. exten => foo,1,Noop(bar)
  640.  
  641. ;--== end of [outbound-allroutes] ==--;
  642.  
  643.  
  644. [outrt-1] ; Default-Outbound
  645. include => outrt-1-custom
  646. exten => _.X,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  647. exten => _.X,n,Gosub(sub-record-check,s,1(force,${EXTEN},always))
  648. exten => _.X,n,Set(ROUTE_CIDSAVE=${CALLERID(all)})
  649. exten => _.X,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  650. exten => _.X,n,ExecIf($["${KEEPCID}"!="TRUE" & ${LEN(${TRUNKCIDOVERRIDE})}=0]?Set(TRUNKCIDOVERRIDE=01278454000))
  651. exten => _.X,n,Set(_NODEST=)
  652. exten => _.X,n,Gosub(sub-record-check,s,1(out,${EXTEN},))
  653. exten => _.X,n,Macro(dialout-trunk,1,${EXTEN},,off)
  654. exten => _.X,n,Set(CALLERID(all)=${ROUTE_CIDSAVE})
  655. exten => _.X,n,Set(_KEEPCID=TRUE)
  656. exten => _.X,n,Goto(ext-trunk,3,1)
  657.  
  658. ;--== end of [outrt-1] ==--;
  659.  
  660.  
  661. [app-blackhole]
  662. include => app-blackhole-custom
  663. exten => hangup,1,Noop(Blackhole Dest: Hangup)
  664. exten => hangup,n,Hangup
  665.  
  666. exten => zapateller,1,Noop(Blackhole Dest: Play SIT Tone)
  667. exten => zapateller,n,Answer
  668. exten => zapateller,n,Zapateller()
  669.  
  670. exten => musiconhold,1,Noop(Blackhole Dest: Put caller on hold forever)
  671. exten => musiconhold,n,Answer
  672. exten => musiconhold,n,MusicOnHold()
  673.  
  674. exten => congestion,1,Noop(Blackhole Dest: Congestion)
  675. exten => congestion,n,Playtones(congestion)
  676. exten => congestion,n,Congestion(20)
  677. exten => congestion,n,Hangup
  678.  
  679. exten => busy,1,Noop(Blackhole Dest: Busy)
  680. exten => busy,n,Busy(20)
  681. exten => busy,n,Hangup
  682.  
  683. exten => ring,1,Noop(Blackhole Dest: Ring)
  684. exten => ring,n,Answer
  685. exten => ring,n,Playtones(ring)
  686. exten => ring,n,Wait(300)
  687. exten => ring,n,Hangup
  688.  
  689. ;--== end of [app-blackhole] ==--;
  690.  
  691.  
  692. [bad-number]
  693. include => bad-number-custom
  694. exten => _X.,1,ResetCDR()
  695. exten => _X.,n,NoCDR()
  696. exten => _X.,n,Progress
  697. exten => _X.,n,Wait(1)
  698. exten => _X.,n,Progress
  699. exten => _X.,n,Playback(silence/1&cannot-complete-as-dialed&check-number-dial-again,noanswer)
  700. exten => _X.,n,Wait(1)
  701. exten => _X.,n,Congestion(20)
  702. exten => _X.,n,Hangup
  703.  
  704. ;--== end of [bad-number] ==--;
  705.  
  706.  
  707. [macro-confirm]
  708. include => macro-confirm-custom
  709. exten => s,1,Set(LOOPCOUNT=0)
  710. exten => s,n,Set(__MACRO_RESULT=ABORT)
  711. 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})})})
  712. exten => s,n(start),Background(${MSG1},m,${CHANNEL(language)},macro-confirm)
  713. exten => s,n,Read(INPUT,,1,,,4)
  714. exten => s,n,GotoIf($[${LEN(${INPUT})} > 0]?${INPUT},1:t,1)
  715.  
  716. exten => 1,1,GotoIf($["${DB_EXISTS(RG/${ARG3}/${UNIQCHAN})}"="0" & "${SHARED(ANSWER_STATUS,${FORCE_CONFIRM})}"=""]?toolate,1)
  717. exten => 1,n,Noop(Deleting: RG/${ARG3}/${UNIQCHAN} ${DB_DELETE(RG/${ARG3}/${UNIQCHAN})})
  718. exten => 1,n,Macro(blkvm-clr,)
  719. exten => 1,n,Set(SHARED(ANSWER_STATUS,${FORCE_CONFIRM})=)
  720. exten => 1,n(skip),Set(__MACRO_RESULT=)
  721. exten => 1,n,ExecIf($[("${MOHCLASS}"!="default") & ("${MOHCLASS}"!="")]?Set(CHANNEL(musicclass)=${MOHCLASS}))
  722. exten => 1,n(exitopt1),MacroExit()
  723.  
  724. exten => 2,1,Goto(noanswer,1)
  725.  
  726. exten => 3,1,SayDigits(${CALLCONFIRMCID})
  727. exten => 3,n,GotoIf($["${DB_EXISTS(RG/${ARG3}/${UNIQCHAN})}"="0" & "${SHARED(ANSWER_STATUS,${FORCE_CONFIRM})}"=""]?toolate,1:s,start)
  728.  
  729. exten => t,1,GotoIf($["${DB_EXISTS(RG/${ARG3}/${UNIQCHAN})}"="0" & "${SHARED(ANSWER_STATUS,${FORCE_CONFIRM})}"=""]?toolate,1)
  730. exten => t,n,Set(LOOPCOUNT=$[ ${LOOPCOUNT} + 1 ])
  731. exten => t,n,GotoIf($[ ${LOOPCOUNT} < 5 ]?s,start:noanswer,1)
  732.  
  733. exten => _X,1,Background(invalid,m,${CHANNEL(language)},macro-confirm)
  734. exten => _X,n,GotoIf($["${DB_EXISTS(RG/${ARG3}/${UNIQCHAN})}"="0" | "${SHARED(ANSWER_STATUS,${FORCE_CONFIRM})}"=""]?toolate,1)
  735. exten => _X,n,Set(LOOPCOUNT=$[ ${LOOPCOUNT} + 1 ])
  736. exten => _X,n,GotoIf($[ ${LOOPCOUNT} < 5 ]?s,start:noanswer,1)
  737.  
  738. exten => noanswer,1,Set(__MACRO_RESULT=ABORT)
  739. exten => noanswer,n(exitnoanswer),MacroExit()
  740.  
  741. exten => toolate,1,Set(MSG2=${IF($["foo${ARG2}" != "foo"]?${ARG2}:"incoming-call-no-longer-avail")})
  742. exten => toolate,n,Playback(${MSG2})
  743. exten => toolate,n,Set(__MACRO_RESULT=ABORT)
  744. exten => toolate,n(exittoolate),MacroExit()
  745.  
  746. exten => h,1,Macro(hangupcall,)
  747.  
  748. ;--== end of [macro-confirm] ==--;
  749.  
  750.  
  751. [macro-auto-confirm]
  752. include => macro-auto-confirm-custom
  753. exten => s,1,Set(__MACRO_RESULT=)
  754. exten => s,n,Set(CFIGNORE=)
  755. exten => s,n,Set(MASTER_CHANNEL(CFIGNORE)=)
  756. exten => s,n,Set(FORWARD_CONTEXT=from-internal)
  757. exten => s,n,Set(MASTER_CHANNEL(FORWARD_CONTEXT)=from-internal)
  758. exten => s,n,Macro(blkvm-clr,)
  759. exten => s,n,Noop(Deleting: RG/${ARG1}/${UNIQCHAN} ${DB_DELETE(RG/${ARG1}/${UNIQCHAN})})
  760. exten => s,n,ExecIf($[!${REGEX("[^0-9]" ${DIALEDPEERNUMBER})} && "${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(MASTER_CHANNEL(CONNECTEDLINE(num))=${DIALEDPEERNUMBER}))
  761. exten => s,n,ExecIf($[!${REGEX("[^0-9]" ${DIALEDPEERNUMBER})} && "${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(MASTER_CHANNEL(CONNECTEDLINE(name))=${DB(AMPUSER/${DIALEDPEERNUMBER}/cidname)}))
  762.  
  763. ;--== end of [macro-auto-confirm] ==--;
  764.  
  765.  
  766. [macro-auto-blkvm]
  767. include => macro-auto-blkvm-custom
  768. exten => s,1,Set(__MACRO_RESULT=)
  769. exten => s,n,Set(CFIGNORE=)
  770. exten => s,n,Set(MASTER_CHANNEL(CFIGNORE)=)
  771. exten => s,n,Set(FORWARD_CONTEXT=from-internal)
  772. exten => s,n,Set(MASTER_CHANNEL(FORWARD_CONTEXT)=from-internal)
  773. exten => s,n,Macro(blkvm-clr,)
  774. exten => s,n,ExecIf($[!${REGEX("[^0-9]" ${DIALEDPEERNUMBER})} && "${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(MASTER_CHANNEL(CONNECTEDLINE(num))=${DIALEDPEERNUMBER}))
  775. exten => s,n,ExecIf($[!${REGEX("[^0-9]" ${DIALEDPEERNUMBER})} && "${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(MASTER_CHANNEL(CONNECTEDLINE(name))=${DB(AMPUSER/${DIALEDPEERNUMBER}/cidname)}))
  776.  
  777. ;--== end of [macro-auto-blkvm] ==--;
  778.  
  779.  
  780. [sub-pincheck]
  781. include => sub-pincheck-custom
  782. exten => s,1,Authenticate(${ARG3},)
  783. exten => s,n,ResetCDR()
  784. exten => s,n,Return()
  785.  
  786. ;--== end of [sub-pincheck] ==--;
  787.  
  788.  
  789. [macro-dialout-trunk]
  790. include => macro-dialout-trunk-custom
  791. exten => s,1,Set(DIAL_TRUNK=${ARG1})
  792. exten => s,n,GosubIf($[$["${ARG3}" != ""] & $["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]]?sub-pincheck,s,1())
  793. exten => s,n,GotoIf($["x${OUTDISABLE_${DIAL_TRUNK}}" = "xon"]?disabletrunk,1)
  794. exten => s,n,Set(DIAL_NUMBER=${ARG2})
  795. exten => s,n,Set(DIAL_TRUNK_OPTIONS=${DIAL_OPTIONS})
  796. exten => s,n,Set(OUTBOUND_GROUP=OUT_${DIAL_TRUNK})
  797. exten => s,n,GotoIf($["${OUTMAXCHANS_${DIAL_TRUNK}}foo" = "foo"]?nomax)
  798. exten => s,n,GotoIf($[ ${GROUP_COUNT(OUT_${DIAL_TRUNK})} >= ${OUTMAXCHANS_${DIAL_TRUNK}} ]?chanfull)
  799. exten => s,n(nomax),GotoIf($["${INTRACOMPANYROUTE}" = "YES"]?skipoutcid)
  800. exten => s,n,Set(DIAL_TRUNK_OPTIONS=${IF($["${DB_EXISTS(TRUNK/${DIAL_TRUNK}/dialopts)}" = "1"]?${DB_RESULT}:${TRUNK_OPTIONS})})
  801. exten => s,n,Macro(outbound-callerid,${DIAL_TRUNK})
  802. exten => s,n(skipoutcid),GosubIf($["${PREFIX_TRUNK_${DIAL_TRUNK}}" != ""]?sub-flp-${DIAL_TRUNK},s,1())
  803. exten => s,n,Set(OUTNUM=${OUTPREFIX_${DIAL_TRUNK}}${DIAL_NUMBER})
  804. exten => s,n,Set(custom=${CUT(OUT_${DIAL_TRUNK},:,1)})
  805. exten => s,n,ExecIf($["${MOHCLASS}"!="default" & "${MOHCLASS}"!="" & "${FORCE_CONFIRM}"="" ]?Set(DIAL_TRUNK_OPTIONS=M(setmusic^${MOHCLASS})${DIAL_TRUNK_OPTIONS}))
  806. exten => s,n,ExecIf($["${FORCE_CONFIRM}"!="" ]?Set(DIAL_TRUNK_OPTIONS=${DIAL_TRUNK_OPTIONS}M(confirm)))
  807. exten => s,n(gocall),Macro(dialout-trunk-predial-hook,)
  808. exten => s,n,GotoIf($["${PREDIAL_HOOK_RET}" = "BYPASS"]?bypass,1)
  809. exten => s,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(CONNECTEDLINE(num,i)=${DIAL_NUMBER}))
  810. exten => s,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(CONNECTEDLINE(name,i)=CID:${CALLERID(number)}))
  811. exten => s,n,GotoIf($["${custom}" = "AMP"]?customtrunk)
  812. exten => s,n,Dial(${OUT_${DIAL_TRUNK}}/${OUTNUM},${TRUNK_RING_TIMER},${DIAL_TRUNK_OPTIONS})
  813. exten => s,n,Noop(Dial failed for some reason with DIALSTATUS = ${DIALSTATUS} and HANGUPCAUSE = ${HANGUPCAUSE})
  814. exten => s,n,GotoIf($["${ARG4}" = "on"]?continue,1:s-${DIALSTATUS},1)
  815. exten => s,n(customtrunk),Set(pre_num=${CUT(OUT_${DIAL_TRUNK},$,1)})
  816. exten => s,n,Set(the_num=${CUT(OUT_${DIAL_TRUNK},$,2)})
  817. exten => s,n,Set(post_num=${CUT(OUT_${DIAL_TRUNK},$,3)})
  818. exten => s,n,GotoIf($["${the_num}" = "OUTNUM"]?outnum:skipoutnum)
  819. exten => s,n(outnum),Set(the_num=${OUTNUM})
  820. exten => s,n(skipoutnum),Dial(${pre_num:4}${the_num}${post_num},${TRUNK_RING_TIMER},${DIAL_TRUNK_OPTIONS})
  821. exten => s,n,Noop(Dial failed for some reason with DIALSTATUS = ${DIALSTATUS} and HANGUPCAUSE = ${HANGUPCAUSE})
  822. exten => s,n,GotoIf($["${ARG4}" = "on"]?continue,1:s-${DIALSTATUS},1)
  823. exten => s,n(chanfull),Noop(max channels used up)
  824.  
  825. exten => s-BUSY,1,Noop(Dial failed due to trunk reporting BUSY - giving up)
  826. exten => s-BUSY,n,Playtones(busy)
  827. exten => s-BUSY,n,Busy(20)
  828.  
  829. exten => s-ANSWER,1,Noop(Call successfully answered - Hanging up now)
  830. exten => s-ANSWER,n,Macro(hangupcall,)
  831.  
  832. exten => s-NOANSWER,1,Noop(Dial failed due to trunk reporting NOANSWER - giving up)
  833. exten => s-NOANSWER,n,Progress
  834. exten => s-NOANSWER,n,Playback(number-not-answering,noanswer)
  835. exten => s-NOANSWER,n,Congestion(20)
  836.  
  837. exten => s-INVALIDNMBR,1,Noop(Dial failed due to trunk reporting Address Incomplete - giving up)
  838. exten => s-INVALIDNMBR,n,Progress
  839. exten => s-INVALIDNMBR,n,Playback(ss-noservice,noanswer)
  840. exten => s-INVALIDNMBR,n,Busy(20)
  841.  
  842. exten => s-CHANGED,1,Noop(Dial failed due to trunk reporting Number Changed - giving up)
  843. exten => s-CHANGED,n,Playtones(busy)
  844. exten => s-CHANGED,n,Busy(20)
  845.  
  846. exten => _s-.,1,Set(RC=${IF($[${ISNULL(${HANGUPCAUSE})}]?0:${HANGUPCAUSE})})
  847. exten => _s-.,n,Goto(${RC},1)
  848.  
  849. exten => 17,1,Goto(s-BUSY,1)
  850.  
  851. exten => 18,1,Goto(s-NOANSWER,1)
  852.  
  853. exten => 22,1,Goto(s-CHANGED,1)
  854.  
  855. exten => 23,1,Goto(s-CHANGED,1)
  856.  
  857. exten => 28,1,Goto(s-INVALIDNMBR,1)
  858.  
  859. exten => _X,1,Goto(continue,1)
  860.  
  861. exten => _X.,1,Goto(continue,1)
  862.  
  863. exten => continue,1(noreport),Noop(TRUNK Dial failed due to ${DIALSTATUS} HANGUPCAUSE: ${HANGUPCAUSE} - failing through to other trunks)
  864. exten => continue,n,Set(CALLERID(number)=${AMPUSER})
  865.  
  866. exten => disabletrunk,1,Noop(TRUNK: ${OUT_${DIAL_TRUNK}} DISABLED - falling through to next trunk)
  867.  
  868. exten => bypass,1,Noop(TRUNK: ${OUT_${DIAL_TRUNK}} BYPASSING because dialout-trunk-predial-hook)
  869.  
  870. exten => h,1,Macro(hangupcall,)
  871.  
  872. ;--== end of [macro-dialout-trunk] ==--;
  873.  
  874.  
  875. [macro-privacy-mgr]
  876. include => macro-privacy-mgr-custom
  877. exten => s,1,Set(KEEPCID=${CALLERID(num)})
  878. exten => s,n,Set(TESTCID=${IF($["${CALLERID(num):0:1}"="+"]?${MATH(1+${CALLERID(num):1})}:${MATH(1+${CALLERID(num)})})})
  879. exten => s,n,ExecIf($[${LEN(${TESTCID})}=0]?Set(CALLERID(num)=))
  880. exten => s,n,PrivacyManager(${ARG1},${ARG2})
  881. exten => s,n,GotoIf($["${PRIVACYMGRSTATUS}"="FAILED"]?fail)
  882. exten => s,n,GosubIf($["${CALLED_BLACKLIST}"="1"]?app-blacklist-check,s,1())
  883. exten => s,n,Set(CALLERID(num-pres)=allowed_passed_screen)
  884. exten => s,n,MacroExit()
  885. exten => s,n(fail),Noop(STATUS: ${PRIVACYMGRSTATUS} CID: ${CALLERID(num)} ${CALLERID(name)} CALLPRES: ${CALLLINGPRES})
  886. exten => s,n,Playback(sorry-youre-having-problems&goodbye)
  887. exten => s,n,Playtones(congestion)
  888. exten => s,n,Congestion(20)
  889.  
  890. exten => h,1,Hangup
  891.  
  892. ;--== end of [macro-privacy-mgr] ==--;
  893.  
  894.  
  895. [macro-user-callerid]
  896. include => macro-user-callerid-custom
  897. exten => s,1,Set(TOUCH_MONITOR=${UNIQUEID})
  898. exten => s,n,Set(AMPUSER=${IF($["foo${AMPUSER}" = "foo"]?${CALLERID(number)}:${AMPUSER})})
  899. exten => s,n,GotoIf($["${CUT(CHANNEL,@,2):5:5}"="queue" | ${LEN(${AMPUSERCIDNAME})}]?report)
  900. exten => s,n,ExecIf($["${REALCALLERIDNUM:1:2}" = ""]?Set(REALCALLERIDNUM=${CALLERID(number)}))
  901. exten => s,n,Set(AMPUSER=${DB(DEVICE/${REALCALLERIDNUM}/user)})
  902. exten => s,n,Set(AMPUSERCIDNAME=${DB(AMPUSER/${AMPUSER}/cidname)})
  903. exten => s,n,GotoIf($["x${AMPUSERCIDNAME:1:2}" = "x"]?report)
  904. exten => s,n,Set(AMPUSERCID=${IF($["${ARG2}" != "EXTERNAL" & "${DB_EXISTS(AMPUSER/${AMPUSER}/cidnum)}" = "1"]?${DB_RESULT}:${AMPUSER})})
  905. exten => s,n,Set(__DIAL_OPTIONS=${IF($["${DB_EXISTS(AMPUSER/${AMPUSER}/dialopts)}" = "1"]?${DB_RESULT}:${DIAL_OPTIONS})})
  906. exten => s,n,Set(CALLERID(all)="${AMPUSERCIDNAME}" <${AMPUSERCID}>)
  907. 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)
  908. exten => s,n,ExecIf($["${ARG1}"="LIMIT" & ${LEN(${AMPUSER})}]?Set(GROUP(concurrency_limit)=${AMPUSER}))
  909. exten => s,n(report),GotoIf($[ "${ARG1}" = "SKIPTTL" | "${ARG1}" = "LIMIT" ]?continue)
  910. exten => s,n(report2),Set(__TTL=${IF($["foo${TTL}" = "foo"]?64:$[ ${TTL} - 1 ])})
  911. exten => s,n,GotoIf($[ ${TTL} > 0 ]?continue)
  912. exten => s,n,Wait(${RINGTIMER})
  913. exten => s,n,Answer
  914. exten => s,n,Wait(1)
  915. exten => s,n,Playback(im-sorry&an-error-has-occured&with&call-forwarding)
  916. exten => s,n,Macro(hangupcall,)
  917. exten => s,n(limit),Answer
  918. exten => s,n,Wait(1)
  919. exten => s,n,Playback(beep&im-sorry&your&simul-call-limit-reached&goodbye)
  920. exten => s,n,Macro(hangupcall,)
  921. exten => s,n,Congestion(20)
  922. exten => s,n(continue),Set(CALLERID(number)=${CALLERID(number):0:40})
  923. exten => s,n,Set(CALLERID(name)=${CALLERID(name):0:40})
  924. exten => s,n,Set(CDR(cnum)=${CALLERID(num)})
  925. exten => s,n,Set(CDR(cnam)=${CALLERID(name)})
  926. exten => s,n,Set(CHANNEL(language)=${MASTER_CHANNEL(CHANNEL(language))})
  927.  
  928. exten => h,1,Macro(hangupcall,)
  929.  
  930. ;--== end of [macro-user-callerid] ==--;
  931.  
  932.  
  933. [macro-outbound-callerid]
  934. include => macro-outbound-callerid-custom
  935. exten => s,1,ExecIf($["${CALLINGPRES_SV}" != ""]?Set(CALLERPRES()=${CALLINGPRES_SV}))
  936. exten => s,n,ExecIf($["${REALCALLERIDNUM:1:2}" = ""]?Set(REALCALLERIDNUM=${CALLERID(number)}))
  937. exten => s,n(start),GotoIf($[ $["${REALCALLERIDNUM}" = ""] | $["${KEEPCID}" != "TRUE"] | $["${OUTKEEPCID_${ARG1}}" = "on"] ]?normcid)
  938. exten => s,n,Set(USEROUTCID=${REALCALLERIDNUM})
  939. exten => s,n,GotoIf($["foo${DB(AMPUSER/${REALCALLERIDNUM}/device)}" = "foo"]?bypass)
  940. exten => s,n(normcid),Set(USEROUTCID=${DB(AMPUSER/${AMPUSER}/outboundcid)})
  941. exten => s,n(bypass),Set(EMERGENCYCID=${DB(DEVICE/${REALCALLERIDNUM}/emergency_cid)})
  942. exten => s,n,Set(TRUNKOUTCID=${OUTCID_${ARG1}})
  943. exten => s,n,GotoIf($["${EMERGENCYROUTE:1:2}" = "" | "${EMERGENCYCID:1:2}" = ""]?trunkcid)
  944. exten => s,n,Set(CALLERID(all)=${EMERGENCYCID})
  945. exten => s,n,Set(CDR(outbound_cnum)=${CALLERID(num)})
  946. exten => s,n,Set(CDR(outbound_cnam)=${CALLERID(name)})
  947. exten => s,n(exit),MacroExit()
  948. exten => s,n(trunkcid),ExecIf($[${LEN(${TRUNKOUTCID})} != 0]?Set(CALLERID(all)=${TRUNKOUTCID}))
  949. exten => s,n(usercid),ExecIf($[${LEN(${USEROUTCID})} != 0]?Set(CALLERID(all)=${USEROUTCID}))
  950. exten => s,n,ExecIf($[${LEN(${TRUNKCIDOVERRIDE})} != 0 | ${LEN(${FORCEDOUTCID_${ARG1}})} != 0]?Set(CALLERID(all)=${IF($[${LEN(${FORCEDOUTCID_${ARG1}})}=0]?${TRUNKCIDOVERRIDE}:${FORCEDOUTCID_${ARG1}})}))
  951. exten => s,n(hidecid),ExecIf($["${CALLERID(name)}"="hidden"]?Set(CALLERPRES()=prohib_passed_screen))
  952. exten => s,n,Set(CDR(outbound_cnum)=${CALLERID(num)})
  953. exten => s,n,Set(CDR(outbound_cnam)=${CALLERID(name)})
  954.  
  955. ;--== end of [macro-outbound-callerid] ==--;
  956.  
  957.  
  958. [from-zaptel]
  959. include => from-zaptel-custom
  960. include => from-dahdi
  961. exten => foo,1,Noop(bar)
  962.  
  963. ;--== end of [from-zaptel] ==--;
  964.  
  965.  
  966. [from-dahdi]
  967. include => from-dahdi-custom
  968. exten => _X.,1,Set(DID=${EXTEN})
  969. exten => _X.,n,Goto(s,1)
  970.  
  971. exten => s,1,Noop(Entering from-dahdi with DID == ${DID})
  972. exten => s,n,Ringing()
  973. exten => s,n,Set(DID=${IF($["${DID}"= ""]?s:${DID})})
  974. exten => s,n,Noop(DID is now ${DID})
  975. exten => s,n,GotoIf($["${CHANNEL:0:5}"="DAHDI"]?dahdiok:checkzap)
  976. exten => s,n(checkzap),GotoIf($["${CHANNEL:0:3}"="Zap"]?zapok:neither)
  977. exten => s,n(neither),Goto(from-pstn,${DID},1)
  978. exten => s,n,Macro(Hangupcall,dummy)
  979. exten => s,n(dahdiok),Noop(Is a DAHDi Channel)
  980. exten => s,n,Set(CHAN=${CHANNEL:6})
  981. exten => s,n,Set(CHAN=${CUT(CHAN,-,1)})
  982. exten => s,n,Macro(from-dahdi-${CHAN},${DID},1)
  983. exten => s,n,Noop(Returned from Macro from-dahdi-${CHAN})
  984. exten => s,n,Goto(from-pstn,${DID},1)
  985. exten => s,n(zapok),Noop(Is a Zaptel Channel)
  986. exten => s,n,Set(CHAN=${CHANNEL:4})
  987. exten => s,n,Set(CHAN=${CUT(CHAN,-,1)})
  988. exten => s,n,Macro(from-dahdi-${CHAN},${DID},1)
  989. exten => s,n,Noop(Returned from Macro from-dahdi-${CHAN})
  990. exten => s,n,Goto(from-pstn,${DID},1)
  991.  
  992. ;--== end of [from-dahdi] ==--;
  993.  
  994.  
  995. [vm-callme]
  996. include => vm-callme-custom
  997. exten => s,1,Answer
  998. exten => s,n,Wait(1)
  999. exten => s,n(repeat),Background(${MSG}&silence/2&vm-repeat&vm-starmain)
  1000. exten => s,n,WaitExten(15,)
  1001.  
  1002. exten => 5,1,Goto(s,repeat)
  1003.  
  1004. exten => #,1,Playback(vm-goodbye)
  1005. exten => #,n,Hangup
  1006.  
  1007. exten => *,1,Macro(get-vmcontext,${MBOX})
  1008. exten => *,n,VoiceMailMain(${MBOX}@${VMCONTEXT},s)
  1009.  
  1010. exten => i,1,Playback(pm-invalid-option)
  1011. exten => i,n,Goto(s,repeat)
  1012.  
  1013. exten => t,1,Playback(vm-goodbye)
  1014. exten => t,n,Hangup
  1015.  
  1016. exten => h,1,Hangup
  1017.  
  1018. ;--== end of [vm-callme] ==--;
  1019.  
  1020.  
  1021. [macro-dial-confirm]
  1022. include => macro-dial-confirm-custom
  1023. exten => s,1,Set(DB(RG/${ARG4}/${CHANNEL})=RINGING)
  1024. exten => s,n,Set(__UNIQCHAN=${CHANNEL})
  1025. exten => s,n,Set(USE_CONFIRMATION=TRUE)
  1026. exten => s,n,Set(RINGGROUP_INDEX=${ARG4})
  1027. exten => s,n,Set(FORCE_CONFIRM=)
  1028. exten => s,n,Set(ARG4=)
  1029. exten => s,n,Macro(dial,${ARG1},${ARG2},${ARG3})
  1030. exten => s,n,Noop(Deleting: RG/${RINGGROUP_INDEX}/${CHANNEL} ${DB_DELETE(RG/${RINGGROUP_INDEX}/${CHANNEL})})
  1031. exten => s,n,Set(USE_CONFIRMATION=)
  1032. exten => s,n,Set(RINGGROUP_INDEX=)
  1033.  
  1034. ;--== end of [macro-dial-confirm] ==--;
  1035.  
  1036.  
  1037. [macro-setmusic]
  1038. include => macro-setmusic-custom
  1039. exten => s,1,Set(CHANNEL(musicclass)=${ARG1})
  1040.  
  1041. ;--== end of [macro-setmusic] ==--;
  1042.  
  1043.  
  1044. [macro-block-cf]
  1045. include => macro-block-cf-custom
  1046. exten => _X.,1,Hangup
  1047.  
  1048. exten => s-ANSWER,1,Noop(Call successfully answered - Hanging up now)
  1049. exten => s-ANSWER,n,Macro(hangupcall,)
  1050.  
  1051. ;--== end of [macro-block-cf] ==--;
  1052.  
  1053.  
  1054. [macro-vm]
  1055. include => macro-vm-custom
  1056. exten => s,1,Macro(user-callerid,SKIPTTL)
  1057. exten => s,n,Set(VMGAIN=${IF($["foo${VM_GAIN}"!="foo"]?"g(${VM_GAIN})": )})
  1058. exten => s,n,Macro(blkvm-check,)
  1059. exten => s,n,GotoIf($["${GOSUB_RETVAL}" != "TRUE"]?vmx,1)
  1060. exten => s,n,Hangup
  1061.  
  1062. exten => vmx,1,Set(MEXTEN=${ARG1})
  1063. exten => vmx,n,Set(MMODE=${ARG2})
  1064. exten => vmx,n,Set(RETVM=${ARG3})
  1065. exten => vmx,n,Set(MODE=${IF($["${MMODE}"="BUSY"]?busy:unavail)})
  1066. exten => vmx,n,GotoIf($["${DB(AMPUSER/${MEXTEN}/vmx/${MODE}/state)}" != "enabled"]?chknomsg)
  1067. exten => vmx,n,Set(VM_OPTS=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/vmxopts/timeout)}" = "1"]?${DB_RESULT}:${VM_OPTS})})
  1068. exten => vmx,n(chknomsg),GotoIf($["${MMODE}"="NOMESSAGE"]?s-${MMODE},1)
  1069. exten => vmx,n,GotoIf($["${MMODE}" != "DIRECTDIAL"]?notdirect)
  1070. exten => vmx,n,Set(MODE=${IF($["${REGEX("[b]" ${VM_DDTYPE})}" = "1"]?busy:${MODE})})
  1071. exten => vmx,n(notdirect),Noop(Checking if ext ${MEXTEN} is enabled: ${DB(AMPUSER/${MEXTEN}/vmx/${MODE}/state)})
  1072. exten => vmx,n,GotoIf($["${DB(AMPUSER/${MEXTEN}/vmx/${MODE}/state)}" != "enabled"]?s-${MMODE},1)
  1073. exten => vmx,n,Macro(get-vmcontext,${MEXTEN})
  1074. exten => vmx,n,GotoIf($[(${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/temp.wav)} = 1) || (${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/temp.WAV)} = 1)]?tmpgreet)
  1075. exten => vmx,n,GotoIf($[(${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/${MODE}.wav)} = 0) && (${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/${MODE}.WAV)} = 0)]?nofile)
  1076. exten => vmx,n,Set(LOOPCOUNT=0)
  1077. exten => vmx,n,Set(VMX_REPEAT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/repeat)}" = "1"]?${DB_RESULT}:${VMX_REPEAT})})
  1078. exten => vmx,n(vmxtime),Set(VMX_TIMEOUT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/timeout)}" = "1"]?${DB_RESULT}:${VMX_TIMEOUT})})
  1079. exten => vmx,n(vmxloops),Set(VMX_LOOPS=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/loops)}" = "1"]?${DB_RESULT}:${VMX_LOOPS})})
  1080. exten => vmx,n(vmxanswer),Answer
  1081. exten => vmx,n(loopstart),Read(ACTION,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/${MODE},1,skip,${VMX_REPEAT},${VMX_TIMEOUT})
  1082. exten => vmx,n,GotoIf($["${EXISTS(${ACTION})}" = "1"]?checkopt)
  1083. exten => vmx,n(noopt),Noop(Timeout: going to timeout dest)
  1084. exten => vmx,n,Set(VMX_OPTS=${DB(AMPUSER/${MEXTEN}/vmx/${MODE}/vmxopts/timeout)})
  1085. exten => vmx,n(chktime),GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/timedest/ext)}" = "0"]?dotime)
  1086. exten => vmx,n,Set(VMX_TIMEDEST_EXT=${DB_RESULT})
  1087. exten => vmx,n,Set(VMX_TIMEDEST_CONTEXT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/timedest/context)}" = "1"]?${DB_RESULT}:${VMX_TIMEDEST_CONTEXT})})
  1088. exten => vmx,n(timepri),Set(VMX_TIMEDEST_PRI=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/timedest/pri)}" = "1"]?${DB_RESULT}:${VMX_TIMEDEST_PRI})})
  1089. exten => vmx,n(dotime),Goto(${VMX_TIMEDEST_CONTEXT},${VMX_TIMEDEST_EXT},${VMX_TIMEDEST_PRI})
  1090. exten => vmx,n(checkopt),GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/${ACTION}/ext)}" = "1"]?doopt)
  1091. exten => vmx,n,GotoIf($["${ACTION}" = "0"]?o,1)
  1092. exten => vmx,n,GotoIf($["${ACTION}" = "*"]?adef,1)
  1093. exten => vmx,n,Set(LOOPCOUNT=$[${LOOPCOUNT} + 1])
  1094. exten => vmx,n,GotoIf($[${LOOPCOUNT} > ${VMX_LOOPS}]?toomany)
  1095. exten => vmx,n,Playback(pm-invalid-option&please-try-again)
  1096. exten => vmx,n,Goto(loopstart)
  1097. exten => vmx,n(toomany),Noop(Too Many invalid entries, got to invalid dest)
  1098. exten => vmx,n,Set(VMX_OPTS=${VMX_OPTS_LOOP})
  1099. exten => vmx,n,Set(VMX_OPTS=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/vmxopts/loops)}" = "1"]?${DB_RESULT}:${VMX_OPTS})})
  1100. exten => vmx,n(chkloop),GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/loopdest/ext)}" = "0"]?doloop)
  1101. exten => vmx,n,Set(VMX_LOOPDEST_EXT=${DB_RESULT})
  1102. exten => vmx,n,Set(VMX_LOOPDEST_CONTEXT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/loopdest/context)}" = "1"]?${DB_RESULT}:${VMX_LOOPDEST_CONTEXT})})
  1103. exten => vmx,n(looppri),Set(VMX_LOOPDEST_PRI=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/loopdest/pri)}" = "1"]?${DB_RESULT}:${VMX_LOOPDEST_PRI})})
  1104. exten => vmx,n(doloop),Goto(${VMX_LOOPDEST_CONTEXT},${VMX_LOOPDEST_EXT},${VMX_LOOPDEST_PRI})
  1105. exten => vmx,n(doopt),Noop(Got a valid option: ${DB_RESULT})
  1106. exten => vmx,n,Set(VMX_EXT=${DB_RESULT})
  1107. exten => vmx,n,GotoIf($["${VMX_EXT}" != "dovm"]?getdest)
  1108. exten => vmx,n(vmxopts),Set(VMX_OPTS=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/vmxopts/dovm)}" = "1"]?${DB_RESULT}:${VMX_OPTS_DOVM})})
  1109. exten => vmx,n(vmxdovm),Goto(dovm,1)
  1110. exten => vmx,n(getdest),Set(VMX_CONTEXT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/${ACTION}/context)}" = "1"]?${DB_RESULT}:${VMX_CONTEXT})})
  1111. exten => vmx,n(vmxpri),Set(VMX_PRI=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/${ACTION}/pri)}" = "1"]?${DB_RESULT}:${VMX_PRI})})
  1112. exten => vmx,n(vmxgoto),Goto(${VMX_CONTEXT},${VMX_EXT},${VMX_PRI})
  1113. exten => vmx,n(nofile),Noop(File for mode: ${MODE} does not exist, SYSTEMSTATUS: ${SYSTEMSTATUS}, going to normal voicemail)
  1114. exten => vmx,n,Goto(s-${MMODE},1)
  1115. exten => vmx,n(tmpgreet),Noop(Temporary Greeting Detected, going to normal voicemail)
  1116. exten => vmx,n,Goto(s-${MMODE},1)
  1117.  
  1118. exten => dovm,1,Noop(VMX Timeout - go to voicemail)
  1119. exten => dovm,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VMX_OPTS}${VMGAIN})
  1120. exten => dovm,n,Goto(exit-${VMSTATUS},1)
  1121.  
  1122. exten => s-BUSY,1,Noop(BUSY voicemail)
  1123. exten => s-BUSY,n,Macro(get-vmcontext,${MEXTEN})
  1124. exten => s-BUSY,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VM_OPTS}b${VMGAIN})
  1125. exten => s-BUSY,n,Goto(exit-${VMSTATUS},1)
  1126.  
  1127. exten => s-NOMESSAGE,1,Noop(NOMESSAGE (beeb only) voicemail)
  1128. exten => s-NOMESSAGE,n,Macro(get-vmcontext,${MEXTEN})
  1129. exten => s-NOMESSAGE,n,VoiceMail(${MEXTEN}@${VMCONTEXT},s${VM_OPTS}${VMGAIN})
  1130. exten => s-NOMESSAGE,n,Goto(exit-${VMSTATUS},1)
  1131.  
  1132. exten => s-DIRECTDIAL,1,Noop(DIRECTDIAL voicemail)
  1133. exten => s-DIRECTDIAL,n,Macro(get-vmcontext,${MEXTEN})
  1134. exten => s-DIRECTDIAL,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VM_OPTS}${VM_DDTYPE}${VMGAIN})
  1135. exten => s-DIRECTDIAL,n,Goto(exit-${VMSTATUS},1)
  1136.  
  1137. exten => _s-.,1,Macro(get-vmcontext,${MEXTEN})
  1138. exten => _s-.,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VM_OPTS}u${VMGAIN})
  1139. exten => _s-.,n,Goto(exit-${VMSTATUS},1)
  1140.  
  1141. exten => o,1,Playback(one-moment-please)
  1142. exten => o,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/0/ext)}" = "0"]?doopdef)
  1143. exten => o,n,Set(VMX_OPDEST_EXT=${DB_RESULT})
  1144. exten => o,n(opcontext),Set(VMX_OPDEST_CONTEXT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/0/context)}" = "1"]?${DB_RESULT}:${VMX_CONTEXT})})
  1145. exten => o,n(oppri),Set(VMX_OPDEST_PRI=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/0/pri)}" = "1"]?${DB_RESULT}:${VMX_PRI})})
  1146. exten => o,n,Goto(${VMX_OPDEST_CONTEXT},${VMX_OPDEST_EXT},${VMX_OPDEST_PRI})
  1147. exten => o,n(doopdef),GotoIf($["x${OPERATOR_XTN}"="x"]?nooper:from-internal,${OPERATOR_XTN},1)
  1148. exten => o,n(nooper),GotoIf($["x${FROM_DID}"="x"]?nodid)
  1149. exten => o,n,Dial(Local/${FROM_DID}@from-pstn,)
  1150. exten => o,n,Macro(hangup,)
  1151. exten => o,n(nodid),Dial(Local/s@from-pstn,)
  1152. exten => o,n,Macro(hangup,)
  1153.  
  1154. exten => a,1,Macro(get-vmcontext,${MEXTEN})
  1155. exten => a,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/*/ext)}" = "0"]?adef,1)
  1156. exten => a,n,Set(VMX_ADEST_EXT=${DB_RESULT})
  1157. exten => a,n(acontext),Set(VMX_ADEST_CONTEXT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/*/context)}" = "1"]?${DB_RESULT}:${VMX_CONTEXT})})
  1158. exten => a,n(apri),Set(VMX_ADEST_PRI=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/*/pri)}" = "1"]?${DB_RESULT}:${VMX_PRI})})
  1159. exten => a,n,Goto(${VMX_ADEST_CONTEXT},${VMX_ADEST_EXT},${VMX_ADEST_PRI})
  1160.  
  1161. exten => adef,1,VoiceMailMain(${MEXTEN}@${VMCONTEXT})
  1162. exten => adef,n,GotoIf($["${RETVM}" = "RETURN"]?exit-RETURN,1)
  1163. exten => adef,n,Hangup
  1164.  
  1165. exten => exit-FAILED,1,Playback(im-sorry&an-error-has-occured)
  1166. exten => exit-FAILED,n,GotoIf($["${RETVM}" = "RETURN"]?exit-RETURN,1)
  1167. exten => exit-FAILED,n,Hangup
  1168.  
  1169. exten => exit-SUCCESS,1,GotoIf($["${RETVM}" = "RETURN"]?exit-RETURN,1)
  1170. exten => exit-SUCCESS,n,Playback(goodbye)
  1171. exten => exit-SUCCESS,n,Hangup
  1172.  
  1173. exten => exit-USEREXIT,1,GotoIf($["${RETVM}" = "RETURN"]?exit-RETURN,1)
  1174. exten => exit-USEREXIT,n,Playback(goodbye)
  1175. exten => exit-USEREXIT,n,Hangup
  1176.  
  1177. exten => exit-RETURN,1,Noop(Returning From Voicemail because macro)
  1178.  
  1179. exten => t,1,Hangup
  1180.  
  1181. ;--== end of [macro-vm] ==--;
  1182.  
  1183.  
  1184. [macro-exten-vm]
  1185. include => macro-exten-vm-custom
  1186. exten => s,1,Macro(user-callerid,)
  1187. exten => s,n,Set(RingGroupMethod=none)
  1188. exten => s,n,Set(__EXTTOCALL=${ARG2})
  1189. exten => s,n,Set(__PICKUPMARK=${ARG2})
  1190. exten => s,n,Set(RT=${IF($["${ARG1}"!="novm" | "${DB(CFU/${EXTTOCALL})}"!="" | "${DB(CFB/${EXTTOCALL})}"!="" | "${ARG3}"="1" | "${ARG4}"="1" | "${ARG5}"="1"]?${RINGTIMER}:)})
  1191. exten => s,n(checkrecord),Gosub(sub-record-check,s,1(exten,${EXTTOCALL},))
  1192. exten => s,n(macrodial),Macro(dial-one,${RT},${DIAL_OPTIONS},${EXTTOCALL})
  1193. exten => s,n,Set(SV_DIALSTATUS=${DIALSTATUS})
  1194. exten => s,n(calldocfu),GosubIf($[("${SV_DIALSTATUS}"="NOANSWER"|"${SV_DIALSTATUS}"="CHANUNAVAIL") & "${DB(CFU/${EXTTOCALL})}"!="" & "${SCREEN}"=""]?docfu,1())
  1195. exten => s,n(calldocfb),GosubIf($["${SV_DIALSTATUS}"="BUSY" & "${DB(CFB/${EXTTOCALL})}"!="" & "${SCREEN}"=""]?docfb,1())
  1196. exten => s,n,Set(DIALSTATUS=${SV_DIALSTATUS})
  1197. exten => s,n,ExecIf($[("${DIALSTATUS}"="NOANSWER"&"${ARG3}"="1")|("${DIALSTATUS}"="BUSY"&"${ARG4}"="1")|("${DIALSTATUS}"="CHANUNAVAIL"&"${ARG5}"="1")]?MacroExit())
  1198. exten => s,n,GotoIf($["${ARG1}"="novm"]?s-${DIALSTATUS},1)
  1199. exten => s,n,Macro(vm,${ARG1},${DIALSTATUS},${IVR_RETVM})
  1200.  
  1201. exten => docfu,1(docfu),ExecIf($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="-1"|("${ARG1}"="novm"&"${ARG3}"="1")]?StackPop())
  1202. exten => docfu,n,GotoIf($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="-1"|("${ARG1}"="novm"&"${ARG3}"="1")]?from-internal,${DB(CFU/${EXTTOCALL})},1)
  1203. exten => docfu,n,Set(RTCF=${IF($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="0"]?${RT}:${DB(AMPUSER/${EXTTOCALL}/cfringtimer)})})
  1204. exten => docfu,n,Dial(Local/${DB(CFU/${EXTTOCALL})}@from-internal/n,${RTCF},${DIAL_OPTIONS})
  1205. exten => docfu,n,Return()
  1206.  
  1207. exten => docfb,1(docfu),ExecIf($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="-1"|("${ARG1}"="novm"&"${ARG4}"="1")]?StackPop())
  1208. exten => docfb,n,GotoIf($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="-1"|("${ARG1}"="novm"&"${ARG4}"="1")]?from-internal,${DB(CFB/${EXTTOCALL})},1)
  1209. exten => docfb,n,Set(RTCF=${IF($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="0"]?${RT}:${DB(AMPUSER/${EXTTOCALL}/cfringtimer)})})
  1210. exten => docfb,n,Dial(Local/${DB(CFB/${EXTTOCALL})}@from-internal/n,${RTCF},${DIAL_OPTIONS})
  1211. exten => docfb,n,Return()
  1212.  
  1213. exten => s-BUSY,1,GotoIf($["${IVR_RETVM}"="RETURN" & "${IVR_CONTEXT}"!=""]?exit,1)
  1214. exten => s-BUSY,n,Playtones(busy)
  1215. exten => s-BUSY,n,Busy(20)
  1216.  
  1217. exten => _s-!,1,GotoIf($["${IVR_RETVM}"="RETURN" & "${IVR_CONTEXT}"!=""]?exit,1)
  1218. exten => _s-!,n,Playtones(congestion)
  1219. exten => _s-!,n,Congestion(10)
  1220.  
  1221. exten => exit,1,Playback(beep&line-busy-transfer-menu&silence/1)
  1222. exten => exit,n,MacroExit()
  1223.  
  1224. ;--== end of [macro-exten-vm] ==--;
  1225.  
  1226.  
  1227. [macro-simple-dial]
  1228. include => macro-simple-dial-custom
  1229. exten => s,1,Set(__EXTTOCALL=${ARG1})
  1230. exten => s,n,Set(RT=${ARG2})
  1231. exten => s,n,Set(CFUEXT=${DB(CFU/${EXTTOCALL})})
  1232. exten => s,n,Set(CFBEXT=${DB(CFB/${EXTTOCALL})})
  1233. exten => s,n,Set(CWI_TMP=${CWIGNORE})
  1234. exten => s,n(macrodial),Macro(dial-one,${RT},${DIAL_OPTIONS},${EXTTOCALL})
  1235. exten => s,n,Set(__CWIGNORE=${CWI_TMP})
  1236. exten => s,n,Set(PR_DIALSTATUS=${DIALSTATUS})
  1237. exten => s,n(calldocfu),GosubIf($["${PR_DIALSTATUS}"="NOANSWER" & "${CFUEXT}"!=""]?docfu,1())
  1238. exten => s,n(calldocfb),GosubIf($["${PR_DIALSTATUS}"="BUSY" & "${CFBEXT}"!=""]?docfb,1())
  1239. exten => s,n,Set(DIALSTATUS=${PR_DIALSTATUS})
  1240. exten => s,n,Goto(s-${DIALSTATUS},1)
  1241.  
  1242. exten => docfu,1,GotoIf($["${DB(AMPUSER/${CFUEXT}/device)}" = "" ]?chlocal)
  1243. exten => docfu,n,Dial(Local/${CFUEXT}@ext-local,${RT},${DIAL_OPTIONS})
  1244. exten => docfu,n,Return()
  1245. exten => docfu,n(chlocal),Dial(Local/${CFUEXT}@from-internal/n,${RT},${DIAL_OPTIONS})
  1246. exten => docfu,n,Return()
  1247.  
  1248. exten => docfb,1,GotoIf($["${DB(AMPUSER/${CFBEXT}/device)}" = "" ]?chlocal)
  1249. exten => docfb,n,Dial(Local/${CFBEXT}@ext-local,${RT},${DIAL_OPTIONS})
  1250. exten => docfb,n,Return()
  1251. exten => docfb,n(chlocal),Dial(Local/${CFBEXT}@from-internal/n,${RT},${DIAL_OPTIONS})
  1252. exten => docfb,n,Return()
  1253.  
  1254. exten => _s-.,1,Noop(Extension is reporting ${EXTEN})
  1255.  
  1256. ;--== end of [macro-simple-dial] ==--;
  1257.  
  1258.  
  1259. [macro-blkvm-setifempty]
  1260. include => macro-blkvm-setifempty-custom
  1261. exten => s,1,GotoIf($[!${EXISTS(${BLKVM_CHANNEL})}]?init)
  1262. exten => s,n,Set(GOSUB_RETVAL=${SHARED(BLKVM,${BLKVM_CHANNEL})})
  1263. exten => s,n,MacroExit()
  1264. exten => s,n(init),Set(__BLKVM_CHANNEL=${CHANNEL})
  1265. exten => s,n,Set(SHARED(BLKVM,${BLKVM_CHANNEL})=TRUE)
  1266. exten => s,n,Set(GOSUB_RETVAL=TRUE)
  1267. exten => s,n,MacroExit()
  1268.  
  1269. ;--== end of [macro-blkvm-setifempty] ==--;
  1270.  
  1271.  
  1272. [macro-blkvm-set]
  1273. include => macro-blkvm-set-custom
  1274. exten => s,1,ExecIf($[!${EXISTS(${BLKVM_CHANNEL})} | "{ARG1}" = "reset"]?Set(__BLKVM_CHANNEL=${CHANNEL}))
  1275. exten => s,n,Set(SHARED(BLKVM,${BLKVM_CHANNEL})=TRUE)
  1276. exten => s,n,Set(GOSUB_RETVAL=TRUE)
  1277. exten => s,n,MacroExit()
  1278.  
  1279. ;--== end of [macro-blkvm-set] ==--;
  1280.  
  1281.  
  1282. [macro-blkvm-clr]
  1283. include => macro-blkvm-clr-custom
  1284. exten => s,1,Set(SHARED(BLKVM,${BLKVM_CHANNEL})=)
  1285. exten => s,n,Set(GOSUB_RETVAL=)
  1286. exten => s,n,MacroExit()
  1287.  
  1288. ;--== end of [macro-blkvm-clr] ==--;
  1289.  
  1290.  
  1291. [macro-blkvm-check]
  1292. include => macro-blkvm-check-custom
  1293. exten => s,1,Set(GOSUB_RETVAL=${SHARED(BLKVM,${BLKVM_CHANNEL})})
  1294. exten => s,n,ExecIf($["${GOSUB_RETVAL}"="" & "${CC_RECALL}"="1"]?Set(GOSUB_RETVAL=TRUE))
  1295. exten => s,n,MacroExit()
  1296.  
  1297. ;--== end of [macro-blkvm-check] ==--;
  1298.  
  1299.  
  1300. [macro-hangupcall]
  1301. include => macro-hangupcall-custom
  1302. exten => s,1(start),GotoIf($["${USE_CONFIRMATION}"="" | "${RINGGROUP_INDEX}"="" | "${CHANNEL}"!="${UNIQCHAN}"]?theend)
  1303. exten => s,n(delrgi),Noop(Deleting: RG/${RINGGROUP_INDEX}/${CHANNEL} ${DB_DELETE(RG/${RINGGROUP_INDEX}/${CHANNEL})})
  1304. exten => s,n(theend),ExecIf($["${ONETOUCH_RECFILE}"!="" & "${CDR(recordingfile)}"=""]?Set(CDR(recordingfile)=${ONETOUCH_RECFILE}))
  1305. exten => s,n,Hangup
  1306. exten => s,n,MacroExit()
  1307.  
  1308. ;--== end of [macro-hangupcall] ==--;
  1309.  
  1310.  
  1311. [macro-dial-one]
  1312. include => macro-dial-one-custom
  1313. exten => s,1,Set(DEXTEN=${ARG3})
  1314. exten => s,n,Set(DIALSTATUS_CW=)
  1315. exten => s,n,GosubIf($["${FROM_DID}"!="" & "${SCREEN}"="" & "${DB(AMPUSER/${DEXTEN}/screen)}"!=""]?screen,1())
  1316. exten => s,n,GosubIf($["${DB(CF/${DEXTEN})}"!=""]?cf,1())
  1317. exten => s,n,GotoIf($["${DEXTEN:-1}"="#" | "${DB(DND/${DEXTEN})}"=""]?skip1)
  1318. exten => s,n,Set(DEXTEN=)
  1319. exten => s,n,Set(DIALSTATUS=BUSY)
  1320. exten => s,n(skip1),GotoIf($["${DEXTEN}"=""]?nodial)
  1321. exten => s,n,GotoIf($["${DEXTEN:-1}"="#"]?continue)
  1322. exten => s,n,Set(EXTHASCW=${IF($["${CWIGNORE}"!=""]? :${DB(CW/${DEXTEN})})})
  1323. exten => s,n,GotoIf($["${EXTHASCW}"="" | "${DB(CFB/${DEXTEN})}"!="" | "${DB(CFU/${DEXTEN})}"!=""]?next1:cwinusebusy)
  1324. exten => s,n(next1),GotoIf($["${DB(CFU/${DEXTEN})}"!="" & ("${EXTENSION_STATE(${DEXTEN})}"="UNAVAILABLE" | "${EXTENSION_STATE(${DEXTEN})}"="UNKNOWN")]?docfu:skip3)
  1325. exten => s,n(docfu),Set(DEXTEN=)
  1326. exten => s,n,Set(DIALSTATUS=NOANSWER)
  1327. exten => s,n,Goto(nodial)
  1328. exten => s,n(skip3),GotoIf($["${EXTHASCW}"="" | "${DB(CFB/${DEXTEN})}"!=""]?next2:continue)
  1329. exten => s,n(next2),GotoIf($["${EXTENSION_STATE(${DEXTEN})}"="NOT_INUSE" | "${EXTENSION_STATE(${DEXTEN})}"="UNAVAILABLE" | "${EXTENSION_STATE(${DEXTEN})}"="UNKNOWN"]?continue)
  1330. exten => s,n,ExecIf($["${DB(CFB/${DEXTEN})}"!="" & "${CFIGNORE}"=""]?Set(DIALSTATUS=BUSY))
  1331. exten => s,n,GotoIf($["${EXTHASCW}"!="" | "${DEXTEN:-1}"="#"]?cwinusebusy)
  1332. exten => s,n,Set(DEXTEN=)
  1333. exten => s,n,Set(DIALSTATUS=BUSY)
  1334. exten => s,n,Goto(nodial)
  1335. exten => s,n(cwinusebusy),GotoIf($["${EXTHASCW}"!="" & "${CWINUSEBUSY}"="true"]?next3:continue)
  1336. exten => s,n(next3),ExecIf($["${EXTENSION_STATE(${DEXTEN})}"!="UNAVAILABLE" & "${EXTENSION_STATE(${DEXTEN})}"!="NOT_INUSE" & "${EXTENSION_STATE(${DEXTEN})}"!="UNKNOWN"]?Set(DIALSTATUS_CW=BUSY))
  1337. exten => s,n(continue),GotoIf($["${DEXTEN}"=""]?nodial)
  1338. exten => s,n,GosubIf($["${DEXTEN:-1}"!="#"]?dstring,1():dlocal,1())
  1339. exten => s,n,GotoIf($[${LEN(${DSTRING})}=0]?nodial)
  1340. exten => s,n,GotoIf($["${DEXTEN:-1}"="#"]?skiptrace)
  1341. exten => s,n,GosubIf($[${REGEX("^[\+]?[0-9]+$" ${CALLERID(number)})} = 1]?ctset,1():ctclear,1())
  1342. exten => s,n(skiptrace),Set(D_OPTIONS=${IF($["${NODEST}"!="" & ${REGEX("(M[(]auto-blkvm[)])" ${ARG2})} != 1]?${ARG2}M(auto-blkvm):${ARG2})})
  1343. exten => s,n,ExecIf($["${ALERT_INFO}"!=""]?SIPAddHeader(Alert-Info: ${ALERT_INFO}))
  1344. exten => s,n,ExecIf($["${SIPADDHEADER}"!=""]?SIPAddHeader(${SIPADDHEADER}))
  1345. exten => s,n,ExecIf($["${MOHCLASS}"!=""]?Set(CHANNEL(musicclass)=${MOHCLASS}))
  1346. exten => s,n,GosubIf($["${QUEUEWAIT}"!=""]?qwait,1())
  1347. exten => s,n,Set(__CWIGNORE=${CWIGNORE})
  1348. exten => s,n,Set(__KEEPCID=TRUE)
  1349. exten => s,n,GotoIf($["${USEGOTO}"="1"]?usegoto,1)
  1350. exten => s,n,GotoIf($["${DB(AMPUSER/${EXTTOCALL}/cidname)}" = "" || "${DB(AMPUSER/${AMPUSER}/cidname)}" = ""]?godial)
  1351. exten => s,n,Set(CONNECTEDLINE(name,i)=${DB(AMPUSER/${EXTTOCALL}/cidname)})
  1352. exten => s,n,Set(CONNECTEDLINE(num)=${EXTTOCALL})
  1353. exten => s,n,Set(D_OPTIONS=${D_OPTIONS}I)
  1354. exten => s,n(godial),Dial(${DSTRING},${ARG1},${D_OPTIONS})
  1355. exten => s,n,ExecIf($["${DIALSTATUS}"="ANSWER" & "${CALLER_DEST}"!=""]?MacroExit())
  1356. exten => s,n,ExecIf($["${DIALSTATUS_CW}"!=""]?Set(DIALSTATUS=${DIALSTATUS_CW}))
  1357. exten => s,n,GosubIf($[("${SCREEN}"!=""&("${DIALSTATUS}"="TORTURE"|"${DIALSTATUS}"="DONTCALL"))|"${DIALSTATUS}"="ANSWER"]?s-${DIALSTATUS},1())
  1358. exten => s,n,MacroExit()
  1359. exten => s,n(nodial),ExecIf($["${DIALSTATUS}" = ""]?Set(DIALSTATUS=NOANSWER))
  1360. exten => s,n,Noop(Returned from dial-one with nothing to call and DIALSTATUS: ${DIALSTATUS})
  1361. exten => s,n,MacroExit()
  1362.  
  1363. exten => h,1,Macro(hangupcall,)
  1364.  
  1365. exten => usegoto,1,Set(USEGOTO=)
  1366. exten => usegoto,n,Goto(from-internal,${DSTRING},1)
  1367.  
  1368. exten => screen,1,GotoIf($["${DB(AMPUSER/${DEXTEN}/screen)}"!="nomemory" | "${CALLERID(number)}"=""]?memory)
  1369. exten => screen,n,ExecIf($[${REGEX("^[0-9a-zA-Z ]+$" ${CALLERID(number)})} = 1]?System(rm -f ${ASTVARLIBDIR}/sounds/priv-callerintros/${CALLERID(number)}.*))
  1370. exten => screen,n(memory),Set(__SCREEN=${DB(AMPUSER/${DEXTEN}/screen)})
  1371. exten => screen,n,Set(__SCREEN_EXTEN=${DEXTEN})
  1372. exten => screen,n,Set(ARG2=${ARG2}p)
  1373. exten => screen,n,Return()
  1374.  
  1375. exten => cf,1,Set(CFAMPUSER=${IF($["${AMPUSER}"=""]?${CALLERID(number)}:${AMPUSER})})
  1376. 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())
  1377. 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)})}))
  1378. exten => cf,n,Set(DEXTEN=${IF($["${CFIGNORE}"=""]?"${DB(CF/${DEXTEN})}#": )})
  1379. exten => cf,n,ExecIf($["${DEXTEN}"!=""]?Return())
  1380. exten => cf,n,Set(DIALSTATUS=NOANSWER)
  1381. exten => cf,n,Return()
  1382.  
  1383. exten => qwait,1,ExecIf($["${SAVEDCIDNAME}" = ""]?Set(__SAVEDCIDNAME=${CALLERID(name)}))
  1384. exten => qwait,n,Set(ELAPSED=${MATH($[${EPOCH}+30-${QUEUEWAIT}]/60,int)})
  1385. exten => qwait,n,Set(CALLERID(name)=M${ELAPSED}:${SAVEDCIDNAME})
  1386. exten => qwait,n,Return()
  1387.  
  1388. exten => ctset,1,Set(DB(CALLTRACE/${DEXTEN})=${CALLERID(number)})
  1389. exten => ctset,n,Return()
  1390.  
  1391. exten => ctclear,1,Noop(Deleting: CALLTRACE/${DEXTEN} ${DB_DELETE(CALLTRACE/${DEXTEN})})
  1392. exten => ctclear,n,Return()
  1393.  
  1394. exten => dstring,1,Set(DSTRING=)
  1395. exten => dstring,n,Set(DEVICES=${DB(AMPUSER/${DEXTEN}/device)})
  1396. exten => dstring,n,ExecIf($["${DEVICES}"=""]?Return())
  1397. exten => dstring,n,ExecIf($["${DEVICES:0:1}"="&"]?Set(DEVICES=${DEVICES:1}))
  1398. exten => dstring,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)})
  1399. exten => dstring,n,Set(ITER=1)
  1400. exten => dstring,n(begin),Set(THISDIAL=${DB(DEVICE/${CUT(DEVICES,&,${ITER})}/dial)})
  1401. exten => dstring,n,GosubIf($["${ASTCHANDAHDI}" = "1"]?zap2dahdi,1())
  1402. exten => dstring,n,Set(DSTRING=${DSTRING}${THISDIAL}&)
  1403. exten => dstring,n,Set(ITER=$[${ITER}+1])
  1404. exten => dstring,n,GotoIf($[${ITER}<=${LOOPCNT}]?begin)
  1405. exten => dstring,n,Set(DSTRING=${DSTRING:0:$[${LEN(${DSTRING})}-1]})
  1406. exten => dstring,n,Return()
  1407.  
  1408. 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)})
  1409. exten => dlocal,n,Set(USEGOTO=${IF($["${ARG1}"=""]?1:0)})
  1410. exten => dlocal,n,Return()
  1411.  
  1412. exten => zap2dahdi,1,ExecIf($["${THISDIAL}" = ""]?Return())
  1413. exten => zap2dahdi,n,Set(NEWDIAL=)
  1414. exten => zap2dahdi,n,Set(LOOPCNT2=${FIELDQTY(THISDIAL,&)})
  1415. exten => zap2dahdi,n,Set(ITER2=1)
  1416. exten => zap2dahdi,n(begin2),Set(THISPART2=${CUT(THISDIAL,&,${ITER2})})
  1417. exten => zap2dahdi,n,ExecIf($["${THISPART2:0:3}" = "ZAP"]?Set(THISPART2=DAHDI${THISPART2:3}))
  1418. exten => zap2dahdi,n,Set(NEWDIAL=${NEWDIAL}${THISPART2}&)
  1419. exten => zap2dahdi,n,Set(ITER2=$[${ITER2} + 1])
  1420. exten => zap2dahdi,n,GotoIf($[${ITER2} <= ${LOOPCNT2}]?begin2)
  1421. exten => zap2dahdi,n,Set(THISDIAL=${NEWDIAL:0:$[${LEN(${NEWDIAL})}-1]})
  1422. exten => zap2dahdi,n,Return()
  1423.  
  1424. exten => s-TORTURE,1,Goto(app-blackhole,musiconhold,1)
  1425. exten => s-TORTURE,n,Macro(hangupcall,)
  1426.  
  1427. exten => s-DONTCALL,1,Answer
  1428. exten => s-DONTCALL,n,Wait(1)
  1429. exten => s-DONTCALL,n,Zapateller()
  1430. exten => s-DONTCALL,n,Playback(ss-noservice)
  1431. exten => s-DONTCALL,n,Macro(hangupcall,)
  1432.  
  1433. exten => s-CHANUNAVAIL,1,Macro(vm,${SCREEN_EXTEN},BUSY,${IVR_RETVM})
  1434. exten => s-CHANUNAVAIL,n,ExecIf($["${IVR_RETVM}"!="RETURN" | "${IVR_CONTEXT}"=""]?Hangup())
  1435. exten => s-CHANUNAVAIL,n,Return()
  1436.  
  1437. exten => s-NOANSWER,1,Macro(vm,${SCREEN_EXTEN},BUSY,${IVR_RETVM})
  1438. exten => s-NOANSWER,n,ExecIf($["${IVR_RETVM}"!="RETURN" | "${IVR_CONTEXT}"=""]?Hangup())
  1439. exten => s-NOANSWER,n,Return()
  1440.  
  1441. exten => s-BUSY,1,Macro(vm,${SCREEN_EXTEN},BUSY,${IVR_RETVM})
  1442. exten => s-BUSY,n,ExecIf($["${IVR_RETVM}"!="RETURN" | "${IVR_CONTEXT}"=""]?Hangup())
  1443. exten => s-BUSY,n,Return()
  1444.  
  1445. ;--== end of [macro-dial-one] ==--;
  1446.  
  1447.  
  1448. [from-internal-additional]
  1449. include => from-internal-additional-custom
  1450. include => app-dialvm
  1451. include => app-vmmain
  1452. include => app-calltrace
  1453. include => app-echo-test
  1454. include => app-speakextennum
  1455. include => app-speakingclock
  1456. include => app-recordings
  1457. include => app-userlogonoff
  1458. include => ext-local-confirm
  1459. include => findmefollow-ringallv2
  1460. include => app-pickup
  1461. include => app-zapbarge
  1462. include => app-chanspy
  1463. include => ext-test
  1464. include => ext-local
  1465. include => outbound-allroutes
  1466. exten => h,1,Hangup
  1467.  
  1468. ;--== end of [from-internal-additional] ==--;
  1469.  
  1470.  
  1471. [from-internal-noxfer-additional]
  1472. include => from-internal-noxfer-additional-custom
  1473. exten => h,1,Hangup
  1474.  
  1475. ;--== end of [from-internal-noxfer-additional] ==--;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement