riffraff666

extension_additional

May 28th, 2023
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 279.52 KB | Source Code | 0 0
  1. ;--------------------------------------------------------------------------------;
  2. ; Do NOT edit this file as it is auto-generated by FreePBX. ;
  3. ;--------------------------------------------------------------------------------;
  4. ; For information on adding additional paramaters to this file, please visit the ;
  5. ; FreePBX.org wiki page, or ask on IRC. This file was created by the new FreePBX ;
  6. ; BMO - Big Module Object. Any similarity in naming with BMO from Adventure Time ;
  7. ; is totally deliberate. ;
  8. ;--------------------------------------------------------------------------------;
  9. [globals]
  10. CFDEVSTATE = TRUE
  11. MIXMON_BEEP =
  12. MONITOR_REC_OPTION = b
  13. DNDDEVSTATE = TRUE
  14. FMDEVSTATE = TRUE
  15. QUEDEVSTATE = TRUE
  16. OPERATOR_XTN =
  17. VM_DDTYPE = u
  18. VM_GAIN =
  19. VM_OPTS =
  20. VMX_LOOPS = 1
  21. VMX_OPTS_DOVM =
  22. VMX_OPTS_LOOP =
  23. VMX_REPEAT = 1
  24. VMX_TIMEOUT = 2
  25. DYNAMIC_FEATURES = apprecord
  26. INTERCOMCODE = *80
  27. ASTETCDIR = /etc/asterisk
  28. ASTMODDIR = /usr/lib64/asterisk/modules
  29. ASTVARLIBDIR = /var/lib/asterisk
  30. ASTAGIDIR = /var/lib/asterisk/agi-bin
  31. ASTSPOOLDIR = /var/spool/asterisk
  32. ASTRUNDIR = /var/run/asterisk
  33. ASTLOGDIR = /var/log/asterisk
  34. CWINUSEBUSY = 1
  35. AMPMGRUSER = admin
  36. AMPMGRPASS = Ge+bFV/EVkiA
  37. ASTMANAGERHOST = localhost
  38. AMPDBENGINE = mysql
  39. AMPDBHOST = localhost
  40. AMPDBNAME = asterisk
  41. AMPDBUSER = freepbxuser
  42. AMPDBPASS = reOtT1hQM4q/
  43. AMPBIN = /var/lib/asterisk/bin
  44. VMX_CONTEXT = from-internal
  45. VMX_PRI = 1
  46. VMX_TIMEDEST_CONTEXT =
  47. VMX_TIMEDEST_EXT = dovm
  48. VMX_TIMEDEST_PRI = 1
  49. VMX_LOOPDEST_CONTEXT =
  50. VMX_LOOPDEST_EXT = dovm
  51. VMX_LOOPDEST_PRI = 1
  52. MIXMON_DIR =
  53. MIXMON_POST =
  54. DIAL_OPTIONS = HhTtr
  55. TRUNK_OPTIONS = T
  56. TRUNK_RING_TIMER = 300
  57. MIXMON_FORMAT = wav
  58. REC_POLICY = caller
  59. RINGTIMER_DEFAULT = 12
  60. TRANSFER_CONTEXT = from-internal-xfer
  61. ASTVERSION = 16.25.0
  62. ASTCHANDAHDI = 0
  63. NULL = ""
  64. OUT_1 = PJSIP
  65. OUT_1_SUFFIX = @outboundtrunkamori
  66. OUTCID_1 = 0041716900661
  67. OUTMAXCHANS_1 =
  68. OUTFAIL_1 =
  69. OUTPREFIX_1 =
  70. OUTDISABLE_1 = off
  71. OUTKEEPCID_1 = off
  72. FORCEDOUTCID_1 =
  73. PREFIX_TRUNK_1 = 1
  74. OUT_2 = PJSIP
  75. OUT_2_SUFFIX = @buylocalnumbers
  76. OUTCID_2 =
  77. OUTMAXCHANS_2 =
  78. OUTFAIL_2 =
  79. OUTPREFIX_2 =
  80. OUTDISABLE_2 = off
  81. OUTKEEPCID_2 = off
  82. FORCEDOUTCID_2 =
  83. PREFIX_TRUNK_2 =
  84. OUT_3 = PJSIP
  85. OUT_3_SUFFIX = @outboundtrunkvoxbeam
  86. OUTCID_3 =
  87. OUTMAXCHANS_3 =
  88. OUTFAIL_3 =
  89. OUTPREFIX_3 = 0011102
  90. OUTDISABLE_3 = off
  91. OUTKEEPCID_3 = off
  92. FORCEDOUTCID_3 =
  93. PREFIX_TRUNK_3 = 1
  94. OUT_4 = PJSIP
  95. OUT_4_SUFFIX = @outboundtrunkanveodirect
  96. OUTCID_4 =
  97. OUTMAXCHANS_4 =
  98. OUTFAIL_4 =
  99. OUTPREFIX_4 = 012345
  100. OUTDISABLE_4 = off
  101. OUTKEEPCID_4 = off
  102. FORCEDOUTCID_4 =
  103. PREFIX_TRUNK_4 = 1
  104. SIPLANG = en
  105. ALLOW_SIP_ANON = no
  106. #include globals_custom.conf
  107.  
  108. ;end of [globals]
  109.  
  110. [app-cf-unavailable-prompt-on]
  111. include => app-cf-unavailable-prompt-on-custom
  112. exten => lang-playback,1,GosubIf($[${DIALPLAN_EXISTS(app-cf-unavailable-prompt-on,${CHANNEL(language)})}]?app-cf-unavailable-prompt-on,${CHANNEL(language)},${ARG1}():app-cf-unavailable-prompt-on,en,${ARG1}())
  113. exten => lang-playback,n,Return()
  114.  
  115. exten => *95,1,Answer
  116. exten => *95,n,Wait(1)
  117. exten => *95,n,Macro(user-callerid,)
  118. exten => *95,n,Gosub(app-cf-unavailable-prompt-on,lang-playback,1(hook_0))
  119. exten => *95,n,Set(fromext=${IF($["${fromext}"=""]?${AMPUSER}:${fromext})})
  120. exten => *95,n,Wait(1)
  121. exten => *95,n(startread),Gosub(app-cf-unavailable-prompt-on,lang-playback,1(hook_1))
  122. exten => *95,n,GotoIf($["${toext}"=""]?startread)
  123. exten => *95,n,Wait(1)
  124. exten => *95,n,Set(DB(CFU/${fromext})=${toext})
  125. exten => *95,n,Gosub(app-cf-unavailable-prompt-on,lang-playback,1(hook_2))
  126. exten => *95,n,Macro(hangupcall,)
  127.  
  128. exten => _*95.,1,Answer
  129. exten => _*95.,n,Wait(1)
  130. exten => _*95.,n,Macro(user-callerid,)
  131. exten => _*95.,n,Set(fromext=${AMPUSER})
  132. exten => _*95.,n,Set(toext=${EXTEN:3})
  133. exten => _*95.,n,Set(DB(CFU/${fromext})=${toext})
  134. exten => _*95.,n(startread),Gosub(app-cf-unavailable-prompt-on,lang-playback,1(hook_3))
  135. exten => _*95.,n,Macro(hangupcall,)
  136.  
  137. exten => en,1(hook_0),Read(fromext,call-fwd-no-ans&please-enter-your-extension-then-press-pound,,,,)
  138. exten => en,n,Return()
  139. exten => en,n(hook_1),Read(toext,agent-newlocation,,,,)
  140. exten => en,n,Return()
  141. exten => en,n(hook_2),Playback(call-fwd-no-ans&for&extension)
  142. exten => en,n,SayDigits(${fromext})
  143. exten => en,n,Playback(is-set-to)
  144. exten => en,n,SayDigits(${toext})
  145. exten => en,n,Return()
  146. exten => en,n(hook_3),Playback(call-fwd-no-ans&for&extension)
  147. exten => en,n,SayDigits(${fromext})
  148. exten => en,n,Playback(is-set-to)
  149. exten => en,n,SayDigits(${toext})
  150. exten => en,n,Return()
  151.  
  152. exten => ja,1(hook_0),Read(fromext,call-fwd-no-ans&extension&please-enter-your&vm-press-pound,,,,)
  153. exten => ja,n,Return()
  154. exten => ja,n(hook_1),Read(toext,ent-target-attendant&then-press-pound,,,,)
  155. exten => ja,n,Return()
  156. exten => ja,n(hook_2),Playback(extension)
  157. exten => ja,n,SayDigits(${fromext})
  158. exten => ja,n,Playback(jp-no&call-fwd-no-ans&jp-wo)
  159. exten => ja,n,SayDigits(${toext})
  160. exten => ja,n,Playback(is-set-to)
  161. exten => ja,n,Return()
  162. exten => ja,n(hook_3),Playback(extension)
  163. exten => ja,n,SayDigits(${fromext})
  164. exten => ja,n,Playback(jp-no&call-fwd-no-ans&jp-wo)
  165. exten => ja,n,SayDigits(${toext})
  166. exten => ja,n,Playback(is-set-to)
  167. exten => ja,n,Return()
  168.  
  169. ;--== end of [app-cf-unavailable-prompt-on] ==--;
  170.  
  171.  
  172. [app-cf-unavailable-on]
  173. include => app-cf-unavailable-on-custom
  174. exten => lang-playback,1,GosubIf($[${DIALPLAN_EXISTS(app-cf-unavailable-on,${CHANNEL(language)})}]?app-cf-unavailable-on,${CHANNEL(language)},${ARG1}():app-cf-unavailable-on,en,${ARG1}())
  175. exten => lang-playback,n,Return()
  176.  
  177. exten => *52,1,Answer
  178. exten => *52,n,Wait(1)
  179. exten => *52,n,Macro(user-callerid,)
  180. exten => *52,n,Set(fromext=${AMPUSER})
  181. exten => *52,n,GotoIf($["${fromext}"!=""]?startread)
  182. exten => *52,n,Playback(agent-loggedoff)
  183. exten => *52,n,Macro(hangupcall,)
  184. exten => *52,n(startread),Gosub(app-cf-unavailable-on,lang-playback,1(hook_1))
  185. exten => *52,n,GotoIf($["${toext}"=""]?startread)
  186. exten => *52,n,Wait(1)
  187. exten => *52,n,Set(DB(CFU/${fromext})=${toext})
  188. exten => *52,n,Gosub(app-cf-unavailable-on,lang-playback,1(hook_2))
  189. exten => *52,n,Macro(hangupcall,)
  190.  
  191. exten => _*52.,1,Answer
  192. exten => _*52.,n,Wait(1)
  193. exten => _*52.,n,Macro(user-callerid,)
  194. exten => _*52.,n,Set(fromext=${AMPUSER})
  195. exten => _*52.,n,Set(toext=${EXTEN:3})
  196. exten => _*52.,n,Set(DB(CFU/${fromext})=${toext})
  197. exten => _*52.,n(startread),Gosub(app-cf-unavailable-on,lang-playback,1(hook_3))
  198. exten => _*52.,n,Macro(hangupcall,)
  199.  
  200. exten => en,1(hook_0),Read(fromext,call-fwd-no-ans&please-enter-your-extension-then-press-pound,,,,)
  201. exten => en,n,Return()
  202. exten => en,n(hook_1),Read(toext,agent-newlocation,,,,)
  203. exten => en,n,Return()
  204. exten => en,n(hook_2),Playback(call-fwd-no-ans&for&extension)
  205. exten => en,n,SayDigits(${fromext})
  206. exten => en,n,Playback(is-set-to)
  207. exten => en,n,SayDigits(${toext})
  208. exten => en,n,Return()
  209. exten => en,n(hook_3),Playback(call-fwd-no-ans&for&extension)
  210. exten => en,n,SayDigits(${fromext})
  211. exten => en,n,Playback(is-set-to)
  212. exten => en,n,SayDigits(${toext})
  213. exten => en,n,Return()
  214.  
  215. exten => ja,1(hook_0),Read(fromext,call-fwd-no-ans&extension&please-enter-your&vm-press-pound,,,,)
  216. exten => ja,n,Return()
  217. exten => ja,n(hook_1),Read(toext,ent-target-attendant&then-press-pound,,,,)
  218. exten => ja,n,Return()
  219. exten => ja,n(hook_2),Playback(extension)
  220. exten => ja,n,SayDigits(${fromext})
  221. exten => ja,n,Playback(jp-no&call-fwd-no-ans&jp-wo)
  222. exten => ja,n,SayDigits(${toext})
  223. exten => ja,n,Playback(is-set-to)
  224. exten => ja,n,Return()
  225. exten => ja,n(hook_3),Playback(extension)
  226. exten => ja,n,SayDigits(${fromext})
  227. exten => ja,n,Playback(jp-no&call-fwd-no-ans&jp-wo)
  228. exten => ja,n,SayDigits(${toext})
  229. exten => ja,n,Playback(is-set-to)
  230. exten => ja,n,Return()
  231.  
  232. ;--== end of [app-cf-unavailable-on] ==--;
  233.  
  234.  
  235. [app-cf-unavailable-off]
  236. include => app-cf-unavailable-off-custom
  237. exten => lang-playback,1,GosubIf($[${DIALPLAN_EXISTS(app-cf-unavailable-off,${CHANNEL(language)})}]?app-cf-unavailable-off,${CHANNEL(language)},${ARG1}():app-cf-unavailable-off,en,${ARG1}())
  238. exten => lang-playback,n,Return()
  239.  
  240. exten => *53,1,Answer
  241. exten => *53,n,Wait(1)
  242. exten => *53,n,Macro(user-callerid,)
  243. exten => *53,n,Set(fromext=${AMPUSER})
  244. exten => *53,n,Noop(Deleting: CFU/${fromext} ${DB_DELETE(CFU/${fromext})})
  245. exten => *53,n,Gosub(app-cf-unavailable-off,lang-playback,1(hook_0))
  246. exten => *53,n,Macro(hangupcall,)
  247.  
  248. exten => _*53.,1,Answer
  249. exten => _*53.,n,Wait(1)
  250. exten => _*53.,n,Macro(user-callerid,)
  251. exten => _*53.,n,Set(fromext=${EXTEN:3})
  252. exten => _*53.,n,Noop(Deleting: CFU/${fromext} ${DB_DELETE(CFU/${fromext})})
  253. exten => _*53.,n,Gosub(app-cf-unavailable-off,lang-playback,1(hook_1))
  254. exten => _*53.,n,Macro(hangupcall,)
  255.  
  256. exten => en,1(hook_0),Playback(call-fwd-no-ans&de-activated)
  257. exten => en,n,Return()
  258. exten => en,n(hook_1),Playback(call-fwd-no-ans&for&extension)
  259. exten => en,n,SayDigits(${fromext})
  260. exten => en,n,Playback(cancelled)
  261. exten => en,n,Return()
  262.  
  263. exten => ja,1(hook_0),Playback(call-fwd-no-ans&de-activated)
  264. exten => ja,n,Return()
  265. exten => ja,n(hook_1),Playback(extension)
  266. exten => ja,n,SayDigits(${fromext})
  267. exten => ja,n,Playback(jp-no&call-fwd-no-ans&jp-wo)
  268. exten => ja,n,Playback(cancelled)
  269. exten => ja,n,Return()
  270.  
  271. ;--== end of [app-cf-unavailable-off] ==--;
  272.  
  273.  
  274. [app-cf-prompting-on]
  275. include => app-cf-prompting-on-custom
  276. exten => lang-playback,1,GosubIf($[${DIALPLAN_EXISTS(app-cf-prompting-on,${CHANNEL(language)})}]?app-cf-prompting-on,${CHANNEL(language)},${ARG1}():app-cf-prompting-on,en,${ARG1}())
  277. exten => lang-playback,n,Return()
  278.  
  279. exten => *93,1,Answer
  280. exten => *93,n,Wait(1)
  281. exten => *93,n,Macro(user-callerid,)
  282. exten => *93,n,Gosub(app-cf-prompting-on,lang-playback,1(hook_0))
  283. exten => *93,n,Set(fromext=${IF($["foo${fromext}"="foo"]?${AMPUSER}:${fromext})})
  284. exten => *93,n,Wait(1)
  285. exten => *93,n(startread),Gosub(app-cf-prompting-on,lang-playback,1(hook_1))
  286. exten => *93,n,GotoIf($["foo${toext}"="foo"]?startread)
  287. exten => *93,n,Wait(1)
  288. exten => *93,n,Set(DB(CF/${fromext})=${toext})
  289. exten => *93,n,Set(STATE=BUSY)
  290. exten => *93,n,Gosub(app-cf-prompting-on,sstate,1())
  291. exten => *93,n,Gosub(app-cf-prompting-on,lang-playback,1(hook_2))
  292. exten => *93,n,Macro(hangupcall,)
  293.  
  294. exten => _*93.,1,Answer
  295. exten => _*93.,n,Wait(1)
  296. exten => _*93.,n,Macro(user-callerid,)
  297. exten => _*93.,n,Set(fromext=${AMPUSER})
  298. exten => _*93.,n,Set(toext=${EXTEN:3})
  299. exten => _*93.,n,Set(DB(CF/${fromext})=${toext})
  300. exten => _*93.,n,Set(STATE=BUSY)
  301. exten => _*93.,n,Gosub(app-cf-prompting-on,sstate,1())
  302. exten => _*93.,n,Gosub(app-cf-prompting-on,lang-playback,1(hook_3))
  303. exten => _*93.,n,Macro(hangupcall,)
  304.  
  305. exten => sstate,1,Set(DEVICE_STATE(Custom:CF${fromext})=${STATE})
  306. exten => sstate,n,Set(DEVICES=${DB(AMPUSER/${fromext}/device)})
  307. exten => sstate,n,GotoIf($["${DEVICES}" = "" ]?return)
  308. exten => sstate,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)})
  309. exten => sstate,n,Set(ITER=1)
  310. exten => sstate,n(begin),Set(DEVICE_STATE(Custom:DEVCF${CUT(DEVICES,&,${ITER})})=${STATE})
  311. exten => sstate,n,Set(ITER=$[${ITER} + 1])
  312. exten => sstate,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin)
  313. exten => sstate,n(return),Return()
  314.  
  315. exten => en,1(hook_0),Read(fromext,call-fwd-unconditional&please-enter-your-extension-then-press-pound,,,,)
  316. exten => en,n,Return()
  317. exten => en,n(hook_1),Read(toext,agent-newlocation,,,,)
  318. exten => en,n,Return()
  319. exten => en,n(hook_2),Playback(call-fwd-unconditional&for&extension)
  320. exten => en,n,SayDigits(${fromext})
  321. exten => en,n,Playback(is-set-to)
  322. exten => en,n,SayDigits(${toext})
  323. exten => en,n,Return()
  324. exten => en,n(hook_3),Playback(call-fwd-unconditional&for&extension)
  325. exten => en,n,SayDigits(${fromext})
  326. exten => en,n,Playback(is-set-to)
  327. exten => en,n,SayDigits(${toext})
  328. exten => en,n,Return()
  329.  
  330. exten => ja,1(hook_0),Read(fromext,call-fwd-unconditional&extension&please-enter-your&vm-press-pound,,,,)
  331. exten => ja,n,Return()
  332. exten => ja,n(hook_1),Read(toext,ent-target-attendant&vm-press-pound,,,,)
  333. exten => ja,n,Return()
  334. exten => ja,n(hook_2),Playback(extension)
  335. exten => ja,n,SayDigits(${fromext})
  336. exten => ja,n,Playback(jp-no&call-fwd-unconditional&jp-wo)
  337. exten => ja,n,SayDigits(${toext})
  338. exten => ja,n,Playback(is-set-to)
  339. exten => ja,n,Return()
  340. exten => ja,n(hook_3),Playback(extension)
  341. exten => ja,n,SayDigits(${fromext})
  342. exten => ja,n,Playback(jp-no&call-fwd-unconditional&jp-wo)
  343. exten => ja,n,SayDigits(${toext})
  344. exten => ja,n,Playback(is-set-to)
  345. exten => ja,n,Return()
  346.  
  347. ;--== end of [app-cf-prompting-on] ==--;
  348.  
  349.  
  350. [app-cf-on]
  351. include => app-cf-on-custom
  352. exten => lang-playback,1,GosubIf($[${DIALPLAN_EXISTS(app-cf-on,${CHANNEL(language)})}]?app-cf-on,${CHANNEL(language)},${ARG1}():app-cf-on,en,${ARG1}())
  353. exten => lang-playback,n,Return()
  354.  
  355. exten => *72,1,Answer
  356. exten => *72,n,Wait(1)
  357. exten => *72,n,Macro(user-callerid,)
  358. exten => *72,n,Set(fromext=${AMPUSER})
  359. exten => *72,n,GotoIf($["${fromext}"!=""]?startread)
  360. exten => *72,n,Playback(agent-loggedoff)
  361. exten => *72,n,Macro(hangupcall,)
  362. exten => *72,n(startread),Gosub(app-cf-on,lang-playback,1(hook_1))
  363. exten => *72,n,GotoIf($["foo${toext}"="foo"]?startread)
  364. exten => *72,n,Wait(1)
  365. exten => *72,n,Set(DB(CF/${fromext})=${toext})
  366. exten => *72,n,Set(STATE=BUSY)
  367. exten => *72,n,Gosub(app-cf-on,sstate,1())
  368. exten => *72,n,Gosub(app-cf-on,lang-playback,1(hook_2))
  369. exten => *72,n,Macro(hangupcall,)
  370.  
  371. exten => _*72.,1,Answer
  372. exten => _*72.,n,Wait(1)
  373. exten => _*72.,n,Macro(user-callerid,)
  374. exten => _*72.,n,Set(fromext=${AMPUSER})
  375. exten => _*72.,n,Set(toext=${EXTEN:3})
  376. exten => _*72.,n,Set(DB(CF/${fromext})=${toext})
  377. exten => _*72.,n,Set(STATE=BUSY)
  378. exten => _*72.,n,Gosub(app-cf-on,sstate,1())
  379. exten => _*72.,n,Gosub(app-cf-on,lang-playback,1(hook_3))
  380. exten => _*72.,n,Macro(hangupcall,)
  381.  
  382. exten => sstate,1,Set(DEVICE_STATE(Custom:CF${fromext})=${STATE})
  383. exten => sstate,n,Set(DEVICES=${DB(AMPUSER/${fromext}/device)})
  384. exten => sstate,n,GotoIf($["${DEVICES}" = "" ]?return)
  385. exten => sstate,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)})
  386. exten => sstate,n,Set(ITER=1)
  387. exten => sstate,n(begin),Set(DEVICE_STATE(Custom:DEVCF${CUT(DEVICES,&,${ITER})})=${STATE})
  388. exten => sstate,n,Set(ITER=$[${ITER} + 1])
  389. exten => sstate,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin)
  390. exten => sstate,n(return),Return()
  391.  
  392. exten => en,1(hook_0),Read(fromext,call-fwd-unconditional&please-enter-your-extension-then-press-pound,,,,)
  393. exten => en,n,Return()
  394. exten => en,n(hook_1),Read(toext,agent-newlocation,,,,)
  395. exten => en,n,Return()
  396. exten => en,n(hook_2),Playback(call-fwd-unconditional&for&extension)
  397. exten => en,n,SayDigits(${fromext})
  398. exten => en,n,Playback(is-set-to)
  399. exten => en,n,SayDigits(${toext})
  400. exten => en,n,Return()
  401. exten => en,n(hook_3),Playback(call-fwd-unconditional&for&extension)
  402. exten => en,n,SayDigits(${fromext})
  403. exten => en,n,Playback(is-set-to)
  404. exten => en,n,SayDigits(${toext})
  405. exten => en,n,Return()
  406.  
  407. exten => ja,1(hook_0),Read(fromext,call-fwd-unconditional&extension&please-enter-your&vm-press-pound,,,,)
  408. exten => ja,n,Return()
  409. exten => ja,n(hook_1),Read(toext,ent-target-attendant&vm-press-pound,,,,)
  410. exten => ja,n,Return()
  411. exten => ja,n(hook_2),Playback(extension)
  412. exten => ja,n,SayDigits(${fromext})
  413. exten => ja,n,Playback(jp-no&call-fwd-unconditional&jp-wo)
  414. exten => ja,n,SayDigits(${toext})
  415. exten => ja,n,Playback(is-set-to)
  416. exten => ja,n,Return()
  417. exten => ja,n(hook_3),Playback(extension)
  418. exten => ja,n,SayDigits(${fromext})
  419. exten => ja,n,Playback(jp-no&call-fwd-unconditional&jp-wo)
  420. exten => ja,n,SayDigits(${toext})
  421. exten => ja,n,Playback(is-set-to)
  422. exten => ja,n,Return()
  423.  
  424. ;--== end of [app-cf-on] ==--;
  425.  
  426.  
  427. [app-cf-off-any]
  428. include => app-cf-off-any-custom
  429. exten => lang-playback,1,GosubIf($[${DIALPLAN_EXISTS(app-cf-off-any,${CHANNEL(language)})}]?app-cf-off-any,${CHANNEL(language)},${ARG1}():app-cf-off-any,en,${ARG1}())
  430. exten => lang-playback,n,Return()
  431.  
  432. exten => *74,1,Answer
  433. exten => *74,n,Macro(user-callerid,)
  434. exten => *74,n,Wait(1)
  435. exten => *74,n,Gosub(app-cf-off-any,lang-playback,1(hook_0))
  436. exten => *74,n,Set(fromext=${IF($["foo${fromext}"="foo"]?${AMPUSER}:${fromext})})
  437. exten => *74,n,Wait(1)
  438. exten => *74,n,Noop(Deleting: CF/${fromext} ${DB_DELETE(CF/${fromext})})
  439. exten => *74,n,Set(STATE=NOT_INUSE)
  440. exten => *74,n,Gosub(app-cf-off-any,sstate,1())
  441. exten => *74,n,Gosub(app-cf-off-any,lang-playback,1(hook_1))
  442. exten => *74,n,Macro(hangupcall,)
  443.  
  444. exten => sstate,1,Set(DEVICE_STATE(Custom:CF${fromext})=${STATE})
  445. exten => sstate,n,Set(DEVICES=${DB(AMPUSER/${fromext}/device)})
  446. exten => sstate,n,GotoIf($["${DEVICES}" = "" ]?return)
  447. exten => sstate,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)})
  448. exten => sstate,n,Set(ITER=1)
  449. exten => sstate,n(begin),Set(DEVICE_STATE(Custom:DEVCF${CUT(DEVICES,&,${ITER})})=${STATE})
  450. exten => sstate,n,Set(ITER=$[${ITER} + 1])
  451. exten => sstate,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin)
  452. exten => sstate,n(return),Return()
  453.  
  454. exten => en,1(hook_0),Read(fromext,please-enter-your-extension-then-press-pound,,,,)
  455. exten => en,n,Return()
  456. exten => en,n(hook_1),Playback(call-fwd-unconditional&for&extension)
  457. exten => en,n,SayDigits(${fromext})
  458. exten => en,n,Playback(cancelled)
  459. exten => en,n,Return()
  460.  
  461. exten => ja,1(hook_0),Read(fromext,extension&please-enter-your&vm-press-pound,,,,)
  462. exten => ja,n,Return()
  463. exten => ja,n(hook_1),Playback(extension)
  464. exten => ja,n,SayDigits(${fromext})
  465. exten => ja,n,Playback(jp-no&call-fwd-unconditional&jp-wo&cancelled)
  466. exten => ja,n,Return()
  467.  
  468. ;--== end of [app-cf-off-any] ==--;
  469.  
  470.  
  471. [app-cf-off]
  472. include => app-cf-off-custom
  473. exten => lang-playback,1,GosubIf($[${DIALPLAN_EXISTS(app-cf-off,${CHANNEL(language)})}]?app-cf-off,${CHANNEL(language)},${ARG1}():app-cf-off,en,${ARG1}())
  474. exten => lang-playback,n,Return()
  475.  
  476. exten => *73,1,Answer
  477. exten => *73,n,Wait(1)
  478. exten => *73,n,Macro(user-callerid,)
  479. exten => *73,n,Set(fromext=${AMPUSER})
  480. exten => *73,n,Noop(Deleting: CF/${fromext} ${DB_DELETE(CF/${fromext})})
  481. exten => *73,n,Set(STATE=NOT_INUSE)
  482. exten => *73,n,Gosub(app-cf-off,sstate,1())
  483. exten => *73,n,Gosub(app-cf-off,lang-playback,1(hook_0))
  484. exten => *73,n,Macro(hangupcall,)
  485.  
  486. exten => _*73.,1,Answer
  487. exten => _*73.,n,Wait(1)
  488. exten => _*73.,n,Macro(user-callerid,)
  489. exten => _*73.,n,Set(fromext=${EXTEN:3})
  490. exten => _*73.,n,Noop(Deleting: CF/${fromext} ${DB_DELETE(CF/${fromext})})
  491. exten => _*73.,n,Set(STATE=NOT_INUSE)
  492. exten => _*73.,n,Gosub(app-cf-off,sstate,1())
  493. exten => _*73.,n,Gosub(app-cf-off,lang-playback,1(hook_1))
  494. exten => _*73.,n,Macro(hangupcall,)
  495.  
  496. exten => sstate,1,Set(DEVICE_STATE(Custom:CF${fromext})=${STATE})
  497. exten => sstate,n,Set(DEVICES=${DB(AMPUSER/${fromext}/device)})
  498. exten => sstate,n,GotoIf($["${DEVICES}" = "" ]?return)
  499. exten => sstate,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)})
  500. exten => sstate,n,Set(ITER=1)
  501. exten => sstate,n(begin),Set(DEVICE_STATE(Custom:DEVCF${CUT(DEVICES,&,${ITER})})=${STATE})
  502. exten => sstate,n,Set(ITER=$[${ITER} + 1])
  503. exten => sstate,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin)
  504. exten => sstate,n(return),Return()
  505.  
  506. exten => en,1(hook_0),Playback(call-fwd-unconditional&de-activated)
  507. exten => en,n,Return()
  508. exten => en,n(hook_1),Playback(call-fwd-unconditional&for&extension)
  509. exten => en,n,SayDigits(${fromext})
  510. exten => en,n,Playback(cancelled)
  511. exten => en,n,Return()
  512.  
  513. exten => ja,1(hook_0),Playback(call-fwd-unconditional&de-activated)
  514. exten => ja,n,Return()
  515. exten => ja,n(hook_1),Playback(extension)
  516. exten => ja,n,SayDigits(${fromext})
  517. exten => ja,n,Playback(jp-no&call-fwd-unconditional&jp-wo&cancelled)
  518. exten => ja,n,Return()
  519.  
  520. ;--== end of [app-cf-off] ==--;
  521.  
  522.  
  523. [app-cf-busy-prompting-on]
  524. include => app-cf-busy-prompting-on-custom
  525. exten => lang-playback,1,GosubIf($[${DIALPLAN_EXISTS(app-cf-busy-prompting-on,${CHANNEL(language)})}]?app-cf-busy-prompting-on,${CHANNEL(language)},${ARG1}():app-cf-busy-prompting-on,en,${ARG1}())
  526. exten => lang-playback,n,Return()
  527.  
  528. exten => *94,1,Answer
  529. exten => *94,n,Wait(1)
  530. exten => *94,n,Macro(user-callerid,)
  531. exten => *94,n,Gosub(app-cf-busy-prompting-on,lang-playback,1(hook_0))
  532. exten => *94,n,Set(fromext=${IF($["${fromext}"=""]?${AMPUSER}:${fromext})})
  533. exten => *94,n,Wait(1)
  534. exten => *94,n(startread),Gosub(app-cf-busy-prompting-on,lang-playback,1(hook_1))
  535. exten => *94,n,Gosub(app-cf-busy-prompting-on,lang-playback,1(hook_2))
  536. exten => *94,n,Macro(hangupcall,)
  537.  
  538. exten => _*94.,1,Answer
  539. exten => _*94.,n,Wait(1)
  540. exten => _*94.,n,Macro(user-callerid,)
  541. exten => _*94.,n,Set(fromext=${AMPUSER})
  542. exten => _*94.,n,Set(toext=${EXTEN:3})
  543. exten => _*94.,n,Set(DB(CFB/${fromext})=${toext})
  544. exten => _*94.,n,Gosub(app-cf-busy-prompting-on,lang-playback,1(hook_3))
  545. exten => _*94.,n,Macro(hangupcall,)
  546.  
  547. exten => en,1(hook_0),Read(fromext,call-fwd-on-busy&please-enter-your-extension-then-press-pound,,,,)
  548. exten => en,n,Return()
  549. exten => en,n(hook_1),Read(toext,agent-newlocation,,,,)
  550. exten => en,n,GotoIf($["${toext}"=""]?hook_1)
  551. exten => en,n,Wait(1)
  552. exten => en,n,Set(DB(CFB/${fromext})=${toext})
  553. exten => en,n,Return()
  554. exten => en,n(hook_2),Playback(call-fwd-on-busy&for&extension)
  555. exten => en,n,SayDigits(${fromext})
  556. exten => en,n,Playback(is-set-to)
  557. exten => en,n,SayDigits(${toext})
  558. exten => en,n,Return()
  559. exten => en,n(hook_3),Playback(call-fwd-on-busy&for&extension)
  560. exten => en,n,SayDigits(${fromext})
  561. exten => en,n,Playback(is-set-to)
  562. exten => en,n,SayDigits(${toext})
  563. exten => en,n,Return()
  564.  
  565. exten => ja,1(hook_0),Read(fromext,call-fwd-on-busy&extension&please-enter-your&vm-press-pound,,,,)
  566. exten => ja,n,Return()
  567. exten => ja,n(hook_1),Read(toext,ent-target-attendant&then-press-pound,,,,)
  568. exten => ja,n,GotoIf($["${toext}"=""]?hook_1)
  569. exten => ja,n,Wait(1)
  570. exten => ja,n,Set(DB(CFB/${fromext})=${toext})
  571. exten => ja,n,Return()
  572. exten => ja,n(hook_2),Playback(extension)
  573. exten => ja,n,SayDigits(${fromext})
  574. exten => ja,n,Playback(jp-no&call-fwd-on-busy&jp-wo)
  575. exten => ja,n,SayDigits(${toext})
  576. exten => ja,n,Playback(is-set-to)
  577. exten => ja,n,Return()
  578. exten => ja,n(hook_3),Playback(extension)
  579. exten => ja,n,SayDigits(${fromext})
  580. exten => ja,n,Playback(jp-no&call-fwd-on-busy&jp-wo)
  581. exten => ja,n,SayDigits(${toext})
  582. exten => ja,n,Playback(is-set-to)
  583. exten => ja,n,Return()
  584.  
  585. ;--== end of [app-cf-busy-prompting-on] ==--;
  586.  
  587.  
  588. [app-cf-busy-on]
  589. include => app-cf-busy-on-custom
  590. exten => lang-playback,1,GosubIf($[${DIALPLAN_EXISTS(app-cf-busy-on,${CHANNEL(language)})}]?app-cf-busy-on,${CHANNEL(language)},${ARG1}():app-cf-busy-on,en,${ARG1}())
  591. exten => lang-playback,n,Return()
  592.  
  593. exten => *90,1,Answer
  594. exten => *90,n,Wait(1)
  595. exten => *90,n,Macro(user-callerid,)
  596. exten => *90,n,Set(fromext=${AMPUSER})
  597. exten => *90,n,GotoIf($["${fromext}"!=""]?startread)
  598. exten => *90,n,Playback(agent-loggedoff)
  599. exten => *90,n,Macro(hangupcall,)
  600. exten => *90,n(startread),Gosub(app-cf-busy-on,lang-playback,1(hook_1))
  601. exten => *90,n,Gosub(app-cf-busy-on,lang-playback,1(hook_2))
  602. exten => *90,n,Macro(hangupcall,)
  603.  
  604. exten => _*90.,1,Answer
  605. exten => _*90.,n,Wait(1)
  606. exten => _*90.,n,Macro(user-callerid,)
  607. exten => _*90.,n,Set(fromext=${AMPUSER})
  608. exten => _*90.,n,Set(toext=${EXTEN:3})
  609. exten => _*90.,n,Set(DB(CFB/${fromext})=${toext})
  610. exten => _*90.,n,Gosub(app-cf-busy-on,lang-playback,1(hook_3))
  611. exten => _*90.,n,Macro(hangupcall,)
  612.  
  613. exten => en,1(hook_0),Read(fromext,call-fwd-on-busy&please-enter-your-extension-then-press-pound,,,,)
  614. exten => en,n,Return()
  615. exten => en,n(hook_1),Read(toext,agent-newlocation,,,,)
  616. exten => en,n,GotoIf($["${toext}"=""]?hook_1)
  617. exten => en,n,Wait(1)
  618. exten => en,n,Set(DB(CFB/${fromext})=${toext})
  619. exten => en,n,Return()
  620. exten => en,n(hook_2),Playback(call-fwd-on-busy&for&extension)
  621. exten => en,n,SayDigits(${fromext})
  622. exten => en,n,Playback(is-set-to)
  623. exten => en,n,SayDigits(${toext})
  624. exten => en,n,Return()
  625. exten => en,n(hook_3),Playback(call-fwd-on-busy&for&extension)
  626. exten => en,n,SayDigits(${fromext})
  627. exten => en,n,Playback(is-set-to)
  628. exten => en,n,SayDigits(${toext})
  629. exten => en,n,Return()
  630.  
  631. exten => ja,1(hook_0),Read(fromext,call-fwd-on-busy&extension&please-enter-your&vm-press-pound,,,,)
  632. exten => ja,n,Return()
  633. exten => ja,n(hook_1),Read(toext,ent-target-attendant&then-press-pound,,,,)
  634. exten => ja,n,GotoIf($["${toext}"=""]?hook_1)
  635. exten => ja,n,Wait(1)
  636. exten => ja,n,Set(DB(CFB/${fromext})=${toext})
  637. exten => ja,n,Return()
  638. exten => ja,n(hook_2),Playback(extension)
  639. exten => ja,n,SayDigits(${fromext})
  640. exten => ja,n,Playback(jp-no&call-fwd-on-busy&jp-wo)
  641. exten => ja,n,SayDigits(${toext})
  642. exten => ja,n,Playback(is-set-to)
  643. exten => ja,n,Return()
  644. exten => ja,n(hook_3),Playback(extension)
  645. exten => ja,n,SayDigits(${fromext})
  646. exten => ja,n,Playback(jp-no&call-fwd-on-busy&jp-wo)
  647. exten => ja,n,SayDigits(${toext})
  648. exten => ja,n,Playback(is-set-to)
  649. exten => ja,n,Return()
  650.  
  651. ;--== end of [app-cf-busy-on] ==--;
  652.  
  653.  
  654. [app-cf-busy-off-any]
  655. include => app-cf-busy-off-any-custom
  656. exten => lang-playback,1,GosubIf($[${DIALPLAN_EXISTS(app-cf-busy-off-any,${CHANNEL(language)})}]?app-cf-busy-off-any,${CHANNEL(language)},${ARG1}():app-cf-busy-off-any,en,${ARG1}())
  657. exten => lang-playback,n,Return()
  658.  
  659. exten => *92,1,Answer
  660. exten => *92,n,Macro(user-callerid,)
  661. exten => *92,n,Wait(1)
  662. exten => *92,n,Gosub(app-cf-busy-off-any,lang-playback,1(hook_0))
  663. exten => *92,n,Set(fromext=${IF($["foo${fromext}"="foo"]?${AMPUSER}:${fromext})})
  664. exten => *92,n,Wait(1)
  665. exten => *92,n,Noop(Deleting: CFB/${fromext} ${DB_DELETE(CFB/${fromext})})
  666. exten => *92,n,Gosub(app-cf-busy-off-any,lang-playback,1(hook_1))
  667. exten => *92,n,Macro(hangupcall,)
  668.  
  669. exten => en,1(hook_0),Read(fromext,please-enter-your-extension-then-press-pound,,,,)
  670. exten => en,n,Return()
  671. exten => en,n(hook_1),Playback(call-fwd-on-busy&for&extension)
  672. exten => en,n,SayDigits(${fromext})
  673. exten => en,n,Playback(cancelled)
  674. exten => en,n,Return()
  675.  
  676. exten => ja,1(hook_0),Read(fromext,extension&please-enter-your&vm-press-pound,,,,)
  677. exten => ja,n,Return()
  678. exten => ja,n(hook_1),Playback(extension)
  679. exten => ja,n,SayDigits(${fromext})
  680. exten => ja,n,Playback(jp-no&call-fwd-on-busy&jp-wo)
  681. exten => ja,n,Playback(cancelled)
  682. exten => ja,n,Return()
  683.  
  684. ;--== end of [app-cf-busy-off-any] ==--;
  685.  
  686.  
  687. [app-cf-busy-off]
  688. include => app-cf-busy-off-custom
  689. exten => lang-playback,1,GosubIf($[${DIALPLAN_EXISTS(app-cf-busy-off,${CHANNEL(language)})}]?app-cf-busy-off,${CHANNEL(language)},${ARG1}():app-cf-busy-off,en,${ARG1}())
  690. exten => lang-playback,n,Return()
  691.  
  692. exten => *91,1,Answer
  693. exten => *91,n,Wait(1)
  694. exten => *91,n,Macro(user-callerid,)
  695. exten => *91,n,Set(fromext=${AMPUSER})
  696. exten => *91,n,Noop(Deleting: CFB/${fromext} ${DB_DELETE(CFB/${fromext})})
  697. exten => *91,n,Gosub(app-cf-busy-off,lang-playback,1(hook_0))
  698. exten => *91,n,Macro(hangupcall,)
  699.  
  700. exten => _*91.,1,Answer
  701. exten => _*91.,n,Wait(1)
  702. exten => _*91.,n,Macro(user-callerid,)
  703. exten => _*91.,n,Set(fromext=${EXTEN:3})
  704. exten => _*91.,n,Noop(Deleting: CFB/${fromext} ${DB_DELETE(CFB/${fromext})})
  705. exten => _*91.,n,Gosub(app-cf-busy-off,lang-playback,1(hook_1))
  706. exten => _*91.,n,Macro(hangupcall,)
  707.  
  708. exten => en,1(hook_0),Playback(call-fwd-on-busy&de-activated)
  709. exten => en,n,Return()
  710. exten => en,n(hook_1),Playback(call-fwd-on-busy&for&extension)
  711. exten => en,n,SayDigits(${fromext})
  712. exten => en,n,Playback(cancelled)
  713. exten => en,n,Return()
  714.  
  715. exten => ja,1(hook_0),Playback(call-fwd-on-busy&de-activated)
  716. exten => ja,n,Return()
  717. exten => ja,n(hook_1),Playback(extension)
  718. exten => ja,n,SayDigits(${fromext})
  719. exten => ja,n,Playback(jp-no&call-fwd-on-busy&jp-wo)
  720. exten => ja,n,Playback(cancelled)
  721. exten => ja,n,Return()
  722.  
  723. ;--== end of [app-cf-busy-off] ==--;
  724.  
  725.  
  726. [app-cf-toggle]
  727. include => app-cf-toggle-custom
  728. exten => lang-playback,1,GosubIf($[${DIALPLAN_EXISTS(app-cf-toggle,${CHANNEL(language)})}]?app-cf-toggle,${CHANNEL(language)},${ARG1}():app-cf-toggle,en,${ARG1}())
  729. exten => lang-playback,n,Return()
  730.  
  731. exten => *96,1,Answer
  732. exten => *96,n,Wait(1)
  733. exten => *96,n,Macro(user-callerid,)
  734. exten => *96,n,Set(fromext=${AMPUSER})
  735. exten => *96,n,GotoIf($["${DB(CF/${fromext})}" = ""]?activate:deactivate)
  736. exten => *96,n(activate),Read(toext,agent-newlocation,,,,)
  737. exten => *96,n,GotoIf($["${toext}"=""]?activate)
  738. exten => *96,n,Wait(1)
  739. exten => *96,n(toext),Set(DB(CF/${fromext})=${toext})
  740. exten => *96,n,Set(STATE=BUSY)
  741. exten => *96,n,Gosub(app-cf-toggle,sstate,1())
  742. exten => *96,n,Gosub(app-cf-toggle,lang-playback,1(hook_0))
  743. exten => *96,n,Macro(hangupcall,)
  744. exten => *96,n(setdirect),Answer
  745. exten => *96,n,Wait(1)
  746. exten => *96,n,Macro(user-callerid,)
  747. exten => *96,n,Set(fromext=${AMPUSER})
  748. exten => *96,n,Goto(toext)
  749. exten => *96,n(deactivate),Noop(Deleting: CF/${fromext} ${DB_DELETE(CF/${fromext})})
  750. exten => *96,n,Set(STATE=NOT_INUSE)
  751. exten => *96,n,Gosub(app-cf-toggle,sstate,1())
  752. exten => *96,n(hook_off),Playback(call-fwd-unconditional&de-activated)
  753. exten => *96,n,Macro(hangupcall,)
  754.  
  755. exten => sstate,1,Set(DEVICE_STATE(Custom:CF${fromext})=${STATE})
  756. exten => sstate,n,Set(DEVICES=${DB(AMPUSER/${fromext}/device)})
  757. exten => sstate,n,GotoIf($["${DEVICES}" = "" ]?return)
  758. exten => sstate,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)})
  759. exten => sstate,n,Set(ITER=1)
  760. exten => sstate,n(begin),Set(DEVICE_STATE(Custom:DEVCF${CUT(DEVICES,&,${ITER})})=${STATE})
  761. exten => sstate,n,Set(ITER=$[${ITER} + 1])
  762. exten => sstate,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin)
  763. exten => sstate,n(return),Return()
  764.  
  765. exten => en,1(hook_0),Playback(call-fwd-unconditional&for&extension)
  766. exten => en,n,SayDigits(${fromext})
  767. exten => en,n,Playback(is-set-to)
  768. exten => en,n,SayDigits(${toext})
  769. exten => en,n,Return()
  770.  
  771. exten => ja,1(hook_0),Playback(extension)
  772. exten => ja,n,SayDigits(${fromext})
  773. exten => ja,n,Playback(jp-no&call-fwd-unconditional&jp-wo)
  774. exten => ja,n,SayDigits(${toext})
  775. exten => ja,n,Playback(is-set-to)
  776. exten => ja,n,Return()
  777.  
  778. ;--== end of [app-cf-toggle] ==--;
  779.  
  780.  
  781. [ext-cf-hints]
  782. include => ext-cf-hints-custom
  783. exten => _*9610000.,1,Set(toext=${EXTEN:8})
  784. exten => _*9610000.,n,Goto(app-cf-toggle,*96,setdirect)
  785.  
  786. exten => _*9610003.,1,Set(toext=${EXTEN:8})
  787. exten => _*9610003.,n,Goto(app-cf-toggle,*96,setdirect)
  788.  
  789. exten => _*961020.,1,Set(toext=${EXTEN:7})
  790. exten => _*961020.,n,Goto(app-cf-toggle,*96,setdirect)
  791.  
  792. exten => _*961132.,1,Set(toext=${EXTEN:7})
  793. exten => _*961132.,n,Goto(app-cf-toggle,*96,setdirect)
  794.  
  795. exten => _*961192.,1,Set(toext=${EXTEN:7})
  796. exten => _*961192.,n,Goto(app-cf-toggle,*96,setdirect)
  797.  
  798. exten => _*961236.,1,Set(toext=${EXTEN:7})
  799. exten => _*961236.,n,Goto(app-cf-toggle,*96,setdirect)
  800.  
  801. exten => _*961392.,1,Set(toext=${EXTEN:7})
  802. exten => _*961392.,n,Goto(app-cf-toggle,*96,setdirect)
  803.  
  804. exten => _*961420.,1,Set(toext=${EXTEN:7})
  805. exten => _*961420.,n,Goto(app-cf-toggle,*96,setdirect)
  806.  
  807. exten => _*961580.,1,Set(toext=${EXTEN:7})
  808. exten => _*961580.,n,Goto(app-cf-toggle,*96,setdirect)
  809.  
  810. exten => _*9699001.,1,Set(toext=${EXTEN:8})
  811. exten => _*9699001.,n,Goto(app-cf-toggle,*96,setdirect)
  812.  
  813. exten => _*96XXXX,1,Goto(app-cf-toggle,*96,1)
  814.  
  815. exten => _*96XXXXX,1,Goto(app-cf-toggle,*96,1)
  816.  
  817. exten => _*96X.,hint,Custom:DEVCF${EXTEN:3}
  818. ;--== end of [ext-cf-hints] ==--;
  819.  
  820.  
  821. [sub-record-cancel]
  822. include => sub-record-cancel-custom
  823. exten => s,1,Return()
  824.  
  825. ;--== end of [sub-record-cancel] ==--;
  826.  
  827.  
  828. [sub-record-check]
  829. include => sub-record-check-custom
  830. exten => s,1,GotoIf($[${LEN(${FROMEXTEN})}]?initialized)
  831. exten => s,n,Set(__REC_STATUS=INITIALIZED)
  832. exten => s,n,Set(NOW=${EPOCH})
  833. exten => s,n,Set(__DAY=${STRFTIME(${NOW},,%d)})
  834. exten => s,n,Set(__MONTH=${STRFTIME(${NOW},,%m)})
  835. exten => s,n,Set(__YEAR=${STRFTIME(${NOW},,%Y)})
  836. exten => s,n,Set(__TIMESTR=${YEAR}${MONTH}${DAY}-${STRFTIME(${NOW},,%H%M%S)})
  837. exten => s,n,Set(__FROMEXTEN=${IF($[${LEN(${AMPUSER})}]?${AMPUSER}:${IF($[${LEN(${REALCALLERIDNUM})}]?${REALCALLERIDNUM}:unknown)})})
  838. exten => s,n,Set(__MON_FMT=${IF($["${MIXMON_FORMAT}"="wav49"]?WAV:${MIXMON_FORMAT})})
  839. exten => s,n(initialized),Noop(Recordings initialized)
  840. exten => s,n,ExecIf($[!${LEN(${ARG3})}]?Set(ARG3=dontcare))
  841. exten => s,n,Set(REC_POLICY_MODE_SAVE=${REC_POLICY_MODE})
  842. exten => s,n,ExecIf($["${BLINDTRANSFER}${ATTENDEDTRANSFER}" != ""]?Set(REC_STATUS=NO))
  843. exten => s,n(next),GotoIf($[${LEN(${ARG1})}]?checkaction)
  844. exten => s,n(recorderror),Playback(something-terribly-wrong,error)
  845. exten => s,n,Hangup
  846. exten => s,n(checkaction),GotoIf($[${DIALPLAN_EXISTS(sub-record-check,${ARG1})}]?sub-record-check,${ARG1},1)
  847. exten => s,n,Noop(Generic ${ARG1} Recording Check - ${FROMEXTEN} ${ARG2})
  848. exten => s,n,Gosub(recordcheck,1(${ARG3},${ARG1},${ARG2}))
  849. exten => s,n,Return()
  850.  
  851. exten => recordcheck,1,Noop(Starting recording check against ${ARG1})
  852. exten => recordcheck,n,Goto(${ARG1})
  853. exten => recordcheck,n(dontcare),Return()
  854. exten => recordcheck,n(always),Noop(Detected legacy "always" entry. Mapping to "force")
  855. exten => recordcheck,n(force),Set(__REC_POLICY_MODE=FORCE)
  856. exten => recordcheck,n,GotoIf($["${REC_STATUS}"!="RECORDING"]?startrec)
  857. exten => recordcheck,n,Return()
  858. exten => recordcheck,n(delayed),Noop(Detected legacy "delayed" entry. Mapping to "yes")
  859. exten => recordcheck,n(yes),ExecIf($["${REC_POLICY_MODE_SAVE}" = "never" | "${REC_POLICY_MODE_SAVE}" = "NEVER" | "${REC_POLICY_MODE}" = "NEVER" | "${REC_POLICY_MODE}" = "NO" | "${REC_STATUS}" = "RECORDING"]?Return())
  860. exten => recordcheck,n,Set(__REC_POLICY_MODE=YES)
  861. exten => recordcheck,n,Goto(startrec)
  862. exten => recordcheck,n(no),Set(__REC_POLICY_MODE=NO)
  863. exten => recordcheck,n,Return()
  864. exten => recordcheck,n(never),Set(__REC_POLICY_MODE=NEVER)
  865. exten => recordcheck,n,Goto(stoprec)
  866. exten => recordcheck,n(startrec),Noop(Starting recording: ${ARG2}, ${ARG3})
  867. exten => recordcheck,n,ExecIf($["${FROMQUEUEEXTEN}" != ""]?Set(RECFROMEXTEN=${FROMQUEUEEXTEN}))
  868. exten => recordcheck,n,ExecIf($["${FROMQUEUEEXTEN}" == ""]?Set(RECFROMEXTEN=${FROMEXTEN}))
  869. exten => recordcheck,n,Set(__CALLFILENAME=${ARG2}-${ARG3}-${RECFROMEXTEN}-${TIMESTR}-${UNIQUEID})
  870. exten => recordcheck,n,MixMonitor(${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT},a${MONITOR_REC_OPTION}i(${LOCAL_MIXMON_ID})${MIXMON_BEEP},${MIXMON_POST})
  871. exten => recordcheck,n,Set(__MIXMON_ID=${LOCAL_MIXMON_ID})
  872. exten => recordcheck,n,Set(__RECORD_ID=${CHANNEL(name)})
  873. exten => recordcheck,n,Set(__REC_STATUS=RECORDING)
  874. exten => recordcheck,n,Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT})
  875. exten => recordcheck,n,Return()
  876. exten => recordcheck,n(stoprec),Noop(Stopping recording: ${ARG2}, ${ARG3})
  877. exten => recordcheck,n,Set(__REC_STATUS=STOPPED)
  878. exten => recordcheck,n,System(${AMPBIN}/stoprecording.php "${CHANNEL(name)}")
  879. exten => recordcheck,n,Return()
  880.  
  881. exten => out,1,Noop(Outbound Recording Check from ${FROMEXTEN} to ${ARG2})
  882. exten => out,n,Set(RECMODE=${DB(AMPUSER/${FROMEXTEN}/recording/out/external)})
  883. exten => out,n,ExecIf($[!${LEN(${RECMODE})} | "${RECMODE}" = "dontcare"]?Goto(routewins))
  884. exten => out,n,ExecIf($["${ARG3}" = "never" | "${ARG3}" = "force"]?Goto(routewins))
  885. exten => out,n(extenwins),Gosub(recordcheck,1(${RECMODE},out,${ARG2}))
  886. exten => out,n,Return()
  887. exten => out,n(routewins),Gosub(recordcheck,1(${ARG3},out,${ARG2}))
  888. exten => out,n,Return()
  889.  
  890. exten => in,1,Noop(Inbound Recording Check to ${ARG2})
  891. exten => in,n,Set(FROMEXTEN=unknown)
  892. exten => in,n,ExecIf($[${LEN(${CALLERID(num)})}]?Set(FROMEXTEN=${CALLERID(num)}))
  893. exten => in,n,Gosub(recordcheck,1(${ARG3},in,${ARG2}))
  894. exten => in,n,Return()
  895.  
  896. exten => exten,1,Noop(Exten Recording Check between ${FROMEXTEN} and ${ARG2})
  897. exten => exten,n,Set(CALLTYPE=${IF($[${LEN(${FROM_DID})}]?external:internal)})
  898. exten => exten,n,ExecIf(${LEN(${CALLTYPE_OVERRIDE})}?Set(CALLTYPE=${CALLTYPE_OVERRIDE}))
  899. exten => exten,n,Set(CALLEE=${DB(AMPUSER/${ARG2}/recording/in/${CALLTYPE})})
  900. exten => exten,n,ExecIf($[!${LEN(${CALLEE})}]?Set(CALLEE=dontcare))
  901. exten => exten,n,GotoIf($["${CALLTYPE}"="external"]?callee)
  902. exten => exten,n,GotoIf($["${CALLEE}"="dontcare"]?caller)
  903. exten => exten,n,ExecIf($[${LEN(${DB(AMPUSER/${FROMEXTEN}/recording/priority)})}]?Set(CALLER_PRI=${DB(AMPUSER/${FROMEXTEN}/recording/priority)}):Set(CALLER_PRI=0))
  904. exten => exten,n,ExecIf($[${LEN(${DB(AMPUSER/${ARG2}/recording/priority)})}]?Set(CALLEE_PRI=${DB(AMPUSER/${ARG2}/recording/priority)}):Set(CALLEE_PRI=0))
  905. exten => exten,n,GotoIf($["${CALLER_PRI}"="${CALLEE_PRI}"]?${REC_POLICY}:${IF($[${CALLER_PRI}>${CALLEE_PRI}]?caller:callee)})
  906. exten => exten,n(callee),Gosub(recordcheck,1(${CALLEE},${CALLTYPE},${ARG2}))
  907. exten => exten,n,Return()
  908. exten => exten,n(caller),Set(RECMODE=${DB(AMPUSER/${FROMEXTEN}/recording/out/internal)})
  909. exten => exten,n,Set(CALLERRECMODE=${DB(AMPUSER/${FROMEXTEN}/recording/out/internal)})
  910. exten => exten,n,Set(CALEERECMODE=${DB(AMPUSER/${ARG2}/recording/in/internal)})
  911. exten => exten,n,GotoIf($[!${LEN(${CALEERECMODE})}]?processnormal)
  912. exten => exten,n,ExecIf($["${CALLER_PRI}" = "${CALLEE_PRI}" & "${CALEERECMODE}"="never"]?Set(RECMODE=${CALEERECMODE}))
  913. exten => exten,n,ExecIf($["${CALLER_PRI}" = "${CALLEE_PRI}" & "${CALEERECMODE}"="force" & "${CALLERRECMODE}"="no"]?Set(RECMODE=${CALEERECMODE}))
  914. exten => exten,n,ExecIf($["${CALLER_PRI}" = "${CALLEE_PRI}" & "${CALEERECMODE}"="force" & "${CALLERRECMODE}"="never"]?Set(RECMODE=${CALEERECMODE}))
  915. exten => exten,n,ExecIf($["${CALLER_PRI}" = "${CALLEE_PRI}" & "${CALEERECMODE}"="never" & "${CALLERRECMODE}"="force"]?Set(RECMODE=${CALEERECMODE}))
  916. exten => exten,n(processnormal),ExecIf($[!${LEN(${RECMODE})}]?Set(RECMODE=dontcare))
  917. exten => exten,n,ExecIf($["${RECMODE}"="dontcare"]?Set(RECMODE=${CALLEE}))
  918. exten => exten,n,Gosub(recordcheck,1(${RECMODE},${CALLTYPE},${ARG2}))
  919. exten => exten,n,Return()
  920.  
  921. exten => conf,1,Noop(Conference Recording Check ${FROMEXTEN} to ${ARG2})
  922. exten => conf,n,Gosub(recconf,1(${ARG2},${ARG2},${ARG3}))
  923. exten => conf,n,Return()
  924.  
  925. exten => page,1,Noop(Paging Recording Check ${FROMEXTEN} to ${ARG2})
  926. exten => page,n,GosubIf($["${REC_POLICY_MODE}"="always"]?recconf,1(${ARG2},${FROMEXTEN},${ARG3}))
  927. exten => page,n,Return()
  928.  
  929. exten => recconf,1,Noop(Setting up recording: ${ARG1}, ${ARG2}, ${ARG3})
  930. exten => recconf,n,Set(__CALLFILENAME=${IF($[${CONFBRIDGE_INFO(parties,${ARG2})}]?${DB(RECCONF/${ARG2})}:${ARG1}-${ARG2}-${ARG3}-${TIMESTR}-${UNIQUEID})})
  931. exten => recconf,n,ExecIf($[!${CONFBRIDGE_INFO(parties,${ARG2})}]?Set(DB(RECCONF/${ARG2})=${CALLFILENAME}))
  932. exten => recconf,n,Set(CONFBRIDGE(bridge,record_file)=${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT})
  933. exten => recconf,n,ExecIf($["${ARG3}"!="always"]?Return())
  934. exten => recconf,n,Set(CONFBRIDGE(bridge,record_conference)=yes)
  935. exten => recconf,n,Set(CONFBRIDGE(bridge,record_file_timestamp)=no)
  936. exten => recconf,n,Set(__REC_STATUS=RECORDING)
  937. exten => recconf,n,Set(CDR(recordingfile)=${IF($[${CONFBRIDGE_INFO(parties,${ARG2})}]?${CALLFILENAME}.${MON_FMT}:${CALLFILENAME}.${MON_FMT})})
  938. exten => recconf,n,Noop(${MIXMONITOR_FILENAME})
  939. exten => recconf,n,Set(CHANNEL(hangup_handler_push)=sub-record-hh-check,s,1)
  940. exten => recconf,n,Return()
  941.  
  942. exten => recq,1,Noop(Setting up recording: ${ARG1}, ${ARG2}, ${ARG3})
  943. exten => recq,n,Set(MONITOR_FILENAME=${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME})
  944. exten => recq,n,MixMonitor(${MONITOR_FILENAME}.${MON_FMT},${EVAL(${MONITOR_OPTIONS})}${MIXMON_BEEP},${EVAL(${MIXMON_POST})})
  945. exten => recq,n,Set(__REC_STATUS=RECORDING)
  946. exten => recq,n,Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT})
  947. exten => recq,n,Return()
  948.  
  949. exten => parking,1,Noop(User ${ARG2} picked up a parked call)
  950. exten => parking,n,Set(USER=${ARG2})
  951. exten => parking,n,ExecIf($[!${LEN(${ARG2})}]?Set(USER=unknown))
  952. exten => parking,n,Set(RECMODE=${DB(AMPUSER/${ARG2}/recording/out/internal)})
  953. exten => parking,n,ExecIf($[!${LEN(${RECMODE})}]?Set(RECMODE=dontcare))
  954. exten => parking,n,Gosub(recordcheck,1(${RECMODE},parked,${USER}))
  955. exten => parking,n,Return()
  956.  
  957. ;--== end of [sub-record-check] ==--;
  958.  
  959.  
  960. [sub-record-hh-check]
  961. include => sub-record-hh-check-custom
  962. exten => _.,1,Noop(Callee: ${MIXMONITOR_FILENAME})
  963. exten => _.,n(exit),Return()
  964.  
  965. ;--== end of [sub-record-hh-check] ==--;
  966.  
  967.  
  968. [macro-one-touch-record]
  969. include => macro-one-touch-record-custom
  970. exten => s,1,Set(ONETOUCH_REC_SCRIPT_STATUS=)
  971. exten => s,n,System(${AMPBIN}/one_touch_record.php "${CHANNEL(name)}")
  972. exten => s,n,Noop(ONETOUCH_REC_SCRIPT_STATUS: [${ONETOUCH_REC_SCRIPT_STATUS}])
  973. exten => s,n,Noop(REC_STATUS: [${REC_STATUS}])
  974. exten => s,n,GotoIf($["${ONETOUCH_REC_SCRIPT_STATUS:0:6}"="DENIED"]?denied)
  975. exten => s,n,ExecIf($["${REC_STATUS}"="STOPPED"]?Playback(beep&beep))
  976. exten => s,n,GotoIf($["${REC_STATUS}"="STOPPED"]?end)
  977. exten => s,n,GotoIf($["${REC_STATUS}"="RECORDING"]?startrec)
  978. exten => s,n(startrec),MixMonitor(${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT},ai(LOCAL_MIXMON_ID)${MIXMON_BEEP},${EVAL(${MIXMON_POST})})
  979. exten => s,n,ExecIf($["${REC_STATUS}"="RECORDING"]?Playback(beep))
  980. exten => s,n(denied),ExecIf($["${ONETOUCH_REC_SCRIPT_STATUS:0:6}"="DENIED"]?Playback(access-denied))
  981. exten => s,n(end),MacroExit()
  982.  
  983. ;--== end of [macro-one-touch-record] ==--;
  984.  
  985.  
  986. [app-callwaiting-cwon]
  987. include => app-callwaiting-cwon-custom
  988. exten => *70,1,Macro(user-callerid,)
  989. exten => *70,n,Set(CONNECTEDLINE(name-charset,i)=utf8)
  990. exten => *70,n,Set(CONNECTEDLINE(name,i)=Call Waiting: ON)
  991. exten => *70,n,Set(CONNECTEDLINE(num,i)=${AMPUSER})
  992. exten => *70,n,Answer
  993. exten => *70,n,Wait(1)
  994. exten => *70,n,Set(DB(CW/${AMPUSER})=ENABLED)
  995. exten => *70,n(hook_1),Playback(call-waiting&activated)
  996. exten => *70,n,Macro(hangupcall,)
  997.  
  998. ;--== end of [app-callwaiting-cwon] ==--;
  999.  
  1000.  
  1001. [app-callwaiting-cwoff]
  1002. include => app-callwaiting-cwoff-custom
  1003. exten => *71,1,Macro(user-callerid,)
  1004. exten => *71,n,Set(CONNECTEDLINE(name-charset,i)=utf8)
  1005. exten => *71,n,Set(CONNECTEDLINE(name,i)=Call Waiting: OFF)
  1006. exten => *71,n,Set(CONNECTEDLINE(num,i)=${AMPUSER})
  1007. exten => *71,n,Answer
  1008. exten => *71,n,Wait(1)
  1009. exten => *71,n,Noop(Deleting: CW/${AMPUSER} ${DB_DELETE(CW/${AMPUSER})})
  1010. exten => *71,n(hook_1),Playback(call-waiting&de-activated)
  1011. exten => *71,n,Macro(hangupcall,)
  1012.  
  1013. ;--== end of [app-callwaiting-cwoff] ==--;
  1014.  
  1015.  
  1016. [cidlookup]
  1017. include => cidlookup-custom
  1018. exten => cidlookup_return,1,ExecIf($["${DB(cidname/${CALLERID(num)})}" != ""]?Set(CALLERID(name)=${DB(cidname/${CALLERID(num)})}))
  1019. exten => cidlookup_return,n,Return()
  1020.  
  1021. ;--== end of [cidlookup] ==--;
  1022.  
  1023.  
  1024. [c-x-3-operator-panel-hold]
  1025. include => c-x-3-operator-panel-hold-custom
  1026. exten => 432111,1,MusicOnHold(${XMLNamespaceMusicOnHoldClass})
  1027. exten => 432111,n,Hangup
  1028.  
  1029. ;--== end of [c-x-3-operator-panel-hold] ==--;
  1030.  
  1031.  
  1032. [c-x-3-operator-panel-voice-mail]
  1033. include => c-x-3-operator-panel-voice-mail-custom
  1034. exten => 432112,1,VoiceMail(${XMLNamespaceVoiceMailBox}@${XMLNamespaceVoiceMailBoxContext},u)
  1035. exten => 432112,n,Hangup
  1036.  
  1037. ;--== end of [c-x-3-operator-panel-voice-mail] ==--;
  1038.  
  1039.  
  1040. [c-x-3-operator-panel-meetme]
  1041. include => c-x-3-operator-panel-meetme-custom
  1042. exten => 432113,1,ConfBridge(${XMLNamespaceMeetMeRoomNumber},${XMLNamespaceMeetMeRoomOptions},,)
  1043. exten => 432113,n,Hangup
  1044.  
  1045. ;--== end of [c-x-3-operator-panel-meetme] ==--;
  1046.  
  1047.  
  1048. [c-x-3-operator-panel-confbridge]
  1049. include => c-x-3-operator-panel-confbridge-custom
  1050. exten => 432113,1,ConfBridge(${XMLNamespaceMeetMeRoomNumber},,,)
  1051. exten => 432113,n,Hangup
  1052.  
  1053. ;--== end of [c-x-3-operator-panel-confbridge] ==--;
  1054.  
  1055.  
  1056. [c-x-3-operator-panel-park]
  1057. include => c-x-3-operator-panel-park-custom
  1058. exten => 432114,1,ParkAndAnnounce(pbx-transfer:PARKED,200,Local/432116@c-x-3-operator-panel-park-announce-answer,${XMLNamespaceParkContext},${XMLNamespaceParkExtension},1)
  1059. exten => 432114,n,Hangup
  1060.  
  1061. ;--== end of [c-x-3-operator-panel-park] ==--;
  1062.  
  1063.  
  1064. [c-x-3-operator-panel-park-announce-answer]
  1065. include => c-x-3-operator-panel-park-announce-answer-custom
  1066. exten => 432116,1,Answer
  1067. exten => 432116,n,Hangup
  1068.  
  1069. ;--== end of [c-x-3-operator-panel-park-announce-answer] ==--;
  1070.  
  1071.  
  1072. [c-x-3-operator-panel-listen-to-voice-mail]
  1073. include => c-x-3-operator-panel-listen-to-voice-mail-custom
  1074. exten => 432115,1,ControlPlayback(${XMLNamespaceVoiceMailPath},1000,*,#,7,8,9)
  1075. exten => 432115,n,Hangup
  1076.  
  1077. ;--== end of [c-x-3-operator-panel-listen-to-voice-mail] ==--;
  1078.  
  1079.  
  1080. [c-x-3-operator-panel-listen-to-recording]
  1081. include => c-x-3-operator-panel-listen-to-recording-custom
  1082. exten => 432118,1,ControlPlayback(${XMLNamespaceRecordingPath},1000,*,#,7,8,9)
  1083. exten => 432118,n,Hangup
  1084.  
  1085. ;--== end of [c-x-3-operator-panel-listen-to-recording] ==--;
  1086.  
  1087.  
  1088. [c-x-3-operator-panel-spy]
  1089. include => c-x-3-operator-panel-spy-custom
  1090. exten => 432117,1,ChanSpy(${XMLNamespaceChanSpyChannel},${XMLNamespaceChanSpyOptions})
  1091. exten => 432117,n,Hangup
  1092.  
  1093. ;--== end of [c-x-3-operator-panel-spy] ==--;
  1094.  
  1095.  
  1096. [c-x-3-operator-panel-pjsip-auto-answer-headers]
  1097. include => c-x-3-operator-panel-pjsip-auto-answer-headers-custom
  1098. exten => addheader,1,Set(PJSIP_HEADER(add,Alert-Info)=<http://www.notused.com>\;info=alert-autoanswer\;delay=0)
  1099. exten => addheader,n,Set(PJSIP_HEADER(add,Alert-Info)=Ring Answer)
  1100. exten => addheader,n,Set(PJSIP_HEADER(add,Alert-Info)=ring-answer)
  1101. exten => addheader,n,Set(PJSIP_HEADER(add,Call-Info)=\;answer-after=0)
  1102.  
  1103. ;--== end of [c-x-3-operator-panel-pjsip-auto-answer-headers] ==--;
  1104.  
  1105.  
  1106. [c-x-3-operator-panel-pjsip-auto-answer-redirect]
  1107. include => c-x-3-operator-panel-pjsip-auto-answer-redirect-custom
  1108. exten => _X!,1,ExecIf($["${D_OPTIONS}"==""]?Set(D_OPTIONS=TtrI))
  1109. exten => _X!,n,Dial(${CX_AUTOANSWER_REDIRECT_PEER},,${D_OPTIONS}b(c-x-3-operator-panel-pjsip-auto-answer-headers^addheader^1))
  1110.  
  1111. ;--== end of [c-x-3-operator-panel-pjsip-auto-answer-redirect] ==--;
  1112.  
  1113.  
  1114. [app-dictate-send]
  1115. include => app-dictate-send-custom
  1116. exten => *35,1,Answer
  1117. exten => *35,n,Macro(user-callerid,)
  1118. exten => *35,n,Noop(CallerID is ${AMPUSER})
  1119. exten => *35,n,Set(DICTENABLED=${DB(AMPUSER/${AMPUSER}/dictate/enabled)})
  1120. exten => *35,n,GotoIf($[$["x${DICTENABLED}"="x"]|$["x${DICTENABLED}"="xdisabled"]]?nodict:dictok)
  1121. exten => *35,n(nodict),Playback(feature-not-avail-line)
  1122. exten => *35,n,Hangup
  1123. exten => *35,n(dictok),Read(DICTFILE,enter-filename-short,,,,)
  1124. exten => *35,n,Set(DICTEMAIL=${DB(AMPUSER/${AMPUSER}/dictate/email)})
  1125. exten => *35,n,Set(DICTFMT=${DB(AMPUSER/${AMPUSER}/dictate/format)})
  1126. exten => *35,n,Set(DICTFROM=${DB(AMPUSER/${AMPUSER}/dictate/from)})
  1127. exten => *35,n,Set(NAME=${DB(AMPUSER/${AMPUSER}/cidname)})
  1128. exten => *35,n,Playback(dictation-being-processed)
  1129. exten => *35,n,System(/var/lib/asterisk/bin/audio-email.pl --file /var/lib/asterisk/sounds/dictate/${AMPUSER}/${DICTFILE}.raw --attachment dict-${DICTFILE} --format ${DICTFMT} --to ${DICTEMAIL} --from ${DICTFROM} --subject "Dictation from ${NAME} Attached")
  1130. exten => *35,n,Playback(dictation-sent)
  1131. exten => *35,n,Macro(hangupcall,)
  1132.  
  1133. ;--== end of [app-dictate-send] ==--;
  1134.  
  1135.  
  1136. [app-dictate-record]
  1137. include => app-dictate-record-custom
  1138. exten => *34,1,Answer
  1139. exten => *34,n,Macro(user-callerid,)
  1140. exten => *34,n,Noop(CallerID is ${AMPUSER})
  1141. exten => *34,n,Set(DICTENABLED=${DB(AMPUSER/${AMPUSER}/dictate/enabled)})
  1142. exten => *34,n,GotoIf($[$["x${DICTENABLED}"="x"]|$["x${DICTENABLED}"="xdisabled"]]?nodict:dictok)
  1143. exten => *34,n(nodict),Playback(feature-not-avail-line)
  1144. exten => *34,n,Hangup
  1145. exten => *34,n(dictok),Dictate(/var/lib/asterisk/sounds/dictate/${AMPUSER})
  1146. exten => *34,n,Macro(hangupcall,)
  1147.  
  1148. ;--== end of [app-dictate-record] ==--;
  1149.  
  1150.  
  1151. [disa-dial]
  1152. include => disa-dial-custom
  1153. exten => _[0-9a-zA-Z],1,Noop(called ${EXTEN} in ${DISACONTEXT} by ID: ${CUT(DISA,^,2)})
  1154. exten => _[0-9a-zA-Z],n,Dial(Local/${EXTEN}@${DISACONTEXT},300,${HANGUP})
  1155. exten => _[0-9a-zA-Z],n,Gosub(s-${DIALSTATUS},1())
  1156. exten => _[0-9a-zA-Z],n,Goto(${CUT(DISA,^,1)},${CUT(DISA,^,2)},${CUT(DISA,^,3)})
  1157.  
  1158. exten => _[0-9a-zA-Z*#].,1,Noop(called ${EXTEN} in ${DISACONTEXT} by ID: ${CUT(DISA,^,2)})
  1159. exten => _[0-9a-zA-Z*#].,n,Dial(Local/${EXTEN}@${DISACONTEXT},300,${HANGUP})
  1160. exten => _[0-9a-zA-Z*#].,n,Gosub(s-${DIALSTATUS},1())
  1161. exten => _[0-9a-zA-Z*#].,n,Goto(${CUT(DISA,^,1)},${CUT(DISA,^,2)},${CUT(DISA,^,3)})
  1162.  
  1163. exten => s-ANSWER,1,Return()
  1164.  
  1165. exten => s-CANCEL,1,Return()
  1166.  
  1167. exten => s-BUSY,1,Playtones(busy)
  1168. exten => s-BUSY,n,Wait(3)
  1169. exten => s-BUSY,n,Return()
  1170.  
  1171. exten => _s-.,1,Noop(DISA Dial failed due to ${DIALSTATUS} - returning to dial tone)
  1172. exten => _s-.,n,Playtones(congestion)
  1173. exten => _s-.,n,Wait(3)
  1174. exten => _s-.,n,StopPlaytones
  1175. exten => _s-.,n,Return()
  1176.  
  1177. ;--== end of [disa-dial] ==--;
  1178.  
  1179.  
  1180. [app-dnd-toggle]
  1181. include => app-dnd-toggle-custom
  1182. exten => *76,1,Answer
  1183. exten => *76,n,Wait(1)
  1184. exten => *76,n,Macro(user-callerid,)
  1185. exten => *76,n,GotoIf($["${DB(DND/${AMPUSER})}" = ""]?activate:deactivate)
  1186. exten => *76,n(activate),Set(DB(DND/${AMPUSER})=YES)
  1187. exten => *76,n,Set(STATE=BUSY)
  1188. exten => *76,n,Gosub(app-dnd-toggle,sstate,1())
  1189. exten => *76,n(hook_on),Playback(do-not-disturb&activated)
  1190. exten => *76,n,Macro(hangupcall,)
  1191. exten => *76,n(deactivate),Noop(Deleting: DND/${AMPUSER} ${DB_DELETE(DND/${AMPUSER})})
  1192. exten => *76,n,Set(STATE=UNAVAILABLE)
  1193. exten => *76,n,Gosub(app-dnd-toggle,sstate,1())
  1194. exten => *76,n(hook_off),Playback(do-not-disturb&de-activated)
  1195. exten => *76,n,Macro(hangupcall,)
  1196.  
  1197. exten => sstate,1,Set(DEVICE_STATE(Custom:DND${AMPUSER})=${STATE})
  1198. exten => sstate,n,Set(DEVICES=${DB(AMPUSER/${AMPUSER}/device)})
  1199. exten => sstate,n,GotoIf($["${DEVICES}" = "" ]?return)
  1200. exten => sstate,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)})
  1201. exten => sstate,n,Set(ITER=1)
  1202. exten => sstate,n(begin),Set(DEVICE_STATE(Custom:DEVDND${CUT(DEVICES,&,${ITER})})=${STATE})
  1203. exten => sstate,n,Set(ITER=$[${ITER} + 1])
  1204. exten => sstate,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin)
  1205. exten => sstate,n(return),Return()
  1206.  
  1207. ;--== end of [app-dnd-toggle] ==--;
  1208.  
  1209.  
  1210. [app-dnd-on]
  1211. include => app-dnd-on-custom
  1212. exten => *78,1,Answer
  1213. exten => *78,n,Wait(1)
  1214. exten => *78,n,Macro(user-callerid,)
  1215. exten => *78,n,Set(DB(DND/${AMPUSER})=YES)
  1216. exten => *78,n,Set(STATE=BUSY)
  1217. exten => *78,n,Gosub(app-dnd-on,sstate,1())
  1218. exten => *78,n(hook_1),Playback(do-not-disturb&activated)
  1219. exten => *78,n,Macro(hangupcall,)
  1220.  
  1221. exten => sstate,1,Set(DEVICE_STATE(Custom:DND${AMPUSER})=${STATE})
  1222. exten => sstate,n,Set(DEVICES=${DB(AMPUSER/${AMPUSER}/device)})
  1223. exten => sstate,n,GotoIf($["${DEVICES}" = "" ]?return)
  1224. exten => sstate,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)})
  1225. exten => sstate,n,Set(ITER=1)
  1226. exten => sstate,n(begin),Set(DEVICE_STATE(Custom:DEVDND${CUT(DEVICES,&,${ITER})})=${STATE})
  1227. exten => sstate,n,Set(ITER=$[${ITER} + 1])
  1228. exten => sstate,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin)
  1229. exten => sstate,n(return),Return()
  1230.  
  1231. ;--== end of [app-dnd-on] ==--;
  1232.  
  1233.  
  1234. [app-dnd-off]
  1235. include => app-dnd-off-custom
  1236. exten => *79,1,Answer
  1237. exten => *79,n,Wait(1)
  1238. exten => *79,n,Macro(user-callerid,)
  1239. exten => *79,n,Noop(Deleting: DND/${AMPUSER} ${DB_DELETE(DND/${AMPUSER})})
  1240. exten => *79,n,Set(STATE=UNAVAILABLE)
  1241. exten => *79,n,Gosub(app-dnd-off,sstate,1())
  1242. exten => *79,n(hook_1),Playback(do-not-disturb&de-activated)
  1243. exten => *79,n,Macro(hangupcall,)
  1244.  
  1245. exten => sstate,1,Set(DEVICE_STATE(Custom:DND${AMPUSER})=${STATE})
  1246. exten => sstate,n,Set(DEVICES=${DB(AMPUSER/${AMPUSER}/device)})
  1247. exten => sstate,n,GotoIf($["${DEVICES}" = "" ]?return)
  1248. exten => sstate,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)})
  1249. exten => sstate,n,Set(ITER=1)
  1250. exten => sstate,n(begin),Set(DEVICE_STATE(Custom:DEVDND${CUT(DEVICES,&,${ITER})})=${STATE})
  1251. exten => sstate,n,Set(ITER=$[${ITER} + 1])
  1252. exten => sstate,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin)
  1253. exten => sstate,n(return),Return()
  1254.  
  1255. ;--== end of [app-dnd-off] ==--;
  1256.  
  1257.  
  1258. [ext-dnd-hints]
  1259. include => ext-dnd-hints-custom
  1260. exten => _*76X.,1,Goto(app-dnd-toggle,*76,1)
  1261. exten => _*76X.,hint,Custom:DEVDND${EXTEN:3}
  1262.  
  1263. ;--== end of [ext-dnd-hints] ==--;
  1264.  
  1265.  
  1266. [ext-fax]
  1267. include => ext-fax-custom
  1268. exten => 7,1,Set(FAX_FOR=testuser (7))
  1269. exten => 7,n,Noop(Receiving Fax for: ${FAX_FOR}, From: ${CALLERID(all)})
  1270. exten => 7,n,Set(FAX_RX_USER=7)
  1271. exten => 7,n,Set(FAX_RX_EMAIL_LEN=21)
  1272. exten => 7,n(receivefax),Goto(s,receivefax)
  1273.  
  1274. exten => 8,1,Set(FAX_FOR=pierfranco (8))
  1275. exten => 8,n,Noop(Receiving Fax for: ${FAX_FOR}, From: ${CALLERID(all)})
  1276. exten => 8,n,Set(FAX_RX_USER=8)
  1277. exten => 8,n,Set(FAX_RX_EMAIL_LEN=19)
  1278. exten => 8,n(receivefax),Goto(s,receivefax)
  1279.  
  1280. exten => 9,1,Set(FAX_FOR=txtnation (9))
  1281. exten => 9,n,Noop(Receiving Fax for: ${FAX_FOR}, From: ${CALLERID(all)})
  1282. exten => 9,n,Set(FAX_RX_USER=9)
  1283. exten => 9,n,Set(FAX_RX_EMAIL_LEN=20)
  1284. exten => 9,n(receivefax),Goto(s,receivefax)
  1285.  
  1286. exten => 10,1,Set(FAX_FOR=kroomic (10))
  1287. exten => 10,n,Noop(Receiving Fax for: ${FAX_FOR}, From: ${CALLERID(all)})
  1288. exten => 10,n,Set(FAX_RX_USER=10)
  1289. exten => 10,n,Set(FAX_RX_EMAIL_LEN=14)
  1290. exten => 10,n(receivefax),Goto(s,receivefax)
  1291.  
  1292. exten => 11,1,Set(FAX_FOR=testuservirtual (11))
  1293. exten => 11,n,Noop(Receiving Fax for: ${FAX_FOR}, From: ${CALLERID(all)})
  1294. exten => 11,n,Set(FAX_RX_USER=11)
  1295. exten => 11,n,Set(FAX_RX_EMAIL_LEN=23)
  1296. exten => 11,n(receivefax),Goto(s,receivefax)
  1297.  
  1298. exten => 12,1,Set(FAX_FOR=testcustomextension (12))
  1299. exten => 12,n,Noop(Receiving Fax for: ${FAX_FOR}, From: ${CALLERID(all)})
  1300. exten => 12,n,Set(FAX_RX_USER=12)
  1301. exten => 12,n,Set(FAX_RX_EMAIL_LEN=0)
  1302. exten => 12,n(receivefax),Goto(s,receivefax)
  1303.  
  1304. exten => 13,1,Set(FAX_FOR=alexservilla (13))
  1305. exten => 13,n,Noop(Receiving Fax for: ${FAX_FOR}, From: ${CALLERID(all)})
  1306. exten => 13,n,Set(FAX_RX_USER=13)
  1307. exten => 13,n,Set(FAX_RX_EMAIL_LEN=22)
  1308. exten => 13,n(receivefax),Goto(s,receivefax)
  1309.  
  1310. exten => 14,1,Set(FAX_FOR=Alexservilla (14))
  1311. exten => 14,n,Noop(Receiving Fax for: ${FAX_FOR}, From: ${CALLERID(all)})
  1312. exten => 14,n,Set(FAX_RX_USER=14)
  1313. exten => 14,n,Set(FAX_RX_EMAIL_LEN=0)
  1314. exten => 14,n(receivefax),Goto(s,receivefax)
  1315.  
  1316. exten => 15,1,Set(FAX_FOR=privateupgrades (15))
  1317. exten => 15,n,Noop(Receiving Fax for: ${FAX_FOR}, From: ${CALLERID(all)})
  1318. exten => 15,n,Set(FAX_RX_USER=15)
  1319. exten => 15,n,Set(FAX_RX_EMAIL_LEN=27)
  1320. exten => 15,n(receivefax),Goto(s,receivefax)
  1321.  
  1322. exten => 16,1,Set(FAX_FOR=savarypimentel (16))
  1323. exten => 16,n,Noop(Receiving Fax for: ${FAX_FOR}, From: ${CALLERID(all)})
  1324. exten => 16,n,Set(FAX_RX_USER=16)
  1325. exten => 16,n,Set(FAX_RX_EMAIL_LEN=24)
  1326. exten => 16,n(receivefax),Goto(s,receivefax)
  1327.  
  1328. exten => 18,1,Set(FAX_FOR=iron.ganani (18))
  1329. exten => 18,n,Noop(Receiving Fax for: ${FAX_FOR}, From: ${CALLERID(all)})
  1330. exten => 18,n,Set(FAX_RX_USER=18)
  1331. exten => 18,n,Set(FAX_RX_EMAIL_LEN=0)
  1332. exten => 18,n(receivefax),Goto(s,receivefax)
  1333.  
  1334. exten => 19,1,Set(FAX_FOR=amoridoro (19))
  1335. exten => 19,n,Noop(Receiving Fax for: ${FAX_FOR}, From: ${CALLERID(all)})
  1336. exten => 19,n,Set(FAX_RX_USER=19)
  1337. exten => 19,n,Set(FAX_RX_EMAIL_LEN=26)
  1338. exten => 19,n(receivefax),Goto(s,receivefax)
  1339.  
  1340. exten => s,1,Macro(user-callerid,)
  1341. exten => s,n,Noop(Receiving Fax for: ${FAX_FOR} , From: ${CALLERID(all)})
  1342. exten => s,n(receivefax),StopPlaytones
  1343. exten => s,n,ReceiveFAX(${ASTSPOOLDIR}/fax/${UNIQUEID}.tif,f)
  1344. exten => s,n,ExecIf($["${FAXSTATUS:0:6}"="FAILED" && "${FAXERROR}"!="INIT_ERROR"]?Set(FAXSTATUS="FAILED: error: ${FAXERROR} statusstr: ${FAXOPT(statusstr)}"))
  1345. exten => s,n,Hangup
  1346.  
  1347. exten => h,1,GotoIf($[${STAT(e,${ASTSPOOLDIR}/fax/${UNIQUEID}.tif)} = 0]?failed)
  1348. exten => h,n(delete_opt),Set(DELETE_AFTER_SEND=true)
  1349. exten => h,n(process),GotoIf($[ "${FAX_RX_EMAIL_LEN}" = "0" | "${FAX_RX_EMAIL_LEN}" = "" ]?noemail)
  1350. exten => h,n(sendfax),System(${AMPBIN}/fax2mail.php --remotestationid "${FAXOPT(remotestationid)}" --user "${FAX_RX_USER}" --dest "${FROM_DID}" --callerid "${BASE64_ENCODE(${CALLERID(all)})}" --file ${ASTSPOOLDIR}/fax/${UNIQUEID}.tif --delete "${DELETE_AFTER_SEND}")
  1351. exten => h,n(end),Macro(hangupcall,)
  1352. exten => h,n(noemail),Noop(ERROR: No Email Address to send FAX: status: [${FAXSTATUS}], From: [${CALLERID(all)}], trying system fax destination)
  1353. exten => h,n,GotoIf($[ "${FAX_RX_EMAIL}" = "" ]?delfax)
  1354. exten => h,n,System(${AMPBIN}/fax2mail.php --remotestationid "${FAXOPT(remotestationid)}" --sendto "${FAX_RX_EMAIL}" --dest "${FROM_DID}" --callerid "${BASE64_ENCODE(${CALLERID(all)})}" --file ${ASTSPOOLDIR}/fax/${UNIQUEID}.tif --delete "${DELETE_AFTER_SEND}")
  1355. exten => h,n,Macro(hangupcall,)
  1356. exten => h,n(delfax),System(${AMPBIN}/fax2mail.php --file ${ASTSPOOLDIR}/fax/${UNIQUEID}.tif --delete "${DELETE_AFTER_SEND}")
  1357. exten => h,n,Macro(hangupcall,)
  1358. exten => h,process+101(failed),Noop(FAX ${FAXSTATUS} for: ${FAX_FOR} , From: ${CALLERID(all)})
  1359. exten => h,n,Macro(hangupcall,)
  1360.  
  1361. ;--== end of [ext-fax] ==--;
  1362.  
  1363.  
  1364. [app-fax]
  1365. include => app-fax-custom
  1366. exten => 666,1,Set(FAX_RX_EMAIL=)
  1367. exten => 666,n,Goto(ext-fax,s,1)
  1368.  
  1369. exten => h,1,Macro(hangupcall,)
  1370.  
  1371. ;--== end of [app-fax] ==--;
  1372.  
  1373.  
  1374. [ext-did-0001]
  1375. include => ext-did-0001-custom
  1376. exten => fax,1,Set(__DIRECTION=INBOUND)
  1377. exten => fax,n,Goto(${CUT(FAX_DEST,^,1)},${CUT(FAX_DEST,^,2)},${CUT(FAX_DEST,^,3)})
  1378.  
  1379. ;--== end of [ext-did-0001] ==--;
  1380.  
  1381.  
  1382. [ext-did-0002]
  1383. include => ext-did-0002-custom
  1384. exten => fax,1,Set(__DIRECTION=INBOUND)
  1385. exten => fax,n,Goto(${CUT(FAX_DEST,^,1)},${CUT(FAX_DEST,^,2)},${CUT(FAX_DEST,^,3)})
  1386.  
  1387. exten => 10000,1,Set(__DIRECTION=INBOUND)
  1388. exten => 10000,n,Gosub(sub-record-check,s,1(in,${EXTEN},dontcare))
  1389. exten => 10000,n,Set(CHANNEL(tonezone)=us)
  1390. exten => 10000,n,Set(__FROM_DID=${EXTEN})
  1391. exten => 10000,n,Set(returnhere=1)
  1392. exten => 10000,n,Gosub(app-blacklist-check,s,1())
  1393. exten => 10000,n(did),Set(CDR(did)=${FROM_DID})
  1394. exten => 10000,n,GotoIf(${LEN(${BLDEST})}?${BLDEST})
  1395. exten => 10000,n(callerid),ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
  1396. exten => 10000,n,Set(__MOHCLASS=)
  1397. exten => 10000,n,Set(__REVERSAL_REJECT=FALSE)
  1398. exten => 10000,n,GotoIf($["${REVERSAL_REJECT}"!="TRUE"]?post-reverse-charge)
  1399. exten => 10000,n,GotoIf($["${CHANNEL(reversecharge)}"="1"]?macro-hangupcall)
  1400. exten => 10000,n(post-reverse-charge),Noop()
  1401. exten => 10000,n,Set(__CALLINGNAMEPRES_SV=${CALLERID(name-pres)})
  1402. exten => 10000,n,Set(__CALLINGNUMPRES_SV=${CALLERID(num-pres)})
  1403. exten => 10000,n,Set(CALLERID(name-pres)=allowed_not_screened)
  1404. exten => 10000,n,Set(CALLERID(num-pres)=allowed_not_screened)
  1405. exten => 10000,n(did-cid-hook),Noop(CallerID Entry Point)
  1406. exten => 10000,n,Set(__CRM_DIRECTION=INBOUND)
  1407. exten => 10000,n,Set(__CRM_SOURCE=${CALLERID(num)})
  1408. exten => 10000,n,Set(__CRM_LINKEDID=${CHANNEL(LINKEDID)})
  1409. exten => 10000,n,AGI(agi://127.0.0.1/sangomacrm.agi,true)
  1410. exten => 10000,n,ExecIf($["${CRM_DIRECTION}"="INBOUND"]?Set(CHANNEL(hangup_handler_push)=crm-hangup,s,1))
  1411. exten => 10000,n(dest-ext),Goto(from-did-direct,10000,1)
  1412.  
  1413. exten => 10003,1,Set(__DIRECTION=INBOUND)
  1414. exten => 10003,n,Gosub(sub-record-check,s,1(in,${EXTEN},dontcare))
  1415. exten => 10003,n,Set(CHANNEL(tonezone)=us)
  1416. exten => 10003,n,Set(__FROM_DID=${EXTEN})
  1417. exten => 10003,n,Set(returnhere=1)
  1418. exten => 10003,n,Gosub(app-blacklist-check,s,1())
  1419. exten => 10003,n(did),Set(CDR(did)=${FROM_DID})
  1420. exten => 10003,n,GotoIf(${LEN(${BLDEST})}?${BLDEST})
  1421. exten => 10003,n(callerid),ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
  1422. exten => 10003,n,Set(__MOHCLASS=)
  1423. exten => 10003,n,Set(__REVERSAL_REJECT=FALSE)
  1424. exten => 10003,n,GotoIf($["${REVERSAL_REJECT}"!="TRUE"]?post-reverse-charge)
  1425. exten => 10003,n,GotoIf($["${CHANNEL(reversecharge)}"="1"]?macro-hangupcall)
  1426. exten => 10003,n(post-reverse-charge),Noop()
  1427. exten => 10003,n,Set(__CALLINGNAMEPRES_SV=${CALLERID(name-pres)})
  1428. exten => 10003,n,Set(__CALLINGNUMPRES_SV=${CALLERID(num-pres)})
  1429. exten => 10003,n,Set(CALLERID(name-pres)=allowed_not_screened)
  1430. exten => 10003,n,Set(CALLERID(num-pres)=allowed_not_screened)
  1431. exten => 10003,n(did-cid-hook),Noop(CallerID Entry Point)
  1432. exten => 10003,n,Set(__CRM_DIRECTION=INBOUND)
  1433. exten => 10003,n,Set(__CRM_SOURCE=${CALLERID(num)})
  1434. exten => 10003,n,Set(__CRM_LINKEDID=${CHANNEL(LINKEDID)})
  1435. exten => 10003,n,AGI(agi://127.0.0.1/sangomacrm.agi,true)
  1436. exten => 10003,n,ExecIf($["${CRM_DIRECTION}"="INBOUND"]?Set(CHANNEL(hangup_handler_push)=crm-hangup,s,1))
  1437. exten => 10003,n(dest-ext),Goto(from-did-direct,10003,1)
  1438.  
  1439. exten => 1020,1,Set(__DIRECTION=INBOUND)
  1440. exten => 1020,n,Gosub(sub-record-check,s,1(in,${EXTEN},dontcare))
  1441. exten => 1020,n,Set(CHANNEL(tonezone)=us)
  1442. exten => 1020,n,Set(__FROM_DID=${EXTEN})
  1443. exten => 1020,n,Set(returnhere=1)
  1444. exten => 1020,n,Gosub(app-blacklist-check,s,1())
  1445. exten => 1020,n(did),Set(CDR(did)=${FROM_DID})
  1446. exten => 1020,n,GotoIf(${LEN(${BLDEST})}?${BLDEST})
  1447. exten => 1020,n(callerid),ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
  1448. exten => 1020,n,Set(__MOHCLASS=)
  1449. exten => 1020,n,Set(__REVERSAL_REJECT=FALSE)
  1450. exten => 1020,n,GotoIf($["${REVERSAL_REJECT}"!="TRUE"]?post-reverse-charge)
  1451. exten => 1020,n,GotoIf($["${CHANNEL(reversecharge)}"="1"]?macro-hangupcall)
  1452. exten => 1020,n(post-reverse-charge),Noop()
  1453. exten => 1020,n,Wait(2)
  1454. exten => 1020,n,Set(__CALLINGNAMEPRES_SV=${CALLERID(name-pres)})
  1455. exten => 1020,n,Set(__CALLINGNUMPRES_SV=${CALLERID(num-pres)})
  1456. exten => 1020,n,Set(CALLERID(name-pres)=allowed_not_screened)
  1457. exten => 1020,n,Set(CALLERID(num-pres)=allowed_not_screened)
  1458. exten => 1020,n(did-cid-hook),Noop(CallerID Entry Point)
  1459. exten => 1020,n,Set(__CRM_DIRECTION=INBOUND)
  1460. exten => 1020,n,Set(__CRM_SOURCE=${CALLERID(num)})
  1461. exten => 1020,n,Set(__CRM_LINKEDID=${CHANNEL(LINKEDID)})
  1462. exten => 1020,n,AGI(agi://127.0.0.1/sangomacrm.agi,true)
  1463. exten => 1020,n,ExecIf($["${CRM_DIRECTION}"="INBOUND"]?Set(CHANNEL(hangup_handler_push)=crm-hangup,s,1))
  1464. exten => 1020,n(dest-ext),Goto(play-system-recording,1,1)
  1465.  
  1466. exten => 1132,1,Set(__DIRECTION=INBOUND)
  1467. exten => 1132,n,Gosub(sub-record-check,s,1(in,${EXTEN},dontcare))
  1468. exten => 1132,n,Set(CHANNEL(tonezone)=us)
  1469. exten => 1132,n,Set(__FROM_DID=${EXTEN})
  1470. exten => 1132,n,Set(returnhere=1)
  1471. exten => 1132,n,Gosub(app-blacklist-check,s,1())
  1472. exten => 1132,n(did),Set(CDR(did)=${FROM_DID})
  1473. exten => 1132,n,GotoIf(${LEN(${BLDEST})}?${BLDEST})
  1474. exten => 1132,n(callerid),ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
  1475. exten => 1132,n,Set(__MOHCLASS=)
  1476. exten => 1132,n,Set(__REVERSAL_REJECT=FALSE)
  1477. exten => 1132,n,GotoIf($["${REVERSAL_REJECT}"!="TRUE"]?post-reverse-charge)
  1478. exten => 1132,n,GotoIf($["${CHANNEL(reversecharge)}"="1"]?macro-hangupcall)
  1479. exten => 1132,n(post-reverse-charge),Noop()
  1480. exten => 1132,n,Set(__CALLINGNAMEPRES_SV=${CALLERID(name-pres)})
  1481. exten => 1132,n,Set(__CALLINGNUMPRES_SV=${CALLERID(num-pres)})
  1482. exten => 1132,n,Set(CALLERID(name-pres)=allowed_not_screened)
  1483. exten => 1132,n,Set(CALLERID(num-pres)=allowed_not_screened)
  1484. exten => 1132,n(did-cid-hook),Noop(CallerID Entry Point)
  1485. exten => 1132,n,Set(__CRM_DIRECTION=INBOUND)
  1486. exten => 1132,n,Set(__CRM_SOURCE=${CALLERID(num)})
  1487. exten => 1132,n,Set(__CRM_LINKEDID=${CHANNEL(LINKEDID)})
  1488. exten => 1132,n,AGI(agi://127.0.0.1/sangomacrm.agi,true)
  1489. exten => 1132,n,ExecIf($["${CRM_DIRECTION}"="INBOUND"]?Set(CHANNEL(hangup_handler_push)=crm-hangup,s,1))
  1490. exten => 1132,n(dest-ext),Goto(from-did-direct,1132,1)
  1491.  
  1492. exten => 1192,1,Set(__DIRECTION=INBOUND)
  1493. exten => 1192,n,Gosub(sub-record-check,s,1(in,${EXTEN},dontcare))
  1494. exten => 1192,n,Set(CHANNEL(tonezone)=us)
  1495. exten => 1192,n,Set(__FROM_DID=${EXTEN})
  1496. exten => 1192,n,Set(returnhere=1)
  1497. exten => 1192,n,Gosub(app-blacklist-check,s,1())
  1498. exten => 1192,n(did),Set(CDR(did)=${FROM_DID})
  1499. exten => 1192,n,GotoIf(${LEN(${BLDEST})}?${BLDEST})
  1500. exten => 1192,n(callerid),ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
  1501. exten => 1192,n,Set(__MOHCLASS=)
  1502. exten => 1192,n,Set(__REVERSAL_REJECT=FALSE)
  1503. exten => 1192,n,GotoIf($["${REVERSAL_REJECT}"!="TRUE"]?post-reverse-charge)
  1504. exten => 1192,n,GotoIf($["${CHANNEL(reversecharge)}"="1"]?macro-hangupcall)
  1505. exten => 1192,n(post-reverse-charge),Noop()
  1506. exten => 1192,n,Set(__CALLINGNAMEPRES_SV=${CALLERID(name-pres)})
  1507. exten => 1192,n,Set(__CALLINGNUMPRES_SV=${CALLERID(num-pres)})
  1508. exten => 1192,n,Set(CALLERID(name-pres)=allowed_not_screened)
  1509. exten => 1192,n,Set(CALLERID(num-pres)=allowed_not_screened)
  1510. exten => 1192,n(did-cid-hook),Noop(CallerID Entry Point)
  1511. exten => 1192,n,Set(__CRM_DIRECTION=INBOUND)
  1512. exten => 1192,n,Set(__CRM_SOURCE=${CALLERID(num)})
  1513. exten => 1192,n,Set(__CRM_LINKEDID=${CHANNEL(LINKEDID)})
  1514. exten => 1192,n,AGI(agi://127.0.0.1/sangomacrm.agi,true)
  1515. exten => 1192,n,ExecIf($["${CRM_DIRECTION}"="INBOUND"]?Set(CHANNEL(hangup_handler_push)=crm-hangup,s,1))
  1516. exten => 1192,n(dest-ext),Goto(from-did-direct,1192,1)
  1517.  
  1518. exten => 1236,1,Set(__DIRECTION=INBOUND)
  1519. exten => 1236,n,Gosub(sub-record-check,s,1(in,${EXTEN},dontcare))
  1520. exten => 1236,n,Set(CHANNEL(tonezone)=us)
  1521. exten => 1236,n,Set(__FROM_DID=${EXTEN})
  1522. exten => 1236,n,Set(returnhere=1)
  1523. exten => 1236,n,Gosub(app-blacklist-check,s,1())
  1524. exten => 1236,n(did),Set(CDR(did)=${FROM_DID})
  1525. exten => 1236,n,GotoIf(${LEN(${BLDEST})}?${BLDEST})
  1526. exten => 1236,n(callerid),ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
  1527. exten => 1236,n,Set(__MOHCLASS=)
  1528. exten => 1236,n,Set(__REVERSAL_REJECT=FALSE)
  1529. exten => 1236,n,GotoIf($["${REVERSAL_REJECT}"!="TRUE"]?post-reverse-charge)
  1530. exten => 1236,n,GotoIf($["${CHANNEL(reversecharge)}"="1"]?macro-hangupcall)
  1531. exten => 1236,n(post-reverse-charge),Noop()
  1532. exten => 1236,n,Set(__CALLINGNAMEPRES_SV=${CALLERID(name-pres)})
  1533. exten => 1236,n,Set(__CALLINGNUMPRES_SV=${CALLERID(num-pres)})
  1534. exten => 1236,n,Set(CALLERID(name-pres)=allowed_not_screened)
  1535. exten => 1236,n,Set(CALLERID(num-pres)=allowed_not_screened)
  1536. exten => 1236,n(did-cid-hook),Noop(CallerID Entry Point)
  1537. exten => 1236,n,Set(__CRM_DIRECTION=INBOUND)
  1538. exten => 1236,n,Set(__CRM_SOURCE=${CALLERID(num)})
  1539. exten => 1236,n,Set(__CRM_LINKEDID=${CHANNEL(LINKEDID)})
  1540. exten => 1236,n,AGI(agi://127.0.0.1/sangomacrm.agi,true)
  1541. exten => 1236,n,ExecIf($["${CRM_DIRECTION}"="INBOUND"]?Set(CHANNEL(hangup_handler_push)=crm-hangup,s,1))
  1542. exten => 1236,n(dest-ext),Goto(from-did-direct,1236,1)
  1543.  
  1544. exten => 1392,1,Set(__DIRECTION=INBOUND)
  1545. exten => 1392,n,Gosub(sub-record-check,s,1(in,${EXTEN},dontcare))
  1546. exten => 1392,n,Set(CHANNEL(tonezone)=us)
  1547. exten => 1392,n,Set(__FROM_DID=${EXTEN})
  1548. exten => 1392,n,Set(returnhere=1)
  1549. exten => 1392,n,Gosub(app-blacklist-check,s,1())
  1550. exten => 1392,n(did),Set(CDR(did)=${FROM_DID})
  1551. exten => 1392,n,GotoIf(${LEN(${BLDEST})}?${BLDEST})
  1552. exten => 1392,n(callerid),ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
  1553. exten => 1392,n,Set(__MOHCLASS=)
  1554. exten => 1392,n,Set(__REVERSAL_REJECT=FALSE)
  1555. exten => 1392,n,GotoIf($["${REVERSAL_REJECT}"!="TRUE"]?post-reverse-charge)
  1556. exten => 1392,n,GotoIf($["${CHANNEL(reversecharge)}"="1"]?macro-hangupcall)
  1557. exten => 1392,n(post-reverse-charge),Noop()
  1558. exten => 1392,n,Set(__CALLINGNAMEPRES_SV=${CALLERID(name-pres)})
  1559. exten => 1392,n,Set(__CALLINGNUMPRES_SV=${CALLERID(num-pres)})
  1560. exten => 1392,n,Set(CALLERID(name-pres)=allowed_not_screened)
  1561. exten => 1392,n,Set(CALLERID(num-pres)=allowed_not_screened)
  1562. exten => 1392,n(did-cid-hook),Noop(CallerID Entry Point)
  1563. exten => 1392,n,Set(__CRM_DIRECTION=INBOUND)
  1564. exten => 1392,n,Set(__CRM_SOURCE=${CALLERID(num)})
  1565. exten => 1392,n,Set(__CRM_LINKEDID=${CHANNEL(LINKEDID)})
  1566. exten => 1392,n,AGI(agi://127.0.0.1/sangomacrm.agi,true)
  1567. exten => 1392,n,ExecIf($["${CRM_DIRECTION}"="INBOUND"]?Set(CHANNEL(hangup_handler_push)=crm-hangup,s,1))
  1568. exten => 1392,n(dest-ext),Goto(from-did-direct,1392,1)
  1569.  
  1570. exten => 1420,1,Set(__DIRECTION=INBOUND)
  1571. exten => 1420,n,Gosub(sub-record-check,s,1(in,${EXTEN},dontcare))
  1572. exten => 1420,n,Set(CHANNEL(tonezone)=us)
  1573. exten => 1420,n,Set(__FROM_DID=${EXTEN})
  1574. exten => 1420,n,Set(returnhere=1)
  1575. exten => 1420,n,Gosub(app-blacklist-check,s,1())
  1576. exten => 1420,n(did),Set(CDR(did)=${FROM_DID})
  1577. exten => 1420,n,GotoIf(${LEN(${BLDEST})}?${BLDEST})
  1578. exten => 1420,n(callerid),ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
  1579. exten => 1420,n,Set(__MOHCLASS=)
  1580. exten => 1420,n,Set(__REVERSAL_REJECT=FALSE)
  1581. exten => 1420,n,GotoIf($["${REVERSAL_REJECT}"!="TRUE"]?post-reverse-charge)
  1582. exten => 1420,n,GotoIf($["${CHANNEL(reversecharge)}"="1"]?macro-hangupcall)
  1583. exten => 1420,n(post-reverse-charge),Noop()
  1584. exten => 1420,n,Set(__CALLINGNAMEPRES_SV=${CALLERID(name-pres)})
  1585. exten => 1420,n,Set(__CALLINGNUMPRES_SV=${CALLERID(num-pres)})
  1586. exten => 1420,n,Set(CALLERID(name-pres)=allowed_not_screened)
  1587. exten => 1420,n,Set(CALLERID(num-pres)=allowed_not_screened)
  1588. exten => 1420,n(did-cid-hook),Noop(CallerID Entry Point)
  1589. exten => 1420,n,Set(__CRM_DIRECTION=INBOUND)
  1590. exten => 1420,n,Set(__CRM_SOURCE=${CALLERID(num)})
  1591. exten => 1420,n,Set(__CRM_LINKEDID=${CHANNEL(LINKEDID)})
  1592. exten => 1420,n,AGI(agi://127.0.0.1/sangomacrm.agi,true)
  1593. exten => 1420,n,ExecIf($["${CRM_DIRECTION}"="INBOUND"]?Set(CHANNEL(hangup_handler_push)=crm-hangup,s,1))
  1594. exten => 1420,n(dest-ext),Goto(from-did-direct,1420,1)
  1595.  
  1596. exten => 1580,1,Set(__DIRECTION=INBOUND)
  1597. exten => 1580,n,Gosub(sub-record-check,s,1(in,${EXTEN},dontcare))
  1598. exten => 1580,n,Set(CHANNEL(tonezone)=us)
  1599. exten => 1580,n,Set(__FROM_DID=${EXTEN})
  1600. exten => 1580,n,Set(returnhere=1)
  1601. exten => 1580,n,Gosub(app-blacklist-check,s,1())
  1602. exten => 1580,n(did),Set(CDR(did)=${FROM_DID})
  1603. exten => 1580,n,GotoIf(${LEN(${BLDEST})}?${BLDEST})
  1604. exten => 1580,n(callerid),ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
  1605. exten => 1580,n,Set(__MOHCLASS=)
  1606. exten => 1580,n,Set(__REVERSAL_REJECT=FALSE)
  1607. exten => 1580,n,GotoIf($["${REVERSAL_REJECT}"!="TRUE"]?post-reverse-charge)
  1608. exten => 1580,n,GotoIf($["${CHANNEL(reversecharge)}"="1"]?macro-hangupcall)
  1609. exten => 1580,n(post-reverse-charge),Noop()
  1610. exten => 1580,n,Set(__CALLINGNAMEPRES_SV=${CALLERID(name-pres)})
  1611. exten => 1580,n,Set(__CALLINGNUMPRES_SV=${CALLERID(num-pres)})
  1612. exten => 1580,n,Set(CALLERID(name-pres)=allowed_not_screened)
  1613. exten => 1580,n,Set(CALLERID(num-pres)=allowed_not_screened)
  1614. exten => 1580,n(did-cid-hook),Noop(CallerID Entry Point)
  1615. exten => 1580,n,Set(__CRM_DIRECTION=INBOUND)
  1616. exten => 1580,n,Set(__CRM_SOURCE=${CALLERID(num)})
  1617. exten => 1580,n,Set(__CRM_LINKEDID=${CHANNEL(LINKEDID)})
  1618. exten => 1580,n,AGI(agi://127.0.0.1/sangomacrm.agi,true)
  1619. exten => 1580,n,ExecIf($["${CRM_DIRECTION}"="INBOUND"]?Set(CHANNEL(hangup_handler_push)=crm-hangup,s,1))
  1620. exten => 1580,n(dest-ext),Goto(from-did-direct,1580,1)
  1621.  
  1622. ;--== end of [ext-did-0002] ==--;
  1623.  
  1624.  
  1625. [app-fmf-toggle]
  1626. include => app-fmf-toggle-custom
  1627. exten => *21,1,Goto(app-fmf-toggle,s,start)
  1628.  
  1629. exten => s,1(start),Answer
  1630. exten => s,n,Wait(1)
  1631. exten => s,n,Macro(user-callerid,)
  1632. exten => s,n,GotoIf($["${DB(AMPUSER/${AMPUSER}/followme/ddial)}" = "EXTENSION"]?activate)
  1633. exten => s,n,GotoIf($["${DB(AMPUSER/${AMPUSER}/followme/ddial)}" = "DIRECT"]?deactivate:end)
  1634. exten => s,n(deactivate),Set(DB(AMPUSER/${AMPUSER}/followme/ddial)=EXTENSION)
  1635. exten => s,n,Set(STATE=NOT_INUSE)
  1636. exten => s,n,Gosub(app-fmf-toggle,sstate,1())
  1637. exten => s,n(hook_off),Playback(followme&de-activated)
  1638. exten => s,n(end),Macro(hangupcall,)
  1639. exten => s,n(activate),Set(DB(AMPUSER/${AMPUSER}/followme/ddial)=DIRECT)
  1640. exten => s,n,Set(STATE=INUSE)
  1641. exten => s,n,Gosub(app-fmf-toggle,sstate,1())
  1642. exten => s,n(hook_on),Playback(followme&activated)
  1643. exten => s,n,Macro(hangupcall,)
  1644.  
  1645. exten => sstate,1,Set(DEVICES=${DB(AMPUSER/${AMPUSER}/device)})
  1646. exten => sstate,n,GotoIf($["${DEVICES}" = "" ]?return)
  1647. exten => sstate,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)})
  1648. exten => sstate,n,Set(ITER=1)
  1649. exten => sstate,n(begin),Set(DEVICE_STATE(Custom:FOLLOWME${CUT(DEVICES,&,${ITER})})=${STATE})
  1650. exten => sstate,n,Set(ITER=$[${ITER} + 1])
  1651. exten => sstate,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin)
  1652. exten => sstate,n(return),Return()
  1653.  
  1654. ;--== end of [app-fmf-toggle] ==--;
  1655.  
  1656.  
  1657. [ext-findmefollow]
  1658. include => ext-findmefollow-custom
  1659. exten => _*21X!,1,Goto(app-fmf-toggle,*21,1)
  1660. exten => _*21X!,hint,Custom:FOLLOWME${EXTEN:3}
  1661.  
  1662. exten => 1020,1,GotoIf($["${REDIRECTING(reason)}" = "send_to_vm"]?ext-local,*${EXTEN},1)
  1663. exten => 1020,n,GotoIf($[${DB_EXISTS(AMPUSER/${EXTEN}/followme/ddial)} != 1 | "${DB(AMPUSER/${EXTEN}/followme/ddial)}" = "EXTENSION"]?ext-local,${EXTEN},1:followme-check,${EXTEN},1)
  1664.  
  1665. exten => 10001,1,GotoIf($["${REDIRECTING(reason)}" = "send_to_vm"]?ext-local,*${EXTEN},1)
  1666. exten => 10001,n,GotoIf($[${DB_EXISTS(AMPUSER/${EXTEN}/followme/ddial)} != 1 | "${DB(AMPUSER/${EXTEN}/followme/ddial)}" = "EXTENSION"]?ext-local,${EXTEN},1:followme-check,${EXTEN},1)
  1667.  
  1668. exten => 10002,1,GotoIf($["${REDIRECTING(reason)}" = "send_to_vm"]?ext-local,*${EXTEN},1)
  1669. exten => 10002,n,GotoIf($[${DB_EXISTS(AMPUSER/${EXTEN}/followme/ddial)} != 1 | "${DB(AMPUSER/${EXTEN}/followme/ddial)}" = "EXTENSION"]?ext-local,${EXTEN},1:followme-check,${EXTEN},1)
  1670.  
  1671. exten => 10000,1,GotoIf($["${REDIRECTING(reason)}" = "send_to_vm"]?ext-local,*${EXTEN},1)
  1672. exten => 10000,n,GotoIf($[${DB_EXISTS(AMPUSER/${EXTEN}/followme/ddial)} != 1 | "${DB(AMPUSER/${EXTEN}/followme/ddial)}" = "EXTENSION"]?ext-local,${EXTEN},1:followme-check,${EXTEN},1)
  1673.  
  1674. exten => 1420,1,GotoIf($["${REDIRECTING(reason)}" = "send_to_vm"]?ext-local,*${EXTEN},1)
  1675. exten => 1420,n,GotoIf($[${DB_EXISTS(AMPUSER/${EXTEN}/followme/ddial)} != 1 | "${DB(AMPUSER/${EXTEN}/followme/ddial)}" = "EXTENSION"]?ext-local,${EXTEN},1:followme-check,${EXTEN},1)
  1676.  
  1677. exten => 1236,1,GotoIf($["${REDIRECTING(reason)}" = "send_to_vm"]?ext-local,*${EXTEN},1)
  1678. exten => 1236,n,GotoIf($[${DB_EXISTS(AMPUSER/${EXTEN}/followme/ddial)} != 1 | "${DB(AMPUSER/${EXTEN}/followme/ddial)}" = "EXTENSION"]?ext-local,${EXTEN},1:followme-check,${EXTEN},1)
  1679.  
  1680. exten => 1580,1,GotoIf($["${REDIRECTING(reason)}" = "send_to_vm"]?ext-local,*${EXTEN},1)
  1681. exten => 1580,n,GotoIf($[${DB_EXISTS(AMPUSER/${EXTEN}/followme/ddial)} != 1 | "${DB(AMPUSER/${EXTEN}/followme/ddial)}" = "EXTENSION"]?ext-local,${EXTEN},1:followme-check,${EXTEN},1)
  1682.  
  1683. exten => 1192,1,GotoIf($["${REDIRECTING(reason)}" = "send_to_vm"]?ext-local,*${EXTEN},1)
  1684. exten => 1192,n,GotoIf($[${DB_EXISTS(AMPUSER/${EXTEN}/followme/ddial)} != 1 | "${DB(AMPUSER/${EXTEN}/followme/ddial)}" = "EXTENSION"]?ext-local,${EXTEN},1:followme-check,${EXTEN},1)
  1685.  
  1686. exten => 1392,1,GotoIf($["${REDIRECTING(reason)}" = "send_to_vm"]?ext-local,*${EXTEN},1)
  1687. exten => 1392,n,GotoIf($[${DB_EXISTS(AMPUSER/${EXTEN}/followme/ddial)} != 1 | "${DB(AMPUSER/${EXTEN}/followme/ddial)}" = "EXTENSION"]?ext-local,${EXTEN},1:followme-check,${EXTEN},1)
  1688.  
  1689. exten => 1132,1,GotoIf($["${REDIRECTING(reason)}" = "send_to_vm"]?ext-local,*${EXTEN},1)
  1690. exten => 1132,n,GotoIf($[${DB_EXISTS(AMPUSER/${EXTEN}/followme/ddial)} != 1 | "${DB(AMPUSER/${EXTEN}/followme/ddial)}" = "EXTENSION"]?ext-local,${EXTEN},1:followme-check,${EXTEN},1)
  1691.  
  1692. exten => 10003,1,GotoIf($["${REDIRECTING(reason)}" = "send_to_vm"]?ext-local,*${EXTEN},1)
  1693. exten => 10003,n,GotoIf($[${DB_EXISTS(AMPUSER/${EXTEN}/followme/ddial)} != 1 | "${DB(AMPUSER/${EXTEN}/followme/ddial)}" = "EXTENSION"]?ext-local,${EXTEN},1:followme-check,${EXTEN},1)
  1694.  
  1695. exten => _FMX!,1,Goto(followme-check,${EXTEN:2},FMCID)
  1696.  
  1697. ;--== end of [ext-findmefollow] ==--;
  1698.  
  1699.  
  1700. [fmgrps]
  1701. include => fmgrps-custom
  1702. exten => _RG-1020*.,1+1,Macro(dial,${DB(AMPUSER/1020/followme/grptime)},${DIAL_OPTIONS}M(confirm^^^1020),${EXTEN:9})
  1703.  
  1704. exten => _RG-10001*.,1+1,Macro(dial,${DB(AMPUSER/10001/followme/grptime)},${DIAL_OPTIONS}M(confirm^^^10001),${EXTEN:10})
  1705.  
  1706. exten => _RG-10002*.,1+1,Macro(dial,${DB(AMPUSER/10002/followme/grptime)},${DIAL_OPTIONS}M(confirm^^^10002),${EXTEN:10})
  1707.  
  1708. exten => _RG-10000*.,1+1,Macro(dial,${DB(AMPUSER/10000/followme/grptime)},${DIAL_OPTIONS}M(confirm^^^10000),${EXTEN:10})
  1709.  
  1710. exten => _RG-1420*.,1+1,Macro(dial,${DB(AMPUSER/1420/followme/grptime)},${DIAL_OPTIONS}M(confirm^^^1420),${EXTEN:9})
  1711.  
  1712. exten => _RG-1236*.,1+1,Macro(dial,${DB(AMPUSER/1236/followme/grptime)},${DIAL_OPTIONS}M(confirm^^^1236),${EXTEN:9})
  1713.  
  1714. exten => _RG-1580*.,1+1,Macro(dial,${DB(AMPUSER/1580/followme/grptime)},${DIAL_OPTIONS}M(confirm^^^1580),${EXTEN:9})
  1715.  
  1716. exten => _RG-1192*.,1+1,Macro(dial,${DB(AMPUSER/1192/followme/grptime)},${DIAL_OPTIONS}M(confirm^^^1192),${EXTEN:9})
  1717.  
  1718. exten => _RG-1392*.,1+1,Macro(dial,${DB(AMPUSER/1392/followme/grptime)},${DIAL_OPTIONS}M(confirm^^^1392),${EXTEN:9})
  1719.  
  1720. exten => _RG-1132*.,1+1,Macro(dial,${DB(AMPUSER/1132/followme/grptime)},${DIAL_OPTIONS}M(confirm^^^1132),${EXTEN:9})
  1721.  
  1722. exten => _RG-10003*.,1+1,Macro(dial,${DB(AMPUSER/10003/followme/grptime)},${DIAL_OPTIONS}M(confirm^^^10003),${EXTEN:10})
  1723.  
  1724. exten => _RG-X!,1,Set(CDR_PROP(disable)=true)
  1725.  
  1726. ;--== end of [fmgrps] ==--;
  1727.  
  1728.  
  1729. [followme-check]
  1730. include => followme-check-custom
  1731. exten => _X!,1(FMCID),Gosub(followme-sub,${EXTEN},1())
  1732. exten => _X!,n,Noop(Should never get here)
  1733. exten => _X!,n,Hangup
  1734.  
  1735. ;--== end of [followme-check] ==--;
  1736.  
  1737.  
  1738. [followme-sub]
  1739. include => followme-sub-custom
  1740. exten => _X!,1,GotoIf($[${LEN(${BLINDTRANSFER})} > 0 | ${LEN(${ATTENDEDTRANSFER})} > 0]?skipclid)
  1741. exten => _X!,n,Macro(user-callerid,)
  1742. exten => _X!,n(skipclid),Set(DIAL_OPTIONS=${DIAL_OPTIONS}I)
  1743. exten => _X!,n,Set(CONNECTEDLINE(num,i)=${EXTEN})
  1744. exten => _X!,n,Gosub(sub-presencestate-display,s,1(${EXTEN}))
  1745. exten => _X!,n,Set(CONNECTEDLINE(name)=${DB(AMPUSER/${EXTEN}/cidname)}${PRESENCESTATE_DISPLAY})
  1746. exten => _X!,n,Set(FM_DIALSTATUS=${EXTENSION_STATE(${EXTEN}@ext-local)})
  1747. exten => _X!,n,Set(__EXTTOCALL=${EXTEN})
  1748. exten => _X!,n,Set(__PICKUPMARK=${EXTEN})
  1749. exten => _X!,n,Macro(blkvm-setifempty,)
  1750. exten => _X!,n,GotoIf($["${GOSUB_RETVAL}" = "TRUE"]?skipov)
  1751. exten => _X!,n,Macro(blkvm-set,reset)
  1752. exten => _X!,n,Set(__NODEST=)
  1753. exten => _X!,n(skipov),Set(RRNODEST=${NODEST})
  1754. exten => _X!,n(skipvmblk),Set(__NODEST=${EXTEN})
  1755. exten => _X!,n,GosubIf($[${DB_EXISTS(AMPUSER/${EXTEN}/followme/changecid)} = 1 & "${DB(AMPUSER/${EXTEN}/followme/changecid)}" != "default" & "${DB(AMPUSER/${EXTEN}/followme/changecid)}" != ""]?sub-fmsetcid,s,1())
  1756. exten => _X!,n,GotoIf($[ "${DB(AMPUSER/${EXTEN}/followme/grppre)}" = "" ]?skipprepend)
  1757. exten => _X!,n,Macro(prepend-cid,${DB(AMPUSER/${EXTEN}/followme/grppre)})
  1758. exten => _X!,n(skipprepend),Set(RecordMethod=Group)
  1759. exten => _X!,n(checkrecord),Gosub(sub-record-check,s,1(exten,${EXTEN},))
  1760. exten => _X!,n,GotoIf($[ $["${DB(AMPUSER/${EXTEN}/followme/dring)}" = ""] | $["${ALERT_INFO}"!=""] ]?skipdring)
  1761. exten => _X!,n,Set(DRING=${DB(AMPUSER/${EXTEN}/followme/dring)})
  1762. exten => _X!,n,Set(__ALERT_INFO=${STRREPLACE(DRING,\;,\\;)})
  1763. exten => _X!,n(skipdring),Set(STRATEGY=${DB(AMPUSER/${EXTEN}/followme/strategy)})
  1764. exten => _X!,n,Set(__RVOL=${DB(AMPUSER/${EXTEN}/followme/rvolume)})
  1765. exten => _X!,n,GotoIf($["${CUT(STRATEGY,-,1)}"="ringallv2"]?skipsimple)
  1766. exten => _X!,n,GotoIf($[$[ "${DB(AMPUSER/${EXTEN}/followme/prering)}" = "0" ] | $[ "${DB(AMPUSER/${EXTEN}/followme/prering)}" = "" ]] ?skipsimple)
  1767. exten => _X!,n,Macro(simple-dial,${EXTEN},${DB(AMPUSER/${EXTEN}/followme/prering)})
  1768. exten => _X!,n(skipsimple),Set(RingGroupMethod=${STRATEGY})
  1769. exten => _X!,n,Set(_FMGRP=${EXTEN})
  1770. exten => _X!,n,GotoIf($[$["${DB(AMPUSER/${EXTEN}/followme/annmsg)}" = ""] | $["${DIALSTATUS}" = "ANSWER"] | $["foo${RRNODEST}" != "foo"]]?DIALGRP)
  1771. exten => _X!,n,Answer
  1772. exten => _X!,n,Wait(1)
  1773. exten => _X!,n,Playback(${DB(AMPUSER/${EXTEN}/followme/annmsg)})
  1774. exten => _X!,n(DIALGRP),ExecIf($[$["${DB(AMPUSER/${EXTEN}/followme/ringing)}"="Ring"] | $["${DB(AMPUSER/${EXTEN}/followme/ringing)}"=""]]?Set(DOPTS=${DIAL_OPTIONS}):Set(DOPTS=m(${DB(AMPUSER/${EXTEN}/followme/ringing)})${STRREPLACE(DIAL_OPTIONS,r)}))
  1775. exten => _X!,n,Set(__ALT_CONFIRM_MSG=${IF($["${ALT_CONFIRM_MSG}"!=""]?${ALT_CONFIRM_MSG}:${IF($[${LEN(${VQ_CONFIRMMSG})}>1]?${VQ_CONFIRMMSG}:)})})
  1776. exten => _X!,n,GotoIf($[(("${DB(AMPUSER/${EXTEN}/followme/grpconf)}"="ENABLED") | ("${FORCE_CONFIRM}"!="") | ($[${LEN(${VQ_CONFIRMMSG})}>1])) & ("${RG_CONFIRM}" != "1")]?doconfirm)
  1777. exten => _X!,n,GotoIf($["${CUT(STRATEGY,-,1)}"="ringallv2"]?ringallv21)
  1778. exten => _X!,n,Macro(dial,${DB(AMPUSER/${EXTEN}/followme/grptime)},${DOPTS},${DB(AMPUSER/${EXTEN}/followme/grplist)})
  1779. exten => _X!,n,Goto(nextstep)
  1780. exten => _X!,n(ringallv21),Macro(dial,$[ ${DB(AMPUSER/${EXTEN}/followme/grptime)} + ${DB(AMPUSER/${EXTEN}/followme/prering)} ],${DOPTS},${DB(AMPUSER/${EXTEN}/followme/grplist)})
  1781. exten => _X!,n,Goto(nextstep)
  1782. exten => _X!,n(doconfirm),GotoIf($["${CUT(STRATEGY,-,1)}"="ringallv2"]?ringallv22)
  1783. exten => _X!,n,Macro(dial-confirm,${DB(AMPUSER/${EXTEN}/followme/grptime)},${DOPTS},${DB(AMPUSER/${EXTEN}/followme/grplist)},${EXTEN})
  1784. exten => _X!,n,Goto(nextstep)
  1785. exten => _X!,n(ringallv22),Macro(dial-confirm,$[ ${DB(AMPUSER/${EXTEN}/followme/grptime)} + ${DB(AMPUSER/${EXTEN}/followme/prering)} ],${DOPTS},${DB(AMPUSER/${EXTEN}/followme/grplist)},${EXTEN})
  1786. exten => _X!,n(nextstep),Set(RingGroupMethod=)
  1787. exten => _X!,n,GotoIf($["foo${RRNODEST}" != "foo"]?nodest)
  1788. exten => _X!,n,Set(__NODEST=)
  1789. exten => _X!,n,Set(__PICKUPMARK=)
  1790. exten => _X!,n,Macro(blkvm-clr,)
  1791. exten => _X!,n,Set(DIALSTATUS=${IF($["${FM_DIALSTATUS}"="NOT_INUSE"&"${DIALSTATUS}"!="CHANUNAVAIL"]?NOANSWER:${IF($["${DIALSTATUS}"="CHANUNAVAIL"|"${FM_DIALSTATUS}"="UNAVAILABLE"|"${FM_DIALSTATUS}"="UNKNOWN"|"${FM_DIALSTATUS}"="INVALID"]?CHANUNAVAIL:BUSY)})})
  1792. exten => _X!,n,GotoIf($["${DB(AMPUSER/${EXTEN}/followme/postdest)}"=""]?dohangup)
  1793. exten => _X!,n,Goto(${DB(AMPUSER/${EXTEN}/followme/postdest)})
  1794. exten => _X!,n(dohangup),Hangup
  1795. exten => _X!,n(nodest),Noop(SKIPPING DEST, CALL CAME FROM Q/RG: ${RRNODEST})
  1796. exten => _X!,n,Return()
  1797.  
  1798. ;--== end of [followme-sub] ==--;
  1799.  
  1800.  
  1801. [sub-fmsetcid]
  1802. include => sub-fmsetcid-custom
  1803. exten => s,1,Goto(s-${DB(AMPUSER/${EXTTOCALL}/followme/changecid)},1)
  1804.  
  1805. exten => s-fixed,1,ExecIf($["${REGEX("^[\+]?[0-9]+$" ${DB(AMPUSER/${EXTTOCALL}/followme/fixedcid)})}" = "1"]?Set(__TRUNKCIDOVERRIDE=${DB(AMPUSER/${EXTTOCALL}/followme/fixedcid)}))
  1806. exten => s-fixed,n,Return()
  1807.  
  1808. exten => s-extern,1,ExecIf($["${REGEX("^[\+]?[0-9]+$" ${DB(AMPUSER/${EXTTOCALL}/followme/fixedcid)})}" == "1" & "${FROM_DID}" != ""]?Set(__TRUNKCIDOVERRIDE=${DB(AMPUSER/${EXTTOCALL}/followme/fixedcid)}))
  1809. exten => s-extern,n,Return()
  1810.  
  1811. exten => s-did,1,ExecIf($["${REGEX("^[\+]?[0-9]+$" ${FROM_DID})}" = "1"]?Set(__REALCALLERIDNUM=${FROM_DID}))
  1812. exten => s-did,n,Return()
  1813.  
  1814. exten => s-forcedid,1,ExecIf($["${REGEX("^[\+]?[0-9]+$" ${FROM_DID})}" = "1"]?Set(__TRUNKCIDOVERRIDE=${FROM_DID}))
  1815. exten => s-forcedid,n,Return()
  1816.  
  1817. exten => _s-.,1,Noop(Unknown value for AMPUSER/${EXTTOCALL}/followme/changecid of ${DB(AMPUSER/${EXTTOCALL}/followme/changecid)} set to "default")
  1818. exten => _s-.,n,Set(DB(AMPUSER/${EXTTOCALL}/followme/changecid)=default)
  1819. exten => _s-.,n,Return()
  1820.  
  1821. ;--== end of [sub-fmsetcid] ==--;
  1822.  
  1823.  
  1824. [sub-hr12format]
  1825. include => sub-hr12format-custom
  1826. exten => s,1,GotoIf($[${DIALPLAN_EXISTS(sub-hr12format,${CHANNEL(language)},1)}]?sub-hr12format,${CHANNEL(language)},1:sub-hr12format,en,1)
  1827. exten => s,n,GotoIf($[${DIALPLAN_EXISTS(sub-hr12format,${CHANNEL(language)},1)}]?${CHANNEL(language)},1:en,1)
  1828.  
  1829. exten => en,1,Playback(at-tone-time-exactly)
  1830. exten => en,n,SayUnixTime(${FutureTime},,IM 'vm-and' S 'seconds' p)
  1831. exten => en,n,Return()
  1832. exten => en,n,Playback(at-tone-time-exactly)
  1833. exten => en,n,SayUnixTime(${FutureTime},,IM 'vm-and' S 'seconds' p)
  1834. exten => en,n,Return()
  1835.  
  1836. exten => fr,1,Playback(at-tone-time-exactly)
  1837. exten => fr,n,SayUnixTime(${FutureTime},,IMSp)
  1838. exten => fr,n,Return()
  1839. exten => fr,n,Playback(at-tone-time-exactly)
  1840. exten => fr,n,SayUnixTime(${FutureTime},,IMSp)
  1841. exten => fr,n,Return()
  1842.  
  1843. exten => de,1,Playback(at-tone-time-exactly)
  1844. exten => de,n,SayUnixTime(${FutureTime},,IMSp)
  1845. exten => de,n,Return()
  1846. exten => de,n,Playback(at-tone-time-exactly)
  1847. exten => de,n,SayUnixTime(${FutureTime},,IMSp)
  1848. exten => de,n,Return()
  1849.  
  1850. exten => ja,1,Playback(at-tone-time-exactly)
  1851. exten => ja,n,SayUnixTime(${FutureTime},,pIMS)
  1852. exten => ja,n,Return()
  1853. exten => ja,n,Playback(at-tone-time-exactly)
  1854. exten => ja,n,SayUnixTime(${FutureTime},,pIMS)
  1855. exten => ja,n,Return()
  1856.  
  1857. ;--== end of [sub-hr12format] ==--;
  1858.  
  1859.  
  1860. [app-speakingclock]
  1861. include => app-speakingclock-custom
  1862. exten => *60,1,Set(CONNECTEDLINE(name-charset,i)=utf8)
  1863. exten => *60,n,Set(CONNECTEDLINE(name,i)=Speaking Clock)
  1864. exten => *60,n,Set(CONNECTEDLINE(num,i)=*60)
  1865. exten => *60,n,Macro(user-callerid,)
  1866. exten => *60,n,Answer
  1867. exten => *60,n,Wait(1)
  1868. exten => *60,n,Set(NumLoops=0)
  1869. exten => *60,n(start),Set(FutureTime=$[${EPOCH} + 8])
  1870. exten => *60,n,Set(FutureTimeMod=$[${FutureTime} % 10])
  1871. exten => *60,n,Set(FutureTime=$[${FutureTime} - ${FutureTimeMod} + 10])
  1872. exten => *60,n,Gosub(sub-hr12format,s,1())
  1873. exten => *60,n(waitloop),Set(TimeLeft=$[${FutureTime} - ${EPOCH}])
  1874. exten => *60,n,GotoIf($[${TimeLeft} < 1]?playbeep)
  1875. exten => *60,n,Wait(1)
  1876. exten => *60,n,Goto(waitloop)
  1877. exten => *60,n(playbeep),Playback(beep)
  1878. exten => *60,n,Wait(5)
  1879. exten => *60,n,Set(NumLoops=$[${NumLoops} + 1])
  1880. exten => *60,n,GotoIf($[${NumLoops} < 5]?start)
  1881. exten => *60,n,Playback(goodbye)
  1882. exten => *60,n,Hangup
  1883.  
  1884. ;--== end of [app-speakingclock] ==--;
  1885.  
  1886.  
  1887. [sub-hr24format]
  1888. include => sub-hr24format-custom
  1889. exten => s,1,GotoIf($[${DIALPLAN_EXISTS(sub-hr24format,${CHANNEL(language)},1)}]?${CHANNEL(language)},1:en,1)
  1890.  
  1891. exten => en,1,Playback(at-tone-time-exactly)
  1892. exten => en,n,SayUnixTime(${FutureTime},,kM 'vm-and' S 'seconds')
  1893. exten => en,n,Return()
  1894.  
  1895. exten => fr,1,Playback(at-tone-time-exactly)
  1896. exten => fr,n,SayUnixTime(${FutureTime},,kMS)
  1897. exten => fr,n,Return()
  1898.  
  1899. exten => de,1,Playback(at-tone-time-exactly)
  1900. exten => de,n,SayUnixTime(${FutureTime},,kMS)
  1901. exten => de,n,Return()
  1902.  
  1903. exten => ja,1,Playback(at-tone-time-exactly)
  1904. exten => ja,n,SayUnixTime(${FutureTime},,kMS)
  1905. exten => ja,n,Return()
  1906.  
  1907. ;--== end of [sub-hr24format] ==--;
  1908.  
  1909.  
  1910. [app-speakextennum]
  1911. include => app-speakextennum-custom
  1912. exten => *65,1,Set(CONNECTEDLINE(name-charset,i)=utf8)
  1913. exten => *65,n,Set(CONNECTEDLINE(name,i)=Speak Extension)
  1914. exten => *65,n,Set(CONNECTEDLINE(num,i)=*65)
  1915. exten => *65,n,Answer
  1916. exten => *65,n,Wait(1)
  1917. exten => *65,n,Macro(user-callerid,)
  1918. exten => *65,n,GotoIf($[${DIALPLAN_EXISTS(app-speakextennum,${CHANNEL(language)},1)}]?app-speakextennum,${CHANNEL(language)},1:app-speakextennum,en,1)
  1919.  
  1920. exten => en,1,Playback(your)
  1921. exten => en,n,Playback(extension)
  1922. exten => en,n,Playback(number)
  1923. exten => en,n,Playback(is)
  1924. exten => en,n,SayDigits(${AMPUSER})
  1925. exten => en,n,Wait(2)
  1926. exten => en,n,Hangup
  1927.  
  1928. exten => fr,1,Playback(your)
  1929. exten => fr,n,Playback(extension)
  1930. exten => fr,n,Playback(is2)
  1931. exten => fr,n,SayDigits(${AMPUSER})
  1932. exten => fr,n,Wait(2)
  1933. exten => fr,n,Hangup
  1934.  
  1935. exten => ja,1,Playback(your)
  1936. exten => ja,n,Playback(extension)
  1937. exten => ja,n,Playback(jp-wa)
  1938. exten => ja,n,SayDigits(${AMPUSER})
  1939. exten => ja,n,Wait(2)
  1940. exten => ja,n,Hangup
  1941.  
  1942. ;--== end of [app-speakextennum] ==--;
  1943.  
  1944.  
  1945. [app-echo-test]
  1946. include => app-echo-test-custom
  1947. exten => *43,1,Set(CONNECTEDLINE(name-charset,i)=utf8)
  1948. exten => *43,n,Set(CONNECTEDLINE(name,i)=Echo Test)
  1949. exten => *43,n,Set(CONNECTEDLINE(num,i)=*43)
  1950. exten => *43,n,Answer
  1951. exten => *43,n,Macro(user-callerid,)
  1952. exten => *43,n,Wait(1)
  1953. exten => *43,n,Background(demo-echotest,,,app-echo-test-echo)
  1954. exten => *43,n,Goto(app-echo-test-echo,1,1)
  1955.  
  1956. ;--== end of [app-echo-test] ==--;
  1957.  
  1958.  
  1959. [app-echo-test-echo]
  1960. include => app-echo-test-echo-custom
  1961. exten => _[0-9#*],1,Echo()
  1962. exten => _[0-9#*],n,Playback(demo-echodone)
  1963. exten => _[0-9#*],n,Hangup
  1964.  
  1965. ;--== end of [app-echo-test-echo] ==--;
  1966.  
  1967.  
  1968. [app-calltrace]
  1969. include => app-calltrace-custom
  1970. exten => *69,1,Goto(app-calltrace-perform,s,1)
  1971.  
  1972. ;--== end of [app-calltrace] ==--;
  1973.  
  1974.  
  1975. [app-calltrace-perform]
  1976. include => app-calltrace-perform-custom
  1977. exten => s,1,Set(CONNECTEDLINE(name-charset,i)=utf8)
  1978. exten => s,n,Set(CONNECTEDLINE(name,i)=Call Trace)
  1979. exten => s,n,Set(CONNECTEDLINE(num,i)=s)
  1980. exten => s,n,Answer
  1981. exten => s,n,Wait(1)
  1982. exten => s,n,Macro(user-callerid,)
  1983. exten => s,n,Set(INVALID_LOOPCOUNT=0)
  1984. exten => s,n,Playback(info-about-last-call&telephone-number)
  1985. exten => s,n,Set(lastcaller=${DB(CALLTRACE/${AMPUSER})})
  1986. exten => s,n,GotoIf($[ $[ "${lastcaller}" = "" ] | $[ "${lastcaller}" = "unknown" ] ]?noinfo)
  1987. exten => s,n,SayDigits(${lastcaller})
  1988. exten => s,n,Set(TIMEOUT(digit)=3)
  1989. exten => s,n,Set(TIMEOUT(response)=7)
  1990. exten => s,n(repeatoption),Set(INVALID_LOOPCOUNT=$[${INVALID_LOOPCOUNT}+1])
  1991. exten => s,n,Read(EXT,to-call-this-number&vm-press&digits/1,1,,0,10)
  1992. exten => s,n,GotoIf($["${EXT}" = ""]?i,invalid)
  1993. exten => s,n,GotoIf($["${DIALPLAN_EXISTS(app-calltrace-perform,${EXT},1)}" = "0"]?i,invalid:1,dial)
  1994. exten => s,n,Goto(fin)
  1995. exten => s,n(noinfo),Playback(from-unknown-caller)
  1996. exten => s,n,Macro(hangupcall,)
  1997. exten => s,n(fin),Noop(Waiting for input)
  1998.  
  1999. exten => 1,1(dial),Goto(from-internal,${lastcaller},1)
  2000.  
  2001. exten => i,1(invalid),Playback(no-valid-responce-pls-try-again)
  2002. exten => i,n,GotoIf($[${INVALID_LOOPCOUNT} < 3 ]?s,repeatoption)
  2003. exten => i,n,Playback(vm-goodbye)
  2004. exten => i,n,Macro(hangupcall,)
  2005.  
  2006. ;--== end of [app-calltrace-perform] ==--;
  2007.  
  2008.  
  2009. [originate-aa]
  2010. include => originate-aa-custom
  2011. exten => _.X,1,Macro(blkvm-set,)
  2012. exten => _.X,n,Gosub(app-paging,ssetup,1())
  2013. exten => _.X,n,Macro(autoanswer,${EXTEN})
  2014. exten => _.X,n,Gosub(autoanswer,s,1(${ALERTINFO},${CALLINFO}))
  2015. exten => _.X,n,Goto(from-internal,${EXTEN},1)
  2016.  
  2017. ;--== end of [originate-aa] ==--;
  2018.  
  2019.  
  2020. [ext-intercom]
  2021. include => ext-intercom-custom
  2022. exten => lang-playback,1,GosubIf($[${DIALPLAN_EXISTS(ext-intercom,${CHANNEL(language)})}]?ext-intercom,${CHANNEL(language)},${ARG1}():ext-intercom,en,${ARG1}())
  2023. exten => lang-playback,n,Return()
  2024.  
  2025. exten => _*80.,1,Macro(user-callerid,)
  2026. exten => _*80.,n,Set(dialnumber=${EXTEN:3})
  2027. exten => _*80.,n,Set(INTERCOM_CALL=TRUE)
  2028. exten => _*80.,n,Gosub(sub-record-check,s,1(exten,${dialnumber}))
  2029. exten => _*80.,n,GotoIf($["${DB(AMPUSER/${AMPUSER}/intercom/block)}" = "blocked"]?end)
  2030. exten => _*80.,n,GotoIf($["${DB(DND/${dialnumber})}" = "YES"]?end)
  2031. exten => _*80.,n,GotoIf($["${DB(AMPUSER/${dialnumber}/intercom/${AMPUSER})}" = "allow" ]?allow)
  2032. exten => _*80.,n,GotoIf($["${DB(AMPUSER/${dialnumber}/intercom/${AMPUSER})}" = "deny" ]?nointercom)
  2033. exten => _*80.,n,GotoIf($["${DB(AMPUSER/${dialnumber}/intercom)}" = "disabled" ]?nointercom)
  2034. exten => _*80.,n(allow),Set(DEVICES=${DB(AMPUSER/${dialnumber}/device)})
  2035. exten => _*80.,n,GotoIf($["${DEVICES}" = "" ]?end)
  2036. exten => _*80.,n,Set(OVERRIDE=${DB(AMPUSER/${dialnumber}/intercom/override)})
  2037. exten => _*80.,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)})
  2038. exten => _*80.,n,Set(_SIPURI=)
  2039. exten => _*80.,n,Set(_ALERTINFO=Ring Answer)
  2040. exten => _*80.,n,Set(_CALLINFO=<uri>\;answer-after=0)
  2041. exten => _*80.,n,Set(_SIPURI=intercom=true)
  2042. exten => _*80.,n,Set(_DTIME=5)
  2043. exten => _*80.,n,Set(_ANSWERMACRO=)
  2044. exten => _*80.,n,GotoIf($[${LOOPCNT} > 1 ]?pagemode)
  2045. exten => _*80.,n,Macro(autoanswer,${DEVICES})
  2046. exten => _*80.,n,Set(_DOPTIONS=A(beep)b(autoanswer^s^1(${ALERTINFO},${CALLINFO})))
  2047. exten => _*80.,n(check),ChanIsAvail(${DEVICE},s)
  2048. exten => _*80.,n,ExecIf($["${AVAILSTATUS}" = "6"]?Set(AVAILORIGCHAN=${DEVICE}))
  2049. exten => _*80.,n,GotoIf($["${AVAILORIGCHAN}" != ""]?continue)
  2050. exten => _*80.,n,ExecIf($["${OVERRIDE}" = ""]?Set(OVERRIDE=reject))
  2051. exten => _*80.,n,GotoIf($["${OVERRIDE}" = "reject"]?end)
  2052. exten => _*80.,n,Set(DTIME=30)
  2053. exten => _*80.,n,ExecIf($["${OVERRIDE}" = "ring"]?Set(DOPTIONS=A(beep)))
  2054. exten => _*80.,n(continue),Noop(Continuing with page)
  2055. exten => _*80.,n,GotoIf($["${DB(AMPUSER/${EXTEN:3}/cidname)}" = ""]?godial)
  2056. exten => _*80.,n,Set(CONNECTEDLINE(name,i)=${DB(AMPUSER/${EXTEN:3}/cidname)})
  2057. exten => _*80.,n,Set(CONNECTEDLINE(num)=${EXTEN:3})
  2058. exten => _*80.,n(godial),Dial(${DIAL},${DTIME},I${DOPTIONS}${INTERCOM_EXT_DOPTIONS})
  2059. exten => _*80.,n(end),ExecIf($[${INTERCOM_RETURN}]?Return())
  2060. exten => _*80.,n,Busy(20)
  2061. exten => _*80.,n,Macro(hangupcall,)
  2062. exten => _*80.,n(pagemode),Set(ITER=1)
  2063. exten => _*80.,n,Set(DIALSTR=)
  2064. exten => _*80.,n(begin),ChanIsAvail(${DB(DEVICE/${CUT(DEVICES,&,${ITER})}/dial)},s)
  2065. exten => _*80.,n,GotoIf($["${AVAILORIGCHAN}" = ""]?skip)
  2066. exten => _*80.,n,Set(DIALSTR=${DIALSTR}-${CUT(DEVICES,&,${ITER})})
  2067. exten => _*80.,n(skip),Set(ITER=$[${ITER} + 1])
  2068. exten => _*80.,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin)
  2069. exten => _*80.,n,Set(DIALSTR=${DIALSTR:1})
  2070. exten => _*80.,n,GotoIf($["${DIALSTR}" = ""]?checkpageoption)
  2071. exten => _*80.,n,Set(_AMPUSER=${AMPUSER})
  2072. exten => _*80.,n,Gosub(page,1(${DIALSTR}))
  2073. exten => _*80.,n(checkpageoption),Noop(Intercom option ${OVERRIDE})
  2074. exten => _*80.,n,GotoIf($["${OVERRIDE}" = "reject"]?end2)
  2075. exten => _*80.,n,Gosub(dialall,1(${DIALSTR}))
  2076. exten => _*80.,n(end2),ExecIf($[${INTERCOM_RETURN}]?Return())
  2077. exten => _*80.,n,Busy(20)
  2078. exten => _*80.,n,Macro(hangupcall,)
  2079. exten => _*80.,n(nointercom),Noop(Intercom disallowed by ${dialnumber})
  2080. exten => _*80.,n,ExecIf($[${INTERCOM_RETURN}]?Return())
  2081. exten => _*80.,n,Gosub(ext-intercom,lang-playback,1(hook_0))
  2082. exten => _*80.,n,Congestion(20)
  2083.  
  2084. exten => page,1,Set(PAGE_CONF=${EPOCH}${RAND(100,999)})
  2085. exten => page,n,Set(PAGEMODE=PAGE)
  2086. exten => page,n,Set(PAGE_MEMBERS=${ARG1})
  2087. exten => page,n,Set(PAGE_CONF_OPTS=duplex)
  2088. exten => page,n,AGI(agi://127.0.0.1/page.agi)
  2089. exten => page,n,Set(CONFBRIDGE(user,template)=page_user_duplex)
  2090. exten => page,n,Set(CONFBRIDGE(user,admin)=yes)
  2091. exten => page,n,Set(CONFBRIDGE(user,marked)=yes)
  2092. exten => page,n,ConfBridge(${PAGE_CONF},,,admin_menu)
  2093. exten => page,n,Hangup
  2094.  
  2095. exten => dialall,1,GotoIf($[${LOOPCNT} > 1 ]?preparedialst)
  2096. exten => dialall,n(preparedialst),Set(ITER=1)
  2097. exten => dialall,n,Set(DIALSTR=)
  2098. exten => dialall,n(begin1),Set(DIALSTR=${DIALSTR}&${DB(DEVICE/${CUT(DEVICES,&,${ITER})}/dial)})
  2099. exten => dialall,n,Set(ITER=$[${ITER} + 1])
  2100. exten => dialall,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin1)
  2101. exten => dialall,n,Set(DIALSTR=${DIALSTR:1})
  2102. exten => dialall,n,Noop(Dial statring ${DIALSTR})
  2103. exten => dialall,n,GotoIf($["${OVERRIDE}" = "ring"]?dialnow)
  2104. exten => dialall,n,Set(_DOPTIONS=A(beep)b(autoanswer^s^1(${ALERTINFO},${CALLINFO})))
  2105. exten => dialall,n(dialnow),Dial(${DIALSTR},${DTIME},I${DOPTIONS}${INTERCOM_EXT_DOPTIONS})
  2106. exten => dialall,n,Hangup
  2107.  
  2108. exten => en,1(hook_0),Playback(intercom&for&extension)
  2109. exten => en,n,SayDigits(${dialnumber})
  2110. exten => en,n,Playback(is&disabled)
  2111. exten => en,n,Return()
  2112.  
  2113. exten => ja,1(hook_0),Playback(extension)
  2114. exten => ja,n,SayDigits(${dialnumber})
  2115. exten => ja,n,Playback(jp-no&intercom&jp-wa&disabled-2)
  2116. exten => ja,n,Return()
  2117.  
  2118. ;--== end of [ext-intercom] ==--;
  2119.  
  2120.  
  2121. [ext-intercom-users]
  2122. include => ext-intercom-users-custom
  2123. exten => _*80XXXX,1,Goto(ext-intercom,${EXTEN},1)
  2124.  
  2125. exten => _*80XXXXX,1,Goto(ext-intercom,${EXTEN},1)
  2126.  
  2127. exten => lang-playback,1,GosubIf($[${DIALPLAN_EXISTS(ext-intercom-users,${CHANNEL(language)})}]?ext-intercom-users,${CHANNEL(language)},${ARG1}():ext-intercom-users,en,${ARG1}())
  2128. exten => lang-playback,n,Return()
  2129.  
  2130. exten => *54,1,Macro(user-callerid,)
  2131. exten => *54,n,Set(CONNECTEDLINE(name-charset,i)=utf8)
  2132. exten => *54,n,Set(CONNECTEDLINE(name,i)=Intercom: Enabled)
  2133. exten => *54,n,Set(CONNECTEDLINE(num,i)=${AMPUSER})
  2134. exten => *54,n,Answer
  2135. exten => *54,n,Wait(1)
  2136. exten => *54,n,Set(DB(AMPUSER/${AMPUSER}/intercom)=enabled)
  2137. exten => *54,n,Playback(intercom&enabled)
  2138. exten => *54,n,Macro(hangupcall,)
  2139.  
  2140. exten => _*54.,1,Macro(user-callerid,)
  2141. exten => _*54.,n,Set(CONNECTEDLINE(name-charset,i)=utf8)
  2142. exten => _*54.,n,Set(CONNECTEDLINE(name,i)=Intercom from ${EXTEN:3}: Enabled)
  2143. exten => _*54.,n,Set(CONNECTEDLINE(num,i)=${AMPUSER})
  2144. exten => _*54.,n,Set(dialnumber=${EVAL(${EXTEN:3})})
  2145. exten => _*54.,n,Answer
  2146. exten => _*54.,n,Wait(1)
  2147. exten => _*54.,n,GotoIf($["${DB(AMPUSER/${AMPUSER}/intercom/${EXTEN:3})}" = "allow" ]}?unset)
  2148. exten => _*54.,n,GotoIf($[${DB_EXISTS(AMPUSER/${EXTEN:3}/device)} != 1]?invaliduser)
  2149. exten => _*54.,n,Set(DB(AMPUSER/${AMPUSER}/intercom/${EXTEN:3})=allow)
  2150. exten => _*54.,n,Gosub(ext-intercom-users,lang-playback,1(hook_1))
  2151. exten => _*54.,n,Macro(hangupcall,)
  2152. exten => _*54.,n(unset),dbDeltree(AMPUSER/${AMPUSER}/intercom/${EXTEN:3})
  2153. exten => _*54.,n,Gosub(ext-intercom-users,lang-playback,1(hook_2))
  2154. exten => _*54.,n,Macro(hangupcall,)
  2155. exten => _*54.,n(invaliduser),Gosub(ext-intercom-users,lang-playback,1(hook_3))
  2156. exten => _*54.,n,Macro(hangupcall,)
  2157.  
  2158. exten => en,1(hook_1),Playback(intercom&from&extension&number)
  2159. exten => en,n,SayDigits(${dialnumber})
  2160. exten => en,n,Playback(enabled)
  2161. exten => en,n,Return()
  2162. exten => en,n(hook_2),Playback(intercom&enabled&cancelled&for&extension&number)
  2163. exten => en,n,SayDigits(${dialnumber})
  2164. exten => en,n,Return()
  2165. exten => en,n(hook_3),Playback(extension&number)
  2166. exten => en,n,SayDigits(${dialnumber})
  2167. exten => en,n,Playback(invalid)
  2168. exten => en,n,Return()
  2169. exten => en,n(hook_4),Playback(intercom&from&extension&number)
  2170. exten => en,n,SayDigits(${dialnumber})
  2171. exten => en,n,Playback(disabled)
  2172. exten => en,n,Return()
  2173. exten => en,n(hook_5),Playback(intercom&disabled&cancelled&for&extension&number)
  2174. exten => en,n,SayDigits(${dialnumber})
  2175. exten => en,n,Return()
  2176. exten => en,n(hook_6),Playback(extension&number)
  2177. exten => en,n,SayDigits(${dialnumber})
  2178. exten => en,n,Playback(invalid)
  2179. exten => en,n,Return()
  2180.  
  2181. exten => ja,1(hook_1),Playback(extension)
  2182. exten => ja,n,SayDigits(${dialnumber})
  2183. exten => ja,n,Playback(jp-kara&jp-no&intercom&jp-wo&allow)
  2184. exten => ja,n,Return()
  2185. exten => ja,n(hook_2),Playback(extension)
  2186. exten => ja,n,SayDigits(${dialnumber})
  2187. exten => ja,n,Playback(jp-kara&jp-no&intercom&setting&jp-wo&cancelled)
  2188. exten => ja,n,Return()
  2189. exten => ja,n(hook_3),Playback(extension)
  2190. exten => ja,n,SayDigits(${dialnumber})
  2191. exten => ja,n,Playback(invalid)
  2192. exten => ja,n,Return()
  2193. exten => ja,n(hook_4),Playback(extension)
  2194. exten => ja,n,SayDigits(${dialnumber})
  2195. exten => ja,n,Playback(jp-kara&jp-no&intercom&jp-wo&deny)
  2196. exten => ja,n,Return()
  2197. exten => ja,n(hook_5),Playback(extension)
  2198. exten => ja,n,SayDigits(${dialnumber})
  2199. exten => ja,n,Playback(jp-kara&jp-no&intercom&setting&jp-wo&cancelled)
  2200. exten => ja,n,Return()
  2201. exten => ja,n(hook_6),Playback(extension)
  2202. exten => ja,n,SayDigits(${dialnumber})
  2203. exten => ja,n,Playback(invalid)
  2204. exten => ja,n,Return()
  2205.  
  2206. exten => *55,1,Macro(user-callerid,)
  2207. exten => *55,n,Set(CONNECTEDLINE(name-charset,i)=utf8)
  2208. exten => *55,n,Set(CONNECTEDLINE(name,i)=Intercom: Disabled)
  2209. exten => *55,n,Set(CONNECTEDLINE(num,i)=${AMPUSER})
  2210. exten => *55,n,Answer
  2211. exten => *55,n,Wait(1)
  2212. exten => *55,n,Set(DB(AMPUSER/${AMPUSER}/intercom)=disabled)
  2213. exten => *55,n,Playback(intercom&disabled)
  2214. exten => *55,n,Macro(hangupcall,)
  2215.  
  2216. exten => _*55.,1,Macro(user-callerid,)
  2217. exten => _*55.,n,Set(CONNECTEDLINE(name-charset,i)=utf8)
  2218. exten => _*55.,n,Set(CONNECTEDLINE(name,i)=Intercom from ${EXTEN:3}: Disabled)
  2219. exten => _*55.,n,Set(CONNECTEDLINE(num,i)=${AMPUSER})
  2220. exten => _*55.,n,Set(dialnumber=${EVAL(${EXTEN:3})})
  2221. exten => _*55.,n,Answer
  2222. exten => _*55.,n,Wait(1)
  2223. exten => _*55.,n,GotoIf($["${DB(AMPUSER/${AMPUSER}/intercom/${EXTEN:3})}" = "deny" ]}?unset2)
  2224. exten => _*55.,n,GotoIf($[${DB_EXISTS(AMPUSER/${EXTEN:3}/device)} != 1]?invaliduser2)
  2225. exten => _*55.,n,Set(DB(AMPUSER/${AMPUSER}/intercom/${EXTEN:3})=deny)
  2226. exten => _*55.,n,Gosub(ext-intercom-users,lang-playback,1(hook_4))
  2227. exten => _*55.,n,Macro(hangupcall,)
  2228. exten => _*55.,n(unset2),dbDeltree(AMPUSER/${AMPUSER}/intercom/${EXTEN:3})
  2229. exten => _*55.,n,Gosub(ext-intercom-users,lang-playback,1(hook_5))
  2230. exten => _*55.,n,Macro(hangupcall,)
  2231. exten => _*55.,n(invaliduser2),Gosub(ext-intercom-users,lang-playback,1(hook_6))
  2232. exten => _*55.,n,Macro(hangupcall,)
  2233.  
  2234. ;--== end of [ext-intercom-users] ==--;
  2235.  
  2236.  
  2237. [macro-autoanswer]
  2238. include => macro-autoanswer-custom
  2239. exten => s,1,GotoIf($["${KNOWNDIAL}" != ""]?knowndial)
  2240. exten => s,n,Set(DEVICE=${DB(DEVICE/${ARG1}/dial)})
  2241. exten => s,n,GotoIf($["${DEVICE:0:5}" == "PJSIP" ]?dopjsip)
  2242. exten => s,n,Set(KNOWNDIAL=${DEVICE})
  2243. exten => s,n,Goto(knowndial)
  2244. exten => s,n(dopjsip),Set(KNOWNDIAL=${PJSIP_DIAL_CONTACTS(${ARG1})})
  2245. exten => s,n,GotoIf($[${REGEX("&" ${KNOWNDIAL})} == 0]?knowndial)
  2246. exten => s,n,Gosub(app-paging,ssetup,1())
  2247. exten => s,n,Set(PAGEMODE=PAGE)
  2248. exten => s,n,Set(PAGE_CONF_OPTS=duplex)
  2249. exten => s,n,Set(STREAM=NONE)
  2250. exten => s,n,Set(PAGE_MEMBERS=${ARG1})
  2251. exten => s,n,AGI(agi://127.0.0.1/page.agi)
  2252. exten => s,n,Set(CONFBRIDGE(user,template)=page_user_duplex)
  2253. exten => s,n,Set(CONFBRIDGE(user,admin)=yes)
  2254. exten => s,n,Set(CONFBRIDGE(user,marked)=yes)
  2255. exten => s,n,ConfBridge(${PAGE_CONF},,,admin_menu)
  2256. exten => s,n,Hangup
  2257. exten => s,n(knowndial),Set(DIAL=${KNOWNDIAL})
  2258. exten => s,n,GotoIf($["${DB(DEVICE/${ARG1}/autoanswer/macro)}" != "" ]?macro)
  2259. exten => s,n,GotoIf($["${DIAL:0:5}" = "PJSIP"]?pjsipua)
  2260. exten => s,n,Set(USERAGENT=${SIPPEER(${CUT(DIAL,/,2)},useragent)})
  2261. exten => s,n,Goto(uafin)
  2262. exten => s,n(pjsipua),Set(AOR=${CUT(DIAL,/,2)})
  2263. exten => s,n,Set(CONTACT=${PJSIP_AOR(${AOR},contact)})
  2264. exten => s,n,Set(USERAGENT=${PJSIP_CONTACT(${CONTACT},user_agent)})
  2265. exten => s,n(uafin),ExecIf($["${KNOWNAGENT}" != ""]?Set(USERAGENT=${KNOWNAGENT}))
  2266. exten => s,n,ExecIf($["${LEN(${PVOL})}" != "0"]?Set(PAGE_VOL=\;volume=${PVOL}))
  2267. exten => s,n,ExecIf($["${USERAGENT:0:6}" = "Digium"]?Set(ALERTINFO=ring-answer))
  2268. exten => s,n,ExecIf($["${USERAGENT:0:5}" = "Mitel"]?Set(CALLINFO=<sip:broadworks.net>\;answer-after=0))
  2269. exten => s,n,ExecIf($["${USERAGENT:0:9}" = "OpenStage"]?Set(ALERTINFO=<http://example.com>\;info=alert-autoanswer))
  2270. exten => s,n,ExecIf($["${USERAGENT:0:9}" = "Panasonic"]?Set(ALERTINFO=Intercom))
  2271. exten => s,n,ExecIf($["${USERAGENT:0:7}" = "Polycom"]?Set(ALERTINFO=Alert-Info: Auto Answer))
  2272. exten => s,n,ExecIf($["${USERAGENT:0:23}" = "Sangoma macOS Softphone"]?Set(ALERTINFO=Direct-Intercom))
  2273. exten => s,n,ExecIf($["${USERAGENT:0:9}" = "Sangoma P"]?Set(ALERTINFO=ring-answer))
  2274. exten => s,n,ExecIf($["${USERAGENT:0:9}" = "Sangoma S"]?Set(ALERTINFO=<http://www.sangoma.com>\;info=external${PAGE_VOL}))
  2275. exten => s,n,ExecIf($["${USERAGENT:0:25}" = "Sangoma Windows Softphone"]?Set(ALERTINFO=Direct-Intercom))
  2276. exten => s,n,ExecIf($["${SIPURI}" != ""]?Set(__SIP_URI_OPTIONS=${SIPURI}))
  2277. exten => s,n+2(macro),Macro(${DB(DEVICE/${ARG1}/autoanswer/macro)},${ARG1})
  2278.  
  2279. ;--== end of [macro-autoanswer] ==--;
  2280.  
  2281.  
  2282. [autoanswer]
  2283. include => autoanswer-custom
  2284. exten => s,1,GosubIf($["${ARG1}" != ""]?func-set-sipheader,s,1(Alert-Info,${ARG1}))
  2285. exten => s,n,GosubIf($["${ARG2}" != ""]?func-set-sipheader,s,1(Call-Info,${ARG2}))
  2286. exten => s,n,Gosub(func-apply-sipheaders,s,1())
  2287. exten => s,n,Return()
  2288.  
  2289. ;--== end of [autoanswer] ==--;
  2290.  
  2291.  
  2292. [app-paging]
  2293. include => app-paging-custom
  2294. exten => ssetup,1,Set(_SIPURI=)
  2295. exten => ssetup,n,Set(_ALERTINFO=Ring Answer)
  2296. exten => ssetup,n,Set(_CALLINFO=<uri>\;answer-after=0)
  2297. exten => ssetup,n,Set(_SIPURI=intercom=true)
  2298. exten => ssetup,n,Set(_DTIME=5)
  2299. exten => ssetup,n,Set(_ANSWERMACRO=)
  2300. exten => ssetup,n,Set(PAGE_CONF=${EPOCH}${RAND(100,999)})
  2301. exten => ssetup,n,Return()
  2302.  
  2303. exten => _PAGE.,1(SKIPCHECK),Macro(autoanswer,${EXTEN:4})
  2304. exten => _PAGE.,n,Noop(${EXTRINGTIME})
  2305. exten => _PAGE.,n,GotoIf($["${EXTRINGTIME}" != "true"]?doptions)
  2306. exten => _PAGE.,n,Set(_DTIME=${RINGTIMER_DEFAULT})
  2307. exten => _PAGE.,n,ExecIf($["${DB(AMPUSER/${EXTEN:4}/ringtimer)}" != "" & ${DB(AMPUSER/${EXTEN:4}/ringtimer)} > 0]?Set(_DTIME=${DB(AMPUSER/${EXTEN:4}/ringtimer)}))
  2308. exten => _PAGE.,n(doptions),ExecIf($["${DOPTIONS}" = ""]?Set(_DOPTIONS=b(autoanswer^s^1(${ALERTINFO},${CALLINFO}))))
  2309. exten => _PAGE.,n,Dial(${DIAL},${DTIME},A(${ANNOUNCEMENT})${DOPTIONS})
  2310. exten => _PAGE.,n(skipself),Hangup
  2311.  
  2312. exten => _SPAGE.,1(chanspy),ChanSpy(${SP_DEVICE}-,qW)
  2313. exten => _SPAGE.,n,Hangup
  2314.  
  2315. ;--== end of [app-paging] ==--;
  2316.  
  2317.  
  2318. [app-page-stream]
  2319. include => app-page-stream-custom
  2320. exten => s,1,Wait(1)
  2321. exten => s,n,Answer
  2322. exten => s,n,Set(CHANNEL(language)=${SIPLANG})
  2323. exten => s,n,Set(CONFBRIDGE(user,template)=page_user_duplex)
  2324. exten => s,n,Set(CONFBRIDGE(user,marked)=yes)
  2325. exten => s,n,ExecIf($["${PAGE_USER_TYPE}" = "ADMIN_MUTED"]?Set(CONFBRIDGE(user,startmuted)=yes))
  2326. exten => s,n,ExecIf($["${PAGE_USER_TYPE}" = "ADMIN_MUTED"]?Set(CONFBRIDGE(user,marked)=yes))
  2327. exten => s,n,ConfBridge(${PAGE_CONF},,,)
  2328. exten => s,n,Hangup
  2329.  
  2330. ;--== end of [app-page-stream] ==--;
  2331.  
  2332.  
  2333. [macro-parked-call]
  2334. include => macro-parked-call-custom
  2335. exten => s,1,Macro(user-callerid,)
  2336. exten => s,n,Gosub(sub-record-check,s,1(parking,${AMPUSER},${AMPUSER}))
  2337. exten => s,n,Noop(PARKRETURNTO: ${SHARED(PARKRETURNTO,${CHANNEL})})
  2338. exten => s,n,GotoIf($[${LEN(${SHARED(PARKRETURNTO,${CHANNEL})})} > 0]?backtosender)
  2339. exten => s,n,GotoIf($[${LEN(${BLINDTRANSFER})} > 0 | ${LEN(${ATTENDEDTRANSFER})} > 0]?attemptpark)
  2340. exten => s,n,AGI(agi://127.0.0.1/parkfetch.agi,${ARG1},${ARG2})
  2341. exten => s,n,GotoIf($["${REC_STATUS}" != "RECORDING"]?next)
  2342. exten => s,n,Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT})
  2343. exten => s,n(next),Set(CCSS_SETUP=TRUE)
  2344. exten => s,n,GotoIf($["${PARKIE}" != ""]?pcall)
  2345. exten => s,n,ResetCDR()
  2346. exten => s,n,Set(CDR_PROP(disable)=true)
  2347. exten => s,n,Wait(1)
  2348. exten => s,n,Playback(pbx-invalidpark)
  2349. exten => s,n,Wait(1)
  2350. exten => s,n,Hangup
  2351. exten => s,n(pcall),Noop(User: ${CALLERID(all)} attempting to pick up Parked Call Slot ${ARG1})
  2352. exten => s,n,Noop(PARKIE: ${PARKIE})
  2353. exten => s,n,Set(SHARED(PARKRETURNTO,${PARKIE})=)
  2354. exten => s,n,Set(PARKOWNER=1)
  2355. exten => s,n,ParkedCall(${ARG2},${ARG1})
  2356. exten => s,n,Hangup
  2357. exten => s,n(attemptpark),Noop(User: ${CALLERID(all)} attempting to Park into slot ${ARG1})
  2358. exten => s,n,Noop(Blind Transfer: ${BLINDTRANSFER}, Attended Transfer: ${ATTENDEDTRANSFER})
  2359. exten => s,n,Noop($[${LEN(${PARKOWNER})} = 0])
  2360. exten => s,n,GotoIf($[${LEN(${PARKOWNER})} = 0]?parkit)
  2361. exten => s,n,Macro(hangupcall,)
  2362. exten => s,n(parkit),Set(PARKINGEXTEN=${ARG1})
  2363. exten => s,n,ExecIf($[${LEN(${BLINDTRANSFER})} > 0]?Set(SHARED(PARKRETURNTO,${CHANNEL})=${CUT(BLINDTRANSFER,-,1)}):Set(SHARED(PARKRETURNTO,${CHANNEL})=${CUT(ATTENDEDTRANSFER,-,1)}))
  2364. exten => s,n,Noop(PARKRETURNTO: ${SHARED(PARKRETURNTO,${CHANNEL})})
  2365. exten => s,n,Park(${ARG2},sc(${CONTEXT},s,200))
  2366. exten => s,1+199(backtosender),Noop(Attempting to go back to sender)
  2367. exten => s,n,Set(PARKCALLBACK=${PARKER})
  2368. exten => s,n,Set(SHARED(PARKRETURNTO,${CHANNEL})=)
  2369. exten => s,n,Goto(park-return-routing,${PARKING_SPACE},1)
  2370.  
  2371. exten => h,1,Macro(hangupcall,)
  2372.  
  2373. ;--== end of [macro-parked-call] ==--;
  2374.  
  2375.  
  2376. [parkedcallstimeout]
  2377. include => parkedcallstimeout-custom
  2378. exten => _[0-9a-zA-Z*#].,1,Set(PARKCALLBACK=${REPLACE(EXTEN,_,/)})
  2379. exten => _[0-9a-zA-Z*#].,n,GotoIf($["${REC_STATUS}" != "RECORDING"]?next)
  2380. exten => _[0-9a-zA-Z*#].,n,MixMonitor(${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MIXMON_FORMAT},a,${MIXMON_POST})
  2381. exten => _[0-9a-zA-Z*#].,n(next),Goto(park-return-routing,${PARKING_SPACE},1)
  2382.  
  2383. ;--== end of [parkedcallstimeout] ==--;
  2384.  
  2385.  
  2386. [park-dial]
  2387. include => park-dial-custom
  2388. exten => t,1,Noop(WARNING: PARKRETURN to: [${EXTEN}] failed with: [${DIALSTATUS}]. Trying Alternate Dest On Parking Lot ${PARKING_SPACE})
  2389. exten => t,n,Goto(park-orphan-routing,70,1)
  2390.  
  2391. exten => _[0-9a-zA-Z*#].,1,Noop(WARNING: PARKRETURN to: [${EXTEN}] failed with: [${DIALSTATUS}]. Trying Alternate Dest On Parking Lot ${PARKING_SPACE})
  2392. exten => _[0-9a-zA-Z*#].,n,Goto(park-orphan-routing,70,1)
  2393.  
  2394. ;--== end of [park-dial] ==--;
  2395.  
  2396.  
  2397. [park-orphan-routing]
  2398. include => park-orphan-routing-custom
  2399. exten => 70,1,Goto(app-blackhole,hangup,1)
  2400.  
  2401. ;--== end of [park-orphan-routing] ==--;
  2402.  
  2403.  
  2404. [park-return-routing]
  2405. include => park-return-routing-custom
  2406. exten => 70,1,Set(PLOT=70)
  2407. exten => 70,n,ExecIf($["${ALERT_INFO}"!=""]?Set(HASH(__SIPHEADERS,Alert-Info)=${ALERT_INFO}))
  2408. exten => 70,n,ExecIf($["${RVOL}"!=""]?Set(HASH(__SIPHEADERS,Alert-Info)=${ALERT_INFO}\;volume=${RVOL}))
  2409. exten => 70,n,GotoIf($["${PARKCALLBACK:0:5}"!="PJSIP"]?dial)
  2410. exten => 70,n,Noop(Debug: Found PJSIP Destination ${PARKCALLBACK}, updating with PJSIP_DIAL_CONTACTS from ${PARKER:6})
  2411. exten => 70,n,Set(PARKCALLBACK=${PJSIP_DIAL_CONTACTS(${PARKER:6})})
  2412. exten => 70,n(dial),Dial(${PARKCALLBACK},15,b(func-apply-sipheaders^s^1),tr)
  2413. exten => 70,n,Set(PARKCALLBACK=)
  2414. exten => 70,n,Goto(app-blackhole,hangup,1)
  2415.  
  2416. exten => 71,1,Goto(70,1)
  2417.  
  2418. exten => 72,1,Goto(70,1)
  2419.  
  2420. exten => 73,1,Goto(70,1)
  2421.  
  2422. exten => 74,1,Goto(70,1)
  2423.  
  2424. exten => 75,1,Goto(70,1)
  2425.  
  2426. exten => 76,1,Goto(70,1)
  2427.  
  2428. exten => 77,1,Goto(70,1)
  2429.  
  2430. exten => 78,1,Goto(70,1)
  2431.  
  2432. ;--== end of [park-return-routing] ==--;
  2433.  
  2434.  
  2435. [park-hints]
  2436. include => park-hints-custom
  2437. include => parkedcalls ; Default Lot
  2438. exten => 71,1,Macro(parked-call,71,default)
  2439. exten => 71,hint,park:71@parkedcalls
  2440.  
  2441. exten => *8571,1,Set(FORCEPICKUP=default)
  2442. exten => *8571,n,Macro(parked-call,71,default)
  2443. exten => *8571,hint,park:71@parkedcalls
  2444.  
  2445. exten => 72,1,Macro(parked-call,72,default)
  2446. exten => 72,hint,park:72@parkedcalls
  2447.  
  2448. exten => *8572,1,Set(FORCEPICKUP=default)
  2449. exten => *8572,n,Macro(parked-call,72,default)
  2450. exten => *8572,hint,park:72@parkedcalls
  2451.  
  2452. exten => 73,1,Macro(parked-call,73,default)
  2453. exten => 73,hint,park:73@parkedcalls
  2454.  
  2455. exten => *8573,1,Set(FORCEPICKUP=default)
  2456. exten => *8573,n,Macro(parked-call,73,default)
  2457. exten => *8573,hint,park:73@parkedcalls
  2458.  
  2459. exten => 74,1,Macro(parked-call,74,default)
  2460. exten => 74,hint,park:74@parkedcalls
  2461.  
  2462. exten => *8574,1,Set(FORCEPICKUP=default)
  2463. exten => *8574,n,Macro(parked-call,74,default)
  2464. exten => *8574,hint,park:74@parkedcalls
  2465.  
  2466. exten => 75,1,Macro(parked-call,75,default)
  2467. exten => 75,hint,park:75@parkedcalls
  2468.  
  2469. exten => *8575,1,Set(FORCEPICKUP=default)
  2470. exten => *8575,n,Macro(parked-call,75,default)
  2471. exten => *8575,hint,park:75@parkedcalls
  2472.  
  2473. exten => 76,1,Macro(parked-call,76,default)
  2474. exten => 76,hint,park:76@parkedcalls
  2475.  
  2476. exten => *8576,1,Set(FORCEPICKUP=default)
  2477. exten => *8576,n,Macro(parked-call,76,default)
  2478. exten => *8576,hint,park:76@parkedcalls
  2479.  
  2480. exten => 77,1,Macro(parked-call,77,default)
  2481. exten => 77,hint,park:77@parkedcalls
  2482.  
  2483. exten => *8577,1,Set(FORCEPICKUP=default)
  2484. exten => *8577,n,Macro(parked-call,77,default)
  2485. exten => *8577,hint,park:77@parkedcalls
  2486.  
  2487. exten => 78,1,Macro(parked-call,78,default)
  2488. exten => 78,hint,park:78@parkedcalls
  2489.  
  2490. exten => *8578,1,Set(FORCEPICKUP=default)
  2491. exten => *8578,n,Macro(parked-call,78,default)
  2492. exten => *8578,hint,park:78@parkedcalls
  2493.  
  2494. exten => 70,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
  2495. ;--== end of [park-hints] ==--;
  2496.  
  2497.  
  2498. [app-parking]
  2499. include => app-parking-custom
  2500. exten => *88,1,Park()
  2501.  
  2502. ;--== end of [app-parking] ==--;
  2503.  
  2504.  
  2505. [play-system-recording]
  2506. include => play-system-recording-custom
  2507. exten => 1,1,Answer
  2508. exten => 1,n,Playback(custom/annuncio)
  2509. exten => 1,n,Hangup
  2510.  
  2511. ;--== end of [play-system-recording] ==--;
  2512.  
  2513.  
  2514. [systemrecording-gui]
  2515. include => systemrecording-gui-custom
  2516. exten => dorecord,1,Record(${RECFILE}.wav,,,k)
  2517.  
  2518. exten => h,1,System(touch ${RECFILE}.finished)
  2519. exten => h,n(exit),Hangup
  2520.  
  2521. ;--== end of [systemrecording-gui] ==--;
  2522.  
  2523.  
  2524. [macro-systemrecording]
  2525. include => macro-systemrecording-custom
  2526. exten => s,1,GotoIf($["${ARG2}" = ""]?invalid)
  2527. exten => s,n,Set(TMPLANG=${CHANNEL(language)})
  2528. exten => s,n,ExecIf($["${ARG4}" != ""]?Set(TMPLANG=${ARG4}))
  2529. exten => s,n,Set(RECFILE=${TMPLANG}/${ARG2})
  2530. exten => s,n,Set(LISTEN=docheck)
  2531. exten => s,n,ExecIf($["${ARG3}" != ""]?Authenticate(${ARG3}))
  2532. exten => s,n,Goto(${ARG1},1)
  2533.  
  2534. exten => dorecord,1,Set(TMPRECFILE=${RECFILE}-TMP)
  2535. exten => dorecord,n,Background(say-temp-msg-prs-pound,,${CHANNEL(language)})
  2536. exten => dorecord,n,Record(${TMPRECFILE}.${CHANNEL(audioreadformat)},,,k)
  2537. exten => dorecord,n,Set(LISTEN=dochecknolanguage)
  2538. exten => dorecord,n,Goto(confmenu,1)
  2539.  
  2540. exten => dochecknolanguage,1,Playback(beep)
  2541. exten => dochecknolanguage,n(dc_start),Background(${TMPRECFILE},m,,macro-systemrecording)
  2542. exten => dochecknolanguage,n,Wait(1)
  2543. exten => dochecknolanguage,n,Goto(confmenu,1)
  2544.  
  2545. exten => docheck,1,Playback(beep)
  2546. exten => docheck,n(dc_start),Background(${RECFILE},m,${CHANNEL(language)},macro-systemrecording)
  2547. exten => docheck,n,Wait(1)
  2548. exten => docheck,n,Goto(confmenu,1)
  2549.  
  2550. exten => confmenu,1,Background(to-listen-to-it&press-1&to-accept-recording&press-2&to-rerecord-it&press-star&language&press-3,m,${CHANNEL(language)},macro-systemrecording)
  2551. exten => confmenu,n,Read(RECRESULT,,1,,,4)
  2552. exten => confmenu,n,GotoIf($["x${RECRESULT}"="x*"]?dorecord,1)
  2553. exten => confmenu,n,GotoIf($["x${RECRESULT}"="x1"]?${LISTEN},2)
  2554. exten => confmenu,n,GotoIf($["x${RECRESULT}"="x2"]?doaccept,1)
  2555. exten => confmenu,n,GotoIf($["x${RECRESULT}"="x3"]?switchlang,1)
  2556. exten => confmenu,n,Goto(1)
  2557.  
  2558. exten => doaccept,1,Set(EXISTS=${STAT(e,${ASTVARLIBDIR}/sounds/${TMPRECFILE}.${CHANNEL(audioreadformat)})})
  2559. exten => doaccept,n,Noop(${EXISTS})
  2560. exten => doaccept,n,GotoIf($["${EXISTS}" != "1"]?exit)
  2561. exten => doaccept,n,System(touch ${ASTVARLIBDIR}/sounds/${RECFILE}.finished)
  2562. exten => doaccept,n,GotoIf($["x${TMPRECFILE}"="x"]?exit)
  2563. exten => doaccept,n,System(mv ${ASTVARLIBDIR}/sounds/${TMPRECFILE}.${CHANNEL(audioreadformat)} ${ASTVARLIBDIR}/sounds/${RECFILE}.${CHANNEL(audioreadformat)})
  2564. exten => doaccept,n,Playback(wait-moment)
  2565. exten => doaccept,n,AGI(agi://127.0.0.1/recordings.agi)
  2566. exten => doaccept,n,Set(TMPRECFILE=${RECFILE})
  2567. exten => doaccept,n(exit),Playback(auth-thankyou)
  2568. exten => doaccept,n,Goto(confmenu,1)
  2569.  
  2570. exten => switchlang,1,Playback(language&is-set-to)
  2571. exten => switchlang,n,SayAlpha(${TMPLANG})
  2572. exten => switchlang,n,Playback(after-the-tone)
  2573. exten => switchlang,n,Background(press-1)
  2574. exten => switchlang,n,SayAlpha(en)
  2575. exten => switchlang,n,Playback(beep)
  2576. exten => switchlang,n,Read(LANGRESULT,,1,,,4)
  2577. exten => switchlang,n,ExecIf($["x${LANGRESULT}"="x1"]?Set(TMPLANG=en))
  2578. exten => switchlang,n,Set(RECFILE=${TMPLANG}/${ARG2})
  2579. exten => switchlang,n,Playback(language&is-set-to)
  2580. exten => switchlang,n,SayAlpha(${TMPLANG})
  2581. exten => switchlang,n,Goto(confmenu,1)
  2582.  
  2583. exten => invalid,1,Playback(pm-invalid-option)
  2584. exten => invalid,n,Hangup
  2585.  
  2586. exten => 1,1,Goto(${LISTEN},dc_start)
  2587.  
  2588. exten => 2,1,Goto(doaccept,1)
  2589.  
  2590. exten => 3,1,Goto(switchlang,1)
  2591.  
  2592. exten => *,1,Goto(dorecord,1)
  2593.  
  2594. exten => t,1,Playback(goodbye)
  2595. exten => t,n,Hangup
  2596.  
  2597. exten => i,1,Playback(pm-invalid-option)
  2598. exten => i,n,Goto(confmenu,1)
  2599.  
  2600. exten => h,1,System(touch ${ASTVARLIBDIR}/sounds/${RECFILE}.finished)
  2601. exten => h,n,GotoIf($["x${TMPRECFILE}"="x"]?exit)
  2602. exten => h,n,System(mv ${ASTVARLIBDIR}/sounds/${TMPRECFILE}.${CHANNEL(audioreadformat)} ${ASTVARLIBDIR}/sounds/${CHANNEL(language)}/${RECFILE}.${CHANNEL(audioreadformat)})
  2603. exten => h,n(exit),Hangup
  2604.  
  2605. ;--== end of [macro-systemrecording] ==--;
  2606.  
  2607.  
  2608. [ext-group]
  2609. include => ext-group-custom
  2610. exten => 81420,1,GotoIf($["${__RINGINGSENT}" = "TRUE"]?cid)
  2611. exten => 81420,n,Playtones(ring)
  2612. exten => 81420,n,Progress
  2613. exten => 81420,n(cid),Macro(user-callerid,)
  2614. exten => 81420,n,Macro(blkvm-setifempty,)
  2615. exten => 81420,n,GotoIf($["${GOSUB_RETVAL}" = "TRUE"]?skipov)
  2616. exten => 81420,n,Macro(blkvm-set,reset)
  2617. exten => 81420,n,Set(__NODEST=)
  2618. exten => 81420,n(skipov),Set(RRNODEST=${NODEST})
  2619. exten => 81420,n(skipvmblk),Set(__NODEST=${EXTEN})
  2620. exten => 81420,n,GosubIf($[${DB_EXISTS(RINGGROUP/81420/changecid)} = 1 & "${DB(RINGGROUP/81420/changecid)}" != "default" & "${DB(RINGGROUP/81420/changecid)}" != ""]?sub-rgsetcid,s,1())
  2621. exten => 81420,n,Gosub(sub-record-check,s,1(rg,81420,dontcare))
  2622. exten => 81420,n,Set(RingGroupMethod=ringall)
  2623. exten => 81420,n,Set(__ALT_CONFIRM_MSG=${IF($[${LEN(${VQ_CONFIRMMSG})}>1]?${IF($["${VQ_CONFIRMMSG}"!="0"]?${VQ_CONFIRMMSG}: )}:)})
  2624. exten => 81420,n,GotoIf($[$["${RG_CONFIRM}"="1"] | $[${LEN(${VQ_CONFIRMMSG})}>1]]?RGVQANNOUNCE:NORGVQANNOUNCE)
  2625. exten => 81420,n(RGVQANNOUNCE),Macro(dial-confirm,20,${DIAL_OPTIONS}Q(NO_ANSWER),1420,81420)
  2626. exten => 81420,n,Goto(gosubhere)
  2627. exten => 81420,n(NORGVQANNOUNCE),Macro(dial,20,${DIAL_OPTIONS}Q(NO_ANSWER),1420)
  2628. exten => 81420,n(gosubhere),Gosub(sub-record-cancel,s,1())
  2629. exten => 81420,n,Set(RingGroupMethod=)
  2630. exten => 81420,n,GotoIf($["foo${RRNODEST}" != "foo"]?nodest)
  2631. exten => 81420,n,Set(__NODEST=)
  2632. exten => 81420,n,Macro(blkvm-clr,)
  2633. exten => 81420,n,Goto(from-did-direct,91420,1)
  2634. exten => 81420,n(nodest),Noop(SKIPPING DEST, CALL CAME FROM Q/RG: ${RRNODEST})
  2635.  
  2636. exten => h,1,Macro(hangupcall,)
  2637.  
  2638. ;--== end of [ext-group] ==--;
  2639.  
  2640.  
  2641. [app-pickup]
  2642. include => app-pickup-custom
  2643. exten => **81420,1,Set(ALLOWEDMEM=1420)
  2644. exten => **81420,n,Macro(user-callerid,)
  2645. exten => **81420,n,Set(EXTENS=${FIELDQTY(ALLOWEDMEM,-)})
  2646. exten => **81420,n,Set(ITER=1)
  2647. exten => **81420,n,Noop($["${AMPUSER}" == "${CUT(ALLOWEDMEM,-,${ITER})}"])
  2648. exten => **81420,n(extloop),GotoIf($["${AMPUSER}" == "${CUT(ALLOWEDMEM,-,${ITER})}"]?pickup)
  2649. exten => **81420,n,Set(ITER=$[${ITER}+1])
  2650. exten => **81420,n,GotoIf($["${ITER}" <= "${EXTENS}"]?extloop)
  2651. exten => **81420,n,Playback(im-sorry&access-denied)
  2652. exten => **81420,n,Hangup
  2653. exten => **81420,n(pickup),Set(PICKUP_EXTEN=${AMPUSER})
  2654. exten => **81420,n,Pickup(${EXTEN:2}&${EXTEN:2}@PICKUPMARK)
  2655. exten => **81420,n,Hangup
  2656.  
  2657. exten => _**.,1,Macro(user-callerid,)
  2658. exten => _**.,n,Set(PICKUP_EXTEN=${AMPUSER})
  2659. exten => _**.,n,Pickup(${EXTEN:2}&${EXTEN:2}@PICKUPMARK)
  2660. exten => _**.,n,Hangup
  2661.  
  2662. exten => _***80.,1,Macro(user-callerid,)
  2663. exten => _***80.,n,Set(PICKUP_EXTEN=${AMPUSER})
  2664. exten => _***80.,n,Pickup(${EXTEN:5}&${EXTEN:5}@PICKUPMARK)
  2665. exten => _***80.,n,Hangup
  2666.  
  2667. exten => **1420,1,Macro(user-callerid,)
  2668. exten => **1420,n,Set(PICKUP_EXTEN=${AMPUSER})
  2669. exten => **1420,n,Pickup(1420&1420@PICKUPMARK&81420@from-internal&81420@from-internal-xfer&81420@ext-group)
  2670. exten => **1420,n,Hangup
  2671.  
  2672. exten => ***801420,1,Macro(user-callerid,)
  2673. exten => ***801420,n,Set(PICKUP_EXTEN=${AMPUSER})
  2674. exten => ***801420,n,Pickup(1420&1420@PICKUPMARK&81420@from-internal&81420@from-internal-xfer&81420@ext-group)
  2675. exten => ***801420,n,Hangup
  2676.  
  2677. ;--== end of [app-pickup] ==--;
  2678.  
  2679.  
  2680. [grps]
  2681. include => grps-custom
  2682. exten => _RG-81420-.,1,Set(CDR_PROP(disable)=true)
  2683. exten => _RG-81420-.,n,Macro(dial,20,${DIAL_OPTIONS}Q(NO_ANSWER)M(confirm^^^81420),${EXTEN:9})
  2684.  
  2685. ;--== end of [grps] ==--;
  2686.  
  2687.  
  2688. [sub-rgsetcid]
  2689. include => sub-rgsetcid-custom
  2690. exten => s,1,Goto(s-${DB(RINGGROUP/${NODEST}/changecid)},1)
  2691.  
  2692. exten => s-fixed,1,ExecIf($["${REGEX("^[\+]?[0-9]+$" ${DB(RINGGROUP/${NODEST}/fixedcid)})}" = "1"]?Set(__TRUNKCIDOVERRIDE=${DB(RINGGROUP/${NODEST}/fixedcid)}))
  2693. exten => s-fixed,n,Return()
  2694.  
  2695. exten => s-extern,1,ExecIf($["${REGEX("^[\+]?[0-9]+$" ${DB(RINGGROUP/${NODEST}/fixedcid)})}" == "1" & "${FROM_DID}" != ""]?Set(__TRUNKCIDOVERRIDE=${DB(RINGGROUP/${NODEST}/fixedcid)}))
  2696. exten => s-extern,n,Return()
  2697.  
  2698. exten => s-did,1,ExecIf($["${REGEX("^[\+]?[0-9]+$" ${FROM_DID})}" = "1"]?Set(__REALCALLERIDNUM=${FROM_DID}))
  2699. exten => s-did,n,Return()
  2700.  
  2701. exten => s-forcedid,1,ExecIf($["${REGEX("^[\+]?[0-9]+$" ${FROM_DID})}" = "1"]?Set(__TRUNKCIDOVERRIDE=${FROM_DID}))
  2702. exten => s-forcedid,n,Return()
  2703.  
  2704. exten => _s-.,1,Noop(Unknown value for RINGGROUP/${NODEST}/changecid of ${DB(RINGGROUP/${NODEST}/changecid)} set to "default")
  2705. exten => _s-.,n,Set(DB(RINGGROUP/${NODEST}/changecid)=default)
  2706. exten => _s-.,n,Return()
  2707.  
  2708. ;--== end of [sub-rgsetcid] ==--;
  2709.  
  2710.  
  2711. [vm-callme]
  2712. include => vm-callme-custom
  2713. exten => s,1,Answer
  2714. exten => s,n,Wait(1)
  2715. exten => s,n(repeat),Background(${MSG}&silence/2&vm-repeat&vm-starmain)
  2716. exten => s,n,WaitExten(15,)
  2717.  
  2718. exten => 5,1,Goto(s,repeat)
  2719.  
  2720. exten => #,1,Playback(vm-goodbye)
  2721. exten => #,n,Hangup
  2722.  
  2723. exten => *,1,Macro(get-vmcontext,${MBOX})
  2724. exten => *,n,VoiceMailMain(${MBOX}@${VMCONTEXT},s)
  2725.  
  2726. exten => i,1,Playback(pm-invalid-option)
  2727. exten => i,n,Goto(s,repeat)
  2728.  
  2729. exten => t,1,Playback(vm-goodbye)
  2730. exten => t,n,Hangup
  2731.  
  2732. exten => h,1,Hangup
  2733.  
  2734. ;--== end of [vm-callme] ==--;
  2735.  
  2736.  
  2737. [app-vmmain]
  2738. include => app-vmmain-custom
  2739. exten => *97,1,Macro(user-callerid,)
  2740. exten => *97,n,Set(CONNECTEDLINE(name-charset,i)=utf8)
  2741. exten => *97,n,Set(CONNECTEDLINE(name,i)=My Voicemail)
  2742. exten => *97,n,Set(CONNECTEDLINE(num,i)=${AMPUSER})
  2743. exten => *97,n,Answer
  2744. exten => *97,n,Wait(1)
  2745. exten => *97,n,Macro(get-vmcontext,${AMPUSER})
  2746. exten => *97,n(check),Set(VMBOXEXISTSSTATUS=${IF(${VM_INFO(${AMPUSER}@${VMCONTEXT},exists)}?SUCCESS:FAILED)})
  2747. exten => *97,n,GotoIf($["${VMBOXEXISTSSTATUS}" = "SUCCESS"]?mbexist)
  2748. exten => *97,n,VoiceMailMain()
  2749. exten => *97,n,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?playret)
  2750. exten => *97,n,Macro(hangupcall,)
  2751. exten => *97,check+101(mbexist),GotoIf($["${DB(AMPUSER/${AMPUSER}/novmpw)}"!=""]?novmpw:vmpw)
  2752. exten => *97,n(novmpw),Noop(Verifying channel ${CHANNEL} is actually ${AMPUSER})
  2753. exten => *97,n,Set(DEVICES=${DB(AMPUSER/${AMPUSER}/device)})
  2754. exten => *97,n,ExecIf($["${DEVICES}" = ""]?Set(DEVICES=${AMPUSER}))
  2755. exten => *97,n,ExecIf($["${DEVICES:0:1}" = "&"]?Set(DEVICES=${DEVICES:1}))
  2756. exten => *97,n,While($["${SET(DEV=${SHIFT(DEVICES,&)})}" != ""])
  2757. exten => *97,n,GotoIf($["${DB(DEVICE/${DEV}/dial)}" = "${CUT(CHANNEL,-,1)}"]?vmpwskip)
  2758. exten => *97,n,EndWhile
  2759. exten => *97,n,Noop(Channel ${CHANNEL} is NOT ${AMPUSER} forcing VM Password)
  2760. exten => *97,n(vmpw),VoiceMailMain(${AMPUSER}@${VMCONTEXT})
  2761. exten => *97,n,Goto(vmend)
  2762. exten => *97,n(vmpwskip),VoiceMailMain(${AMPUSER}@${VMCONTEXT},s)
  2763. exten => *97,n(vmend),GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?playret)
  2764. exten => *97,n,Macro(hangupcall,)
  2765. exten => *97,n(playret),Playback(beep&you-will-be-transfered-menu&silence/1)
  2766. exten => *97,n,Goto(${IVR_CONTEXT},return,1)
  2767.  
  2768. ;--== end of [app-vmmain] ==--;
  2769.  
  2770.  
  2771. [ext-local]
  2772. include => ext-local-custom
  2773. exten => *10000,1,Set(CONNECTEDLINE(name-charset,i)=utf8)
  2774. exten => *10000,n,Set(CONNECTEDLINE(name,i)=10000 Voicemail)
  2775. exten => *10000,n,Set(CONNECTEDLINE(num,i)=10000)
  2776. exten => *10000,n,Macro(vm,10000,DIRECTDIAL,${IVR_RETVM})
  2777. exten => *10000,n,Goto(vmret,1)
  2778.  
  2779. exten => *10001,1,Set(CONNECTEDLINE(name-charset,i)=utf8)
  2780. exten => *10001,n,Set(CONNECTEDLINE(name,i)=10001 Voicemail)
  2781. exten => *10001,n,Set(CONNECTEDLINE(num,i)=10001)
  2782. exten => *10001,n,Macro(vm,10001,DIRECTDIAL,${IVR_RETVM})
  2783. exten => *10001,n,Goto(vmret,1)
  2784.  
  2785. exten => *10002,1,Set(CONNECTEDLINE(name-charset,i)=utf8)
  2786. exten => *10002,n,Set(CONNECTEDLINE(name,i)=10002 Voicemail)
  2787. exten => *10002,n,Set(CONNECTEDLINE(num,i)=10002)
  2788. exten => *10002,n,Macro(vm,10002,DIRECTDIAL,${IVR_RETVM})
  2789. exten => *10002,n,Goto(vmret,1)
  2790.  
  2791. exten => *1020,1,Set(CONNECTEDLINE(name-charset,i)=utf8)
  2792. exten => *1020,n,Set(CONNECTEDLINE(name,i)=1020 Voicemail)
  2793. exten => *1020,n,Set(CONNECTEDLINE(num,i)=1020)
  2794. exten => *1020,n,Macro(vm,1020,DIRECTDIAL,${IVR_RETVM})
  2795. exten => *1020,n,Goto(vmret,1)
  2796.  
  2797. exten => *1132,1,Set(CONNECTEDLINE(name-charset,i)=utf8)
  2798. exten => *1132,n,Set(CONNECTEDLINE(name,i)=1132 Voicemail)
  2799. exten => *1132,n,Set(CONNECTEDLINE(num,i)=1132)
  2800. exten => *1132,n,Macro(vm,1132,DIRECTDIAL,${IVR_RETVM})
  2801. exten => *1132,n,Goto(vmret,1)
  2802.  
  2803. exten => *1420,1,Set(CONNECTEDLINE(name-charset,i)=utf8)
  2804. exten => *1420,n,Set(CONNECTEDLINE(name,i)=1420 Voicemail)
  2805. exten => *1420,n,Set(CONNECTEDLINE(num,i)=1420)
  2806. exten => *1420,n,Macro(vm,1420,DIRECTDIAL,${IVR_RETVM})
  2807. exten => *1420,n,Goto(vmret,1)
  2808.  
  2809. exten => *1580,1,Set(CONNECTEDLINE(name-charset,i)=utf8)
  2810. exten => *1580,n,Set(CONNECTEDLINE(name,i)=1580 Voicemail)
  2811. exten => *1580,n,Set(CONNECTEDLINE(num,i)=1580)
  2812. exten => *1580,n,Macro(vm,1580,DIRECTDIAL,${IVR_RETVM})
  2813. exten => *1580,n,Goto(vmret,1)
  2814.  
  2815. exten => 1020,1,Set(__RINGTIMER=${IF($["${DB(AMPUSER/1020/ringtimer)}" > "0"]?${DB(AMPUSER/1020/ringtimer)}:${RINGTIMER_DEFAULT})})
  2816. exten => 1020,n,ExecIf($["${REGEX("from-queue" ${CHANNEL})}"="1" && "${CONTEXT}"="from-internal-xfer"]?Set(__CWIGNORE=))
  2817. exten => 1020,n,Macro(exten-vm,1020,1020,0,0,0)
  2818. exten => 1020,n(dest),Set(__PICKUPMARK=)
  2819. exten => 1020,n,Macro(vm,1020,${DIALSTATUS},${IVR_RETVM})
  2820. exten => 1020,n,Goto(vmret,1)
  2821. exten => 1020,hint,PJSIP/1020&Custom:DND1020,CustomPresence:1020
  2822.  
  2823. exten => vmb1020,1,Macro(vm,1020,BUSY,${IVR_RETVM})
  2824. exten => vmb1020,n,Goto(vmret,1)
  2825.  
  2826. exten => vmu1020,1,Macro(vm,1020,NOANSWER,${IVR_RETVM})
  2827. exten => vmu1020,n,Goto(vmret,1)
  2828.  
  2829. exten => vms1020,1,Macro(vm,1020,NOMESSAGE,${IVR_RETVM})
  2830. exten => vms1020,n,Goto(vmret,1)
  2831.  
  2832. exten => vmi1020,1,Macro(vm,1020,INSTRUCT,${IVR_RETVM})
  2833. exten => vmi1020,n,Goto(vmret,1)
  2834.  
  2835. exten => 1132,1,Set(__RINGTIMER=${IF($["${DB(AMPUSER/1132/ringtimer)}" > "0"]?${DB(AMPUSER/1132/ringtimer)}:${RINGTIMER_DEFAULT})})
  2836. exten => 1132,n,ExecIf($["${REGEX("from-queue" ${CHANNEL})}"="1" && "${CONTEXT}"="from-internal-xfer"]?Set(__CWIGNORE=))
  2837. exten => 1132,n,Macro(exten-vm,1132,1132,0,0,0)
  2838. exten => 1132,n(dest),Set(__PICKUPMARK=)
  2839. exten => 1132,n,Macro(vm,1132,${DIALSTATUS},${IVR_RETVM})
  2840. exten => 1132,n,Goto(vmret,1)
  2841. exten => 1132,hint,PJSIP/1132&Custom:DND1132,CustomPresence:1132
  2842.  
  2843. exten => vmb1132,1,Macro(vm,1132,BUSY,${IVR_RETVM})
  2844. exten => vmb1132,n,Goto(vmret,1)
  2845.  
  2846. exten => vmu1132,1,Macro(vm,1132,NOANSWER,${IVR_RETVM})
  2847. exten => vmu1132,n,Goto(vmret,1)
  2848.  
  2849. exten => vms1132,1,Macro(vm,1132,NOMESSAGE,${IVR_RETVM})
  2850. exten => vms1132,n,Goto(vmret,1)
  2851.  
  2852. exten => vmi1132,1,Macro(vm,1132,INSTRUCT,${IVR_RETVM})
  2853. exten => vmi1132,n,Goto(vmret,1)
  2854.  
  2855. exten => 1192,1,Set(__RINGTIMER=${IF($["${DB(AMPUSER/1192/ringtimer)}" > "0"]?${DB(AMPUSER/1192/ringtimer)}:${RINGTIMER_DEFAULT})})
  2856. exten => 1192,n,ExecIf($["${REGEX("from-queue" ${CHANNEL})}"="1" && "${CONTEXT}"="from-internal-xfer"]?Set(__CWIGNORE=))
  2857. exten => 1192,n,Macro(exten-vm,novm,1192,0,0,0)
  2858. exten => 1192,n(dest),Set(__PICKUPMARK=)
  2859. exten => 1192,n,GotoIf($["${IVR_CONTEXT}" != ""]?${IVR_CONTEXT},return,1)
  2860. exten => 1192,hint,PJSIP/1192&Custom:DND1192,CustomPresence:1192
  2861.  
  2862. exten => 1236,1,Set(__RINGTIMER=${IF($["${DB(AMPUSER/1236/ringtimer)}" > "0"]?${DB(AMPUSER/1236/ringtimer)}:${RINGTIMER_DEFAULT})})
  2863. exten => 1236,n,ExecIf($["${REGEX("from-queue" ${CHANNEL})}"="1" && "${CONTEXT}"="from-internal-xfer"]?Set(__CWIGNORE=))
  2864. exten => 1236,n,Macro(exten-vm,novm,1236,0,0,0)
  2865. exten => 1236,n(dest),Set(__PICKUPMARK=)
  2866. exten => 1236,n,GotoIf($["${IVR_CONTEXT}" != ""]?${IVR_CONTEXT},return,1)
  2867. exten => 1236,hint,PJSIP/1236&Custom:DND1236,CustomPresence:1236
  2868.  
  2869. exten => 1392,1,Set(__RINGTIMER=${IF($["${DB(AMPUSER/1392/ringtimer)}" > "0"]?${DB(AMPUSER/1392/ringtimer)}:${RINGTIMER_DEFAULT})})
  2870. exten => 1392,n,ExecIf($["${REGEX("from-queue" ${CHANNEL})}"="1" && "${CONTEXT}"="from-internal-xfer"]?Set(__CWIGNORE=))
  2871. exten => 1392,n,Macro(exten-vm,novm,1392,0,0,0)
  2872. exten => 1392,n(dest),Set(__PICKUPMARK=)
  2873. exten => 1392,n,GotoIf($["${IVR_CONTEXT}" != ""]?${IVR_CONTEXT},return,1)
  2874. exten => 1392,hint,PJSIP/1392&Custom:DND1392,CustomPresence:1392
  2875.  
  2876. exten => 1420,1,Set(__RINGTIMER=${IF($["${DB(AMPUSER/1420/ringtimer)}" > "0"]?${DB(AMPUSER/1420/ringtimer)}:${RINGTIMER_DEFAULT})})
  2877. exten => 1420,n,ExecIf($["${REGEX("from-queue" ${CHANNEL})}"="1" && "${CONTEXT}"="from-internal-xfer"]?Set(__CWIGNORE=))
  2878. exten => 1420,n,Macro(exten-vm,1420,1420,0,0,0)
  2879. exten => 1420,n(dest),Set(__PICKUPMARK=)
  2880. exten => 1420,n,Macro(vm,1420,${DIALSTATUS},${IVR_RETVM})
  2881. exten => 1420,n,Goto(vmret,1)
  2882. exten => 1420,hint,PJSIP/1420&Custom:DND1420,CustomPresence:1420
  2883.  
  2884. exten => vmb1420,1,Macro(vm,1420,BUSY,${IVR_RETVM})
  2885. exten => vmb1420,n,Goto(vmret,1)
  2886.  
  2887. exten => vmu1420,1,Macro(vm,1420,NOANSWER,${IVR_RETVM})
  2888. exten => vmu1420,n,Goto(vmret,1)
  2889.  
  2890. exten => vms1420,1,Macro(vm,1420,NOMESSAGE,${IVR_RETVM})
  2891. exten => vms1420,n,Goto(vmret,1)
  2892.  
  2893. exten => vmi1420,1,Macro(vm,1420,INSTRUCT,${IVR_RETVM})
  2894. exten => vmi1420,n,Goto(vmret,1)
  2895.  
  2896. exten => 1580,1,Set(__RINGTIMER=${IF($["${DB(AMPUSER/1580/ringtimer)}" > "0"]?${DB(AMPUSER/1580/ringtimer)}:${RINGTIMER_DEFAULT})})
  2897. exten => 1580,n,ExecIf($["${REGEX("from-queue" ${CHANNEL})}"="1" && "${CONTEXT}"="from-internal-xfer"]?Set(__CWIGNORE=))
  2898. exten => 1580,n,Macro(exten-vm,1580,1580,0,0,0)
  2899. exten => 1580,n(dest),Set(__PICKUPMARK=)
  2900. exten => 1580,n,Macro(vm,1580,${DIALSTATUS},${IVR_RETVM})
  2901. exten => 1580,n,Goto(vmret,1)
  2902. exten => 1580,hint,PJSIP/1580&Custom:DND1580,CustomPresence:1580
  2903.  
  2904. exten => vmb1580,1,Macro(vm,1580,BUSY,${IVR_RETVM})
  2905. exten => vmb1580,n,Goto(vmret,1)
  2906.  
  2907. exten => vmu1580,1,Macro(vm,1580,NOANSWER,${IVR_RETVM})
  2908. exten => vmu1580,n,Goto(vmret,1)
  2909.  
  2910. exten => vms1580,1,Macro(vm,1580,NOMESSAGE,${IVR_RETVM})
  2911. exten => vms1580,n,Goto(vmret,1)
  2912.  
  2913. exten => vmi1580,1,Macro(vm,1580,INSTRUCT,${IVR_RETVM})
  2914. exten => vmi1580,n,Goto(vmret,1)
  2915.  
  2916. exten => 10000,1,Set(__RINGTIMER=${IF($["${DB(AMPUSER/10000/ringtimer)}" > "0"]?${DB(AMPUSER/10000/ringtimer)}:${RINGTIMER_DEFAULT})})
  2917. exten => 10000,n,ExecIf($["${REGEX("from-queue" ${CHANNEL})}"="1" && "${CONTEXT}"="from-internal-xfer"]?Set(__CWIGNORE=))
  2918. exten => 10000,n,Macro(exten-vm,10000,10000,0,0,0)
  2919. exten => 10000,n(dest),Set(__PICKUPMARK=)
  2920. exten => 10000,n,Macro(vm,10000,${DIALSTATUS},${IVR_RETVM})
  2921. exten => 10000,n,Goto(vmret,1)
  2922. exten => 10000,hint,PJSIP/10000&Custom:DND10000,CustomPresence:10000
  2923.  
  2924. exten => vmb10000,1,Macro(vm,10000,BUSY,${IVR_RETVM})
  2925. exten => vmb10000,n,Goto(vmret,1)
  2926.  
  2927. exten => vmu10000,1,Macro(vm,10000,NOANSWER,${IVR_RETVM})
  2928. exten => vmu10000,n,Goto(vmret,1)
  2929.  
  2930. exten => vms10000,1,Macro(vm,10000,NOMESSAGE,${IVR_RETVM})
  2931. exten => vms10000,n,Goto(vmret,1)
  2932.  
  2933. exten => vmi10000,1,Macro(vm,10000,INSTRUCT,${IVR_RETVM})
  2934. exten => vmi10000,n,Goto(vmret,1)
  2935.  
  2936. exten => 10001,1,Set(__RINGTIMER=${IF($["${DB(AMPUSER/10001/ringtimer)}" > "0"]?${DB(AMPUSER/10001/ringtimer)}:${RINGTIMER_DEFAULT})})
  2937. exten => 10001,n,ExecIf($["${REGEX("from-queue" ${CHANNEL})}"="1" && "${CONTEXT}"="from-internal-xfer"]?Set(__CWIGNORE=))
  2938. exten => 10001,n,Macro(exten-vm,10001,10001,0,0,0)
  2939. exten => 10001,n(dest),Set(__PICKUPMARK=)
  2940. exten => 10001,n,Macro(vm,10001,${DIALSTATUS},${IVR_RETVM})
  2941. exten => 10001,n,Goto(vmret,1)
  2942. exten => 10001,hint,&Custom:DND10001,CustomPresence:10001
  2943.  
  2944. exten => vmb10001,1,Macro(vm,10001,BUSY,${IVR_RETVM})
  2945. exten => vmb10001,n,Goto(vmret,1)
  2946.  
  2947. exten => vmu10001,1,Macro(vm,10001,NOANSWER,${IVR_RETVM})
  2948. exten => vmu10001,n,Goto(vmret,1)
  2949.  
  2950. exten => vms10001,1,Macro(vm,10001,NOMESSAGE,${IVR_RETVM})
  2951. exten => vms10001,n,Goto(vmret,1)
  2952.  
  2953. exten => vmi10001,1,Macro(vm,10001,INSTRUCT,${IVR_RETVM})
  2954. exten => vmi10001,n,Goto(vmret,1)
  2955.  
  2956. exten => 10002,1,Set(__RINGTIMER=${IF($["${DB(AMPUSER/10002/ringtimer)}" > "0"]?${DB(AMPUSER/10002/ringtimer)}:${RINGTIMER_DEFAULT})})
  2957. exten => 10002,n,ExecIf($["${REGEX("from-queue" ${CHANNEL})}"="1" && "${CONTEXT}"="from-internal-xfer"]?Set(__CWIGNORE=))
  2958. exten => 10002,n,Macro(exten-vm,10002,10002,0,0,0)
  2959. exten => 10002,n(dest),Set(__PICKUPMARK=)
  2960. exten => 10002,n,Macro(vm,10002,${DIALSTATUS},${IVR_RETVM})
  2961. exten => 10002,n,Goto(vmret,1)
  2962. exten => 10002,hint,PJSIP/[email protected]&Custom:DND10002,CustomPresence:10002
  2963.  
  2964. exten => vmb10002,1,Macro(vm,10002,BUSY,${IVR_RETVM})
  2965. exten => vmb10002,n,Goto(vmret,1)
  2966.  
  2967. exten => vmu10002,1,Macro(vm,10002,NOANSWER,${IVR_RETVM})
  2968. exten => vmu10002,n,Goto(vmret,1)
  2969.  
  2970. exten => vms10002,1,Macro(vm,10002,NOMESSAGE,${IVR_RETVM})
  2971. exten => vms10002,n,Goto(vmret,1)
  2972.  
  2973. exten => vmi10002,1,Macro(vm,10002,INSTRUCT,${IVR_RETVM})
  2974. exten => vmi10002,n,Goto(vmret,1)
  2975.  
  2976. exten => 10003,1,Set(__RINGTIMER=${IF($["${DB(AMPUSER/10003/ringtimer)}" > "0"]?${DB(AMPUSER/10003/ringtimer)}:${RINGTIMER_DEFAULT})})
  2977. exten => 10003,n,ExecIf($["${REGEX("from-queue" ${CHANNEL})}"="1" && "${CONTEXT}"="from-internal-xfer"]?Set(__CWIGNORE=))
  2978. exten => 10003,n,Macro(exten-vm,novm,10003,0,0,0)
  2979. exten => 10003,n(dest),Set(__PICKUPMARK=)
  2980. exten => 10003,n,GotoIf($["${IVR_CONTEXT}" != ""]?${IVR_CONTEXT},return,1)
  2981. exten => 10003,hint,PJSIP/10003&Custom:DND10003,CustomPresence:10003
  2982.  
  2983. exten => vmret,1,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?playret)
  2984. exten => vmret,n,Hangup
  2985. exten => vmret,n(playret),Playback(exited-vm-will-be-transfered&silence/1)
  2986. exten => vmret,n,Goto(${IVR_CONTEXT},return,1)
  2987.  
  2988. exten => h,1,Macro(hangupcall,)
  2989.  
  2990. exten => _*80X.,hint,${DB(AMPUSER/${EXTEN:3}/hint)}
  2991. ;--== end of [ext-local] ==--;
  2992.  
  2993.  
  2994. [from-did-direct-ivr]
  2995. include => from-did-direct-ivr-custom
  2996. exten => *10000,1,Set(CONNECTEDLINE(name-charset,i)=utf8)
  2997. exten => *10000,n,Set(CONNECTEDLINE(name,i)=10000 Voicemail)
  2998. exten => *10000,n,Set(CONNECTEDLINE(num,i)=10000)
  2999. exten => *10000,n,Macro(blkvm-clr,)
  3000. exten => *10000,n,Set(__NODEST=)
  3001. exten => *10000,n,Macro(vm,10000,DIRECTDIAL,${IVR_RETVM})
  3002. exten => *10000,n,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?ext-local,vmret,playret)
  3003.  
  3004. exten => *10001,1,Set(CONNECTEDLINE(name-charset,i)=utf8)
  3005. exten => *10001,n,Set(CONNECTEDLINE(name,i)=10001 Voicemail)
  3006. exten => *10001,n,Set(CONNECTEDLINE(num,i)=10001)
  3007. exten => *10001,n,Macro(blkvm-clr,)
  3008. exten => *10001,n,Set(__NODEST=)
  3009. exten => *10001,n,Macro(vm,10001,DIRECTDIAL,${IVR_RETVM})
  3010. exten => *10001,n,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?ext-local,vmret,playret)
  3011.  
  3012. exten => *10002,1,Set(CONNECTEDLINE(name-charset,i)=utf8)
  3013. exten => *10002,n,Set(CONNECTEDLINE(name,i)=10002 Voicemail)
  3014. exten => *10002,n,Set(CONNECTEDLINE(num,i)=10002)
  3015. exten => *10002,n,Macro(blkvm-clr,)
  3016. exten => *10002,n,Set(__NODEST=)
  3017. exten => *10002,n,Macro(vm,10002,DIRECTDIAL,${IVR_RETVM})
  3018. exten => *10002,n,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?ext-local,vmret,playret)
  3019.  
  3020. exten => *1020,1,Set(CONNECTEDLINE(name-charset,i)=utf8)
  3021. exten => *1020,n,Set(CONNECTEDLINE(name,i)=1020 Voicemail)
  3022. exten => *1020,n,Set(CONNECTEDLINE(num,i)=1020)
  3023. exten => *1020,n,Macro(blkvm-clr,)
  3024. exten => *1020,n,Set(__NODEST=)
  3025. exten => *1020,n,Macro(vm,1020,DIRECTDIAL,${IVR_RETVM})
  3026. exten => *1020,n,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?ext-local,vmret,playret)
  3027.  
  3028. exten => *1132,1,Set(CONNECTEDLINE(name-charset,i)=utf8)
  3029. exten => *1132,n,Set(CONNECTEDLINE(name,i)=1132 Voicemail)
  3030. exten => *1132,n,Set(CONNECTEDLINE(num,i)=1132)
  3031. exten => *1132,n,Macro(blkvm-clr,)
  3032. exten => *1132,n,Set(__NODEST=)
  3033. exten => *1132,n,Macro(vm,1132,DIRECTDIAL,${IVR_RETVM})
  3034. exten => *1132,n,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?ext-local,vmret,playret)
  3035.  
  3036. exten => *1420,1,Set(CONNECTEDLINE(name-charset,i)=utf8)
  3037. exten => *1420,n,Set(CONNECTEDLINE(name,i)=1420 Voicemail)
  3038. exten => *1420,n,Set(CONNECTEDLINE(num,i)=1420)
  3039. exten => *1420,n,Macro(blkvm-clr,)
  3040. exten => *1420,n,Set(__NODEST=)
  3041. exten => *1420,n,Macro(vm,1420,DIRECTDIAL,${IVR_RETVM})
  3042. exten => *1420,n,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?ext-local,vmret,playret)
  3043.  
  3044. exten => *1580,1,Set(CONNECTEDLINE(name-charset,i)=utf8)
  3045. exten => *1580,n,Set(CONNECTEDLINE(name,i)=1580 Voicemail)
  3046. exten => *1580,n,Set(CONNECTEDLINE(num,i)=1580)
  3047. exten => *1580,n,Macro(blkvm-clr,)
  3048. exten => *1580,n,Set(__NODEST=)
  3049. exten => *1580,n,Macro(vm,1580,DIRECTDIAL,${IVR_RETVM})
  3050. exten => *1580,n,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?ext-local,vmret,playret)
  3051.  
  3052. exten => _X.,1,GotoIf($[${DIALPLAN_EXISTS(from-did-direct,${EXTEN},1)} = 0]?i,1)
  3053. exten => _X.,n,Macro(blkvm-clr,)
  3054. exten => _X.,n,Set(__NODEST=)
  3055. exten => _X.,n,Goto(from-did-direct,${EXTEN},1)
  3056.  
  3057. ;--== end of [from-did-direct-ivr] ==--;
  3058.  
  3059.  
  3060. [app-dialvm]
  3061. include => app-dialvm-custom
  3062. exten => *98,1,Macro(user-callerid,)
  3063. exten => *98,n,Set(CONNECTEDLINE(name-charset,i)=utf8)
  3064. exten => *98,n,Set(CONNECTEDLINE(name,i)=Dial Voicemail)
  3065. exten => *98,n,Set(CONNECTEDLINE(num,i)=${EXTEN})
  3066. exten => *98,n,Answer
  3067. exten => *98,n(start),Wait(1)
  3068. exten => *98,n,Noop(app-dialvm: Asking for mailbox)
  3069. exten => *98,n,Read(MAILBOX,vm-login,,,3,2)
  3070. exten => *98,n(check),GotoIf($["${MAILBOX}" = ""]?hangup)
  3071. exten => *98,n,Noop(app-dialvm: Got Mailbox ${MAILBOX})
  3072. exten => *98,n,Macro(get-vmcontext,${MAILBOX})
  3073. exten => *98,n,Set(VMBOXEXISTSSTATUS=${IF(${VM_INFO(${MAILBOX}@${VMCONTEXT},exists)}?SUCCESS:FAILED)})
  3074. exten => *98,n,GotoIf($["${VMBOXEXISTSSTATUS}" = "SUCCESS"]?good:bad)
  3075. exten => *98,n,Macro(hangupcall,)
  3076. exten => *98,n(good),Noop(app-dialvm: Good mailbox ${MAILBOX}@${VMCONTEXT})
  3077. exten => *98,n,VoiceMailMain(${MAILBOX}@${VMCONTEXT})
  3078. exten => *98,n,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?playret)
  3079. exten => *98,n,Macro(hangupcall,)
  3080. exten => *98,n(bad),Noop(app-dialvm: BAD mailbox ${MAILBOX}@${VMCONTEXT})
  3081. exten => *98,n,Wait(1)
  3082. exten => *98,n,Noop(app-dialvm: Asking for password so people can't probe for existence of a mailbox)
  3083. exten => *98,n,Read(FAKEPW,vm-password,,,3,2)
  3084. exten => *98,n,Noop(app-dialvm: Asking for mailbox again)
  3085. exten => *98,n,Read(MAILBOX,vm-incorrect-mailbox,,,3,2)
  3086. exten => *98,n,Goto(check)
  3087. exten => *98,n,Macro(hangupcall,)
  3088. exten => *98,n(hangup),Playback(vm-incorrect&vm-goodbye)
  3089. exten => *98,n,Macro(hangupcall,)
  3090. exten => *98,n(playret),Playback(beep&you-will-be-transfered-menu&silence/1)
  3091. exten => *98,n,Goto(${IVR_CONTEXT},return,1)
  3092.  
  3093. exten => *9810000,1,Goto(dvm${EXTEN:3},1)
  3094.  
  3095. exten => *9810001,1,Goto(dvm${EXTEN:3},1)
  3096.  
  3097. exten => *9810002,1,Goto(dvm${EXTEN:3},1)
  3098.  
  3099. exten => *981020,1,Goto(dvm${EXTEN:3},1)
  3100.  
  3101. exten => *981132,1,Goto(dvm${EXTEN:3},1)
  3102.  
  3103. exten => *981420,1,Goto(dvm${EXTEN:3},1)
  3104.  
  3105. exten => *981580,1,Goto(dvm${EXTEN:3},1)
  3106.  
  3107. exten => _dvm.,1,Set(CONNECTEDLINE(name-charset,i)=utf8)
  3108. exten => _dvm.,n,Set(CONNECTEDLINE(name,i)=Dial Voicemail)
  3109. exten => _dvm.,n,Set(CONNECTEDLINE(num,i)=${EXTEN:3})
  3110. exten => _dvm.,n,Answer
  3111. exten => _dvm.,n,Wait(1)
  3112. exten => _dvm.,n,Macro(get-vmcontext,${EXTEN:3})
  3113. exten => _dvm.,n,VoiceMailMain(${EXTEN:3}@${VMCONTEXT})
  3114. exten => _dvm.,n,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?${IVR_CONTEXT},return,1)
  3115. exten => _dvm.,n,Macro(hangupcall,)
  3116.  
  3117. exten => _*98X.,hint,MWI:${EXTEN:3}@${DB(AMPUSER/${EXTEN:3}/voicemail)}
  3118. ;--== end of [app-dialvm] ==--;
  3119.  
  3120.  
  3121. [app-allowlist]
  3122. include => app-allowlist-custom
  3123. exten => s,1,Macro(user-callerid,)
  3124.  
  3125. exten => *38,1,Goto(app-allowlist-add,s,1)
  3126.  
  3127. exten => *39,1,Goto(app-allowlist-remove,s,1)
  3128.  
  3129. exten => *40,1,Goto(app-allowlist-last,s,1)
  3130.  
  3131. exten => *41,1,Goto(app-allowlist-pause-toggle,s,1)
  3132.  
  3133. ;--== end of [app-allowlist] ==--;
  3134.  
  3135.  
  3136. [app-allowlist-check]
  3137. include => app-allowlist-check-custom
  3138. exten => s,1,GosubIf($[${DIALPLAN_EXISTS(app-allowlist-check-predial-hook,s,1)}]?app-allowlist-check-predial-hook,s,1())
  3139. exten => s,n,GotoIf($["${callerallowed}"="1"]?returnto)
  3140. exten => s,n,Gosub(app-allowlist-pause-check,s,1())
  3141. exten => s,n,GotoIf($["${DB_EXISTS(allowlist/pause)}"="1"]?returnto)
  3142. exten => s,n(check-list),GotoIf($["${DB_EXISTS(allowlist/${CALLERID(num)})}"="0"]?check-contacts)
  3143. exten => s,n,Set(CALLED_ALLOWLIST=1)
  3144. exten => s,n,Return()
  3145. exten => s,n(check-contacts),GotoIf($["${DB_EXISTS(allowlist/knowncallers)}" = "0"]?nonallowlisted)
  3146. exten => s,n,AGI(agi://127.0.0.1/allowlist-check.agi,"allowlisted")
  3147. exten => s,n,GotoIf($["${allowlisted}"="false"]?nonallowlisted)
  3148. exten => s,n,Set(CALLED_ALLOWLIST=1)
  3149. exten => s,n,Return()
  3150. exten => s,n(nonallowlisted),Noop(Caller does not apper on allowlists)
  3151. exten => s,n,Set(ALDEST=${DB(allowlist/dest)})
  3152. exten => s,n,ExecIf($["${ALDEST}"=""]?Set(ALDEST=app-blackhole,hangup,1))
  3153. exten => s,n,GotoIf($["${alreturnhere}"="1"]?returnto)
  3154. exten => s,n,GotoIf(${LEN(${ALDEST})}?${ALDEST}:app-blackhole,zapateller,1)
  3155. exten => s,n(returnto),Return()
  3156.  
  3157. ;--== end of [app-allowlist-check] ==--;
  3158.  
  3159.  
  3160. [app-allowlist-add]
  3161. include => app-allowlist-add-custom
  3162. exten => s,1,Answer
  3163. exten => s,n,Macro(user-callerid,)
  3164. exten => s,n,Wait(1)
  3165. exten => s,n,Set(NumLoops=0)
  3166. exten => s,n(start),Set(TIMEOUT(digit)=5)
  3167. exten => s,n,Set(TIMEOUT(response)=10)
  3168. exten => s,n,Read(allownr,enter-num-whitelist&vm-then-pound,,,,)
  3169. exten => s,n,SayDigits(${allownr})
  3170. exten => s,n,GosubIf($[${DIALPLAN_EXISTS(app-allowlist-add,${CHANNEL(language)})}]?app-allowlist-add,${CHANNEL(language)},1():app-allowlist-add,en,1())
  3171. exten => s,n,GotoIf($[ "${confirm}" = "1" ]?app-allowlist-add,1,1)
  3172. exten => s,n,GotoIf($[ "${confirm}" = "2" ]?app-allowlist-add,2,1)
  3173. exten => s,n,Goto(app-allowlist-add-invalid,s,1)
  3174.  
  3175. exten => en,1,Set(TIMEOUT(digit)=1)
  3176. exten => en,n,Read(confirm,if-correct-press&digits/1&to-enter-a-diff-number&press&digits/2,,,,)
  3177. exten => en,n,Return()
  3178.  
  3179. exten => ja,1,Set(TIMEOUT(digit)=1)
  3180. exten => ja,n,Read(if-correct-press&digits/1&pleasepress,,,,,)
  3181. exten => ja,n,Return()
  3182.  
  3183. exten => 1,1,GotoIf($[ "${allownr}" != ""]?:app-allowlist-add-invalid,s,1)
  3184. exten => 1,n,Set(DB(allowlist/${allownr})=1)
  3185. exten => 1,n,Playback(num-was-successfully&added)
  3186. exten => 1,n,Wait(1)
  3187. exten => 1,n,Hangup
  3188.  
  3189. exten => 2,1,Set(NumLoops=$[${NumLoops} + 1])
  3190. exten => 2,n,GotoIf($[${NumLoops} < 3]?app-allowlist-add,s,start)
  3191. exten => 2,n,Playback(sorry-youre-having-problems&goodbye)
  3192. exten => 2,n,Hangup
  3193.  
  3194. ;--== end of [app-allowlist-add] ==--;
  3195.  
  3196.  
  3197. [app-allowlist-add-invalid]
  3198. include => app-allowlist-add-invalid-custom
  3199. exten => s,1,Set(NumLoops=$[${NumLoops} + 1])
  3200. exten => s,n,Playback(pm-invalid-option)
  3201. exten => s,n,GotoIf($[${NumLoops} < 3]?app-allowlist-add,s,start)
  3202. exten => s,n,Playback(sorry-youre-having-problems&goodbye)
  3203. exten => s,n,Hangup
  3204.  
  3205. ;--== end of [app-allowlist-add-invalid] ==--;
  3206.  
  3207.  
  3208. [app-allowlist-remove]
  3209. include => app-allowlist-remove-custom
  3210. exten => s,1,Answer
  3211. exten => s,n,Macro(user-callerid,)
  3212. exten => s,n,Set(NumLoops=0)
  3213. exten => s,n,Wait(1)
  3214. exten => s,n(start),Set(TIMEOUT(digit)=5)
  3215. exten => s,n,Set(TIMEOUT(response)=10)
  3216. exten => s,n,Read(allownr,entr-num-rmv-allowlist&vm-then-pound,,,,)
  3217. exten => s,n,SayDigits(${allownr})
  3218. exten => s,n,GosubIf($[${DIALPLAN_EXISTS(app-allowlist-remove,${CHANNEL(language)})}]?app-allowlist-remove,${CHANNEL(language)},1():app-allowlist-remove,en,1())
  3219. exten => s,n,GotoIf($[ "${confirm}" = "1" ]?app-allowlist-remove,1,1)
  3220. exten => s,n,GotoIf($[ "${confirm}" = "2" ]?app-allowlist-remove,2,1)
  3221. exten => s,n,Goto(app-allowlist-add-invalid,s,1)
  3222.  
  3223. exten => en,1,Set(TIMEOUT(digit)=1)
  3224. exten => en,n,Read(confirm,if-correct-press&digits/1&to-enter-a-diff-number&press&digits/2,,,,)
  3225. exten => en,n,Return()
  3226.  
  3227. exten => ja,1,Set(TIMEOUT(digit)=1)
  3228. exten => ja,n,Read(confirm,if-correct-press&digits/1&pleasepress,,,,)
  3229. exten => ja,n,Return()
  3230.  
  3231. exten => 1,1,Noop(Deleting: allowlist/${allownr} ${DB_DELETE(allowlist/${allownr})})
  3232. exten => 1,n,Playback(num-was-successfully&removed)
  3233. exten => 1,n,Wait(1)
  3234. exten => 1,n,Hangup
  3235.  
  3236. exten => 2,1,Set(NumLoops=$[${NumLoops} + 1])
  3237. exten => 2,n,GotoIf($[${NumLoops} < 3]?app-allowlist-remove,s,start)
  3238. exten => 2,n,Playback(goodbye)
  3239. exten => 2,n,Hangup
  3240.  
  3241. ;--== end of [app-allowlist-remove] ==--;
  3242.  
  3243.  
  3244. [app-allowlist-remove-invalid]
  3245. include => app-allowlist-remove-invalid-custom
  3246. exten => s,1,Set(NumLoops=$[${NumLoops} + 1])
  3247. exten => s,n,Playback(pm-invalid-option)
  3248. exten => s,n,GotoIf($[${NumLoops} < 3]?app-allowlist-remove,s,start)
  3249. exten => s,n,Playback(sorry-youre-having-problems&goodbye)
  3250. exten => s,n,Hangup
  3251.  
  3252. ;--== end of [app-allowlist-remove-invalid] ==--;
  3253.  
  3254.  
  3255. [app-allowlist-last]
  3256. include => app-allowlist-last-custom
  3257. exten => s,1,Answer
  3258. exten => s,n,Macro(user-callerid,)
  3259. exten => s,n,Wait(1)
  3260. exten => s,n,Set(lastcaller=${DB(CALLTRACE/${AMPUSER})})
  3261. exten => s,n,GotoIf($[ $[ "${lastcaller}" = "" ] | $[ "${lastcaller}" = "unknown" ] ]?noinfo)
  3262. exten => s,n,Playback(privacy-to-whitelist-last-caller&telephone-number)
  3263. exten => s,n,SayDigits(${lastcaller})
  3264. exten => s,n,Set(TIMEOUT(digit)=1)
  3265. exten => s,n,Set(TIMEOUT(response)=7)
  3266. exten => s,n,GosubIf($[${DIALPLAN_EXISTS(app-allowlist-last,${CHANNEL(language)})}]?app-allowlist-last,${CHANNEL(language)},1():app-allowlist-last,en,1())
  3267. exten => s,n,GotoIf($[ "${confirm}" = "1" ]?app-allowlist-last,1,1)
  3268. exten => s,n,Goto(end)
  3269. exten => s,n(noinfo),Playback(unidentified-no-callback)
  3270. exten => s,n,Hangup
  3271. exten => s,n,Noop(Waiting for input)
  3272. exten => s,n(end),Playback(sorry-youre-having-problems&goodbye)
  3273. exten => s,n,Hangup
  3274.  
  3275. exten => en,1,Read(confirm,if-correct-press&digits/1,,,,)
  3276. exten => en,n,Return()
  3277.  
  3278. exten => ja,1,Read(confirm,if-correct-press&digits/1&pleasepress,,,,)
  3279. exten => ja,n,Return()
  3280.  
  3281. exten => 1,1,Set(DB(allowlist/${lastcaller})=1)
  3282. exten => 1,n,Playback(num-was-successfully)
  3283. exten => 1,n,Playback(added)
  3284. exten => 1,n,Wait(1)
  3285. exten => 1,n,Hangup
  3286.  
  3287. exten => i,1,Playback(sorry-youre-having-problems&goodbye)
  3288. exten => i,n,Hangup
  3289.  
  3290. ;--== end of [app-allowlist-last] ==--;
  3291.  
  3292.  
  3293. [app-allowlist-pause-toggle]
  3294. include => app-allowlist-pause-toggle-custom
  3295. exten => s,1,GosubIf($[${DB_EXISTS(allowlist/pause)}]?app-allowlist-pause-disable,s,1:app-allowlist-pause-enable,s,1())
  3296. exten => s,n,Answer
  3297. exten => s,n,Macro(user-callerid,)
  3298. exten => s,n,Wait(1)
  3299. exten => s,n,GotoIf($[${DB_EXISTS(allowlist/pause)}] ]?paused:unpaused)
  3300. exten => s,n(paused),Playback(dictate/pause&enabled)
  3301. exten => s,n,Hangup
  3302. exten => s,n(unpaused),Playback(dictate/pause&disabled)
  3303. exten => s,n,Hangup
  3304.  
  3305. ;--== end of [app-allowlist-pause-toggle] ==--;
  3306.  
  3307.  
  3308. [app-allowlist-pause-enable]
  3309. include => app-allowlist-pause-enable-custom
  3310. exten => s,1,Noop(Current time ${EPOCH})
  3311. exten => s,n,Set(DB(allowlist/pause)=${MATH(${EPOCH}+86400,int)})
  3312. exten => s,n,Return()
  3313.  
  3314. ;--== end of [app-allowlist-pause-enable] ==--;
  3315.  
  3316.  
  3317. [app-allowlist-pause-disable]
  3318. include => app-allowlist-pause-disable-custom
  3319. exten => s,1,Noop(Deleting: allowlist/pause ${DB_DELETE(allowlist/pause)})
  3320. exten => s,n,Return()
  3321.  
  3322. ;--== end of [app-allowlist-pause-disable] ==--;
  3323.  
  3324.  
  3325. [app-allowlist-pause-check]
  3326. include => app-allowlist-pause-check-custom
  3327. exten => s,1,Noop(Current time ${EPOCH})
  3328. exten => s,n,Noop(Pause timer expire ${DB(allowlist/pause)})
  3329. exten => s,n,GosubIf($[${DB_EXISTS(allowlist/pause)} && "${DB(allowlist/pause)}"<"${EPOCH}"]?app-allowlist-pause-disable,s,1())
  3330. exten => s,n,Return()
  3331.  
  3332. ;--== end of [app-allowlist-pause-check] ==--;
  3333.  
  3334.  
  3335. [app-blacklist]
  3336. include => app-blacklist-custom
  3337. exten => s,1,Macro(user-callerid,)
  3338.  
  3339. exten => *30,1,Goto(app-blacklist-add,s,1)
  3340.  
  3341. exten => *31,1,Goto(app-blacklist-remove,s,1)
  3342.  
  3343. exten => *32,1,Goto(app-blacklist-last,s,1)
  3344.  
  3345. ;--== end of [app-blacklist] ==--;
  3346.  
  3347.  
  3348. [app-blacklist-check]
  3349. include => app-blacklist-check-custom
  3350. exten => s,1(check),GotoIf($["${BLACKLIST()}"="1"]?blacklisted)
  3351. exten => s,n,Set(CALLED_BLACKLIST=1)
  3352. exten => s,n,Return()
  3353. exten => s,n(blacklisted),Answer
  3354. exten => s,n,Set(BLDEST=${DB(blacklist/dest)})
  3355. exten => s,n,ExecIf($["${BLDEST}"=""]?Set(BLDEST=app-blackhole,hangup,1))
  3356. exten => s,n,GotoIf($["${returnhere}"="1"]?returnto)
  3357. exten => s,n,GotoIf(${LEN(${BLDEST})}?${BLDEST}:app-blackhole,zapateller,1)
  3358. exten => s,n(returnto),Return()
  3359.  
  3360. ;--== end of [app-blacklist-check] ==--;
  3361.  
  3362.  
  3363. [app-blacklist-add]
  3364. include => app-blacklist-add-custom
  3365. exten => s,1,Answer
  3366. exten => s,n,Macro(user-callerid,)
  3367. exten => s,n,Wait(1)
  3368. exten => s,n,Set(NumLoops=0)
  3369. exten => s,n(start),Set(TIMEOUT(digit)=5)
  3370. exten => s,n,Set(TIMEOUT(response)=10)
  3371. exten => s,n,Read(blacknr,enter-num-blacklist&vm-then-pound,,,,)
  3372. exten => s,n,SayDigits(${blacknr})
  3373. exten => s,n,GosubIf($[${DIALPLAN_EXISTS(app-blacklist-add,${CHANNEL(language)})}]?app-blacklist-add,${CHANNEL(language)},1():app-blacklist-add,en,1())
  3374. exten => s,n,GotoIf($[ "${confirm}" = "1" ]?app-blacklist-add,1,1)
  3375. exten => s,n,GotoIf($[ "${confirm}" = "2" ]?app-blacklist-add,2,1)
  3376. exten => s,n,Goto(app-blacklist-add-invalid,s,1)
  3377.  
  3378. exten => en,1,Set(TIMEOUT(digit)=1)
  3379. exten => en,n,Read(confirm,if-correct-press&digits/1&to-enter-a-diff-number&press&digits/2,,,,)
  3380. exten => en,n,Return()
  3381.  
  3382. exten => ja,1,Set(TIMEOUT(digit)=1)
  3383. exten => ja,n,Read(if-correct-press&digits/1&pleasepress,,,,,)
  3384. exten => ja,n,Return()
  3385.  
  3386. exten => 1,1,GotoIf($[ "${blacknr}" != ""]?:app-blacklist-add-invalid,s,1)
  3387. exten => 1,n,Set(DB(blacklist/${blacknr})=1)
  3388. exten => 1,n,Playback(num-was-successfully&added)
  3389. exten => 1,n,Wait(1)
  3390. exten => 1,n,Hangup
  3391.  
  3392. exten => 2,1,Set(NumLoops=$[${NumLoops} + 1])
  3393. exten => 2,n,GotoIf($[${NumLoops} < 3]?app-blacklist-add,s,start)
  3394. exten => 2,n,Playback(sorry-youre-having-problems&goodbye)
  3395. exten => 2,n,Hangup
  3396.  
  3397. ;--== end of [app-blacklist-add] ==--;
  3398.  
  3399.  
  3400. [app-blacklist-add-invalid]
  3401. include => app-blacklist-add-invalid-custom
  3402. exten => s,1,Set(NumLoops=$[${NumLoops} + 1])
  3403. exten => s,n,Playback(pm-invalid-option)
  3404. exten => s,n,GotoIf($[${NumLoops} < 3]?app-blacklist-add,s,start)
  3405. exten => s,n,Playback(sorry-youre-having-problems&goodbye)
  3406. exten => s,n,Hangup
  3407.  
  3408. ;--== end of [app-blacklist-add-invalid] ==--;
  3409.  
  3410.  
  3411. [app-blacklist-remove]
  3412. include => app-blacklist-remove-custom
  3413. exten => s,1,Answer
  3414. exten => s,n,Macro(user-callerid,)
  3415. exten => s,n,Set(NumLoops=0)
  3416. exten => s,n,Wait(1)
  3417. exten => s,n(start),Set(TIMEOUT(digit)=5)
  3418. exten => s,n,Set(TIMEOUT(response)=10)
  3419. exten => s,n,Read(blacknr,entr-num-rmv-blklist&vm-then-pound,,,,)
  3420. exten => s,n,SayDigits(${blacknr})
  3421. exten => s,n,GosubIf($[${DIALPLAN_EXISTS(app-blacklist-remove,${CHANNEL(language)})}]?app-blacklist-remove,${CHANNEL(language)},1():app-blacklist-remove,en,1())
  3422. exten => s,n,GotoIf($[ "${confirm}" = "1" ]?app-blacklist-remove,1,1)
  3423. exten => s,n,GotoIf($[ "${confirm}" = "2" ]?app-blacklist-remove,2,1)
  3424. exten => s,n,Goto(app-blacklist-add-invalid,s,1)
  3425.  
  3426. exten => en,1,Set(TIMEOUT(digit)=1)
  3427. exten => en,n,Read(confirm,if-correct-press&digits/1&to-enter-a-diff-number&press&digits/2,,,,)
  3428. exten => en,n,Return()
  3429.  
  3430. exten => ja,1,Set(TIMEOUT(digit)=1)
  3431. exten => ja,n,Read(confirm,if-correct-press&digits/1&pleasepress,,,,)
  3432. exten => ja,n,Return()
  3433.  
  3434. exten => 1,1,Noop(Deleting: blacklist/${blacknr} ${DB_DELETE(blacklist/${blacknr})})
  3435. exten => 1,n,Playback(num-was-successfully&removed)
  3436. exten => 1,n,Wait(1)
  3437. exten => 1,n,Hangup
  3438.  
  3439. exten => 2,1,Set(NumLoops=$[${NumLoops} + 1])
  3440. exten => 2,n,GotoIf($[${NumLoops} < 3]?app-blacklist-remove,s,start)
  3441. exten => 2,n,Playback(goodbye)
  3442. exten => 2,n,Hangup
  3443.  
  3444. ;--== end of [app-blacklist-remove] ==--;
  3445.  
  3446.  
  3447. [app-blacklist-remove-invalid]
  3448. include => app-blacklist-remove-invalid-custom
  3449. exten => s,1,Set(NumLoops=$[${NumLoops} + 1])
  3450. exten => s,n,Playback(pm-invalid-option)
  3451. exten => s,n,GotoIf($[${NumLoops} < 3]?app-blacklist-remove,s,start)
  3452. exten => s,n,Playback(sorry-youre-having-problems&goodbye)
  3453. exten => s,n,Hangup
  3454.  
  3455. ;--== end of [app-blacklist-remove-invalid] ==--;
  3456.  
  3457.  
  3458. [app-blacklist-last]
  3459. include => app-blacklist-last-custom
  3460. exten => s,1,Answer
  3461. exten => s,n,Macro(user-callerid,)
  3462. exten => s,n,Wait(1)
  3463. exten => s,n,Set(lastcaller=${DB(CALLTRACE/${AMPUSER})})
  3464. exten => s,n,GotoIf($[ $[ "${lastcaller}" = "" ] | $[ "${lastcaller}" = "unknown" ] ]?noinfo)
  3465. exten => s,n,Playback(privacy-to-blacklist-last-caller&telephone-number)
  3466. exten => s,n,SayDigits(${lastcaller})
  3467. exten => s,n,Set(TIMEOUT(digit)=1)
  3468. exten => s,n,Set(TIMEOUT(response)=7)
  3469. exten => s,n,GosubIf($[${DIALPLAN_EXISTS(app-blacklist-last,${CHANNEL(language)})}]?app-blacklist-last,${CHANNEL(language)},1():app-blacklist-last,en,1())
  3470. exten => s,n,GotoIf($[ "${confirm}" = "1" ]?app-blacklist-last,1,1)
  3471. exten => s,n,Goto(end)
  3472. exten => s,n(noinfo),Playback(unidentified-no-callback)
  3473. exten => s,n,Hangup
  3474. exten => s,n,Noop(Waiting for input)
  3475. exten => s,n(end),Playback(sorry-youre-having-problems&goodbye)
  3476. exten => s,n,Hangup
  3477.  
  3478. exten => en,1,Read(confirm,if-correct-press&digits/1,,,,)
  3479. exten => en,n,Return()
  3480.  
  3481. exten => ja,1,Read(confirm,if-correct-press&digits/1&pleasepress,,,,)
  3482. exten => ja,n,Return()
  3483.  
  3484. exten => 1,1,Set(DB(blacklist/${lastcaller})=1)
  3485. exten => 1,n,Playback(num-was-successfully)
  3486. exten => 1,n,Playback(added)
  3487. exten => 1,n,Wait(1)
  3488. exten => 1,n,Hangup
  3489.  
  3490. exten => i,1,Playback(sorry-youre-having-problems&goodbye)
  3491. exten => i,n,Hangup
  3492.  
  3493. ;--== end of [app-blacklist-last] ==--;
  3494.  
  3495.  
  3496. [app-contactmanager-sd]
  3497. include => app-contactmanager-sd-custom
  3498. exten => _*10X!,1,Answer
  3499. exten => _*10X!,n,Macro(user-callerid,)
  3500. exten => _*10X!,n,GotoIf($[${DB_EXISTS(CM/speeddial/${EXTEN:3})}=1]?from-internal,${DB(CM/speeddial/${EXTEN:3})},1)
  3501. exten => _*10X!,n,Goto(bad-number,s,1)
  3502.  
  3503. ;--== end of [app-contactmanager-sd] ==--;
  3504.  
  3505.  
  3506. [app-userlogonoff]
  3507. include => app-userlogonoff-custom
  3508. exten => *12,1,Macro(user-logoff,)
  3509. exten => *12,n(hook_off),Hangup
  3510.  
  3511. exten => *11,1,Macro(user-logon,)
  3512. exten => *11,n(hook_on_1),Hangup
  3513.  
  3514. exten => _*11.,1,Macro(user-logon,${EXTEN:3},)
  3515. exten => _*11.,n(hook_on_2),Hangup
  3516.  
  3517. ;--== end of [app-userlogonoff] ==--;
  3518.  
  3519.  
  3520. [macro-dial]
  3521. include => macro-dial-custom
  3522. exten => s,1,Noop(Blind Transfer: ${BLINDTRANSFER}, Attended Transfer: ${ATTENDEDTRANSFER}, User: ${AMPUSER}, Alert Info: ${ALERT_INFO})
  3523. exten => s,n,Set(__CRM_SOURCE=${CALLERID(num)})
  3524. exten => s,n,ExecIf($["${ALERT_INFO}"="" & ${LEN(${AMPUSER})}!=0 & ${LEN(${BLINDTRANSFER})}=0 & ${LEN(${ATTENDEDTRANSFER})}=0]?Set(ALERT_INFO=))
  3525. exten => s,n,ExecIf($[${LEN(${BLINDTRANSFER})}!=0]?Set(ALERT_INFO=))
  3526. exten => s,n,ExecIf($[${LEN(${ATTENDEDTRANSFER})}!=0]?Set(ALERT_INFO=))
  3527. exten => s,n,ExecIf($[("${MOHCLASS}"!="default") & ("${MOHCLASS}"!="")]?Set(CHANNEL(musicclass)=${MOHCLASS}))
  3528. exten => s,n(dial),AGI(agi://127.0.0.1/dialparties.agi)
  3529. exten => s,n,GotoIf($["${MACRODIALGOTO_PRI}"!=""]?${MACRODIALGOTO_PRI})
  3530. exten => s,n,Noop(Returned from dialparties with no extensions to call and DIALSTATUS: ${DIALSTATUS})
  3531. exten => s,n,MacroExit()
  3532. exten => s,n(normdial),Noop(Returned from dialparties with groups to dial)
  3533. exten => s,n,Noop(ringall array ${FMGL_DIAL} )
  3534. exten => s,n,Noop(ds= ${ds} )
  3535. exten => s,n,Noop(dsextra= ${dsextra})
  3536. exten => s,n,Set(ds=${ds}${dsextra})
  3537. exten => s,n,Noop(ds= ${ds})
  3538. exten => s,n,Set(__FMGL_DIAL=${FMGL_DIAL})
  3539. exten => s,n,Set(LOOPCNT=${FIELDQTY(FILTERED_DIAL,-)})
  3540. exten => s,n,Set(ITER=1)
  3541. exten => s,n(ndloopbegin),Set(__EXTTOCALL=${CUT(FILTERED_DIAL,-,${ITER})})
  3542. exten => s,n,Noop(Working with ${EXTTOCALL})
  3543. exten => s,n,ExecIf($["${RVOL}"!=""]?Set(HASH(__SIPHEADERS,Alert-Info)=${IF($["${ALERT_INFO}"!=""]?${ALERT_INFO}:Normal)}\;volume=${RVOL}))
  3544. exten => s,n,ExecIf($["${RVOL}"="" & "${DB(AMPUSER/${EXTTOCALL}/rvolume)}" != ""]?Set(HASH(__SIPHEADERS,Alert-Info)=${IF($["${ALERT_INFO}"!=""]?${ALERT_INFO}:Normal)}\;volume=${DB(AMPUSER/${EXTTOCALL}/rvolume)}))
  3545. exten => s,n,Set(ITER=$[${ITER}+1])
  3546. exten => s,n,GotoIf($[${ITER}<=${LOOPCNT}]?ndloopbegin)
  3547. exten => s,n,Macro(dial-ringall-predial-hook,)
  3548. exten => s,n,ExecIf($["${DB(AMPUSER/${EXTTOCALL}/cwtone)}" = "enabled" & "${EXTENSION_STATE(${EXTTOCALL})}" = "INUSE"]?Set(CWRING=r(callwaiting)):Set(CWRING=))
  3549. exten => s,n,ExecIf($["${ivrreturn}" = "1"]?Set(ds=${ds}g))
  3550. exten => s,n(nddialapp),Dial(${ds}${CWRING}b(func-apply-sipheaders^s^1),)
  3551. exten => s,n,Set(DIALSTATUS=${IF($["${DIALSTATUS_CW}"!="" ]?${DIALSTATUS_CW}:${DIALSTATUS})})
  3552. exten => s,n,GosubIf($[("${SCREEN}" != "" & ("${DIALSTATUS}" = "TORTURE" | "${DIALSTATUS}" = "DONTCALL")) | "${DIALSTATUS}" = "ANSWER"]?${DIALSTATUS},1())
  3553. exten => s,n(groupnoanswer),Noop(Returning since nobody answered)
  3554. exten => s,n,MacroExit()
  3555. exten => s,n(huntdial),Noop(Returned from dialparties with ${HuntMembers} hunt members to dial)
  3556. exten => s,n,Set(HuntLoop=0)
  3557. exten => s,n,ExecIf($[${LEN(${HuntMembers})}=0]?Set(HuntMembers=0))
  3558. exten => s,n(a22),GotoIf($[${HuntMembers} >= 1]?a30)
  3559. exten => s,n(huntnoanswer),Noop(Returning as there are no members left in the hunt group to ring)
  3560. exten => s,n,MacroExit()
  3561. exten => s,n(a30),Set(HuntMember=HuntMember${HuntLoop})
  3562. exten => s,n,GotoIf($[$["${CALLTRACE_HUNT}" != "" ] & $[$["${RingGroupMethod}" = "hunt" ] | $["${RingGroupMethod}" = "firstavailable"] | $["${RingGroupMethod}" = "firstnotonphone"]]]?a32:a35)
  3563. exten => s,n(a32),Set(CT_EXTEN=${CUT(FILTERED_DIAL,,$[${HuntLoop} + 1])})
  3564. exten => s,n,Set(__EXTTOCALL=${CT_EXTEN})
  3565. exten => s,n,Set(__PICKUPMARK=${CT_EXTEN})
  3566. exten => s,n,Set(DB(CALLTRACE/${CT_EXTEN})=${CALLTRACE_HUNT})
  3567. exten => s,n,Goto(s,huntstart)
  3568. exten => s,n(a35),GotoIf($[$["${CALLTRACE_HUNT}" != "" ] & $["${RingGroupMethod}" = "memoryhunt" ]]?a36:a50)
  3569. exten => s,n(a36),Set(CTLoop=0)
  3570. exten => s,n(a37),GotoIf($[${CTLoop} > ${HuntLoop}]?huntstart)
  3571. exten => s,n,Set(CT_EXTEN=${CUT(FILTERED_DIAL,,$[${CTLoop} + 1])})
  3572. exten => s,n,Set(__EXTTOCALL=${CT_EXTEN})
  3573. exten => s,n,Set(DB(CALLTRACE/${CT_EXTEN})=${CALLTRACE_HUNT})
  3574. exten => s,n,Set(CTLoop=$[1 + ${CTLoop}])
  3575. exten => s,n,Goto(s,a37)
  3576. exten => s,n(huntstart),Noop(Hunt Dial Start)
  3577. exten => s,n,ExecIf($["${RVOL}"!=""]?Set(HASH(__SIPHEADERS,Alert-Info)=${IF($["${ALERT_INFO}"!=""]?${ALERT_INFO}:Normal)}\;volume=${RVOL}))
  3578. exten => s,n,ExecIf($["${RVOL}"="" & "${DB(AMPUSER/${EXTTOCALL}/rvolume)}" != ""]?Set(HASH(__SIPHEADERS,Alert-Info)=${IF($["${ALERT_INFO}"!=""]?${ALERT_INFO}:Normal)}\;volume=${DB(AMPUSER/${EXTTOCALL}/rvolume)}))
  3579. exten => s,n,Macro(dial-hunt-predial-hook,)
  3580. exten => s,n,ExecIf($["${DB(AMPUSER/${EXTTOCALL}/cwtone)}" = "enabled" & "${EXTENSION_STATE(${EXTTOCALL})}" = "INUSE"]?Set(CWRING=r(callwaiting)):Set(CWRING=))
  3581. exten => s,n,ExecIf($["${ivrreturn}" = "1"]?Set(ds=${ds}g))
  3582. exten => s,n(hsdialapp),Dial(${${HuntMember}}${ds}${CWRING}b(func-apply-sipheaders^s^1),)
  3583. exten => s,n,GotoIf($["${DIALSTATUS}" = "ANSWER"]?ANSWER,1)
  3584. exten => s,n,Set(HuntLoop=$[1 + ${HuntLoop}])
  3585. exten => s,n,GotoIf($[$["${RingGroupMethod}" = "firstavailable"] | $["${RingGroupMethod}" = "firstnotonphone"]] & $[$["${DIALSTATUS}" != "CHANUNAVAIL"] & $["${DIALSTATUS}" != "CONGESTION"]]]?huntreset:a46)
  3586. exten => s,n(huntreset),Set(HuntMembers=1)
  3587. exten => s,n(a46),Set(HuntMembers=$[${HuntMembers} - 1])
  3588. exten => s,n,Goto(s,a22)
  3589. exten => s,n(a50),ExecIf($["${CT_EXTEN}"!=""]?Noop(Deleting: CALLTRACE/${CT_EXTEN} ${DB_DELETE(CALLTRACE/${CT_EXTEN})}))
  3590. exten => s,n,Goto(s,huntstart)
  3591. exten => s,n,GotoIf($["${ZULU_RAW_TYPE}"!="Sangomacrm-url"]?ndcrm-save)
  3592. exten => s,n,AGI(agi://127.0.0.1/sangomacrm.agi,true)
  3593. exten => s,n,Goto(ndzulu-event)
  3594. exten => s,n(ndcrm-save),AGI(agi://127.0.0.1/sangomacrm.agi)
  3595. exten => s,n,GotoIf($["${ZULU_RAW_TYPE}"!="Sangomacrm-url"]?hscrm-save)
  3596. exten => s,n,AGI(agi://127.0.0.1/sangomacrm.agi,true)
  3597. exten => s,n,Goto(hszulu-event)
  3598. exten => s,n(hscrm-save),AGI(agi://127.0.0.1/sangomacrm.agi)
  3599.  
  3600. exten => NOANSWER,1,Macro(vm,${SCREEN_EXTEN},BUSY,${IVR_RETVM})
  3601. exten => NOANSWER,n,GotoIf($["${IVR_RETVM}" != "RETURN" | "${IVR_CONTEXT}" = ""]?bye)
  3602. exten => NOANSWER,n,Return()
  3603. exten => NOANSWER,n,GotoIf($["${ivrreturn}" = "1"]?${IVR_CONTEXT},return,1)
  3604. exten => NOANSWER,n(bye),Noop(checking something else to do ?${ivrreturn}? IVR return!!)
  3605. exten => NOANSWER,n,Macro(hangupcall,)
  3606.  
  3607. exten => TORTURE,1,Goto(app-blackhole,musiconhold,1)
  3608. exten => TORTURE,n,Macro(hangupcall,)
  3609.  
  3610. exten => DONTCALL,1,Answer
  3611. exten => DONTCALL,n,Wait(1)
  3612. exten => DONTCALL,n,Zapateller()
  3613. exten => DONTCALL,n,Playback(ss-noservice)
  3614. exten => DONTCALL,n,Macro(hangupcall,)
  3615.  
  3616. exten => ANSWER,1(answered),Noop(Call successfully answered - Hanging up now)
  3617. exten => ANSWER,n,GotoIf($["${CALLER_DEST}"!=""&&"${DIALSTATUS}"="ANSWER"]?${CUT(CALLER_DEST,^,1)},${CUT(CALLER_DEST,^,2)},${CUT(CALLER_DEST,^,3)})
  3618. exten => ANSWER,n,GotoIf($["${ivrreturn}" = "1"]?${IVR_CONTEXT},return,1)
  3619. exten => ANSWER,n(bye),Noop(checking something else to do ?${ivrreturn}? IVR return!!)
  3620. exten => ANSWER,n,Macro(hangupcall,)
  3621.  
  3622. exten => h,1,Macro(hangupcall,)
  3623.  
  3624. ;--== end of [macro-dial] ==--;
  3625.  
  3626.  
  3627. [ext-local-confirm]
  3628. include => ext-local-confirm-custom
  3629. exten => _LC-.,1,ExecIf($["${DIRECTION}" = "INBOUND"]?Set(DIAL_OPTIONS=${STRREPLACE(DIAL_OPTIONS,T)}))
  3630. exten => _LC-.,n,Set(THISDIAL=${DB(DEVICE/${EXTEN:3}/dial)})
  3631. exten => _LC-.,n,GotoIf($["${THISDIAL:0:5}"!="PJSIP"]?dial)
  3632. exten => _LC-.,n,Noop(Debug: Found PJSIP Destination ${THISDIAL}, updating with PJSIP_DIAL_CONTACTS)
  3633. exten => _LC-.,n,Set(THISDIAL=${PJSIP_DIAL_CONTACTS(${EXTEN:3})})
  3634. exten => _LC-.,n(dial),Dial(${THISDIAL},${RT},${DIAL_OPTIONS}M(auto-confirm^${RG_IDX})b(func-apply-sipheaders^s^1))
  3635.  
  3636. ;--== end of [ext-local-confirm] ==--;
  3637.  
  3638.  
  3639. [findmefollow-ringallv2]
  3640. include => findmefollow-ringallv2-custom
  3641. exten => _FMPR-.,1,Set(CDR_PROP(disable)=true)
  3642. exten => _FMPR-.,n,Set(RingGroupMethod=)
  3643. exten => _FMPR-.,n,Set(USE_CONFIRMATION=)
  3644. exten => _FMPR-.,n,Set(RINGGROUP_INDEX=)
  3645. exten => _FMPR-.,n,Macro(simple-dial,${EXTEN:5},${FMREALPRERING})
  3646. exten => _FMPR-.,n,ExecIf($["${DIALSTATUS}" = "BUSY"]?Set(SHARED(FM_DND,${FMUNIQUE})=DND))
  3647. exten => _FMPR-.,n,Hangup
  3648.  
  3649. exten => _FMGL-.,1,Set(CDR_PROP(disable)=true)
  3650. exten => _FMGL-.,n,Set(DIALNUMS=${IF($[${LEN(${FMGL_DIAL})}>0]?${FMGL_DIAL}:${EXTEN:5})})
  3651. exten => _FMGL-.,n,Set(ENDLOOP=$[${EPOCH} + ${FMPRERING} + 2])
  3652. exten => _FMGL-.,n(start),GotoIf($["${SHARED(FM_DND,${FMUNIQUE})}" = "DND"]?dodnd)
  3653. exten => _FMGL-.,n,Wait(1)
  3654. exten => _FMGL-.,n,GotoIf($[${EPOCH} < ${ENDLOOP}]?start)
  3655. exten => _FMGL-.,n,Set(SHARED(FM_DND,${FMUNIQUE})=)
  3656. exten => _FMGL-.,n(dodial),Macro(dial,${FMGRPTIME},${DIAL_OPTIONS},${DIALNUMS})
  3657. exten => _FMGL-.,n,Hangup
  3658. exten => _FMGL-.,n+10(dodnd),Set(SHARED(FM_DND,${FMUNIQUE})=)
  3659. exten => _FMGL-.,n,GotoIf($["${FMPRIME}" = "FALSE"]?dodial)
  3660. exten => _FMGL-.,n,Hangup
  3661.  
  3662. ;--== end of [findmefollow-ringallv2] ==--;
  3663.  
  3664.  
  3665. [app-chanspy]
  3666. include => app-chanspy-custom
  3667. exten => 555,1,Macro(user-callerid,)
  3668. exten => 555,n,Answer
  3669. exten => 555,n,Wait(1)
  3670. exten => 555,n,ChanSpy()
  3671. exten => 555,n,Hangup
  3672.  
  3673. ;--== end of [app-chanspy] ==--;
  3674.  
  3675.  
  3676. [ext-test]
  3677. include => ext-test-custom
  3678. exten => 7777,1,Macro(user-callerid,)
  3679. exten => 7777,n,Goto(from-pstn,${EXTEN},1)
  3680.  
  3681. exten => h,1,Macro(hangupcall,)
  3682.  
  3683. ;--== end of [ext-test] ==--;
  3684.  
  3685.  
  3686. [ext-did]
  3687. include => ext-did-custom
  3688. include => ext-did-0001
  3689. include => ext-did-0002
  3690. exten => foo,1,Noop(bar)
  3691.  
  3692. ;--== end of [ext-did] ==--;
  3693.  
  3694.  
  3695. [ext-did-catchall]
  3696. include => ext-did-catchall-custom
  3697. exten => s,1,Noop(No DID or CID Match)
  3698. exten => s,n(a2),Answer
  3699. exten => s,n,Log(WARNING,Friendly Scanner from ${CUT(CUT(SIP_HEADER(Via), ,2),:,1)})
  3700. exten => s,n,Wait(2)
  3701. exten => s,n,Playback(ss-noservice)
  3702. exten => s,n,SayAlpha(${FROM_DID})
  3703. exten => s,n,Hangup
  3704.  
  3705. exten => _.,1,Set(__FROM_DID=${EXTEN})
  3706. exten => _.,n,Noop(Received an unknown call with DID set to ${EXTEN})
  3707. exten => _.,n,Goto(s,a2)
  3708.  
  3709. exten => h,1,Hangup
  3710.  
  3711. ;--== end of [ext-did-catchall] ==--;
  3712.  
  3713.  
  3714. [from-trunk-pjsip-outboundtrunkamori]
  3715. include => from-trunk-pjsip-outboundtrunkamori-custom
  3716. exten => _.,1,Set(GROUP()=OUT_1)
  3717. exten => _.,n,Goto(from-trunk,${EXTEN},1)
  3718.  
  3719. ;--== end of [from-trunk-pjsip-outboundtrunkamori] ==--;
  3720.  
  3721.  
  3722. [ext-trunk]
  3723. include => ext-trunk-custom
  3724. exten => 1,1,Set(TDIAL_SUFFIX=@outboundtrunkamori)
  3725. exten => 1,n,Set(TDIAL_STRING=PJSIP)
  3726. exten => 1,n,Set(DIAL_TRUNK=1)
  3727. exten => 1,n,Goto(ext-trunk,tdial,1)
  3728.  
  3729. exten => 2,1,Set(TDIAL_SUFFIX=@buylocalnumbers)
  3730. exten => 2,n,Set(TDIAL_STRING=PJSIP)
  3731. exten => 2,n,Set(DIAL_TRUNK=2)
  3732. exten => 2,n,Goto(ext-trunk,tdial,1)
  3733.  
  3734. exten => 3,1,Set(TDIAL_SUFFIX=@outboundtrunkvoxbeam)
  3735. exten => 3,n,Set(TDIAL_STRING=PJSIP)
  3736. exten => 3,n,Set(DIAL_TRUNK=3)
  3737. exten => 3,n,Goto(ext-trunk,tdial,1)
  3738.  
  3739. exten => 4,1,Set(TDIAL_SUFFIX=@outboundtrunkanveodirect)
  3740. exten => 4,n,Set(TDIAL_STRING=PJSIP)
  3741. exten => 4,n,Set(DIAL_TRUNK=4)
  3742. exten => 4,n,Goto(ext-trunk,tdial,1)
  3743.  
  3744. exten => tdial,1,Set(OUTBOUND_GROUP=OUT_${DIAL_TRUNK})
  3745. exten => tdial,n,GotoIf($["${OUTMAXCHANS_${DIAL_TRUNK}}" = ""]?nomax)
  3746. exten => tdial,n,GotoIf($[${GROUP_COUNT(OUT_${DIAL_TRUNK})} >= ${OUTMAXCHANS_${DIAL_TRUNK}}]?hangit)
  3747. exten => tdial,n(nomax),ExecIf($["${CALLINGNAMEPRES_SV}" != ""]?Set(CALLERPRES(name-pres)=${CALLINGNAMEPRES_SV}))
  3748. exten => tdial,n,ExecIf($["${CALLINGNUMPRES_SV}" != ""]?Set(CALLERPRES(num-pres)=${CALLINGNUMPRES_SV}))
  3749. exten => tdial,n,Set(DIAL_NUMBER=${FROM_DID})
  3750. exten => tdial,n,GosubIf($["${PREFIX_TRUNK_${DIAL_TRUNK}}" != ""]?sub-flp-${DIAL_TRUNK},s,1())
  3751. exten => tdial,n,Set(OUTNUM=${OUTPREFIX_${DIAL_TRUNK}}${DIAL_NUMBER})
  3752. exten => tdial,n,Set(DIAL_TRUNK_OPTIONS=${IF($["${DB_EXISTS(TRUNK/${DIAL_TRUNK}/dialopts)}" = "1"]?${DB_RESULT}:${TRUNK_OPTIONS})})
  3753. exten => tdial,n,Dial(${TDIAL_STRING}/${OUTNUM}${TDIAL_SUFFIX},${TRUNK_RING_TIMER},${DIAL_TRUNK_OPTIONS})
  3754. exten => tdial,n,Set(CALLERID(number)=${CALLERID(number):0:40})
  3755. exten => tdial,n,Set(CALLERID(name)=${CALLERID(name):0:40})
  3756. exten => tdial,n(hangit),Hangup
  3757.  
  3758. ;--== end of [ext-trunk] ==--;
  3759.  
  3760.  
  3761. [from-trunk-pjsip-buylocalnumbers]
  3762. include => from-trunk-pjsip-buylocalnumbers-custom
  3763. exten => _.,1,Set(GROUP()=OUT_2)
  3764. exten => _.,n,Goto(from-trunk,${EXTEN},1)
  3765.  
  3766. ;--== end of [from-trunk-pjsip-buylocalnumbers] ==--;
  3767.  
  3768.  
  3769. [from-trunk-pjsip-outboundtrunkvoxbeam]
  3770. include => from-trunk-pjsip-outboundtrunkvoxbeam-custom
  3771. exten => _.,1,Set(GROUP()=OUT_3)
  3772. exten => _.,n,Goto(from-trunk,${EXTEN},1)
  3773.  
  3774. ;--== end of [from-trunk-pjsip-outboundtrunkvoxbeam] ==--;
  3775.  
  3776.  
  3777. [from-trunk-pjsip-outboundtrunkanveodirect]
  3778. include => from-trunk-pjsip-outboundtrunkanveodirect-custom
  3779. exten => _.,1,Set(GROUP()=OUT_4)
  3780. exten => _.,n,Goto(from-trunk,${EXTEN},1)
  3781.  
  3782. ;--== end of [from-trunk-pjsip-outboundtrunkanveodirect] ==--;
  3783.  
  3784.  
  3785. [sub-flp-1]
  3786. include => sub-flp-1-custom
  3787. exten => s,1,ExecIf($[${REGEX("^\\+[0-9#\\*\\+]+$" ${DIAL_NUMBER})} = 1]?Set(TARGET_FLP_1=00${DIAL_NUMBER:1}))
  3788. exten => s,n,GotoIf($[${LEN(${TARGET_FLP_1})} != 0]?match)
  3789. exten => s,n,Return()
  3790. exten => s,n(match),Set(DIAL_NUMBER=${TARGET_FLP_1})
  3791. exten => s,n,Return()
  3792.  
  3793. ;--== end of [sub-flp-1] ==--;
  3794.  
  3795.  
  3796. [sub-flp-3]
  3797. include => sub-flp-3-custom
  3798. exten => s,1,ExecIf($[${REGEX("^\\+[0-9#\\*\\+]+$" ${DIAL_NUMBER})} = 1]?Set(TARGET_FLP_3=00${DIAL_NUMBER:1}))
  3799. exten => s,n,GotoIf($[${LEN(${TARGET_FLP_3})} != 0]?match)
  3800. exten => s,n,Return()
  3801. exten => s,n(match),Set(DIAL_NUMBER=${TARGET_FLP_3})
  3802. exten => s,n,Return()
  3803.  
  3804. ;--== end of [sub-flp-3] ==--;
  3805.  
  3806.  
  3807. [sub-flp-4]
  3808. include => sub-flp-4-custom
  3809. exten => s,1,ExecIf($[${REGEX("^\\+[0-9#\\*\\+]+$" ${DIAL_NUMBER})} = 1]?Set(TARGET_FLP_4=00${DIAL_NUMBER:1}))
  3810. exten => s,n,GotoIf($[${LEN(${TARGET_FLP_4})} != 0]?match)
  3811. exten => s,n,Return()
  3812. exten => s,n(match),Set(DIAL_NUMBER=${TARGET_FLP_4})
  3813. exten => s,n,Return()
  3814.  
  3815. ;--== end of [sub-flp-4] ==--;
  3816.  
  3817.  
  3818. [macro-prepend-cid]
  3819. include => macro-prepend-cid-custom
  3820. exten => s,1,GotoIf($["${RGPREFIX}" = ""]?REPCID)
  3821. exten => s,n,GotoIf($["${RGPREFIX}" != "${CALLERID(name):0:${LEN(${RGPREFIX})}}"]?REPCID)
  3822. exten => s,n,Set(CALLERID(name)=${CALLERID(name):${LEN(${RGPREFIX})}})
  3823. exten => s,n,Set(_RGPREFIX=)
  3824. exten => s,n(REPCID),Set(_RGPREFIX=${ARG1})
  3825. exten => s,n,Set(CALLERID(name)=${RGPREFIX}${CALLERID(name)})
  3826.  
  3827. ;--== end of [macro-prepend-cid] ==--;
  3828.  
  3829.  
  3830. [outbound-allroutes]
  3831. include => outbound-allroutes-custom
  3832. include => outrt-1 ; forwardtopstn
  3833. include => outrt-2 ; pstn_kroomic_1132
  3834. exten => foo,1,Noop(bar)
  3835.  
  3836. ;--== end of [outbound-allroutes] ==--;
  3837.  
  3838.  
  3839. [outrt-1] ; forwardtopstn
  3840. include => outrt-1-custom
  3841. exten => _.XXXXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  3842. exten => _.XXXXXXXXX,n,Gosub(sub-record-check,s,1(out,${EXTEN},dontcare))
  3843. exten => _.XXXXXXXXX,n,ExecIf($[ "${CALLEE_ACCOUNCODE}" != "" ] ?Set(CDR(accountcode)=${CALLEE_ACCOUNCODE}))
  3844. exten => _.XXXXXXXXX,n,Set(_ROUTEID=1)
  3845. exten => _.XXXXXXXXX,n,Set(_ROUTENAME=forwardtopstn)
  3846. exten => _.XXXXXXXXX,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  3847. exten => _.XXXXXXXXX,n,Set(_CALLERIDNAMEINTERNAL=${CALLERID(name)})
  3848. exten => _.XXXXXXXXX,n,Set(_CALLERIDNUMINTERNAL=${CALLERID(num)})
  3849. exten => _.XXXXXXXXX,n,Set(_EMAILNOTIFICATION=FALSE)
  3850. exten => _.XXXXXXXXX,n,Set(_NODEST=)
  3851. exten => _.XXXXXXXXX,n,Macro(dialout-trunk,3,+${EXTEN},,off)
  3852. exten => _.XXXXXXXXX,n,Macro(outisbusy,)
  3853.  
  3854. exten => _.XXXXXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  3855. exten => _.XXXXXXXXXX,n,Gosub(sub-record-check,s,1(out,${EXTEN},dontcare))
  3856. exten => _.XXXXXXXXXX,n,ExecIf($[ "${CALLEE_ACCOUNCODE}" != "" ] ?Set(CDR(accountcode)=${CALLEE_ACCOUNCODE}))
  3857. exten => _.XXXXXXXXXX,n,Set(_ROUTEID=1)
  3858. exten => _.XXXXXXXXXX,n,Set(_ROUTENAME=forwardtopstn)
  3859. exten => _.XXXXXXXXXX,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  3860. exten => _.XXXXXXXXXX,n,Set(_CALLERIDNAMEINTERNAL=${CALLERID(name)})
  3861. exten => _.XXXXXXXXXX,n,Set(_CALLERIDNUMINTERNAL=${CALLERID(num)})
  3862. exten => _.XXXXXXXXXX,n,Set(_EMAILNOTIFICATION=FALSE)
  3863. exten => _.XXXXXXXXXX,n,Set(_NODEST=)
  3864. exten => _.XXXXXXXXXX,n,Macro(dialout-trunk,3,+${EXTEN},,off)
  3865. exten => _.XXXXXXXXXX,n,Macro(outisbusy,)
  3866.  
  3867. exten => _.XXXXXXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  3868. exten => _.XXXXXXXXXXX,n,Gosub(sub-record-check,s,1(out,${EXTEN},dontcare))
  3869. exten => _.XXXXXXXXXXX,n,ExecIf($[ "${CALLEE_ACCOUNCODE}" != "" ] ?Set(CDR(accountcode)=${CALLEE_ACCOUNCODE}))
  3870. exten => _.XXXXXXXXXXX,n,Set(_ROUTEID=1)
  3871. exten => _.XXXXXXXXXXX,n,Set(_ROUTENAME=forwardtopstn)
  3872. exten => _.XXXXXXXXXXX,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  3873. exten => _.XXXXXXXXXXX,n,Set(_CALLERIDNAMEINTERNAL=${CALLERID(name)})
  3874. exten => _.XXXXXXXXXXX,n,Set(_CALLERIDNUMINTERNAL=${CALLERID(num)})
  3875. exten => _.XXXXXXXXXXX,n,Set(_EMAILNOTIFICATION=FALSE)
  3876. exten => _.XXXXXXXXXXX,n,Set(_NODEST=)
  3877. exten => _.XXXXXXXXXXX,n,Macro(dialout-trunk,3,+${EXTEN},,off)
  3878. exten => _.XXXXXXXXXXX,n,Macro(outisbusy,)
  3879.  
  3880. exten => _.XXXXXXXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  3881. exten => _.XXXXXXXXXXXX,n,Gosub(sub-record-check,s,1(out,${EXTEN},dontcare))
  3882. exten => _.XXXXXXXXXXXX,n,ExecIf($[ "${CALLEE_ACCOUNCODE}" != "" ] ?Set(CDR(accountcode)=${CALLEE_ACCOUNCODE}))
  3883. exten => _.XXXXXXXXXXXX,n,Set(_ROUTEID=1)
  3884. exten => _.XXXXXXXXXXXX,n,Set(_ROUTENAME=forwardtopstn)
  3885. exten => _.XXXXXXXXXXXX,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  3886. exten => _.XXXXXXXXXXXX,n,Set(_CALLERIDNAMEINTERNAL=${CALLERID(name)})
  3887. exten => _.XXXXXXXXXXXX,n,Set(_CALLERIDNUMINTERNAL=${CALLERID(num)})
  3888. exten => _.XXXXXXXXXXXX,n,Set(_EMAILNOTIFICATION=FALSE)
  3889. exten => _.XXXXXXXXXXXX,n,Set(_NODEST=)
  3890. exten => _.XXXXXXXXXXXX,n,Macro(dialout-trunk,3,+${EXTEN},,off)
  3891. exten => _.XXXXXXXXXXXX,n,Macro(outisbusy,)
  3892.  
  3893. exten => _.XXXXXXXXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  3894. exten => _.XXXXXXXXXXXXX,n,Gosub(sub-record-check,s,1(out,${EXTEN},dontcare))
  3895. exten => _.XXXXXXXXXXXXX,n,ExecIf($[ "${CALLEE_ACCOUNCODE}" != "" ] ?Set(CDR(accountcode)=${CALLEE_ACCOUNCODE}))
  3896. exten => _.XXXXXXXXXXXXX,n,Set(_ROUTEID=1)
  3897. exten => _.XXXXXXXXXXXXX,n,Set(_ROUTENAME=forwardtopstn)
  3898. exten => _.XXXXXXXXXXXXX,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  3899. exten => _.XXXXXXXXXXXXX,n,Set(_CALLERIDNAMEINTERNAL=${CALLERID(name)})
  3900. exten => _.XXXXXXXXXXXXX,n,Set(_CALLERIDNUMINTERNAL=${CALLERID(num)})
  3901. exten => _.XXXXXXXXXXXXX,n,Set(_EMAILNOTIFICATION=FALSE)
  3902. exten => _.XXXXXXXXXXXXX,n,Set(_NODEST=)
  3903. exten => _.XXXXXXXXXXXXX,n,Macro(dialout-trunk,3,+${EXTEN},,off)
  3904. exten => _.XXXXXXXXXXXXX,n,Macro(outisbusy,)
  3905.  
  3906. ;--== end of [outrt-1] ==--;
  3907.  
  3908.  
  3909. [outrt-2] ; pstn_kroomic_1132
  3910. include => outrt-2-custom
  3911. exten => +41795853459,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  3912. exten => +41795853459,n,Gosub(sub-record-check,s,1(out,${EXTEN},dontcare))
  3913. exten => +41795853459,n,ExecIf($[ "${CALLEE_ACCOUNCODE}" != "" ] ?Set(CDR(accountcode)=${CALLEE_ACCOUNCODE}))
  3914. exten => +41795853459,n,Set(_ROUTEID=2)
  3915. exten => +41795853459,n,Set(_ROUTENAME=pstn_kroomic_1132)
  3916. exten => +41795853459,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  3917. exten => +41795853459,n,Set(_CALLERIDNAMEINTERNAL=${CALLERID(name)})
  3918. exten => +41795853459,n,Set(_CALLERIDNUMINTERNAL=${CALLERID(num)})
  3919. exten => +41795853459,n,Set(_EMAILNOTIFICATION=FALSE)
  3920. exten => +41795853459,n,Set(_NODEST=)
  3921. exten => +41795853459,n,Macro(dialout-trunk,1,${EXTEN},,off)
  3922. exten => +41795853459,n,Macro(outisbusy,)
  3923.  
  3924. exten => 0041795853459,1,Macro(user-callerid,LIMIT,EXTERNAL,)
  3925. exten => 0041795853459,n,Gosub(sub-record-check,s,1(out,${EXTEN},dontcare))
  3926. exten => 0041795853459,n,ExecIf($[ "${CALLEE_ACCOUNCODE}" != "" ] ?Set(CDR(accountcode)=${CALLEE_ACCOUNCODE}))
  3927. exten => 0041795853459,n,Set(_ROUTEID=2)
  3928. exten => 0041795853459,n,Set(_ROUTENAME=pstn_kroomic_1132)
  3929. exten => 0041795853459,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
  3930. exten => 0041795853459,n,Set(_CALLERIDNAMEINTERNAL=${CALLERID(name)})
  3931. exten => 0041795853459,n,Set(_CALLERIDNUMINTERNAL=${CALLERID(num)})
  3932. exten => 0041795853459,n,Set(_EMAILNOTIFICATION=FALSE)
  3933. exten => 0041795853459,n,Set(_NODEST=)
  3934. exten => 0041795853459,n,Macro(dialout-trunk,1,${EXTEN},,off)
  3935. exten => 0041795853459,n,Macro(outisbusy,)
  3936.  
  3937. ;--== end of [outrt-2] ==--;
  3938.  
  3939.  
  3940. [macro-outisbusy]
  3941. include => macro-outisbusy-custom
  3942. exten => s,1,Progress
  3943. exten => s,n,GotoIf($["${EMERGENCYROUTE}" = "YES"]?emergency,1)
  3944. exten => s,n,GotoIf($["${INTRACOMPANYROUTE}" = "YES"]?intracompany,1)
  3945. exten => s,n,Playback(all-circuits-busy-now&please-try-call-later, noanswer)
  3946. exten => s,n,Congestion(20)
  3947. exten => s,n,Hangup
  3948.  
  3949. exten => intracompany,1,Playback(all-circuits-busy-now&please-try-call-later, noanswer)
  3950. exten => intracompany,n,Congestion(20)
  3951. exten => intracompany,n,Hangup
  3952.  
  3953. exten => emergency,1,Playback(all-circuits-busy-now&please-try-call-later)
  3954. exten => emergency,n,Congestion(20)
  3955. exten => emergency,n,Hangup
  3956.  
  3957. ;--== end of [macro-outisbusy] ==--;
  3958.  
  3959.  
  3960. [app-blackhole]
  3961. include => app-blackhole-custom
  3962. exten => hangup,1,Noop(Blackhole Dest: Hangup)
  3963. exten => hangup,n,Hangup
  3964.  
  3965. exten => zapateller,1,Noop(Blackhole Dest: Play SIT Tone)
  3966. exten => zapateller,n,Answer
  3967. exten => zapateller,n,Zapateller()
  3968.  
  3969. exten => musiconhold,1,Noop(Blackhole Dest: Put caller on hold forever)
  3970. exten => musiconhold,n,Answer
  3971. exten => musiconhold,n,MusicOnHold()
  3972.  
  3973. exten => congestion,1,Noop(Blackhole Dest: Congestion)
  3974. exten => congestion,n,Progress
  3975. exten => congestion,n,Playtones(congestion)
  3976. exten => congestion,n,Congestion(20)
  3977. exten => congestion,n,Hangup
  3978.  
  3979. exten => busy,1,Noop(Blackhole Dest: Busy)
  3980. exten => busy,n,Progress
  3981. exten => busy,n,Busy(20)
  3982. exten => busy,n,Hangup
  3983.  
  3984. exten => ring,1,Noop(Blackhole Dest: Ring)
  3985. exten => ring,n,Answer
  3986. exten => ring,n,Playtones(ring)
  3987. exten => ring,n,Wait(300)
  3988. exten => ring,n,Hangup
  3989.  
  3990. exten => no-service,1,Noop(Blackhole Dest: No service)
  3991. exten => no-service,n,Answer
  3992. exten => no-service,n,Wait(1)
  3993. exten => no-service,n,Zapateller()
  3994. exten => no-service,n,Playback(ss-noservice)
  3995. exten => no-service,n,Hangup
  3996.  
  3997. ;--== end of [app-blackhole] ==--;
  3998.  
  3999.  
  4000. [bad-number]
  4001. include => bad-number-custom
  4002. exten => _X.,1,ResetCDR()
  4003. exten => _X.,n,NoCDR()
  4004. exten => _X.,n,Progress
  4005. exten => _X.,n,Wait(1)
  4006. exten => _X.,n,Playback(silence/1&cannot-complete-as-dialed&check-number-dial-again,noanswer)
  4007. exten => _X.,n,Wait(1)
  4008. exten => _X.,n,Congestion(20)
  4009. exten => _X.,n,Hangup
  4010.  
  4011. exten => s,1,Goto(11,1)
  4012.  
  4013. ;--== end of [bad-number] ==--;
  4014.  
  4015.  
  4016. [sub-presencestate-display]
  4017. include => sub-presencestate-display-custom
  4018. exten => s,1,Goto(state-${TOLOWER(${PRESENCE_STATE(CustomPresence:${ARG1},value)})},1)
  4019.  
  4020. exten => state-available,1,Set(PRESENCESTATE_DISPLAY=(Available))
  4021. exten => state-available,n,Return()
  4022.  
  4023. exten => state-chat,1,Set(PRESENCESTATE_DISPLAY=(Chat))
  4024. exten => state-chat,n,Return()
  4025.  
  4026. exten => state-away,1,Set(PRESENCESTATE_DISPLAY=(Away))
  4027. exten => state-away,n,Return()
  4028.  
  4029. exten => state-dnd,1,Set(PRESENCESTATE_DISPLAY=(DND))
  4030. exten => state-dnd,n,Return()
  4031.  
  4032. exten => state-xa,1,Set(PRESENCESTATE_DISPLAY=(Extended Away))
  4033. exten => state-xa,n,Return()
  4034.  
  4035. exten => state-unavailable,1,Set(PRESENCESTATE_DISPLAY=(Unavailable))
  4036. exten => state-unavailable,n,Return()
  4037.  
  4038. exten => _state-.,1,Set(PRESENCESTATE_DISPLAY=)
  4039. exten => _state-.,n,Return()
  4040.  
  4041. exten => state-,1,Set(PRESENCESTATE_DISPLAY=)
  4042. exten => state-,n,Return()
  4043.  
  4044. ;--== end of [sub-presencestate-display] ==--;
  4045.  
  4046.  
  4047. [macro-confirm]
  4048. include => macro-confirm-custom
  4049. exten => s,1,Set(LOOPCOUNT=0)
  4050. exten => s,n,Set(__MACRO_RESULT=ABORT)
  4051. exten => s,n,Noop(${ALT_CONFIRM_MSG} and arv= ${ARG1})
  4052. exten => s,n,ExecIf($["${ALT_CONFIRM_MSG}"="default"]?Set(ARG1=))
  4053. exten => s,n,ExecIf($["${ALT_CONFIRM_MSG}"="default"]?Set(ALT_CONFIRM_MSG=))
  4054. 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})})})
  4055. exten => s,n(start),Background(${MSG1},m,${CHANNEL(language)},macro-confirm)
  4056. exten => s,n,Read(INPUT,,1,,,4)
  4057. exten => s,n,GotoIf($[${LEN(${INPUT})} > 0]?${INPUT},1:t,1)
  4058.  
  4059. exten => 1,1,GotoIf($["${DB_EXISTS(RG/${ARG3}/${UNIQCHAN})}"="0" & "${SHARED(ANSWER_STATUS,${FORCE_CONFIRM})}"=""]?toolate,1)
  4060. exten => 1,n,GotoIf($["${BLKVM_CHANNEL}" !="" & "${DB_EXISTS(RG/${ARG3}/${UNIQCHAN})}"="0" & "${SHARED(ANSWER_STATUS,${BLKVM_CHANNEL})}"=""]?toolate,1)
  4061. exten => 1,n,Set(cfchannel=${IF($[${REGEX("/from-queue/" ${UNIQCHAN})}]?${UNIQCHAN}:${BLKVM_CHANNEL})})
  4062. exten => 1,n,GotoIf($["${SHARED(BLKVM,${cfchannel})}"="" & "${QCALLBACK}"=""]?toolate,1)
  4063. exten => 1,n,Noop(Deleting: RG/${ARG3}/${UNIQCHAN} ${DB_DELETE(RG/${ARG3}/${UNIQCHAN})})
  4064. exten => 1,n,Macro(blkvm-clr,)
  4065. exten => 1,n,Set(SHARED(ANSWER_STATUS,${FORCE_CONFIRM})=)
  4066. exten => 1,n(skip),Set(__MACRO_RESULT=)
  4067. exten => 1,n,ExecIf($[("${MOHCLASS}"!="default") & ("${MOHCLASS}"!="")]?Set(CHANNEL(musicclass)=${MOHCLASS}))
  4068. exten => 1,n(exitopt1),MacroExit()
  4069.  
  4070. exten => 2,1,Goto(noanswer,1)
  4071.  
  4072. exten => 3,1,SayDigits(${CALLCONFIRMCID})
  4073. exten => 3,n,GotoIf($["${DB_EXISTS(RG/${ARG3}/${UNIQCHAN})}"="0" & "${SHARED(ANSWER_STATUS,${FORCE_CONFIRM})}"=""]?toolate,1:s,start)
  4074.  
  4075. exten => t,1,GotoIf($["${DB_EXISTS(RG/${ARG3}/${UNIQCHAN})}"="0" & "${SHARED(ANSWER_STATUS,${FORCE_CONFIRM})}"=""]?toolate,1)
  4076. exten => t,n,Set(LOOPCOUNT=$[ ${LOOPCOUNT} + 1 ])
  4077. exten => t,n,GotoIf($[ ${LOOPCOUNT} < 5 ]?s,start:noanswer,1)
  4078.  
  4079. exten => _X,1,Background(invalid,m,${CHANNEL(language)},macro-confirm)
  4080. exten => _X,n,GotoIf($["${DB_EXISTS(RG/${ARG3}/${UNIQCHAN})}"="0" | "${SHARED(ANSWER_STATUS,${FORCE_CONFIRM})}"=""]?toolate,1)
  4081. exten => _X,n,Set(LOOPCOUNT=$[ ${LOOPCOUNT} + 1 ])
  4082. exten => _X,n,GotoIf($[ ${LOOPCOUNT} < 5 ]?s,start:noanswer,1)
  4083.  
  4084. exten => noanswer,1,Set(__MACRO_RESULT=ABORT)
  4085. exten => noanswer,n(exitnoanswer),MacroExit()
  4086.  
  4087. exten => toolate,1,Set(MSG2=${IF($["foo${ARG2}" != "foo"]?${ARG2}:"incoming-call-no-longer-avail")})
  4088. exten => toolate,n,Playback(${MSG2})
  4089. exten => toolate,n,Set(__MACRO_RESULT=ABORT)
  4090. exten => toolate,n(exittoolate),MacroExit()
  4091.  
  4092. exten => h,1,Macro(hangupcall,)
  4093.  
  4094. ;--== end of [macro-confirm] ==--;
  4095.  
  4096.  
  4097. [macro-auto-confirm]
  4098. include => macro-auto-confirm-custom
  4099. exten => s,1,Set(__MACRO_RESULT=)
  4100. exten => s,n,Set(CFIGNORE=)
  4101. exten => s,n,Set(MASTER_CHANNEL(CFIGNORE)=)
  4102. exten => s,n,Set(FORWARD_CONTEXT=from-internal)
  4103. exten => s,n,Set(MASTER_CHANNEL(FORWARD_CONTEXT)=from-internal)
  4104. exten => s,n,Macro(blkvm-clr,)
  4105. exten => s,n,Noop(Deleting: RG/${ARG1}/${UNIQCHAN} ${DB_DELETE(RG/${ARG1}/${UNIQCHAN})})
  4106. exten => s,n,ExecIf($[!${REGEX("[^0-9]" ${DIALEDPEERNUMBER})} && "${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(MASTER_CHANNEL(CONNECTEDLINE(num))=${DIALEDPEERNUMBER}))
  4107. exten => s,n,ExecIf($[!${REGEX("[^0-9]" ${DIALEDPEERNUMBER})} && "${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(MASTER_CHANNEL(CONNECTEDLINE(name))=${DB(AMPUSER/${DIALEDPEERNUMBER}/cidname)}))
  4108.  
  4109. ;--== end of [macro-auto-confirm] ==--;
  4110.  
  4111.  
  4112. [macro-auto-blkvm]
  4113. include => macro-auto-blkvm-custom
  4114. exten => s,1,Set(__MACRO_RESULT=)
  4115. exten => s,n,Set(CFIGNORE=)
  4116. exten => s,n,Set(MASTER_CHANNEL(CFIGNORE)=)
  4117. exten => s,n,Set(FORWARD_CONTEXT=from-internal)
  4118. exten => s,n,Set(MASTER_CHANNEL(FORWARD_CONTEXT)=from-internal)
  4119. exten => s,n,Macro(blkvm-clr,)
  4120. exten => s,n,ExecIf($[!${REGEX("[^0-9]" ${DIALEDPEERNUMBER})} && "${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(MASTER_CHANNEL(CONNECTEDLINE(num))=${DIALEDPEERNUMBER}))
  4121. exten => s,n,ExecIf($[!${REGEX("[^0-9]" ${DIALEDPEERNUMBER})} && "${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(MASTER_CHANNEL(CONNECTEDLINE(name))=${DB(AMPUSER/${DIALEDPEERNUMBER}/cidname)}))
  4122.  
  4123. ;--== end of [macro-auto-blkvm] ==--;
  4124.  
  4125.  
  4126. [sub-pincheck]
  4127. include => sub-pincheck-custom
  4128. exten => s,1,Authenticate(${ARG3},)
  4129. exten => s,n,ResetCDR()
  4130. exten => s,n,Return()
  4131.  
  4132. ;--== end of [sub-pincheck] ==--;
  4133.  
  4134.  
  4135. [sub-send-obroute-email]
  4136. include => sub-send-obroute-email-custom
  4137. exten => s,1,GotoIf($["${EMAILNOTIFICATION}" = "TRUE"]?sendEmail)
  4138. exten => s,n,Noop(email notifications disabled..exiting.)
  4139. exten => s,n,Return()
  4140. exten => s,n(sendEmail),AGI(agi://127.0.0.1/outboundRouteEmail.php,${ARG1},${ARG2},${ARG3},${ARG4},${ARG5},${ARG6},${ROUTEID},${ROUTENAME},${CALLERIDNAMEINTERNAL},${CALLERIDNUMINTERNAL},${CHANNEL(LINKEDID)},${HOTDESKEXTEN},${EMERGENCYROUTE})
  4141. exten => s,n,Return()
  4142.  
  4143. ;--== end of [sub-send-obroute-email] ==--;
  4144.  
  4145.  
  4146. [macro-dialout-trunk]
  4147. include => macro-dialout-trunk-custom
  4148. exten => s,1,Set(DIAL_TRUNK=${ARG1})
  4149. exten => s,n,ExecIf($["${DIRECTION}" = "INBOUND"]?Set(DIAL_OPTIONS=${STRREPLACE(DIAL_OPTIONS,T)}))
  4150. exten => s,n,GosubIf($[$["${ARG3}" != ""] & $["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]]?sub-pincheck,s,1())
  4151. exten => s,n,ExecIf($["${INTRACOMPANYROUTE}" = "YES" & ${DB_EXISTS(AMPUSER/${AMPUSER}/cidnum)} & "${AMPUSER}" != "${DB(AMPUSER/${AMPUSER}/cidnum)}"]?Set(CALLERID(num)=${DB(AMPUSER/${AMPUSER}/cidnum)}))
  4152. exten => s,n,GotoIf($["x${OUTDISABLE_${DIAL_TRUNK}}" = "xon"]?disabletrunk,1)
  4153. exten => s,n,Set(DIAL_NUMBER=${ARG2})
  4154. exten => s,n,Set(DIAL_TRUNK_OPTIONS=${DIAL_OPTIONS})
  4155. exten => s,n,Set(OUTBOUND_GROUP=OUT_${DIAL_TRUNK})
  4156. exten => s,n,Set(DIAL_TRUNK_OPTIONS=${IF($["${DB_EXISTS(TRUNK/${DIAL_TRUNK}/dialopts)}" = "1"]?${DB_RESULT}:${TRUNK_OPTIONS})})
  4157. exten => s,n,GotoIf($["${OUTMAXCHANS_${DIAL_TRUNK}}" = ""]?nomax)
  4158. exten => s,n,GotoIf($[ ${GROUP_COUNT(OUT_${DIAL_TRUNK})} >= ${OUTMAXCHANS_${DIAL_TRUNK}} ]?chanfull)
  4159. exten => s,n(nomax),GotoIf($["${INTRACOMPANYROUTE}" = "YES"]?skipoutcid)
  4160. exten => s,n,Macro(outbound-callerid,${DIAL_TRUNK})
  4161. exten => s,n(skipoutcid),GosubIf($["${PREFIX_TRUNK_${DIAL_TRUNK}}" != ""]?sub-flp-${DIAL_TRUNK},s,1())
  4162. exten => s,n,Set(OUTNUM=${OUTPREFIX_${DIAL_TRUNK}}${DIAL_NUMBER})
  4163. exten => s,n,Set(custom=${CUT(OUT_${DIAL_TRUNK},:,1)})
  4164. exten => s,n,ExecIf($["${MOHCLASS}"!="default" & "${MOHCLASS}"!="" & "${FORCE_CONFIRM}"="" ]?Set(DIAL_TRUNK_OPTIONS=M(setmusic^${MOHCLASS})${DIAL_TRUNK_OPTIONS}))
  4165. exten => s,n,ExecIf($["${FORCE_CONFIRM}"!="" ]?Set(DIAL_TRUNK_OPTIONS=${DIAL_TRUNK_OPTIONS}M(confirm)))
  4166. exten => s,n,ExecIf($[${DB_EXISTS(allowlist/autoadd/${ROUTEID})}]?AGI(allowlist-autoadd.agi,))
  4167. exten => s,n(gocall),Macro(dialout-trunk-predial-hook,)
  4168. exten => s,n,GotoIf($["${CRM_DIRECTION}"!=""]?skipcrm)
  4169. exten => s,n,Set(__CRM_DIRECTION=OUTBOUND)
  4170. exten => s,n,Set(__CRM_DESTINATION=${OUTNUM})
  4171. exten => s,n,Set(__CRM_SOURCE=${AMPUSER})
  4172. exten => s,n,AGI(agi://127.0.0.1/sangomacrm.agi)
  4173. exten => s,n,Set(CHANNEL(hangup_handler_push)=crm-hangup,s,1)
  4174. exten => s,n(skipcrm),Noop(CRM Finished)
  4175. exten => s,n,GotoIf($["${PREDIAL_HOOK_RET}" = "BYPASS"]?bypass,1)
  4176. exten => s,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(CONNECTEDLINE(num,i)=${DIAL_NUMBER}))
  4177. exten => s,n,ExecIf($[$["${DB(AMPUSER/${AMPUSER}/cidname)}" != ""] & $["${CALLERID(name)}"!="hidden"]]?Set(CONNECTEDLINE(name,i)=CID:${CALLERID(number)}))
  4178. exten => s,n,ExecIf($[$["${DB(AMPUSER/${AMPUSER}/cidname)}" != ""] & $["${CALLERID(name)}"="hidden"]]?Set(CONNECTEDLINE(name,i)=CID:(Hidden)${CALLERID(number)}))
  4179. exten => s,n,GotoIf($["${custom}" = "AMP"]?customtrunk)
  4180. exten => s,n,ExecIf($["${DIRECTION}" = "INBOUND"]?Set(DIAL_TRUNK_OPTIONS=${STRREPLACE(DIAL_TRUNK_OPTIONS,T)}))
  4181. exten => s,n,Set(HASH(__SIPHEADERS,Alert-Info)=unset)
  4182. exten => s,n,Dial(${OUT_${DIAL_TRUNK}}/${OUTNUM}${OUT_${DIAL_TRUNK}_SUFFIX},${TRUNK_RING_TIMER},${DIAL_TRUNK_OPTIONS}b(func-apply-sipheaders^s^1,(${DIAL_TRUNK}))U(sub-send-obroute-email^${DIAL_NUMBER}^${MACRO_EXTEN}^${DIAL_TRUNK}^${NOW}^${CALLERID(name)}^${CALLERID(number)}))
  4183. exten => s,n,Noop(Dial failed for some reason with DIALSTATUS = ${DIALSTATUS} and HANGUPCAUSE = ${HANGUPCAUSE})
  4184. exten => s,n,GotoIf($["${ARG4}" = "on"]?continue,1:s-${DIALSTATUS},1)
  4185. exten => s,n(customtrunk),Set(pre_num=${CUT(OUT_${DIAL_TRUNK},$,1)})
  4186. exten => s,n,Set(the_num=${CUT(OUT_${DIAL_TRUNK},$,2)})
  4187. exten => s,n,Set(post_num=${CUT(OUT_${DIAL_TRUNK},$,3)})
  4188. exten => s,n,GotoIf($["${the_num}" = "OUTNUM"]?outnum:skipoutnum)
  4189. exten => s,n(outnum),Set(the_num=${OUTNUM})
  4190. exten => s,n(skipoutnum),Dial(${pre_num:4}${the_num}${post_num},${TRUNK_RING_TIMER},${DIAL_TRUNK_OPTIONS})
  4191. exten => s,n,Noop(Dial failed for some reason with DIALSTATUS = ${DIALSTATUS} and HANGUPCAUSE = ${HANGUPCAUSE})
  4192. exten => s,n,GotoIf($["${ARG4}" = "on"]?continue,1:s-${DIALSTATUS},1)
  4193. exten => s,n(chanfull),Noop(max channels used up)
  4194.  
  4195. exten => s-BUSY,1,Noop(Dial failed due to trunk reporting BUSY - giving up)
  4196. exten => s-BUSY,n,Playtones(busy)
  4197. exten => s-BUSY,n,Busy(20)
  4198.  
  4199. exten => s-ANSWER,1,Noop(Call successfully answered - Hanging up now)
  4200. exten => s-ANSWER,n,Macro(hangupcall,)
  4201.  
  4202. exten => s-NOANSWER,1,Noop(Dial failed due to trunk reporting NOANSWER - giving up)
  4203. exten => s-NOANSWER,n,Progress
  4204. exten => s-NOANSWER,n,Playback(number-not-answering,noanswer)
  4205. exten => s-NOANSWER,n,Congestion(20)
  4206.  
  4207. exten => s-INVALIDNMBR,1,Noop(Dial failed due to trunk reporting Address Incomplete - giving up)
  4208. exten => s-INVALIDNMBR,n,Progress
  4209. exten => s-INVALIDNMBR,n,Playback(ss-noservice,noanswer)
  4210. exten => s-INVALIDNMBR,n,Busy(20)
  4211.  
  4212. exten => s-CHANGED,1,Noop(Dial failed due to trunk reporting Number Changed - giving up)
  4213. exten => s-CHANGED,n,Playtones(busy)
  4214. exten => s-CHANGED,n,Busy(20)
  4215.  
  4216. exten => _s-.,1,Set(RC=${IF($[${ISNULL(${HANGUPCAUSE})}]?0:${HANGUPCAUSE})})
  4217. exten => _s-.,n,Goto(${RC},1)
  4218.  
  4219. exten => 17,1,Goto(s-BUSY,1)
  4220.  
  4221. exten => 18,1,Goto(s-NOANSWER,1)
  4222.  
  4223. exten => 22,1,Goto(s-CHANGED,1)
  4224.  
  4225. exten => 23,1,Goto(s-CHANGED,1)
  4226.  
  4227. exten => 1,1,Goto(s-INVALIDNMBR,1)
  4228.  
  4229. exten => 28,1,Goto(s-INVALIDNMBR,1)
  4230.  
  4231. exten => _X,1,Goto(continue,1)
  4232.  
  4233. exten => _X.,1,Goto(continue,1)
  4234.  
  4235. exten => continue,1(noreport),Noop(TRUNK Dial failed due to ${DIALSTATUS} HANGUPCAUSE: ${HANGUPCAUSE} - failing through to other trunks)
  4236. exten => continue,n,ExecIf($["${AMPUSER}"!="" ]?Set(CALLERID(number)=${AMPUSER}))
  4237.  
  4238. exten => disabletrunk,1,Noop(TRUNK: ${OUT_${DIAL_TRUNK}} DISABLED - falling through to next trunk)
  4239.  
  4240. exten => bypass,1,Noop(TRUNK: ${OUT_${DIAL_TRUNK}} BYPASSING because dialout-trunk-predial-hook)
  4241.  
  4242. exten => h,1,Macro(hangupcall,)
  4243.  
  4244. ;--== end of [macro-dialout-trunk] ==--;
  4245.  
  4246.  
  4247. [macro-privacy-mgr]
  4248. include => macro-privacy-mgr-custom
  4249. exten => s,1,Set(KEEPCID=${CALLERID(num)})
  4250. exten => s,n,Set(TESTCID=${IF($["${CALLERID(num):0:1}"="+"]?${MATH(1+${CALLERID(num):1})}:${MATH(1+${CALLERID(num)})})})
  4251. exten => s,n,ExecIf($[${LEN(${TESTCID})}=0]?Set(CALLERID(num)=))
  4252. exten => s,n,PrivacyManager(${ARG1},${ARG2})
  4253. exten => s,n,GotoIf($["${PRIVACYMGRSTATUS}"="FAILED"]?fail)
  4254. exten => s,n,GosubIf($["${CALLED_BLACKLIST}"="1"]?app-blacklist-check,s,1())
  4255. exten => s,n,Set(CALLERID(num-pres)=allowed_passed_screen)
  4256. exten => s,n,MacroExit()
  4257. exten => s,n(fail),Noop(STATUS: ${PRIVACYMGRSTATUS} CID: ${CALLERID(num)} ${CALLERID(name)} CALLPRES: ${CALLLINGPRES})
  4258. exten => s,n,Playback(sorry-youre-having-problems&goodbye)
  4259. exten => s,n,Playtones(congestion)
  4260. exten => s,n,Congestion(20)
  4261.  
  4262. exten => h,1,Hangup
  4263.  
  4264. ;--== end of [macro-privacy-mgr] ==--;
  4265.  
  4266.  
  4267. [macro-user-callerid]
  4268. include => macro-user-callerid-custom
  4269. exten => lang-playback,1,GosubIf($[${DIALPLAN_EXISTS(macro-user-callerid,${CHANNEL(language)})}]?macro-user-callerid,${CHANNEL(language)},${ARG1}():macro-user-callerid,en,${ARG1}())
  4270. exten => lang-playback,n,Return()
  4271.  
  4272. exten => s,1,Set(TOUCH_MONITOR=${UNIQUEID})
  4273. exten => s,n,Set(CHANCONTEXT=${CUT(CHANNEL,@,2)})
  4274. exten => s,n,Progress
  4275. exten => s,n,Set(CHANCONTEXT=${CUT(CHANCONTEXT,-,1)})
  4276. exten => s,n,Set(CHANEXTENCONTEXT=${CUT(CHANNEL,/,2)})
  4277. exten => s,n,Set(CHANEXTEN=${CUT(CHANEXTENCONTEXT,@,1)})
  4278. exten => s,n,Set(CALLERID(number)=${IF($["${CHANCONTEXT}" = "webcallback"]?${CHANEXTEN}:${CALLERID(number)})})
  4279. exten => s,n,Set(AMPUSER=${IF($["${AMPUSER}" = ""]?${CALLERID(number)}:${AMPUSER})})
  4280. exten => s,n,Set(HOTDESCKCHAN=${CUT(CHANNEL,/,2)})
  4281. exten => s,n,Set(HOTDESKEXTEN=${CUT(HOTDESCKCHAN,-,1)})
  4282. exten => s,n,Set(HOTDESKCALL=0)
  4283. exten => s,n,ExecIf($["${DB(EDEVICE/${HOTDESKEXTEN}/user)}"="DummyUser"]?Set(HOTDESKCALL=1))
  4284. exten => s,n,ExecIf($[${HOTDESKCALL}=1]?Set(CALLERID(name)=${DB(EDEVICE/${HOTDESKEXTEN}/location)}))
  4285. exten => s,n,GotoIf($["${CUT(CHANNEL,@,2):5:5}"="queue" | ${LEN(${AMPUSERCIDNAME})}]?report)
  4286. exten => s,n,ExecIf($["${REALCALLERIDNUM:1:2}" = ""]?Set(REALCALLERIDNUM=${CALLERID(number)}))
  4287. exten => s,n,Set(AMPUSER=${DB(DEVICE/${REALCALLERIDNUM}/user)})
  4288. exten => s,n,GotoIf($["${AMPUSER}" = "none"]?limit)
  4289. exten => s,n,Set(AMPUSERCIDNAME=${DB(AMPUSER/${AMPUSER}/cidname)})
  4290. exten => s,n,ExecIf($["${ARG2}" != "EXTERNAL" & ${DB_EXISTS(AMPUSER/${AMPUSER}/cidnum)} & "${AMPUSER}" != "${DB(AMPUSER/${AMPUSER}/cidnum)}"]?Set(__CIDMASQUERADING=TRUE))
  4291. exten => s,n,GotoIf($["${AMPUSERCIDNAME:1:2}" = ""]?report)
  4292. exten => s,n,Set(AMPUSERCID=${IF($["${ARG2}" != "EXTERNAL" & "${DB_EXISTS(AMPUSER/${AMPUSER}/cidnum)}" = "1"]?${DB_RESULT}:${AMPUSER})})
  4293. exten => s,n,Set(__DIAL_OPTIONS=${IF($["${DB_EXISTS(AMPUSER/${AMPUSER}/dialopts)}" = "1"]?${DB_RESULT}:${DIAL_OPTIONS})})
  4294. exten => s,n,Set(CALLERID(all)="${AMPUSERCIDNAME}" <${AMPUSERCID}>)
  4295. exten => s,n,ExecIf($["${DB(DEVICE/${ARG2}/tech)}"="custom"]?Set(CUSDIAL=${CUT(CUT(DB(DEVICE/${ARG2}/dial),/,2),@,1)}))
  4296. exten => s,n,ExecIf($["${DB(DEVICE/${ARG2}/tech)}"="custom" & "${DB(DEVICE/${CUSDIAL}/type)}" =""]?Set(CALLERID(all)=${IF($[${LEN(${DB(AMPUSER/${ARG2}/outboundcid)})}]?${DB(AMPUSER/${ARG2}/outboundcid)}:${CALLERID(all)})}))
  4297. exten => s,n,GotoIf($["${ARG1}"="LIMIT" & ${LEN(${AMPUSER})} & ${DB_EXISTS(AMPUSER/${AMPUSER}/concurrency_limit)} & ${DB(AMPUSER/${AMPUSER}/concurrency_limit)}>0 & ${GROUP_COUNT(${AMPUSER}@concurrency_limit)}>=${DB(AMPUSER/${AMPUSER}/concurrency_limit)}]?limit)
  4298. exten => s,n,ExecIf($["${ARG1}"="LIMIT" & ${LEN(${AMPUSER})}]?Set(GROUP(concurrency_limit)=${AMPUSER}))
  4299. exten => s,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/language)}" != ""]?Set(CHANNEL(language)=${DB(AMPUSER/${AMPUSER}/language)}))
  4300. exten => s,n(report),Noop(Macro Depth is ${MACRO_DEPTH})
  4301. exten => s,n,GotoIf($["${MACRO_DEPTH}" = "" | ${MACRO_DEPTH} < 6 ]?report2:macroerror)
  4302. exten => s,n(report2),GotoIf($[ "${ARG1}" = "SKIPTTL" | "${ARG1}" = "LIMIT" ]?continue)
  4303. exten => s,n,ExecIf($["${CALLEE_ACCOUNCODE}" = ""]?Set(__CALLEE_ACCOUNCODE=${DB(AMPUSER/${IF($["${MACRO_CONTEXT}"="macro-exten-vm"]?${ARG2}:${MACRO_EXTEN})}/accountcode)}))
  4304. exten => s,n(report3),Set(__TTL=${IF($["foo${TTL}" = "foo"]?64:$[ ${TTL} - 1 ])})
  4305. exten => s,n,GotoIf($[ ${TTL} > 0 ]?continue)
  4306. exten => s,n,Wait(${RINGTIMER})
  4307. exten => s,n,Answer
  4308. exten => s,n,Wait(1)
  4309. exten => s,n,Gosub(macro-user-callerid,lang-playback,1(hook_0))
  4310. exten => s,n,Macro(hangupcall,)
  4311. exten => s,n(macroerror),Noop(Macro Limit Reached. Aborting Call)
  4312. exten => s,n,Answer
  4313. exten => s,n,Wait(1)
  4314. exten => s,n,Gosub(macro-user-callerid,lang-playback,1(hook_2))
  4315. exten => s,n,Macro(hangupcall,)
  4316. exten => s,n(limit),Answer
  4317. exten => s,n,Wait(1)
  4318. exten => s,n,Gosub(macro-user-callerid,lang-playback,1(hook_1))
  4319. exten => s,n,Macro(hangupcall,)
  4320. exten => s,n,Congestion(20)
  4321. exten => s,n(continue),Set(CALLERID(number)=${CALLERID(number):0:40})
  4322. exten => s,n,Set(CALLERID(name)=${CALLERID(name):0:40})
  4323. exten => s,n,GotoIf($["${CALLERID(name)}" = ""]?cnum)
  4324. exten => s,n,Set(CDR(cnam)=${CALLERID(name)})
  4325. exten => s,n(cnum),Set(CDR(cnum)=${CALLERID(num)})
  4326. exten => s,n,Set(CHANNEL(language)=${MASTER_CHANNEL(CHANNEL(language))})
  4327.  
  4328. exten => h,1,Macro(hangupcall,)
  4329.  
  4330. exten => en,1(hook_0),Playback(im-sorry&an-error-has-occurred&with&call-forwarding)
  4331. exten => en,n,Return()
  4332. exten => en,n(hook_1),Playback(beep&im-sorry&your&simul-call-limit-reached&goodbye)
  4333. exten => en,n,Return()
  4334. exten => en,n(hook_2),Playback(im-sorry&an-error-has-occurred)
  4335. exten => en,n,Return()
  4336.  
  4337. exten => ja,1(hook_0),Playback(im-sorry&call-forwarding&jp-no&an-error-has-occured)
  4338. exten => ja,n,Return()
  4339. exten => ja,n(hook_1),Playback(beep&im-sorry&simul-call-limit-reached)
  4340. exten => ja,n,Return()
  4341. exten => ja,n(hook_2),Playback(im-sorry&an-error-has-occured)
  4342. exten => ja,n,Return()
  4343.  
  4344. ;--== end of [macro-user-callerid] ==--;
  4345.  
  4346.  
  4347. [macro-outbound-callerid]
  4348. include => macro-outbound-callerid-custom
  4349. exten => s,1,Noop(${REALCALLERIDNUM})
  4350. exten => s,n,Noop(${KEEPCID})
  4351. exten => s,n,Noop(${OUTKEEPCID_${ARG1}})
  4352. exten => s,n,ExecIf($["${CALLINGNAMEPRES_SV}" != ""]?Set(CALLERPRES(name-pres)=${CALLINGNAMEPRES_SV}))
  4353. exten => s,n,ExecIf($["${CALLINGNUMPRES_SV}" != ""]?Set(CALLERPRES(num-pres)=${CALLINGNUMPRES_SV}))
  4354. exten => s,n,Set(HOTDESCKCHAN=${CUT(CHANNEL,/,2)})
  4355. exten => s,n,Set(HOTDESKEXTEN=${CUT(HOTDESCKCHAN,-,1)})
  4356. exten => s,n,Set(HOTDESKCALL=0)
  4357. exten => s,n,ExecIf($["${DB(EDEVICE/${HOTDESKEXTEN}/user)}"="DummyUser"]?Set(HOTDESKCALL=1))
  4358. exten => s,n,ExecIf($[${HOTDESKCALL}=1]?Set(CALLERID(name)=${DB(EDEVICE/${HOTDESKEXTEN}/location)}))
  4359. exten => s,n,Set(ALLOWTHISROUTE=NO)
  4360. exten => s,n,ExecIf($["${EMERGENCYROUTE}" = "YES"]?Set(ALLOWTHISROUTE=YES))
  4361. exten => s,n,ExecIf($[${HOTDESKCALL}= 1 & ${ALLOWTHISROUTE} = NO ]?Hangup())
  4362. exten => s,n,ExecIf($["${REALCALLERIDNUM:1:2}" = ""]?Set(REALCALLERIDNUM=${CALLERID(number)}))
  4363. exten => s,n,ExecIf($[$["${CIDMASQUERADING}" = "TRUE"] & $[$["${AMPUSER}" = ""] | $["${AMPUSER}" = "${DB(AMPUSER/${FROMEXTEN}/cidnum)}"]]]?Set(AMPUSER=${FROMEXTEN}))
  4364. exten => s,n(start),GotoIf($[ $[${LEN(${REALCALLERIDNUM})} = 0] | $["${KEEPCID}" != "TRUE"] | $["${OUTKEEPCID_${ARG1}}" = "on"] ]?normcid)
  4365. exten => s,n,Set(USEROUTCID=${CALLERID(name)} <${REALCALLERIDNUM}>)
  4366. exten => s,n,GotoIf($["${CIDMASQUERADING}" = "TRUE"]?normcid)
  4367. exten => s,n,GotoIf($["${DB(AMPUSER/${REALCALLERIDNUM}/device)}" = "" & "${DB(DEVICE/${REALCALLERIDNUM}/user)}" = ""]?bypass)
  4368. exten => s,n(normcid),Set(USEROUTCID=${DB(AMPUSER/${AMPUSER}/outboundcid)})
  4369. exten => s,n(bypass),Set(EMERGENCYCID=${DB(DEVICE/${REALCALLERIDNUM}/emergency_cid)})
  4370. exten => s,n,ExecIf($["98${AMPUSER}" = "${HOTDESKEXTEN}"]?Set(SCDEXT=YES))
  4371. exten => s,n,ExecIf($["${EMERGENCYROUTE}" = "YES" & "${SCDEXT}" = "YES"]?Set(EMERGENCYCID=${DB(SANGOMA_CONNECT/PHONE_LOCATION/${AMPUSER}/CALLER_ID)}))
  4372. exten => s,n,ExecIf($["${EMERGENCYROUTE}" = "YES" & "${SCDEXT}" = "YES"]?Set(CALLERID(name)=${DB(SANGOMA_CONNECT/PHONE_LOCATION/${AMPUSER}/LOCATION_NAME)}))
  4373. exten => s,n(hotdesk),ExecIf($[${HOTDESKCALL}= 1]?Set(EMERGENCYCID=${DB(EDEVICE/${HOTDESKEXTEN}/emergency_cid)}))
  4374. exten => s,n,Set(TRUNKOUTCID=${OUTCID_${ARG1}})
  4375. exten => s,n,GotoIf($["${EMERGENCYROUTE:1:2}" = "" | "${EMERGENCYCID:1:2}" = ""]?trunkcid)
  4376. exten => s,n,Set(CALLERID(all)=${EMERGENCYCID})
  4377. exten => s,n,GotoIf($["${CALLERID(name)}" = ""]?cnum)
  4378. exten => s,n,Set(CDR(outbound_cnam)=${CALLERID(name)})
  4379. exten => s,n(cnum),Set(CDR(outbound_cnum)=${CALLERID(num)})
  4380. exten => s,n(exit),MacroExit()
  4381. exten => s,n(trunkcid),ExecIf($[${LEN(${TRUNKOUTCID})} != 0]?Set(CALLERID(all)=${TRUNKOUTCID}))
  4382. exten => s,n(usercid),ExecIf($[${LEN(${USEROUTCID})} != 0]?Set(CALLERID(all)=${USEROUTCID}))
  4383. exten => s,n,ExecIf($[${LEN(${TRUNKCIDOVERRIDE})} != 0 | ${LEN(${FORCEDOUTCID_${ARG1}})} != 0]?Set(CALLERID(all)=${IF($[${LEN(${FORCEDOUTCID_${ARG1}})}=0]?${TRUNKCIDOVERRIDE}:${FORCEDOUTCID_${ARG1}})}))
  4384. exten => s,n,ExecIf($["${QCALLBACK}" = "1" & ${LEN(${FORCEDOUTCID_${ARG1}})} = 0]?Set(CALLERID(all)=${REALCALLERIDNUM}))
  4385. exten => s,n,ExecIf($[${LEN(${CALLERIDNUMINTERNAL})} = 0 & ${LEN(${AMPUSER})} = 0 & ${LEN(${USEROUTCID})} = 0 & "${OUTKEEPCID_${ARG1}}" ="off" & ${LEN(${REALCALLERIDNUM})} != 0 ]?Set(CALLERID(all)=${REALCALLERIDNUM}))
  4386. exten => s,n,Set(TIOHIDE=no)
  4387. exten => s,n(hidecid),ExecIf($["${CALLERID(name)}"="hidden"]?Set(CALLERPRES(name-pres)=prohib_passed_screen))
  4388. exten => s,n,ExecIf($["${CALLERID(name)}"="hidden"]?Set(CALLERPRES(num-pres)=prohib_passed_screen))
  4389. exten => s,n,ExecIf($["${TIOHIDE}"="yes"]?Set(CALLERPRES(name-pres)=prohib_passed_screen))
  4390. exten => s,n,ExecIf($["${TIOHIDE}"="yes"]?Set(CALLERPRES(num-pres)=prohib_passed_screen))
  4391. exten => s,n,Set(CDR(outbound_cnum)=${CALLERID(num)})
  4392. exten => s,n,Set(CDR(outbound_cnam)=${CALLERID(name)})
  4393.  
  4394. ;--== end of [macro-outbound-callerid] ==--;
  4395.  
  4396.  
  4397. [from-zaptel]
  4398. include => from-zaptel-custom
  4399. include => from-dahdi
  4400. exten => foo,1,Noop(bar)
  4401.  
  4402. ;--== end of [from-zaptel] ==--;
  4403.  
  4404.  
  4405. [from-dahdi]
  4406. include => from-dahdi-custom
  4407. exten => _X.,1,Set(DID=${EXTEN})
  4408. exten => _X.,n,Goto(s,1)
  4409.  
  4410. exten => s,1,Noop(Entering from-dahdi with DID == ${DID})
  4411. exten => s,n,Ringing()
  4412. exten => s,n,Set(DID=${IF($["${DID}"= ""]?s:${DID})})
  4413. exten => s,n,Noop(DID is now ${DID})
  4414. exten => s,n,GotoIf($["${CHANNEL:0:5}"="DAHDI"]?dahdiok:checkzap)
  4415. exten => s,n(checkzap),GotoIf($["${CHANNEL:0:3}"="Zap"]?zapok:neither)
  4416. exten => s,n(neither),Goto(from-pstn,${DID},1)
  4417. exten => s,n,Macro(Hangupcall,dummy)
  4418. exten => s,n(dahdiok),Noop(Is a DAHDi Channel)
  4419. exten => s,n,Set(CHAN=${CHANNEL:6})
  4420. exten => s,n,Set(CHAN=${CUT(CHAN,-,1)})
  4421. exten => s,n,Macro(from-dahdi-${CHAN},${DID},1)
  4422. exten => s,n,Noop(Returned from Macro from-dahdi-${CHAN})
  4423. exten => s,n,Goto(from-pstn,${DID},1)
  4424. exten => s,n(zapok),Noop(Is a Zaptel Channel)
  4425. exten => s,n,Set(CHAN=${CHANNEL:4})
  4426. exten => s,n,Set(CHAN=${CUT(CHAN,-,1)})
  4427. exten => s,n,Macro(from-dahdi-${CHAN},${DID},1)
  4428. exten => s,n,Noop(Returned from Macro from-dahdi-${CHAN})
  4429. exten => s,n,Goto(from-pstn,${DID},1)
  4430.  
  4431. ;--== end of [from-dahdi] ==--;
  4432.  
  4433.  
  4434. [macro-dial-confirm]
  4435. include => macro-dial-confirm-custom
  4436. exten => s,1,Set(DB(RG/${ARG4}/${CHANNEL})=RINGING)
  4437. exten => s,n,Set(__UNIQCHAN=${CHANNEL})
  4438. exten => s,n,Set(USE_CONFIRMATION=TRUE)
  4439. exten => s,n,Set(RINGGROUP_INDEX=${ARG4})
  4440. exten => s,n,Set(FORCE_CONFIRM=)
  4441. exten => s,n,Set(ARG4=)
  4442. exten => s,n,Macro(dial,${ARG1},${ARG2},${ARG3})
  4443. exten => s,n,Noop(Deleting: RG/${RINGGROUP_INDEX}/${CHANNEL} ${DB_DELETE(RG/${RINGGROUP_INDEX}/${CHANNEL})})
  4444. exten => s,n,Set(USE_CONFIRMATION=)
  4445. exten => s,n,Set(RINGGROUP_INDEX=)
  4446.  
  4447. ;--== end of [macro-dial-confirm] ==--;
  4448.  
  4449.  
  4450. [macro-setmusic]
  4451. include => macro-setmusic-custom
  4452. exten => s,1,Set(CHANNEL(musicclass)=${ARG1})
  4453.  
  4454. ;--== end of [macro-setmusic] ==--;
  4455.  
  4456.  
  4457. [macro-block-cf]
  4458. include => macro-block-cf-custom
  4459. exten => _X.,1,Hangup
  4460.  
  4461. ;--== end of [macro-block-cf] ==--;
  4462.  
  4463.  
  4464. [macro-vm]
  4465. include => macro-vm-custom
  4466. exten => s,1,Macro(user-callerid,SKIPTTL)
  4467. exten => s,n,Set(VMGAIN=${IF($["foo${VM_GAIN}"!="foo"]?"g(${VM_GAIN})": )})
  4468. exten => s,n,Macro(blkvm-check,)
  4469. exten => s,n,GotoIf($["${GOSUB_RETVAL}" != "TRUE"]?vmx,1)
  4470. exten => s,n,Hangup
  4471.  
  4472. exten => vmx,1,Set(__EXTTOCALL=${ARG1})
  4473. exten => vmx,n,Set(__CRM_VOICEMAIL=${ARG1})
  4474. exten => vmx,n,Set(MEXTEN=${ARG1})
  4475. exten => vmx,n,Set(MMODE=${ARG2})
  4476. exten => vmx,n,Set(RETVM=${ARG3})
  4477. exten => vmx,n,Set(MODE=${IF($["${MMODE}"="BUSY"]?busy:unavail)})
  4478. exten => vmx,n,Macro(get-vmcontext,${MEXTEN})
  4479. exten => vmx,n,Set(MODE=${IF($[(${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/temp.wav)} = 1) || (${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/temp.WAV)} = 1)]?temp:${MODE})})
  4480. exten => vmx,n,Noop(MODE IS: ${MODE})
  4481. exten => vmx,n,GotoIf($["${DB(AMPUSER/${MEXTEN}/vmx/${MODE}/state)}" != "enabled"]?chknomsg)
  4482. exten => vmx,n,Set(VM_OPTS=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/vmxopts/timeout)}" = "1"]?${DB_RESULT}:${VM_OPTS})})
  4483. exten => vmx,n(chknomsg),GotoIf($["${MMODE}"="NOMESSAGE"]?s-${MMODE},1)
  4484. exten => vmx,n,GotoIf($["${MMODE}" != "DIRECTDIAL"]?notdirect)
  4485. exten => vmx,n,Set(MODE=${IF($["${REGEX("[b]" ${VM_DDTYPE})}" = "1"]?busy:${MODE})})
  4486. exten => vmx,n(notdirect),Noop(Checking if ext ${MEXTEN} is enabled: ${DB(AMPUSER/${MEXTEN}/vmx/${MODE}/state)})
  4487. exten => vmx,n,GotoIf($["${DB(AMPUSER/${MEXTEN}/vmx/${MODE}/state)}" != "enabled"]?s-${MMODE},1)
  4488. exten => vmx,n,GotoIf($[(${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/temp.wav)} = 1) || (${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/temp.WAV)} = 1)]?tmpgreet)
  4489. exten => vmx,n,GotoIf($[(${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/${MODE}.wav)} = 0) && (${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/${MODE}.WAV)} = 0)]?nofile)
  4490. exten => vmx,n,Set(VMX_TIMEOUT=2)
  4491. exten => vmx,n,Set(VMX_REPEAT=1)
  4492. exten => vmx,n,Set(VMX_LOOPS=1)
  4493. exten => vmx,n,Set(LOOPCOUNT=0)
  4494. exten => vmx,n,Set(VMX_REPEAT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/repeat)}" = "1"]?${DB_RESULT}:${VMX_REPEAT})})
  4495. exten => vmx,n(vmxtime),Set(VMX_TIMEOUT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/timeout)}" = "1"]?${DB_RESULT}:${VMX_TIMEOUT})})
  4496. exten => vmx,n(vmxloops),Set(VMX_LOOPS=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/loops)}" = "1"]?${DB_RESULT}:${VMX_LOOPS})})
  4497. exten => vmx,n(vmxanswer),Answer
  4498. exten => vmx,n(loopstart),Read(ACTION,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/${MODE},1,skip,${VMX_REPEAT},${VMX_TIMEOUT})
  4499. exten => vmx,n,GotoIf($["${EXISTS(${ACTION})}" = "1"]?checkopt)
  4500. exten => vmx,n(noopt),Noop(Timeout: going to timeout dest)
  4501. exten => vmx,n,Set(VMX_OPTS=${DB(AMPUSER/${MEXTEN}/vmx/${MODE}/vmxopts/timeout)})
  4502. exten => vmx,n(chktime),GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/timedest/ext)}" = "0"]?dotime)
  4503. exten => vmx,n,Set(VMX_TIMEDEST_EXT=${DB_RESULT})
  4504. exten => vmx,n,Set(VMX_TIMEDEST_CONTEXT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/timedest/context)}" = "1"]?${DB_RESULT}:${VMX_TIMEDEST_CONTEXT})})
  4505. exten => vmx,n(timepri),Set(VMX_TIMEDEST_PRI=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/timedest/pri)}" = "1"]?${DB_RESULT}:${VMX_TIMEDEST_PRI})})
  4506. exten => vmx,n(dotime),Goto(${VMX_TIMEDEST_CONTEXT},${VMX_TIMEDEST_EXT},${VMX_TIMEDEST_PRI})
  4507. exten => vmx,n(checkopt),GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/${ACTION}/ext)}" = "1"]?doopt)
  4508. exten => vmx,n,GotoIf($["${ACTION}" = "0"]?o,1)
  4509. exten => vmx,n,GotoIf($["${ACTION}" = "*"]?adef,1)
  4510. exten => vmx,n,Set(LOOPCOUNT=$[${LOOPCOUNT} + 1])
  4511. exten => vmx,n,GotoIf($["${LOOPCOUNT}" > "${VMX_LOOPS}"]?toomany)
  4512. exten => vmx,n,Playback(pm-invalid-option&please-try-again)
  4513. exten => vmx,n,Goto(loopstart)
  4514. exten => vmx,n(toomany),Noop(Too Many invalid entries, got to invalid dest)
  4515. exten => vmx,n,Set(VMX_OPTS=${VMX_OPTS_LOOP})
  4516. exten => vmx,n,Set(VMX_OPTS=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/vmxopts/loops)}" = "1"]?${DB_RESULT}:${VMX_OPTS})})
  4517. exten => vmx,n(chkloop),GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/loopdest/ext)}" = "0"]?doloop)
  4518. exten => vmx,n,Set(VMX_LOOPDEST_EXT=${DB_RESULT})
  4519. exten => vmx,n,Set(VMX_LOOPDEST_CONTEXT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/loopdest/context)}" = "1"]?${DB_RESULT}:${VMX_LOOPDEST_CONTEXT})})
  4520. exten => vmx,n(looppri),Set(VMX_LOOPDEST_PRI=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/loopdest/pri)}" = "1"]?${DB_RESULT}:${VMX_LOOPDEST_PRI})})
  4521. exten => vmx,n(doloop),Goto(${VMX_LOOPDEST_CONTEXT},${VMX_LOOPDEST_EXT},${VMX_LOOPDEST_PRI})
  4522. exten => vmx,n(doopt),Noop(Got a valid option: ${DB_RESULT})
  4523. exten => vmx,n,Set(VMX_EXT=${DB_RESULT})
  4524. exten => vmx,n,GotoIf($["${VMX_EXT}" != "dovm"]?getdest)
  4525. exten => vmx,n(vmxopts),Set(VMX_OPTS=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/vmxopts/dovm)}" = "1"]?${DB_RESULT}:${VMX_OPTS_DOVM})})
  4526. exten => vmx,n(vmxdovm),Goto(dovm,1)
  4527. exten => vmx,n(getdest),Set(VMX_CONTEXT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/${ACTION}/context)}" = "1"]?${DB_RESULT}:${VMX_CONTEXT})})
  4528. exten => vmx,n(vmxpri),Set(VMX_PRI=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/${ACTION}/pri)}" = "1"]?${DB_RESULT}:${VMX_PRI})})
  4529. exten => vmx,n(vmxgoto),Goto(${VMX_CONTEXT},${VMX_EXT},${VMX_PRI})
  4530. exten => vmx,n(nofile),Noop(File for mode: ${MODE} does not exist, SYSTEMSTATUS: ${SYSTEMSTATUS}, going to normal voicemail)
  4531. exten => vmx,n,Goto(s-${MMODE},1)
  4532. exten => vmx,n(tmpgreet),Noop(Temporary Greeting Detected, going to normal voicemail)
  4533. exten => vmx,n,Goto(s-${MMODE},1)
  4534.  
  4535. exten => dovm,1,Noop(VMX Timeout - go to voicemail)
  4536. exten => dovm,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VMX_OPTS}${VMGAIN})
  4537. exten => dovm,n,Goto(exit-${VMSTATUS},1)
  4538.  
  4539. exten => s-BUSY,1,Noop(BUSY voicemail)
  4540. exten => s-BUSY,n,Macro(get-vmcontext,${MEXTEN})
  4541. exten => s-BUSY,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VM_OPTS}b${VMGAIN})
  4542. exten => s-BUSY,n,Goto(exit-${VMSTATUS},1)
  4543.  
  4544. exten => s-NOMESSAGE,1,Noop(NOMESSAGE (beep only) voicemail)
  4545. exten => s-NOMESSAGE,n,Macro(get-vmcontext,${MEXTEN})
  4546. exten => s-NOMESSAGE,n,VoiceMail(${MEXTEN}@${VMCONTEXT},s${VM_OPTS}${VMGAIN})
  4547. exten => s-NOMESSAGE,n,Goto(exit-${VMSTATUS},1)
  4548.  
  4549. exten => s-INSTRUCT,1,Noop(NOMESSAGE (beeb only) voicemail)
  4550. exten => s-INSTRUCT,n,Macro(get-vmcontext,${MEXTEN})
  4551. exten => s-INSTRUCT,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VM_OPTS}${VMGAIN})
  4552. exten => s-INSTRUCT,n,Goto(exit-${VMSTATUS},1)
  4553.  
  4554. exten => s-DIRECTDIAL,1,Noop(DIRECTDIAL voicemail)
  4555. exten => s-DIRECTDIAL,n,Macro(get-vmcontext,${MEXTEN})
  4556. exten => s-DIRECTDIAL,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VM_OPTS}${VM_DDTYPE}${VMGAIN})
  4557. exten => s-DIRECTDIAL,n,Goto(exit-${VMSTATUS},1)
  4558.  
  4559. exten => _s-.,1,Macro(get-vmcontext,${MEXTEN})
  4560. exten => _s-.,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VM_OPTS}u${VMGAIN})
  4561. exten => _s-.,n,Goto(exit-${VMSTATUS},1)
  4562.  
  4563. exten => o,1,Playback(one-moment-please)
  4564. exten => o,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/0/ext)}" = "0"]?doopdef)
  4565. exten => o,n,Set(VMX_OPDEST_EXT=${DB_RESULT})
  4566. exten => o,n(opcontext),Set(VMX_OPDEST_CONTEXT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/0/context)}" = "1"]?${DB_RESULT}:${VMX_CONTEXT})})
  4567. exten => o,n(oppri),Set(VMX_OPDEST_PRI=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/0/pri)}" = "1"]?${DB_RESULT}:${VMX_PRI})})
  4568. exten => o,n,Goto(${VMX_OPDEST_CONTEXT},${VMX_OPDEST_EXT},${VMX_OPDEST_PRI})
  4569. exten => o,n(doopdef),GotoIf($["x${OPERATOR_XTN}"="x"]?nooper:from-internal,${OPERATOR_XTN},1)
  4570. exten => o,n(nooper),GotoIf($["x${FROM_DID}"="x"]?nodid)
  4571. exten => o,n,Dial(Local/${FROM_DID}@from-pstn,)
  4572. exten => o,n,Macro(hangup,)
  4573. exten => o,n(nodid),Dial(Local/s@from-pstn,)
  4574. exten => o,n,Macro(hangup,)
  4575.  
  4576. exten => a,1,Macro(get-vmcontext,${MEXTEN})
  4577. exten => a,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/novmstar)}" = "1"]?s,1)
  4578. exten => a,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/*/ext)}" = "0"]?adef,1)
  4579. exten => a,n,Set(VMX_ADEST_EXT=${DB_RESULT})
  4580. exten => a,n(acontext),Set(VMX_ADEST_CONTEXT=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/*/context)}" = "1"]?${DB_RESULT}:${VMX_CONTEXT})})
  4581. exten => a,n(apri),Set(VMX_ADEST_PRI=${IF($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/*/pri)}" = "1"]?${DB_RESULT}:${VMX_PRI})})
  4582. exten => a,n,Goto(${VMX_ADEST_CONTEXT},${VMX_ADEST_EXT},${VMX_ADEST_PRI})
  4583.  
  4584. exten => adef,1,VoiceMailMain(${MEXTEN}@${VMCONTEXT})
  4585. exten => adef,n,GotoIf($["${RETVM}" = "RETURN"]?exit-RETURN,1)
  4586. exten => adef,n,Hangup
  4587.  
  4588. exten => exit-FAILED,1,Playback(im-sorry&an-error-has-occurred)
  4589. exten => exit-FAILED,n,GotoIf($["${RETVM}" = "RETURN"]?exit-RETURN,1)
  4590. exten => exit-FAILED,n,Hangup
  4591.  
  4592. exten => exit-SUCCESS,1,GotoIf($["${RETVM}" = "RETURN"]?exit-RETURN,1)
  4593. exten => exit-SUCCESS,n,Playback(goodbye)
  4594. exten => exit-SUCCESS,n,Hangup
  4595.  
  4596. exten => exit-USEREXIT,1,GotoIf($["${RETVM}" = "RETURN"]?exit-RETURN,1)
  4597. exten => exit-USEREXIT,n,Playback(goodbye)
  4598. exten => exit-USEREXIT,n,Hangup
  4599.  
  4600. exten => exit-RETURN,1,Noop(Returning From Voicemail because macro)
  4601. exten => exit-RETURN,n,GotoIf($["${RETVM}" = "RETURN"]?ext-local,vmret,1)
  4602.  
  4603. exten => t,1,Hangup
  4604.  
  4605. ;--== end of [macro-vm] ==--;
  4606.  
  4607.  
  4608. [macro-exten-vm]
  4609. include => macro-exten-vm-custom
  4610. exten => s,1,Macro(user-callerid,)
  4611. exten => s,n,Set(RingGroupMethod=none)
  4612. exten => s,n,Set(__EXTTOCALL=${ARG2})
  4613. exten => s,n,Set(__PICKUPMARK=${ARG2})
  4614. exten => s,n,Set(RT=${IF($["${ARG1}"!="novm" | "${DB(CFU/${EXTTOCALL})}"!="" | "${DB(CFB/${EXTTOCALL})}"!="" | "${ARG3}"="1" | "${ARG4}"="1" | "${ARG5}"="1"]?${RINGTIMER}:)})
  4615. 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}))
  4616. exten => s,n,ExecIf($[$["${REDIRECTING(reason)}" = "send_to_vm" | "${SIP_HEADER(X-Digium-Call-Feature)}" = "feature_send_to_vm"] & "${ARG1}" != "novm"]?MacroExit())
  4617. exten => s,n,ExecIf($[$["${PJSIP_HEADER(read,X-Digium-Call-Feature)}" = "feature_send_to_vm"] & "${ARG1}" != "novm"]?Macro(vm,${ARG1},DIRECTDIAL,${IVR_RETVM}))
  4618. exten => s,n,ExecIf($[$["${PJSIP_HEADER(read,X-Digium-Call-Feature)}" = "feature_send_to_vm"] & "${ARG1}" != "novm"]?MacroExit())
  4619. exten => s,n,ExecIf($["${PJSIP_HEADER(read,X-Digium-Call-Feature)}" = "feature_monitor"]?ChanSpy(${DB(DEVICE/${EXTTOCALL}/dial)},q))
  4620. exten => s,n,ExecIf($["${PJSIP_HEADER(read,X-Digium-Call-Feature)}" = "feature_monitor"]?MacroExit())
  4621. exten => s,n,ExecIf($["${SIP_HEADER(X-Digium-Call-Feature)}" = "feature_monitor"]?ChanSpy(${DB(DEVICE/${EXTTOCALL}/dial)},q))
  4622. exten => s,n,ExecIf($["${SIP_HEADER(X-Digium-Call-Feature)}" = "feature_monitor"]?MacroExit())
  4623. exten => s,n,ExecIf($["${PJSIP_HEADER(read,X-Digium-Call-Feature)}" = "feature_intercom"]?Gosub(ext-intercom,${INTERCOMCODE}${EXTTOCALL},1()))
  4624. exten => s,n,ExecIf($["${PJSIP_HEADER(read,X-Digium-Call-Feature)}" = "feature_intercom"]?MacroExit())
  4625. exten => s,n,ExecIf($["${SIP_HEADER(X-Digium-Call-Feature)}" = "feature_intercom"]?Gosub(ext-intercom,${INTERCOMCODE}${EXTTOCALL},1()))
  4626. exten => s,n,ExecIf($["${SIP_HEADER(X-Digium-Call-Feature)}" = "feature_intercom"]?MacroExit())
  4627. exten => s,n(checkrecord),Gosub(sub-record-check,s,1(exten,${EXTTOCALL},dontcare))
  4628. exten => s,n,GotoIf($["${CUT(CHANNEL,@,2):5:5}"="queue"|"${AMPUSER}"=""|${LEN(${FROM_DID})}|"${DB(AMPUSER/${EXTTOCALL}/answermode)}"!="intercom"|${LEN(${BLINDTRANSFER})}|"${EXTENSION_STATE(${EXTTOCALL}@ext-local)}"!="NOT_INUSE"|"${CC_RECALL}"!=""]?macrodial)
  4629. exten => s,n,Set(INTERCOM_EXT_DOPTIONS=${DIAL_OPTIONS})
  4630. exten => s,n,Set(INTERCOM_RETURN=TRUE)
  4631. exten => s,n,Gosub(ext-intercom,*80${EXTTOCALL},1())
  4632. exten => s,n,Set(INTERCOM_RETURN=)
  4633. exten => s,n,Set(INTERCOM_EXT_DOPTIONS=)
  4634. exten => s,n(macrodial),GosubIf($["${INTERCOM_CALL}"="TRUE" & ${LEN(${BLINDTRANSFER})}]?clrheader,1())
  4635. exten => s,n,Macro(dial-one,${RT},${DIAL_OPTIONS},${EXTTOCALL})
  4636. exten => s,n,Set(SV_DIALSTATUS=${DIALSTATUS})
  4637. exten => s,n(calldocfu),GosubIf($[("${SV_DIALSTATUS}"="NOANSWER"|"${SV_DIALSTATUS}"="CHANUNAVAIL") & "${DB(CFU/${EXTTOCALL})}"!="" & "${SCREEN}"=""]?docfu,1())
  4638. exten => s,n(calldocfb),GosubIf($["${SV_DIALSTATUS}"="BUSY" & "${DB(CFB/${EXTTOCALL})}"!="" & "${SCREEN}"=""]?docfb,1())
  4639. exten => s,n,Set(DIALSTATUS=${SV_DIALSTATUS})
  4640. exten => s,n,ExecIf($[("${DIALSTATUS}"="NOANSWER"&"${ARG3}"="1")|("${DIALSTATUS}"="BUSY"&"${ARG4}"="1")|("${DIALSTATUS}"="CHANUNAVAIL"&"${ARG5}"="1")]?MacroExit())
  4641. exten => s,n,GotoIf($["${ARG1}"="novm"]?s-${DIALSTATUS},1)
  4642. exten => s,n,Macro(vm,${ARG1},${DIALSTATUS},${IVR_RETVM})
  4643.  
  4644. exten => docfu,1(docfu),ExecIf($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="-1"|("${ARG1}"="novm"&"${ARG3}"="1")]?StackPop())
  4645. exten => docfu,n,GotoIf($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="-1"|("${ARG1}"="novm"&"${ARG3}"="1")]?from-internal,${DB(CFU/${EXTTOCALL})},1)
  4646. exten => docfu,n,Set(RTCF=${IF($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="0"]?${RT}:${DB(AMPUSER/${EXTTOCALL}/cfringtimer)})})
  4647. exten => docfu,n,ExecIf($["${DIRECTION}" = "INBOUND"]?Set(DIAL_OPTIONS=${STRREPLACE(DIAL_OPTIONS,T)}))
  4648. exten => docfu,n,Dial(Local/${DB(CFU/${EXTTOCALL})}@from-internal/n,${RTCF},${DIAL_OPTIONS})
  4649. exten => docfu,n,Return()
  4650.  
  4651. exten => docfb,1(docfu),ExecIf($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="-1"|("${ARG1}"="novm"&"${ARG4}"="1")]?StackPop())
  4652. exten => docfb,n,GotoIf($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="-1"|("${ARG1}"="novm"&"${ARG4}"="1")]?from-internal,${DB(CFB/${EXTTOCALL})},1)
  4653. exten => docfb,n,Set(RTCF=${IF($["${DB(AMPUSER/${EXTTOCALL}/cfringtimer)}"="0"]?${RT}:${DB(AMPUSER/${EXTTOCALL}/cfringtimer)})})
  4654. exten => docfb,n,ExecIf($["${DIRECTION}" = "INBOUND"]?Set(DIAL_OPTIONS=${STRREPLACE(DIAL_OPTIONS,T)}))
  4655. exten => docfb,n,Dial(Local/${DB(CFB/${EXTTOCALL})}@from-internal/n,${RTCF},${DIAL_OPTIONS})
  4656. exten => docfb,n,Return()
  4657.  
  4658. exten => clrheader,1,ExecIf($[${LEN(${SIPURI})}&"${SIPURI}"="${SIP_URI_OPTIONS}"]?Set(SIP_URI_OPTIONS=))
  4659. exten => clrheader,n,ExecIf($[${LEN(${ALERTINFO})}]?SIPRemoveHeader(${ALERTINFO}))
  4660. exten => clrheader,n,ExecIf($[${LEN(${CALLINFO})}]?SIPRemoveHeader(${CALLINFO}))
  4661. exten => clrheader,n,Return()
  4662.  
  4663. exten => s-BUSY,1,GotoIf($["${IVR_RETVM}"="RETURN" & "${IVR_CONTEXT}"!=""]?exit,1)
  4664. exten => s-BUSY,n,Playtones(busy)
  4665. exten => s-BUSY,n,Busy(20)
  4666.  
  4667. exten => _s-!,1,GotoIf($["${IVR_RETVM}"="RETURN" & "${IVR_CONTEXT}"!=""]?exit,1)
  4668. exten => _s-!,n,Playtones(congestion)
  4669. exten => _s-!,n,Congestion(10)
  4670.  
  4671. exten => exit,1,Playback(beep&line-busy-transfer-menu&silence/1)
  4672. exten => exit,n,MacroExit()
  4673.  
  4674. ;--== end of [macro-exten-vm] ==--;
  4675.  
  4676.  
  4677. [macro-simple-dial]
  4678. include => macro-simple-dial-custom
  4679. exten => s,1,Set(__EXTTOCALL=${ARG1})
  4680. exten => s,n,Set(RT=${ARG2})
  4681. exten => s,n,Set(CFUEXT=${DB(CFU/${EXTTOCALL})})
  4682. exten => s,n,Set(CFBEXT=${DB(CFB/${EXTTOCALL})})
  4683. exten => s,n,Set(CWI_TMP=${CWIGNORE})
  4684. exten => s,n(macrodial),Macro(dial-one,${RT},${DIAL_OPTIONS},${EXTTOCALL})
  4685. exten => s,n,Set(__CWIGNORE=${CWI_TMP})
  4686. exten => s,n,Set(PR_DIALSTATUS=${DIALSTATUS})
  4687. exten => s,n(calldocfu),GosubIf($["${PR_DIALSTATUS}"="NOANSWER" & "${CFUEXT}"!=""]?docfu,1())
  4688. exten => s,n(calldocfb),GosubIf($["${PR_DIALSTATUS}"="BUSY" & "${CFBEXT}"!=""]?docfb,1())
  4689. exten => s,n,Set(DIALSTATUS=${PR_DIALSTATUS})
  4690. exten => s,n,Goto(s-${DIALSTATUS},1)
  4691.  
  4692. exten => docfu,1,GotoIf($["${DB(AMPUSER/${CFUEXT}/device)}" = "" ]?chlocal)
  4693. exten => docfu,n,Dial(Local/${CFUEXT}@ext-local,${RT},${DIAL_OPTIONS})
  4694. exten => docfu,n,Return()
  4695. exten => docfu,n(chlocal),ExecIf($["${DIRECTION}" = "INBOUND"]?Set(DIAL_OPTIONS=${STRREPLACE(DIAL_OPTIONS,T)}))
  4696. exten => docfu,n,Dial(Local/${CFUEXT}@from-internal/n,${RT},${DIAL_OPTIONS})
  4697. exten => docfu,n,Return()
  4698.  
  4699. exten => docfb,1,GotoIf($["${DB(AMPUSER/${CFBEXT}/device)}" = "" ]?chlocal)
  4700. exten => docfb,n,Dial(Local/${CFBEXT}@ext-local,${RT},${DIAL_OPTIONS})
  4701. exten => docfb,n,Return()
  4702. exten => docfb,n(chlocal),ExecIf($["${DIRECTION}" = "INBOUND"]?Set(DIAL_OPTIONS=${STRREPLACE(DIAL_OPTIONS,T)}))
  4703. exten => docfb,n,Dial(Local/${CFBEXT}@from-internal/n,${RT},${DIAL_OPTIONS})
  4704. exten => docfb,n,Return()
  4705.  
  4706. exten => _s-.,1,Noop(Extension is reporting ${EXTEN})
  4707.  
  4708. ;--== end of [macro-simple-dial] ==--;
  4709.  
  4710.  
  4711. [originate-skipvm]
  4712. include => originate-skipvm-custom
  4713. exten => _.X,1,Macro(blkvm-set,)
  4714. exten => _.X,n,Goto(from-internal,${EXTEN},1)
  4715.  
  4716. ;--== end of [originate-skipvm] ==--;
  4717.  
  4718.  
  4719. [macro-blkvm-setifempty]
  4720. include => macro-blkvm-setifempty-custom
  4721. exten => s,1,GotoIf($[!${EXISTS(${BLKVM_CHANNEL})}]?init)
  4722. exten => s,n,Set(GOSUB_RETVAL=${SHARED(BLKVM,${BLKVM_CHANNEL})})
  4723. exten => s,n,MacroExit()
  4724. exten => s,n(init),Set(__BLKVM_CHANNEL=${CHANNEL})
  4725. exten => s,n,Set(SHARED(BLKVM,${BLKVM_CHANNEL})=TRUE)
  4726. exten => s,n,Set(GOSUB_RETVAL=TRUE)
  4727. exten => s,n,MacroExit()
  4728.  
  4729. ;--== end of [macro-blkvm-setifempty] ==--;
  4730.  
  4731.  
  4732. [macro-blkvm-set]
  4733. include => macro-blkvm-set-custom
  4734. exten => s,1,ExecIf($[!${EXISTS(${BLKVM_CHANNEL})} | "{ARG1}" = "reset"]?Set(__BLKVM_CHANNEL=${CHANNEL}))
  4735. exten => s,n,Set(SHARED(BLKVM,${BLKVM_CHANNEL})=TRUE)
  4736. exten => s,n,Set(GOSUB_RETVAL=TRUE)
  4737. exten => s,n,MacroExit()
  4738.  
  4739. ;--== end of [macro-blkvm-set] ==--;
  4740.  
  4741.  
  4742. [macro-blkvm-clr]
  4743. include => macro-blkvm-clr-custom
  4744. exten => s,1,Set(SHARED(BLKVM,${BLKVM_CHANNEL})=)
  4745. exten => s,n,Set(GOSUB_RETVAL=)
  4746. exten => s,n,MacroExit()
  4747.  
  4748. ;--== end of [macro-blkvm-clr] ==--;
  4749.  
  4750.  
  4751. [macro-blkvm-check]
  4752. include => macro-blkvm-check-custom
  4753. exten => s,1,Set(GOSUB_RETVAL=${SHARED(BLKVM,${BLKVM_CHANNEL})})
  4754. exten => s,n,ExecIf($["${GOSUB_RETVAL}"="" & "${CC_RECALL}"="1"]?Set(GOSUB_RETVAL=TRUE))
  4755. exten => s,n,MacroExit()
  4756.  
  4757. ;--== end of [macro-blkvm-check] ==--;
  4758.  
  4759.  
  4760. [macro-hangupcall]
  4761. include => macro-hangupcall-custom
  4762. exten => s,1(start),GotoIf($["${USE_CONFIRMATION}"="" | "${RINGGROUP_INDEX}"="" | "${CHANNEL}"!="${UNIQCHAN}"]?theend)
  4763. exten => s,n(delrgi),Noop(Deleting: RG/${RINGGROUP_INDEX}/${CHANNEL} ${DB_DELETE(RG/${RINGGROUP_INDEX}/${CHANNEL})})
  4764. exten => s,n(theend),ExecIf($["${ONETOUCH_RECFILE}"!="" & "${CDR(recordingfile)}"=""]?Set(CDR(recordingfile)=${ONETOUCH_RECFILE}))
  4765. exten => s,n(hangup),Hangup
  4766. exten => s,n,MacroExit()
  4767.  
  4768. ;--== end of [macro-hangupcall] ==--;
  4769.  
  4770.  
  4771. [macro-user-logon]
  4772. include => macro-user-logon-custom
  4773. exten => s,1,Set(DEVICETYPE=${DB(DEVICE/${CALLERID(number)}/type)})
  4774. exten => s,n,Answer
  4775. exten => s,n,Wait(1)
  4776. exten => s,n,GotoIf($["${DEVICETYPE}" = "fixed"]?s-FIXED,1)
  4777. exten => s,n,Set(AMPUSER=${ARG1})
  4778. exten => s,n,GotoIf($["${AMPUSER}" != ""]?gotpass)
  4779. exten => s,n,Read(AMPUSER,please-enter-your-extension-then-press-pound,,,4,)
  4780. exten => s,n,GotoIf($["${AMPUSER}" = ""]?s-MAXATTEMPTS,1)
  4781. exten => s,n(gotpass),GotoIf($["${DB_EXISTS(AMPUSER/${AMPUSER}/password)}" = "0"]?s-NOUSER,1)
  4782. exten => s,n,Set(AMPUSERPASS=${DB_RESULT})
  4783. exten => s,n,GotoIf($[${LEN(${AMPUSERPASS})} = 0]?s-NOPASSWORD,1)
  4784. exten => s,n,Set(DEVICEUSER=${DB(DEVICE/${CALLERID(number)}/user)})
  4785. exten => s,n,GotoIf($["${DEVICEUSER}" = "${AMPUSER}"]?s-ALREADYLOGGEDON,1)
  4786. exten => s,n,Authenticate(${AMPUSERPASS},)
  4787. exten => s,n,AGI(agi://127.0.0.1/user_login_out.agi,login,${CALLERID(number)},${AMPUSER})
  4788. exten => s,n,Playback(agent-loginok)
  4789.  
  4790. exten => s-FIXED,1,Noop(Device is FIXED and cannot be logged into)
  4791. exten => s-FIXED,n,SayNumber(${CALLERID(number)},f)
  4792. exten => s-FIXED,n,Playback(vm-isunavail&vm-goodbye)
  4793. exten => s-FIXED,n,Hangup
  4794.  
  4795. exten => s-ALREADYLOGGEDON,1,Noop(This device has already been logged into by this user)
  4796. exten => s-ALREADYLOGGEDON,n,Playback(vm-goodbye)
  4797. exten => s-ALREADYLOGGEDON,n,Hangup
  4798.  
  4799. exten => s-NOPASSWORD,1,Noop(This extension does not exist or no password is set)
  4800. exten => s-NOPASSWORD,n,Playback(pbx-invalid)
  4801. exten => s-NOPASSWORD,n,Hangup
  4802.  
  4803. exten => s-MAXATTEMPTS,1,Noop(Too many login attempts)
  4804. exten => s-MAXATTEMPTS,n,Playback(vm-goodbye)
  4805. exten => s-MAXATTEMPTS,n,Hangup
  4806.  
  4807. exten => s-NOUSER,1,Noop(Invalid extension ${AMPUSER} entered)
  4808. exten => s-NOUSER,n,Playback(pbx-invalid)
  4809. exten => s-NOUSER,n,Goto(s,playagain)
  4810.  
  4811. ;--== end of [macro-user-logon] ==--;
  4812.  
  4813.  
  4814. [macro-user-logoff]
  4815. include => macro-user-logoff-custom
  4816. exten => s,1,Set(DEVICETYPE=${DB(DEVICE/${CALLERID(number)}/type)})
  4817. exten => s,n,GotoIf($["${DEVICETYPE}" = "fixed"]?s-FIXED,1)
  4818. exten => s,n,AGI(agi://127.0.0.1/user_login_out.agi,logout,${CALLERID(number)})
  4819. exten => s,n(done),Playback(agent-loggedoff)
  4820.  
  4821. exten => s-FIXED,1,Noop(Device is FIXED and cannot be logged into)
  4822. exten => s-FIXED,n,Playback(an-error-has-occured&vm-goodbye)
  4823. exten => s-FIXED,n,Hangup
  4824.  
  4825. ;--== end of [macro-user-logoff] ==--;
  4826.  
  4827.  
  4828. [macro-dial-one]
  4829. include => macro-dial-one-custom
  4830. exten => s,1,Set(DEXTEN=${ARG3})
  4831. exten => s,n,Set(__CRM_SOURCE=${CALLERID(num)})
  4832. exten => s,n(setexttocall),ExecIf($[${LEN(${EXTTOCALL})}=0 & ${LEN(${DEXTEN})}>0]?Set(__EXTTOCALL=${DEXTEN}))
  4833. exten => s,n,Set(DIALSTATUS_CW=)
  4834. exten => s,n,GosubIf($["${FROM_DID}"!="" & "${SCREEN}"="" & "${SIGNORE}"="" & "${DB(AMPUSER/${DEXTEN}/screen)}"!=""]?screen,1())
  4835. exten => s,n,GosubIf($["${DB(CF/${DEXTEN})}"!=""]?cf,1())
  4836. exten => s,n,GotoIf($["${DEXTEN:-1}"="#" | "${DB(DND/${DEXTEN})}"=""]?skip1)
  4837. exten => s,n,Set(DEXTEN=)
  4838. exten => s,n,Set(DIALSTATUS=BUSY)
  4839. exten => s,n(skip1),GotoIf($["${DEXTEN}"=""]?nodial)
  4840. exten => s,n,GotoIf($["${DEXTEN:-1}"="#"]?continue)
  4841. exten => s,n,Set(EXTHASCW=${IF($["${CWIGNORE}"!=""]? :${DB(CW/${DEXTEN})})})
  4842. exten => s,n,GotoIf($["${EXTHASCW}"="" | "${DB(CFB/${DEXTEN})}"!="" | "${DB(CFU/${DEXTEN})}"!=""]?next1:cwinusebusy)
  4843. exten => s,n(next1),GotoIf($["${DB(CFU/${DEXTEN})}"!="" & ("${EXTENSION_STATE(${DEXTEN}@ext-local)}"="UNAVAILABLE" | "${EXTENSION_STATE(${DEXTEN}@ext-local)}"="UNKNOWN")]?docfu:skip3)
  4844. exten => s,n(docfu),Set(DEXTEN=)
  4845. exten => s,n,Set(DIALSTATUS=NOANSWER)
  4846. exten => s,n,Goto(nodial)
  4847. exten => s,n(skip3),GotoIf($["${EXTHASCW}"="" | "${DB(CFB/${DEXTEN})}"!=""]?next2:continue)
  4848. exten => s,n(next2),GotoIf($["${EXTENSION_STATE(${DEXTEN}@ext-local)}"="NOT_INUSE" | "${EXTENSION_STATE(${DEXTEN}@ext-local)}"="UNAVAILABLE" | "${EXTENSION_STATE(${DEXTEN}@ext-local)}"="UNKNOWN"]?continue)
  4849. exten => s,n,ExecIf($["${DB(CFB/${DEXTEN})}"!="" & "${CFIGNORE}"=""]?Set(DIALSTATUS=BUSY))
  4850. exten => s,n,GotoIf($["${EXTHASCW}"!="" | "${DEXTEN:-1}"="#"]?cwinusebusy)
  4851. exten => s,n,Set(DEXTEN=)
  4852. exten => s,n,Set(DIALSTATUS=BUSY)
  4853. exten => s,n,Goto(nodial)
  4854. exten => s,n(cwinusebusy),GotoIf($["${EXTHASCW}"!="" & "${CWINUSEBUSY}"="true"]?next3:continue)
  4855. exten => s,n(next3),ExecIf($["${EXTENSION_STATE(${DEXTEN}@ext-local)}"!="UNAVAILABLE" & "${EXTENSION_STATE(${DEXTEN}@ext-local)}"!="NOT_INUSE" & "${EXTENSION_STATE(${DEXTEN}@ext-local)}"!="UNKNOWN"]?Set(DIALSTATUS_CW=BUSY))
  4856. exten => s,n(continue),GotoIf($["${DEXTEN}"=""]?nodial)
  4857. exten => s,n,GosubIf($["${DEXTEN:-1}"!="#"]?dstring,1():dlocal,1())
  4858. exten => s,n,GotoIf($[${LEN(${DSTRING})}=0]?nodial)
  4859. exten => s,n,GotoIf($["${DEXTEN:-1}"="#"]?skiptrace)
  4860. exten => s,n,GosubIf($[${REGEX("^[\+]?[0-9]+$" ${CALLERID(number)})} = 1]?ctset,1():ctclear,1())
  4861. exten => s,n(skiptrace),Set(D_OPTIONS=${IF($["${NODEST}"!="" & ${REGEX("(M[(]auto-blkvm[)])" ${ARG2})} != 1]?${ARG2}M(auto-blkvm):${ARG2})})
  4862. exten => s,n,GosubIf($["${ALERT_INFO}"!="" & "${HASH(SIPHEADERS,Alert-Info)}"=""]?func-set-sipheader,s,1(Alert-Info,${ALERT_INFO}))
  4863. exten => s,n,Noop(Blind Transfer: ${BLINDTRANSFER}, Attended Transfer: ${ATTENDEDTRANSFER}, User: ${AMPUSER}, Alert Info: ${ALERT_INFO})
  4864. exten => s,n,ExecIf($["${ALERT_INFO}"="" & ${LEN(${AMPUSER})}!=0 & ${LEN(${BLINDTRANSFER})}=0 & ${LEN(${ATTENDEDTRANSFER})}=0]?Set(ALERT_INFO=))
  4865. exten => s,n,ExecIf($[${LEN(${BLINDTRANSFER})}!=0]?Set(ALERT_INFO=))
  4866. exten => s,n,ExecIf($[${LEN(${ATTENDEDTRANSFER})}!=0]?Set(ALERT_INFO=))
  4867. exten => s,n,ExecIf($["${RVOL}"!=""]?Set(ALERT_INFO=${IF($["${ALERT_INFO}"!=""]?${ALERT_INFO}:Normal)}\;volume=${RVOL}))
  4868. exten => s,n,ExecIf($["${RVOL}"="" & "${DB(AMPUSER/${EXTTOCALL}/rvolume)}" != ""]?Set(ALERT_INFO=${IF($["${ALERT_INFO}"!=""]?${ALERT_INFO}:Normal)}\;volume=${DB(AMPUSER/${EXTTOCALL}/rvolume)}))
  4869. exten => s,n,GosubIf($["${ALERT_INFO}"!="" & "${ALERT_INFO}"!=" "]?func-set-sipheader,s,1(Alert-Info,${ALERT_INFO}))
  4870. exten => s,n,ExecIf($[("${MOHCLASS}"!="default") & ("${MOHCLASS}"!="")]?Set(CHANNEL(musicclass)=${MOHCLASS}))
  4871. exten => s,n,GosubIf($["${QUEUEWAIT}"!=""]?qwait,1())
  4872. exten => s,n,Set(__CWIGNORE=${CWIGNORE})
  4873. exten => s,n,Set(__KEEPCID=TRUE)
  4874. exten => s,n,GotoIf($["${USEGOTO}"="1"]?usegoto,1)
  4875. exten => s,n,GotoIf($["${DB(AMPUSER/${EXTTOCALL}/cidname)}" = "" || "${DB(AMPUSER/${AMPUSER}/cidname)}" = ""]?godial)
  4876. exten => s,n,Gosub(sub-presencestate-display,s,1(${EXTTOCALL}))
  4877. exten => s,n,Set(CONNECTEDLINE(name,i)=${DB(AMPUSER/${EXTTOCALL}/cidname)} ${PRESENCESTATE_DISPLAY})
  4878. exten => s,n,Set(CONNECTEDLINE(num)=${EXTTOCALL})
  4879. exten => s,n,Set(D_OPTIONS=${D_OPTIONS})
  4880. exten => s,n(godial),Macro(dialout-one-predial-hook,)
  4881. exten => s,n,ExecIf($["${DIRECTION}" = "INBOUND"]?Set(D_OPTIONS=${STRREPLACE(D_OPTIONS,T)}I))
  4882. exten => s,n,ExecIf($["${DB(AMPUSER/${DEXTEN}/cwtone)}" = "enabled" & "${EXTENSION_STATE(${DEXTEN}@ext-local)}" = "INUSE"]?Set(CWRING=r(callwaiting)):Set(CWRING=))
  4883. exten => s,n(dialapp),Noop()
  4884. exten => s,n,ExecIf($["${ivrreturn}" = "1"]?Set(D_OPTIONS=${D_OPTIONS}g))
  4885. exten => s,n(dial),Dial(${DSTRING},${ARG1},${D_OPTIONS}${CWRING}b(func-apply-sipheaders^s^1))
  4886. exten => s,n,ExecIf($["${DIALSTATUS}"="ANSWER" & "${CALLER_DEST}"!=""]?MacroExit())
  4887. exten => s,n,ExecIf($["${DIALSTATUS_CW}"!=""]?Set(DIALSTATUS=${DIALSTATUS_CW}))
  4888. exten => s,n,GosubIf($[("${SCREEN}"!=""&("${DIALSTATUS}"="TORTURE"|"${DIALSTATUS}"="DONTCALL"))|"${DIALSTATUS}"="ANSWER"]?s-${DIALSTATUS},1())
  4889. exten => s,n,MacroExit()
  4890. exten => s,n(nodial),Noop()
  4891. exten => s,n,ExecIf($["${DIALSTATUS}" = ""]?Set(DIALSTATUS=NOANSWER))
  4892. exten => s,n,Noop(Returned from dial-one with nothing to call and DIALSTATUS: ${DIALSTATUS})
  4893. exten => s,n,MacroExit()
  4894. exten => s,n,GotoIf($["${ZULU_RAW_TYPE}"!="Sangomacrm-url"]?crm-save)
  4895. exten => s,n,AGI(agi://127.0.0.1/sangomacrm.agi,true)
  4896. exten => s,n,Goto(zulu-event)
  4897. exten => s,n(crm-save),AGI(agi://127.0.0.1/sangomacrm.agi)
  4898.  
  4899. exten => h,1,Macro(hangupcall,)
  4900.  
  4901. exten => usegoto,1,Set(USEGOTO=)
  4902. exten => usegoto,n,Goto(from-internal,${DSTRING},1)
  4903.  
  4904. exten => screen,1,GotoIf($["${DB(AMPUSER/${DEXTEN}/screen)}"!="nomemory" | "${CALLERID(number)}"=""]?memory)
  4905. exten => screen,n,ExecIf($[${REGEX("^[0-9a-zA-Z ]+$" ${CALLERID(number)})} = 1]?System(rm -f ${ASTVARLIBDIR}/sounds/priv-callerintros/${CALLERID(number)}.*))
  4906. exten => screen,n(memory),Set(__SCREEN=${DB(AMPUSER/${DEXTEN}/screen)})
  4907. exten => screen,n,Set(__SCREEN_EXTEN=${DEXTEN})
  4908. exten => screen,n,Set(ARG2=${ARG2}p)
  4909. exten => screen,n,Return()
  4910.  
  4911. exten => cf,1,Set(CFAMPUSER=${IF($["${AMPUSER}"=""]?${CALLERID(number)}:${AMPUSER})})
  4912. 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())
  4913. 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)})}))
  4914. exten => cf,n,ExecIf($["${DB(AMPUSER/${DEXTEN}/cfringtimer)}" == "0"]?Set(ARG1=${IF($["${DB(FREEPBXCONF/CFRINGTIMERDEFAULT)}"="-1"]? : ${DB(FREEPBXCONF/CFRINGTIMERDEFAULT)})}))
  4915. exten => cf,n,Set(DEXTEN=${IF($["${CFIGNORE}"=""]?"${DB(CF/${DEXTEN})}#": )})
  4916. exten => cf,n,Set(__DIVERSION_REASON=${IF($["${DEXTEN}"!=""]?"unconditional": )})
  4917. exten => cf,n,ExecIf($["${DEXTEN}"!=""]?Return())
  4918. exten => cf,n,Set(DIALSTATUS=NOANSWER)
  4919. exten => cf,n,Return()
  4920.  
  4921. exten => qwait,1,ExecIf($["${SAVEDCIDNAME}" = ""]?Set(__SAVEDCIDNAME=${CALLERID(name)}))
  4922. exten => qwait,n,Set(ELAPSED=${MATH($[${EPOCH}+30-${QUEUEWAIT}]/60,int)})
  4923. exten => qwait,n,Set(CALLERID(name)=M${ELAPSED}:${SAVEDCIDNAME})
  4924. exten => qwait,n,Return()
  4925.  
  4926. exten => ctset,1,Set(DB(CALLTRACE/${DEXTEN})=${CALLERID(number)})
  4927. exten => ctset,n,Return()
  4928.  
  4929. exten => ctclear,1,Noop(Deleting: CALLTRACE/${DEXTEN} ${DB_DELETE(CALLTRACE/${DEXTEN})})
  4930. exten => ctclear,n,Return()
  4931.  
  4932. exten => dstring,1,Set(DSTRING=)
  4933. exten => dstring,n,Set(DEVICES=${DB(AMPUSER/${DEXTEN}/device)})
  4934. exten => dstring,n,ExecIf($["${DEVICES}"=""]?Return())
  4935. exten => dstring,n,ExecIf($["${DEVICES:0:1}"="&"]?Set(DEVICES=${DEVICES:1}))
  4936. exten => dstring,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)})
  4937. exten => dstring,n,Set(ITER=1)
  4938. exten => dstring,n(begin),Set(THISDIAL=${DB(DEVICE/${CUT(DEVICES,&,${ITER})}/dial)})
  4939. exten => dstring,n,GotoIf($["${THISDIAL:0:5}"!="PJSIP"]?docheck)
  4940. exten => dstring,n,Noop(Debug: Found PJSIP Destination ${THISDIAL})
  4941. exten => dstring,n,GotoIf($[ ${REGEX("(/.+/|@)" ${THISDIAL})} = 1 ]?doset)
  4942. exten => dstring,n,Noop(Debug: Updating PJSIP Destination with PJSIP_DIAL_CONTACTS)
  4943. exten => dstring,n,Set(THISDIAL=${PJSIP_DIAL_CONTACTS(${THISDIAL:6})})
  4944. exten => dstring,n,ExecIf($["${THISDIAL}"=""]?Set(DIALSTATUS=CHANUNAVAIL))
  4945. exten => dstring,n(docheck),GotoIf($["${THISDIAL}"=""]?skipset)
  4946. exten => dstring,n(doset),Set(DSTRING=${DSTRING}${THISDIAL}&)
  4947. exten => dstring,n(skipset),Set(ITER=$[${ITER}+1])
  4948. exten => dstring,n,GotoIf($[${ITER}<=${LOOPCNT}]?begin)
  4949. exten => dstring,n,ExecIf($["${DSTRING:-1}"!="&"]?Return())
  4950. exten => dstring,n,Set(DSTRING=${DSTRING:0:$[${LEN(${DSTRING})}-1]})
  4951. exten => dstring,n,Return()
  4952.  
  4953. 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)})
  4954. exten => dlocal,n,Set(USEGOTO=${IF($["${ARG1}"=""]?1:0)})
  4955. exten => dlocal,n,Return()
  4956.  
  4957. exten => s-ANSWER,1,Noop(Call successfully answered - Hanging up now)
  4958. exten => s-ANSWER,n,GotoIf($["${ivrreturn}" = "1"]?${IVR_CONTEXT},return,1)
  4959. exten => s-ANSWER,n(bye),Macro(hangupcall,)
  4960.  
  4961. exten => s-TORTURE,1,Goto(app-blackhole,musiconhold,1)
  4962. exten => s-TORTURE,n,Macro(hangupcall,)
  4963.  
  4964. exten => s-DONTCALL,1,Answer
  4965. exten => s-DONTCALL,n,Wait(1)
  4966. exten => s-DONTCALL,n,Zapateller()
  4967. exten => s-DONTCALL,n,Playback(ss-noservice)
  4968. exten => s-DONTCALL,n,Macro(hangupcall,)
  4969.  
  4970. exten => s-CHANUNAVAIL,1,Macro(vm,${SCREEN_EXTEN},BUSY,${IVR_RETVM})
  4971. exten => s-CHANUNAVAIL,n,GotoIf($["${ivrreturn}" = "1"]?${IVR_CONTEXT},return,1)
  4972. exten => s-CHANUNAVAIL,n(return),ExecIf($["${IVR_RETVM}"!="RETURN" | "${IVR_CONTEXT}"=""]?Hangup())
  4973. exten => s-CHANUNAVAIL,n,Return()
  4974.  
  4975. exten => s-NOANSWER,1,Macro(vm,${SCREEN_EXTEN},BUSY,${IVR_RETVM})
  4976. exten => s-NOANSWER,n,GotoIf($["${ivrreturn}" = "1"]?${IVR_CONTEXT},return,1)
  4977. exten => s-NOANSWER,n(return),ExecIf($["${IVR_RETVM}"!="RETURN" | "${IVR_CONTEXT}"=""]?Hangup())
  4978. exten => s-NOANSWER,n,Return()
  4979.  
  4980. exten => s-BUSY,1,Macro(vm,${SCREEN_EXTEN},BUSY,${IVR_RETVM})
  4981. exten => s-BUSY,n,GotoIf($["${ivrreturn}" = "1"]?${IVR_CONTEXT},return,1)
  4982. exten => s-BUSY,n(return),ExecIf($["${IVR_RETVM}"!="RETURN" | "${IVR_CONTEXT}"=""]?Hangup())
  4983. exten => s-BUSY,n,Return()
  4984.  
  4985. ;--== end of [macro-dial-one] ==--;
  4986.  
  4987.  
  4988. [func-set-sipheader]
  4989. include => func-set-sipheader-custom
  4990. exten => s,1,Noop(Sip Add Header function called. Adding ${ARG1} = ${ARG2})
  4991. exten => s,n,Set(HASH(__SIPHEADERS,${ARG1})=${ARG2})
  4992. exten => s,n,Return()
  4993.  
  4994. ;--== end of [func-set-sipheader] ==--;
  4995.  
  4996.  
  4997. [func-apply-sipheaders]
  4998. include => func-apply-sipheaders-custom
  4999. exten => s,1,ExecIf($["${CRM_DIRECTION}"="INBOUND"]?Set(CHANNEL(hangup_handler_push)=crm-hangup,s,1))
  5000. exten => s,n,Noop(Applying SIP Headers to channel ${CHANNEL})
  5001. exten => s,n,Set(TECH=${CUT(CHANNEL,/,1)})
  5002. exten => s,n,Set(SIPHEADERKEYS=${HASHKEYS(SIPHEADERS)})
  5003. exten => s,n,While($["${SET(sipkey=${SHIFT(SIPHEADERKEYS)})}" != ""])
  5004. exten => s,n,Set(sipheader=${HASH(SIPHEADERS,${sipkey})})
  5005. exten => s,n,ExecIf($["${sipheader}" = "unset" & "${TECH}" = "PJSIP"]?Set(PJSIP_HEADER(remove,${sipkey})=))
  5006. exten => s,n,ExecIf($["${sipheader}" != "unset" & "${sipkey}" = "Alert-Info" & ${REGEX("^<[^>]*>" ${sipheader})} != 1 & ${REGEX("\;info=" ${sipheader})} != 1]?Set(sipheader=<http://127.0.0.1>\;info=${sipheader}))
  5007. exten => s,n,ExecIf($["${sipheader}" != "unset" & "${sipkey}" = "Alert-Info" & ${REGEX("^<[^>]*>" ${sipheader})} != 1]?Set(sipheader=<http://127.0.0.1>${sipheader}))
  5008. exten => s,n,ExecIf($["${TECH}" = "PJSIP" & "${sipheader}" != "unset"]?Set(PJSIP_HEADER(add,${sipkey})=${sipheader}))
  5009. exten => s,n,EndWhile
  5010. exten => s,n,Return()
  5011.  
  5012. ;--== end of [func-apply-sipheaders] ==--;
  5013.  
  5014.  
  5015. [dialparties]
  5016. include => dialparties-custom
  5017. exten => s,1,Noop(Starting New Dialparties)
  5018. exten => s,n,ClearHash(dialparties_FMFMLIST)
  5019. exten => s,n,ClearHash(dialparties_EXTLIST)
  5020. exten => s,n,ClearHash(dialparties)
  5021. exten => s,n,Set(HASH(dialparties,ARG_CNT)=1)
  5022. exten => s,n,While($["${ARG${HASH(dialparties,ARG_CNT)}}" != ""])
  5023. exten => s,n,Noop(ARG${HASH(dialparties,ARG_CNT)}: ${ARG${HASH(dialparties,ARG_CNT)}})
  5024. exten => s,n,Set(HASH(dialparties,ARG_CNT)=${MATH(${HASH(dialparties,ARG_CNT)}+1,int)})
  5025. exten => s,n,EndWhile
  5026. exten => s,n,Set(HASH(dialparties,CWINUSEBUSY)=${CWINUSEBUSY})
  5027. exten => s,n,Set(HASH(dialparties,CWIGNORE)=${TOUPPER(${FILTER(A-Za-z0-9,${CWIGNORE})})})
  5028. exten => s,n,Set(HASH(dialparties,CFIGNORE)=${TOUPPER(${FILTER(A-Za-z0-9,${CFIGNORE})})})
  5029. exten => s,n,Set(HASH(dialparties,SIGNORE)=${TOUPPER(${FILTER(A-Za-z0-9,${SIGNORE})})})
  5030. exten => s,n,Set(HASH(dialparties,AMPUSER)=${FILTER(A-Za-z0-9,${AMPUSER})})
  5031. exten => s,n,Set(HASH(dialparties,FMGRP)=${FMGRP})
  5032. exten => s,n,Set(HASH(dialparties,NODEST)=${NODEST})
  5033. exten => s,n,Set(HASH(dialparties,CIDNUM)=${CALLERID(num)})
  5034. exten => s,n,Set(HASH(dialparties,CIDNAME)=${CALLERID(name)})
  5035. exten => s,n,Noop(Caller ID name is ${HASH(dialparties,CIDNAME)} number is ${HASH(dialparties,CIDNUM)})
  5036. exten => s,n,Noop(CW Ignore is: ${HASH(dialparties,CWIGNORE)})
  5037. exten => s,n,Noop(CF Ignore is: ${HASH(dialparties,CFIGNORE)})
  5038. exten => s,n,Noop(CW IN_USE/BUSY is: ${HASH(dialparties,CWINUSEBUSY)})
  5039. exten => s,n,Set(HASH(dialparties,QUEUEWAIT)=${FILTER(A-Za-z0-9,${QUEUEWAIT})})
  5040. exten => s,n,GosubIf($["${QUEUEWAIT}"!=""]?dialparties-queuewait,s,1())
  5041. exten => s,n,Set(__KEEPCID=TRUE)
  5042. exten => s,n,Set(DIALSTATUS_CW=)
  5043. exten => s,n,Set(HASH(dialparties,TIMER)=${ARG1})
  5044. exten => s,n,Set(HASH(dialparties,DIALOPTS)=${ARG2})
  5045. exten => s,n,Set(HASH(dialparties,RGMETHOD)=${FILTER(A-Za-z0-9\-,${RingGroupMethod})})
  5046. exten => s,n,Set(HASH(dialparties,ALERTINFO)=${ALERT_INFO})
  5047. exten => s,n,GosubIf($["${HASH(dialparties,ALERTINFO)}"!=""]?dialparties-alertinfo,s,1())
  5048. exten => s,n,GosubIf($["${SIPADDHEADER}"!=""]?dialparties-setheader,s,1())
  5049. exten => s,n,ExecIf($["${FMGRP}"=""]?Set(HASH(dialparties,PR_DIALSTATUS)=))
  5050. exten => s,n,ExecIf($["${USE_CONFIRMATION}"=""]?Set(HASH(dialparties,USE_CONFIRMATION)=FALSE))
  5051. exten => s,n,Set(HASH(dialparties,RINGGROUP_INDEX)=${RINGGROUP_INDEX})
  5052. exten => s,n,Noop(USE_CONFIRMATION: ${HASH(dialparties,USE_CONFIRMATION)})
  5053. exten => s,n,Noop(RINGGROUP_INDEX: ${HASH(dialparties,RINGGROUP_INDEX)})
  5054. exten => s,n,ExecIf($["${HASH(dialparties,TIMER)}"=""]?Set(HASH(dialparties,TIMER)=0))
  5055. exten => s,n,ExecIf($["${HASH(dialparties,DIALOPTS)}"=""]?Set(HASH(dialparties,DIALOPTS)=))
  5056. exten => s,n,ExecIf($["${HASH(dialparties,RGMETHOD)}"=""]?Set(HASH(dialparties,RGMETHOD)=none))
  5057. exten => s,n,Noop(Methodology of ring is ${HASH(dialparties,RGMETHOD)})
  5058. exten => s,n,Set(HASH(dialparties,RECALL_MASTERMODE)=${HASH(dialparties,RGMETHOD)})
  5059. exten => s,n,Gosub(dialparties-setmodes,s,1())
  5060. exten => s,n,ExecIf($["${HASH(dialparties,CWIGNORE)}"!="" & "${HASH(dialparties,RGMETHOD)}"="ringallv2"]?Set(__CWIGNORE=))
  5061. exten => s,n,GosubIf($["${HASH(dialparties,USE_CONFIRMATION)}"!="FALSE" & "${HASH(dialparties,RGMETHOD)}"!="ringall" & "${HASH(dialparties,RGMETHOD)}"!="ringallv2" & "${HASH(dialparties,RGMETHOD)}"!="hunt" & "${HASH(dialparties,RGMETHOD)}"!="random"]?dialparties-invalidringmethod,s,1())
  5062. exten => s,n,Set(I=0)
  5063. exten => s,n,Set(ARG_CNT=3)
  5064. exten => s,n,While($["${ARG${ARG_CNT}}" != ""])
  5065. exten => s,n,Set(TMPARG=${ARG${ARG_CNT}})
  5066. exten => s,n,While($["${SET(HASH(dialparties,ext)=${SHIFT(TMPARG,-)})}" != ""])
  5067. exten => s,n,Set(HASH(dialparties_EXTLIST,${I})=${HASH(dialparties,ext)})
  5068. exten => s,n,Noop(Added extension ${HASH(dialparties,ext)} to extension map)
  5069. exten => s,n,Set(I=${MATH(${I}+1,int)})
  5070. exten => s,n,EndWhile
  5071. exten => s,n,Set(ARG_CNT=${MATH(${ARG_CNT}+1,int)})
  5072. exten => s,n,EndWhile
  5073. exten => s,n,GosubIf($["${HASH(dialparties,RGMETHOD)}"="ringallv2" & "${HASH(dialparties,FMGRP)}"!=""]?dialparties-preringprep,s,1())
  5074. exten => s,n,Set(HASH(dialparties,ALREADY_SCREENED)=${SCREEN})
  5075. exten => s,n,Set(HASH(dialparties,FROM_OUTSIDE)=${FROM_DID})
  5076. exten => s,n,Set(HASH(dialparties,PRIMARY_EXT)=${HASH(dialparties_EXTLIST,0)})
  5077. exten => s,n,GosubIf($["${HASH(dialparties,FROM_OUTSIDE)}"!="" & $["${HASH(dialparties,RGMETHOD)}"="none" | "${HASH(dialparties,FMGRP)}"!="${HASH(dialparties,PRIMARY_EXT)}"] & "${HASH(dialparties,SIGNORE)}"="FALSE" & "${HASH(dialparties,ALREADY_SCREENED)}"="" & $["${HASH(dialparties,NODEST)}"="" | "${HASH(dialparties,FMGRP)}"="NODEST"]]?dialparties-callscreencheck,s,1())
  5078. exten => s,n,Gosub(dialparties-checkcfextensions,s,1())
  5079. exten => s,n,Gosub(dialparties-checkdndextensions,s,1())
  5080. exten => s,n,Gosub(dialparties-mainloop,s,1())
  5081. exten => s,n,ExecIf($["${HASH(dialparties,FINALDS)}" != "" & ${REGEX("&$" ${HASH(dialparties,FINALDS)})}]?Set(HASH(dialparties,FINALDS)=${HASH(dialparties,FINALDS):0:-1}))
  5082. exten => s,n,Noop(Final DS so far is ${HASH(dialparties,FINALDS)})
  5083. exten => s,n,GosubIf($["${HASH(dialparties,RGMETHOD)}"="firstnotonphone"]?dialparties-firstnotonphone,s,1())
  5084. exten => s,n,Set(Z=0)
  5085. exten => s,n,While($["${SET(HASH(dialparties,dsvalue)=${HASH(DSORDEREDARRAY,${Z})})}" != ""])
  5086. exten => s,n,Set(FILTERED_DIAL=${FILTERED_DIAL}${HASH(dialparties,dsvalue)}-)
  5087. exten => s,n,ExecIf($["${HASH(dialparties,dsvalue)}"!="${HASH(dialparties,FMGRP)}"]?Set(FMGL_DIAL=${FMGL_DIAL}${HASH(DSORDEREDARRAYNOREPLACE,${Z})}-))
  5088. exten => s,n,Set(Z=${MATH(${Z}+1,int)})
  5089. exten => s,n,EndWhile
  5090. exten => s,n,ExecIf($["${FILTERED_DIAL}" != "" & ${REGEX("-$" ${FILTERED_DIAL})}]?Set(FILTERED_DIAL=${FILTERED_DIAL:0:-1}))
  5091. exten => s,n,ExecIf($["${FMGL_DIAL}" != "" & ${REGEX("-$" ${FMGL_DIAL})}]?Set(FMGL_DIAL=${FMGL_DIAL:0:-1}))
  5092. exten => s,n,Noop(Filtered ARG3: ${FILTERED_DIAL})
  5093. exten => s,n,Noop(RING ALL V2: ${FMGL_DIAL})
  5094. exten => s,n,Set(HASH(dialparties,HUNT_LOOPS)=0)
  5095. exten => s,n,GosubIf($["${HASH(dialparties,RGMETHOD)}"="hunt" | "${HASH(dialparties,RGMETHOD)}"="random" | "${HASH(dialparties,RGMETHOD)}"="memoryhunt" | "${HASH(dialparties,RGMETHOD)}"="firstavailable" | "${HASH(dialparties,RGMETHOD)}"="firstnotonphone"]?dialparties-builddshunt,s,1())
  5096. exten => s,n,ExecIf($["${HASH(dialparties,FINALDS)}" != "" & ${REGEX("&$" ${HASH(dialparties,FINALDS)})}]?Set(HASH(dialparties,FINALDS)=${HASH(dialparties,FINALDS):0:-1}))
  5097. exten => s,n,Gosub(dialparties-checkblkvm,s,1())
  5098. exten => s,n,GosubIf($["${HASH(dialparties,RGMETHOD)}"="ringallv2"]?dialparties-ringallv2,s,1())
  5099. exten => s,n,Gosub(dialparties-checkblkvm,s,1())
  5100. exten => s,n,ExecIf($["${DIRECTION}"="INBOUND"]?Set(HASH(dialparties,DIALOPTS)=${REPLACE(HASH(dialparties,DIALOPTS),T,)}))
  5101. exten => s,n,GosubIf($["${HASH(dialparties,FINALDS)}"!=""]?dialparties-finalbuild,s,1())
  5102. exten => s,n,ExecIf($["${HASH(dialparties,FINALDS)}"="" & "${DIALSTATUS}"!=""]?Set(DIALSTATUS=NOANSWER))
  5103. exten => s,n,Gosub(dialparties-setrvol,s,1())
  5104. exten => s,n,ClearHash(DSORDEREDARRAYNOREPLACE)
  5105. exten => s,n,ClearHash(DSORDEREDARRAY)
  5106. exten => s,n,ClearHash(DSARRAY)
  5107. exten => s,n,ClearHash(dialparties_FMFMLIST)
  5108. exten => s,n,ClearHash(dialparties_EXTLIST)
  5109. exten => s,n,ClearHash(dialparties_EXT_HUNT)
  5110. exten => s,n,Set(ds=${HASH(dialparties,FINALDS)})
  5111. exten => s,n,Set(TIMEOUT=${HASH(dialparties,TIMER)})
  5112. exten => s,n,Set(DIALOPTS=${HASH(dialparties,DIALOPTS)})
  5113. exten => s,n,Noop(Jumping to Priority: ${MACRODIALGOTO_PRI})
  5114. exten => s,n,ClearHash(dialparties)
  5115. exten => s,n,Noop(End of dialparties)
  5116. exten => s,n,Return()
  5117.  
  5118. ;--== end of [dialparties] ==--;
  5119.  
  5120.  
  5121. [dialparties-queuewait]
  5122. include => dialparties-queuewait-custom
  5123. exten => s,1,Set(ELAPSED=${ROUND(${MATH(${EPOCH}-${QUEUEWAIT},int)}))})
  5124. exten => s,n,GotoIf($["${SAVEDCIDNAME}"!=""]?skipsavedcidname)
  5125. exten => s,n,Set(__SAVEDCIDNAME=${CIDNAME})
  5126. exten => s,n,Set(CALLERID(name)=M:${ELAPSED}:${CIDNAME})
  5127. exten => s,n(skipsavedcidname),Set(CALLERID(name)=M:${ELAPSED}:${SAVEDCIDNAME})
  5128. exten => s,n,Return()
  5129.  
  5130. ;--== end of [dialparties-queuewait] ==--;
  5131.  
  5132.  
  5133. [dialparties-alertinfo]
  5134. include => dialparties-alertinfo-custom
  5135. exten => s,1,Noop(Setting Alert-Info: ${HASH(dialparties,ALERTINFO)})
  5136. exten => s,n,ExecIf($["${RVOL}"!=""]?Set(ALERTINFO=${ALERTINFO}\;volume=${RVOL}):Set(ALERTINFO=${ALERTINFO}))
  5137. exten => s,n,Set(HASH(__SIPHEADERS,Alert-Info)=${ALERTINFO})
  5138. exten => s,n,Return()
  5139.  
  5140. ;--== end of [dialparties-alertinfo] ==--;
  5141.  
  5142.  
  5143. [dialparties-setheader]
  5144. include => dialparties-setheader-custom
  5145. exten => s,1,Set(HKEY=${CUT(SIPADDHEADER,:,1)})
  5146. exten => s,n,Set(HVAL=${CUT(SIPADDHEADER,:,2)})
  5147. exten => s,n,Set(HASH(__SIPHEADERS,${HKEY})=${HVAL})
  5148. exten => s,n,Return()
  5149.  
  5150. ;--== end of [dialparties-setheader] ==--;
  5151.  
  5152.  
  5153. [dialparties-setmodes]
  5154. include => dialparties-setmodes-custom
  5155. exten => s,1,GotoIf($["${DIALPLAN_EXISTS(dialparties-setmodes,${HASH(dialparties,RGMETHOD)},1)}"="1"]?${HASH(dialparties,RGMETHOD)},1:default,1)
  5156.  
  5157. exten => ringall-prim,1,Set(HASH(dialparties,RGMETHOD)=ringall)
  5158. exten => ringall-prim,n,Set(HASH(dialparties,MASTERMODE)=1)
  5159. exten => ringall-prim,n,Return()
  5160.  
  5161. exten => hunt-prim,1,Set(HASH(dialparties,RGMETHOD)=hunt)
  5162. exten => hunt-prim,n,Set(HASH(dialparties,MASTERMODE)=1)
  5163. exten => hunt-prim,n,Return()
  5164.  
  5165. exten => memoryhunt-prim,1,Set(HASH(dialparties,RGMETHOD)=memoryhunt)
  5166. exten => memoryhunt-prim,n,Set(HASH(dialparties,MASTERMODE)=1)
  5167. exten => memoryhunt-prim,n,Return()
  5168.  
  5169. exten => ringallv2-prim,1,Set(HASH(dialparties,RGMETHOD)=ringallv2)
  5170. exten => ringallv2-prim,n,Set(HASH(dialparties,MASTERMODE)=1)
  5171. exten => ringallv2-prim,n,Return()
  5172.  
  5173. exten => default,1,Set(HASH(dialparties,PR_DIALSTATUS)=)
  5174. exten => default,n,Set(HASH(dialparties,MASTERMODE)=0)
  5175. exten => default,n,Return()
  5176.  
  5177. ;--== end of [dialparties-setmodes] ==--;
  5178.  
  5179.  
  5180. [dialparties-preringprep]
  5181. include => dialparties-preringprep-custom
  5182. exten => s,1,Set(HASH(dialparties,FMGRP_PRIMARYREMOVED)=0)
  5183. exten => s,n,Set(HASH(dialparties,FMGRP_PRERING)=${DB(AMPUSER/${HASH(dialparties,FMGRP)}/followme/prering)})
  5184. exten => s,n,ExecIf($["${HASH(dialparties,FMGRP_PRERING)}" <= "1"]?Set(HASH(dialparties,FMGRP_PRERING)=2))
  5185. exten => s,n,Set(HASH(dialparties,FMGRP_GRPTIME)=${DB(AMPUSER/${HASH(dialparties,FMGRP)}/followme/grptime)})
  5186. exten => s,n,Noop(got fmgrp_prering: ${HASH(dialparties,FMGRP_PRERING)}, fmgrp_grptime: ${HASH(dialparties,FMGRP_GRPTIME)})
  5187. exten => s,n,Set(HASH(dialparties,FMGRP_TOTALPRERING)=${MATH(${HASH(dialparties,FMGRP_GRPTIME)} + ${HASH(dialparties,FMGRP_PRERING)},int)})
  5188. exten => s,n,Noop(fmgrp_totalprering: ${HASH(dialparties,FMGRP_TOTALPRERING)})
  5189. exten => s,n,Set(HASH(dialparties,FMGRP_REALPRERING)=${HASH(dialparties,FMGRP_TOTALPRERING)})
  5190. exten => s,n,Set(I=1)
  5191. exten => s,n,Set(EXTLISTKEYS=${HASHKEYS(dialparties_EXTLIST)})
  5192. exten => s,n,While($["${SET(HASH(dialparties,ext)=${SHIFT(EXTLISTKEYS)})}" != ""])
  5193. exten => s,n,Set(HASH(dialparties,extval)=${HASH(dialparties_EXTLIST,${HASH(dialparties,ext)})})
  5194. exten => s,n,GotoIf($["${HASH(dialparties,extval)}"="${FMGRP}"]?found)
  5195. exten => s,n,Set(HASH(dialparties_FMFMLIST,${I})=${HASH(dialparties,extval)})
  5196. exten => s,n,Set(I=${MATH(${I}+1,int)})
  5197. exten => s,n,Goto(next1)
  5198. exten => s,n(found),Noop(found extension in pre-ring and array)
  5199. exten => s,n,Set(HASH(dialparties,FMGRP_REALPRERING)=${HASH(dialparties,FMGRP_PRERING)})
  5200. exten => s,n(next1),EndWhile
  5201. exten => s,n,Set(HASH(dialparties_FMFMLIST,0)=${HASH(dialparties,FMGRP)})
  5202. exten => s,n,ClearHash(dialparties_EXTLIST)
  5203. exten => s,n,Set(EXTLISTKEYS=${HASHKEYS(dialparties_FMFMLIST)})
  5204. exten => s,n,Set(I=0)
  5205. exten => s,n,While($["${SET(HASH(dialparties,ext)=${SHIFT(EXTLISTKEYS)})}" != ""])
  5206. exten => s,n,GotoIf($["${HASH(dialparties_FMFMLIST,${HASH(dialparties,ext)})}"=""]?next2)
  5207. exten => s,n,Set(HASH(dialparties_EXTLIST,${I})=${HASH(dialparties_FMFMLIST,${HASH(dialparties,ext)})})
  5208. exten => s,n,Set(I=${MATH(${I}+1,int)})
  5209. exten => s,n(next2),EndWhile
  5210. exten => s,n,Noop(ringallv2 ring times: REALPRERING: ${HASH(dialparties,FMGRP_REALPRERING)}, PRERING: ${HASH(dialparties,FMGRP_PRERING)})
  5211. exten => s,n,Return()
  5212.  
  5213. ;--== end of [dialparties-preringprep] ==--;
  5214.  
  5215.  
  5216. [dialparties-callscreencheck]
  5217. include => dialparties-callscreencheck-custom
  5218. exten => s,1,Set(HASH(dialparties,SCREEN_CALL)=${DB(AMPUSER/${PRIMARY_EXT}/screen)})
  5219. exten => s,n,GotoIf($["${HASH(dialparties,SCREEN_CALL)}"!=""]?return)
  5220. exten => s,n,GotoIf($["${HASH(dialparties,SCREEN_CALL)}"="nomemory" & "${HASH(dialparties,CIDNUM)}"!="" & ${REGEX("[^ a-zA-Z\d]" ${HASH(dialparties,CIDNUM)})}]?return)
  5221. exten => s,n,System(rm -f ${ASTVARLIBDIR}/sounds/priv-callerintros/${HASH(dialparties,CIDNUM)}.*)
  5222. exten => s,n,Set(SCREEN=TRUE)
  5223. exten => s,n,Set(__SCREEN=${HASH(dialparties,SCREEN_CALL)})
  5224. exten => s,n,Set(__SCREEN_EXTEN=${HASH(dialparties,PRIMARY_EXT)})
  5225. exten => s,n,Noop(Extension ${HASH(dialparties,PRIMARY_EXT)} has call screening on)
  5226. exten => s,n,Goto(exit)
  5227. exten => s,n(return),Noop(Extension ${HASH(dialparties,PRIMARY_EXT)} has call screening off)
  5228. exten => s,n(exit),Return()
  5229.  
  5230. ;--== end of [dialparties-callscreencheck] ==--;
  5231.  
  5232.  
  5233. [dialparties-checkcfextensions]
  5234. include => dialparties-checkcfextensions-custom
  5235. exten => s,1,Set(I=0)
  5236. exten => s,n,While($["${SET(HASH(dialparties,workingext)=${HASH(dialparties_EXTLIST,${I})})}" != ""])
  5237. exten => s,n,GotoIf($["${HASH(dialparties,workingext)}"=""]?next)
  5238. exten => s,n,Noop(Working with extension ${HASH(dialparties,workingext)})
  5239. exten => s,n,GotoIf($[${REGEX("#$" ${HASH(dialparties,workingext)})}]?skipcf)
  5240. exten => s,n,Set(HASH(dialparties,CF)=${DB(CF/${HASH(dialparties,workingext)})})
  5241. exten => s,n,GotoIf($["${HASH(dialparties,CF)}"=""]?nocf)
  5242. exten => s,n,ExecIf($["${AMPUSER}" = ""]?Set(HASH(dialparties,AMPUSER)=${CIDNUM}):Set(HASH(dialparties,AMPUSER)=${AMPUSER}))
  5243. exten => s,n,GotoIf($["${AMPUSER}" = "${HASH(dialparties,CF)}" | ${REALCALLERIDNUM} = ${CF} | "${CUT(BLINDTRANSFER,/${HASH(dialparties,CF)}-)}" != ""]?ignored)
  5244. exten => s,n,GotoIf($["${HASH(dialparties,CFIGNORE)}" != ""]?cfignore)
  5245. exten => s,n,Set(HASH(dialparties_EXTLIST,${I})=${CF}#)
  5246. exten => s,n,Noop(Extension ${HASH(dialparties,workingext)} has call forward set to ${HASH(dialparties,CF)})
  5247. exten => s,n,GotoIf($["${HASH(dialparties,RGMETHOD)}" != "none"]?next)
  5248. exten => s,n,Set(__DIVERSION_REASON=unconditional)
  5249. exten => s,n,Set(HASH(dialparties,CFRT)=${DB(AMPUSER/${HASH(dialparties,workingext)}/cfringtimer)})
  5250. exten => s,n,GotoIf($["${HASH(dialparties,CFRT)}" = ""]?next)
  5251. exten => s,n,ExecIf($["${HASH(dialparties,CFRT)}" < "0"]?Set(${HASH(dialparties,CFRT)=))
  5252. exten => s,n,Noop(Ring timer changed to CF ringtimer value of ${HASH(dialparties,CFRT)})
  5253. exten => s,n,GotoIf($["${HASH(dialparties,workingext)}" != "${HASH(dialparties,PRIMARY_EXT)}"]?next)
  5254. exten => s,n,Set(HASH(dialparties,MASTERMODE)=0)
  5255. exten => s,n,Set(PR_DIALSTATUS=)
  5256. exten => s,n,Goto(next)
  5257. exten => s,n(cfignore),Set(HASH(dialparties_EXTLIST,${I}))=)
  5258. exten => s,n,Noop(Extension ${HASH(dialparties,workingext)} has call forward set to ${HASH(dialparties,CF)})
  5259. exten => s,n,Set(DIALSTATUS=NOANSWER)
  5260. exten => s,n,GotoIf($["${HASH(dialparties,workingext)}" = "${HASH(dialparties,CF)}"]?loop)
  5261. exten => s,n,Goto(next)
  5262. exten => s,n(loop),Noop(Loop detected, extension ${HASH(dialparties,workingext)} cf is ignored)
  5263. exten => s,n,Goto(next)
  5264. exten => s,n(ignored),Noop(Extension ${HASH(dialparties,workingext)} cf is ignored)
  5265. exten => s,n,Goto(next)
  5266. exten => s,n(skipcf),Noop(Extension ${HASH(dialparties,workingext)} appears to be CF, skipping checks)
  5267. exten => s,n,Goto(next)
  5268. exten => s,n(nocf),Noop(Extension ${HASH(dialparties,workingext)} cf is disabled)
  5269. exten => s,n(next),Set(I=${MATH(${I}+1,int)})
  5270. exten => s,n,EndWhile
  5271. exten => s,n,Return()
  5272.  
  5273. ;--== end of [dialparties-checkcfextensions] ==--;
  5274.  
  5275.  
  5276. [dialparties-checkdndextensions]
  5277. include => dialparties-checkdndextensions-custom
  5278. exten => s,1,Set(I=0)
  5279. exten => s,n,While($["${SET(HASH(dialparties,workingext)=${HASH(dialparties_EXTLIST,${I})})}" != ""])
  5280. exten => s,n,GotoIf($["${HASH(dialparties,workingext)}"=""]?next)
  5281. exten => s,n,Noop(Working with extension ${HASH(dialparties,workingext)})
  5282. exten => s,n,GotoIf($[${REGEX("#$" ${HASH(dialparties,workingext)})}]?skipdnd)
  5283. exten => s,n,Set(HASH(dialparties,DND)=${DB(DND/${HASH(dialparties,workingext)})})
  5284. exten => s,n,GotoIf($["${HASH(dialparties,DND)}"!="" | "${PR_DIALSTATUS}"="BUSY"]?dnd:nodnd)
  5285. exten => s,n(dnd),Noop(Extension ${HASH(dialparties,workingext)} has do not disturb enabled, or followme pre-ring returned busy)
  5286. exten => s,n,Set(HASH(dialparties_EXTLIST,${I})=)
  5287. exten => s,n,Set(DIALSTATUS=BUSY)
  5288. exten => s,n,GotoIf($["${HASH(dialparties,PRIMARY_EXT)}"="${HASH(dialparties,workingext)}" & "${HASH(dialparties,MASTERMODE)}"="1"]?skipremaining:primarycheck)
  5289. exten => s,n(skipremaining),Set(HASH(dialparties,SKIPREMAINING)=1)
  5290. exten => s,n,Noop(Primary extension is DND, so if mastermode, all should be dnd)
  5291. exten => s,n,Goto(next)
  5292. exten => s,n(primarycheck),GotoIf($["${HASH(dialparties,PRIMARY_EXT)}"!="${HASH(dialparties,workingext)}"]?next)
  5293. exten => s,n,Set(HASH(dialparties,FMGRP_PRIMARYREMOVED)=1)
  5294. exten => s,n,Goto(next)
  5295. exten => s,n(skipdnd),Noop(Extension ${HASH(dialparties,workingext)} appears to be CF, skipping checks)
  5296. exten => s,n,Goto(next)
  5297. exten => s,n(nodnd),Noop(Extension ${HASH(dialparties,workingext)} do not disturb is disabled)
  5298. exten => s,n(next),Set(I=${MATH(${I}+1,int)})
  5299. exten => s,n,EndWhile
  5300. exten => s,n(exit),Return()
  5301.  
  5302. ;--== end of [dialparties-checkdndextensions] ==--;
  5303.  
  5304.  
  5305. [dialparties-isextavail]
  5306. include => dialparties-isextavail-custom
  5307. exten => s,1,Set(HASH(dialparties,EXTSTATESTATUS)=)
  5308. exten => s,n,ExecIf($["${AMPUSER}" = "${ARG1}"]?Set(HASH(dialparties,EXTSTATE_RESULT)=INUSE_ORIGINATOR):Set(HASH(dialparties,EXTSTATE_RESULT)=${EXTENSION_STATE(${ARG1}@ext-local)}))
  5309. exten => s,n,GotoIf($["${DIALPLAN_EXISTS(dialparties-isextavail,${HASH(dialparties,EXTSTATE_RESULT)},1)}"="1"]?${HASH(dialparties,EXTSTATE_RESULT)},1:default,1)
  5310.  
  5311. exten => NOT_INUSE,1,Set(HASH(dialparties,EXTSTATESTATUS)=0)
  5312. exten => NOT_INUSE,n,Goto(finish,1)
  5313.  
  5314. exten => INUSE_ORIGINATOR,1,Set(HASH(dialparties,EXTSTATESTATUS)=1)
  5315. exten => INUSE_ORIGINATOR,n,Goto(finish,1)
  5316.  
  5317. exten => INUSE,1,Set(HASH(dialparties,EXTSTATESTATUS)=1)
  5318. exten => INUSE,n,Goto(finish,1)
  5319.  
  5320. exten => BUSY,1,Set(HASH(dialparties,EXTSTATESTATUS)=2)
  5321. exten => BUSY,n,Goto(finish,1)
  5322.  
  5323. exten => RINGING,1,Set(HASH(dialparties,EXTSTATESTATUS)=8)
  5324. exten => RINGING,n,Goto(finish,1)
  5325.  
  5326. exten => RINGINUSE,1,Set(HASH(dialparties,EXTSTATESTATUS)=9)
  5327. exten => RINGINUSE,n,Goto(finish,1)
  5328.  
  5329. exten => HOLDINUSE,1,Set(HASH(dialparties,EXTSTATESTATUS)=10)
  5330. exten => HOLDINUSE,n,Goto(finish,1)
  5331.  
  5332. exten => ONHOLD,1,Set(HASH(dialparties,EXTSTATESTATUS)=16)
  5333. exten => ONHOLD,n,Goto(finish,1)
  5334.  
  5335. exten => UNAVAILABLE,1,Set(HASH(dialparties,EXTSTATESTATUS)=4)
  5336. exten => UNAVAILABLE,n,Goto(finish,1)
  5337.  
  5338. exten => UNKNOWN,1,Set(HASH(dialparties,EXTSTATESTATUS)=4)
  5339. exten => UNKNOWN,n,Goto(finish,1)
  5340.  
  5341. exten => default,1,Set(HASH(dialparties,EXTSTATESTATUS)=4)
  5342. exten => default,n,Goto(finish,1)
  5343.  
  5344. exten => finish,1,Noop(EXTENSION_STATE: ${HASH(dialparties,EXTSTATESTATUS)} (${HASH(dialparties,EXTSTATE_RESULT)}))
  5345. exten => finish,n,Return(${HASH(dialparties,EXTSTATESTATUS)})
  5346.  
  5347. ;--== end of [dialparties-isextavail] ==--;
  5348.  
  5349.  
  5350. [dialparties-mainloop]
  5351. include => dialparties-mainloop-custom
  5352. exten => s,1,Set(I=0)
  5353. exten => s,n,Set(HASH(dialparties,EXTLISTCOUNT)=0)
  5354. exten => s,n,While($["${SET(HASH(dialparties,workingext)=${HASH(dialparties_EXTLIST,${I})})}" != ""])
  5355. exten => s,n,GotoIf($["${HASH(dialparties,workingext)}"=""]?next)
  5356. exten => s,n,Set(HASH(dialparties,EXTLISTCOUNT)=${MATH(${HASH(dialparties,EXTLISTCOUNT)} + 1,int)})
  5357. exten => s,n,Noop(Working with extension ${HASH(dialparties,workingext)})
  5358. exten => s,n,Gosub(dialparties-isextavail,s,1(${HASH(dialparties,workingext)}))
  5359. exten => s,n,GotoIf($["${HASH(dialparties,SKIPREMAINING)}" = "1"]?next)
  5360. exten => s,n,ExecIf($["${HASH(dialparties,CWIGNORE)}" != ""]?Set(HASH(dialparties,EXTHASCW)=0):Set(HASH(dialparties,EXTHASCW)=${DB(CW/${HASH(dialparties,workingext)})}))
  5361. exten => s,n,ExecIf($["${HASH(dialparties,EXTHASCW)}" = ""]?Set(HASH(dialparties,EXTHASCW)=0))
  5362. exten => s,n,Set(HASH(dialparties,EXTCFB)=${DB(CFB/${HASH(dialparties,workingext)})})
  5363. exten => s,n,ExecIf($["${HASH(dialparties,EXTCFB)}" != ""]?Set(HASH(dialparties,EXTHASCFB)=1):Set(HASH(dialparties,EXTHASCFB)=0))
  5364. exten => s,n,Set(HASH(dialparties,EXTCFU)=${DB(CFU/${HASH(dialparties,workingext)})})
  5365. exten => s,n,ExecIf($["${HASH(dialparties,EXTCFU)}" != ""]?Set(HASH(dialparties,EXTHASCFU)=1):Set(HASH(dialparties,EXTHASCFU)=0))
  5366. exten => s,n,Noop(extnum ${HASH(dialparties,workingext)} has:: cw: ${HASH(dialparties,EXTHASCW)}, hascfb: ${HASH(dialparties,EXTHASCFB)} [${HASH(dialparties,EXTCFB)}], hascfu: ${HASH(dialparties,EXTHASCFU)} [${HASH(dialparties,EXTCFU)}])
  5367. exten => s,n,GotoIf($["${HASH(dialparties,MASTERMODE)}"!="1"]?finishmastermodecwchecks)
  5368. exten => s,n,Set(HASH(dialparties,MASTERMODE)=0)
  5369. exten => s,n,GotoIf($[$["${HASH(dialparties,EXTHASCW)}" = "1" & "${HASH(dialparties,EXTSTATESTATUS)}" != "0" & "${HASH(dialparties,EXTSTATESTATUS)}" != "4"] = 0]?checknocw)
  5370. exten => s,n,Set(HASH(dialparties,SKIPREMAINING)=1)
  5371. exten => s,n,Noop(In mastermode with cw enabled so ${HASH(dialparties,workingext)} will be tried and others skipped)
  5372. exten => s,n,Goto(finishmastermodecwchecks)
  5373. exten => s,n(checknocw),GotoIf($[$["${HASH(dialparties,EXTHASCW)}" = "0" & "${HASH(dialparties,EXTSTATESTATUS)}" != "0" & "${HASH(dialparties,EXTSTATESTATUS)}" != "4"] = 0]?finishmastermodecwchecks)
  5374. exten => s,n,Set(HASH(dialparties,SKIPREMAINING)=1)
  5375. exten => s,n,Noop(In mastermode with cw enabled so ${HASH(dialparties,workingext)} will be processed in case cfb set)
  5376. exten => s,n,Goto(finishmastermodecwchecks)
  5377. exten => s,n(finishmastermodecwchecks),Noop(Extension ${HASH(dialparties,workingext)} has ExtensionState: ${HASH(dialparties,EXTSTATESTATUS)})
  5378. exten => s,n,Gosub(dialparties-checkcfextension,s,1())
  5379. exten => s,n,Noop(Now working with: ${HASH(dialparties,workingext)})
  5380. exten => s,n,GotoIf($["${HASH(dialparties,workingext)}" = ""]?next)
  5381. exten => s,n,Set(HASH(dialparties,REALEXT)=${REPLACE(HASH(dialparties,workingext),#,)})
  5382. exten => s,n,GotoIf($["${HASH(DSARRAY,${HASH(dialparties,REALEXT)})}" != ""]?inhash)
  5383. exten => s,n,Set(HASH(DSARRAY,${HASH(dialparties,REALEXT)})=1)
  5384. exten => s,n,Set(HASH(DSORDEREDARRAY,${I})=${HASH(dialparties,REALEXT)})
  5385. exten => s,n,Set(HASH(DSORDEREDARRAYNOREPLACE,${I})=${HASH(dialparties,workingext)})
  5386. exten => s,n,Gosub(dialparties-getdialstring,s,1())
  5387. exten => s,n,GotoIf($["${HASH(dialparties,DIALSTRING)}" = ""]?updatecallerid)
  5388. exten => s,n,Set(HASH(dialparties,FINALDS)=${HASH(dialparties,FINALDS)}${HASH(dialparties,DIALSTRING)})
  5389. exten => s,n(updatecallerid),Gosub(dialparties-call-trace,s,1())
  5390. exten => s,n,Goto(next)
  5391. exten => s,n(inhash),Noop(${HASH(dialparties,REALEXT)} already in the dialstring, ignoring duplicate)
  5392. exten => s,n(next),Set(I=${MATH(${I}+1,int)})
  5393. exten => s,n,EndWhile
  5394. exten => s,n(exit),Return()
  5395.  
  5396. ;--== end of [dialparties-mainloop] ==--;
  5397.  
  5398.  
  5399. [dialparties-checkcfextension]
  5400. include => dialparties-checkcfextension-custom
  5401. exten => s,1,GotoIf($[${REGEX("#$" ${HASH(dialparties,workingext)})}]?return)
  5402. exten => s,n,GotoIf($["${HASH(dialparties,EXTHASCW)}"="0" | "${HASH(dialparties,EXTHASCFB)}"="1" | "${HASH(dialparties,EXTHASCFU)}"="1"]?check1,1)
  5403. exten => s,n,GotoIf($["${HASH(dialparties,RGMETHOD)}"="none" | "${HASH(dialparties,EXTHASCW)}"="1" | "${HASH(dialparties,CWINUSEBUSY)}"!=""]?check2,1)
  5404. exten => s,n,GotoIf($["${HASH(dialparties,EXTHASCW)}"="1" | "${HASH(dialparties,RGMETHOD)}"="firstnotonphone"]?check3,1)
  5405. exten => s,n,GotoIf($["${HASH(dialparties,RGMETHOD)}"="firstavailable"]?check4,1)
  5406. exten => s,n(return),Return()
  5407.  
  5408. exten => check1,1,GotoIf($["${HASH(dialparties,EXTHASCFU)}"="1" & "${HASH(dialparties,EXTSTATESTATUS)}" != "4"]?check1-1,1)
  5409. exten => check1,n,GotoIf($["${HASH(dialparties,EXTHASCW)}"="0" | "${HASH(dialparties,EXTHASCFB)}"="1"]?check1-2,1)
  5410. exten => check1,n,GotoIf($["${HASH(dialparties,EXTSTATESTATUS)}" < "0"]?check1-3,1)
  5411. exten => check1,n,Goto(s,return)
  5412.  
  5413. exten => check1-1,1,GotoIf($["${HASH(dialparties,RGMETHOD)}"!="" & "${HASH(dialparties,RGMETHOD)}" != "none" & "${HASH(dialparties,CFIGNORE)}"=""]?check1-1-1,1)
  5414. exten => check1-1,n,Noop(Extension ${HASH(dialparties,workingext)} has call forward on no answer set and is unavailable)
  5415. exten => check1-1,n,Set(DIALSTATUS=NOANSWER)
  5416. exten => check1-1,n,Set(HASH(dialparties,workingext)=)
  5417. exten => check1-1,n,Goto(s,return)
  5418.  
  5419. exten => check1-1-1,1,Noop(Extension ${HASH(dialparties,workingext)} has call forward on no answer set and is unavailable and is part of a Ring Group forwarding to ${HASH(dialparties,EXTCFU)})
  5420. exten => check1-1-1,n,Set(HASH(dialparties,workingext)=${HASH(dialparties,workingext)}#)
  5421. exten => check1-1-1,n,Goto(s,return)
  5422.  
  5423. exten => check1-2,1,Noop(Checking CW and CFB status for extension ${HASH(dialparties,workingext)})
  5424. exten => check1-2,n,GotoIf($["${HASH(dialparties,EXTSTATESTATUS)}">"0" & "${HASH(dialparties,EXTSTATESTATUS)}" != "4"]?check1-2-1,1)
  5425. exten => check1-2,n,GotoIf($["${HASH(dialparties,EXTSTATESTATUS)}"="4"]?check1-2-2,1)
  5426. exten => check1-2,n,Goto(s,return)
  5427.  
  5428. exten => check1-2-1,1,Noop(Extension ${HASH(dialparties,workingext)} is not available to be called)
  5429. exten => check1-2-1,n,GotoIf($["${HASH(dialparties,EXTHASCFB)}"="1" & "${HASH(dialparties,CFIGNORE)}"="" & "${HASH(dialparties,EXTHASCW)}"="0"]?check1-2-1-1,1)
  5430. exten => check1-2-1,n,GotoIf($["${HASH(dialparties,EXTHASCW)}"="0"]?check1-2-1-2,1)
  5431. exten => check1-2-1,n,Noop(Extension ${HASH(dialparties,workingext)} has call waiting enabled)
  5432. exten => check1-2-1,n,Goto(s,return)
  5433.  
  5434. exten => check1-2-1-1,1,GotoIf($["${HASH(dialparties,RGMETHOD)}"="0"]?check1-2-1-1-1,1)
  5435. exten => check1-2-1-1,n,Noop(Extension ${HASH(dialparties,workingext)} has call forward on busy set to ${HASH(dialparties,EXTCFB)})
  5436. exten => check1-2-1-1,n,Set(HASH(dialparties,workingext)=${HASH(dialparties,EXTCFB)}#)
  5437. exten => check1-2-1-1,n,Goto(s,return)
  5438.  
  5439. exten => check1-2-1-1-1,1,Noop(Extension ${HASH(dialparties,workingext)} has call forward on busy set to ${HASH(dialparties,EXTCFB)}, dropping to macro-dial)
  5440. exten => check1-2-1-1-1,n,Set(HASH(dialparties,workingext)=)
  5441. exten => check1-2-1-1-1,n,Set(DIALSTATUS=BUSY)
  5442. exten => check1-2-1-1-1,n,Set(__DIVERSION_REASON=user-busy)
  5443. exten => check1-2-1-1-1,n,Goto(s,return)
  5444.  
  5445. exten => check1-2-1-2,1,Noop(Extension ${HASH(dialparties,workingext)} has call waiting disabled)
  5446. exten => check1-2-1-2,n,Set(HASH(dialparties,workingext)=)
  5447. exten => check1-2-1-2,n,Set(DIALSTATUS=BUSY)
  5448. exten => check1-2-1-2,n,Set(__DIVERSION_REASON=user-busy)
  5449. exten => check1-2-1-2,n,Goto(s,return)
  5450.  
  5451. exten => check1-2-2,1,Noop(Extension ${HASH(dialparties,workingext)} is not available to be called)
  5452. exten => check1-2-2,n,Set(HASH(dialparties,workingext)=)
  5453. exten => check1-2-2,n,Goto(s,return)
  5454.  
  5455. exten => check1-3,1,Noop(ExtensionState for ${HASH(dialparties,workingext)} could not be read...assuming ok)
  5456. exten => check1-3,n,Goto(s,return)
  5457.  
  5458. exten => check2,1,GotoIf($["${EXTSTATESTATUS}">"0" & "${EXTSTATESTATUS}" != "4"]?check2-1,1)
  5459. exten => check2,n,Goto(s,return)
  5460.  
  5461. exten => check2-1,1,Set(DIALSTATUS_CW=BUSY)
  5462. exten => check2-1,n,Noop(Extension ${HASH(dialparties,workingext)} has call waiting enabled with state: ${EXTSTATESTATUS})
  5463. exten => check2-1,n,Goto(s,return)
  5464.  
  5465. exten => check3,1,Noop(Extension ${HASH(dialparties,workingext)} has ExtensionState: ${EXTSTATESTATUS})
  5466. exten => check3,n,GotoIf($["${EXTSTATESTATUS}" != "0"]?check3-1,1)
  5467. exten => check3,n,Goto(s,return)
  5468.  
  5469. exten => check3-1,1,Noop(Extension ${HASH(dialparties,workingext)} has call waiting enabled but blocked for hunt)
  5470. exten => check3-1,n,Set(HASH(dialparties,workingext)=)
  5471. exten => check3-1,n,Set(DIALSTATUS=BUSY)
  5472. exten => check3-1,n,Goto(s,return)
  5473.  
  5474. exten => check4,1,Noop(Extension ${HASH(dialparties,workingext)} has ExtensionState: ${EXTSTATESTATUS})
  5475. exten => check4,n,GotoIf($["${EXTSTATESTATUS}" = "4"]?check4-1,1)
  5476. exten => check4,n,Goto(s,return)
  5477.  
  5478. exten => check4-1,1,Noop(Extension ${HASH(dialparties,workingext)} is unavailable so dont include in firstavailable hunt)
  5479. exten => check4-1,n,Set(HASH(dialparties,workingext)=)
  5480. exten => check4-1,n,Set(DIALSTATUS=BUSY)
  5481. exten => check4-1,n,Goto(s,return)
  5482.  
  5483. ;--== end of [dialparties-checkcfextension] ==--;
  5484.  
  5485.  
  5486. [dialparties-getdialstring]
  5487. include => dialparties-getdialstring-custom
  5488. exten => s,1,Set(HASH(dialparties,DIALSTRING)=)
  5489. exten => s,n,GotoIf($[$[${REGEX("#" ${HASH(dialparties,workingext)})}] = 0]?internal,1)
  5490. exten => s,n,Set(HASH(dialparties,workingext)=${REPLACE(HASH(dialparties,workingext),#,)})
  5491. exten => s,n,ExecIf($["${HASH(dialparties,USE_CONFIRMATION)}"="FALSE"]?Set(HASH(dialparties,DIALSTRING)=Local/${HASH(dialparties,workingext)}@from-internal/n&):Set(HASH(dialparties,DIALSTRING)=Local/RG-${HASH(dialparties,RINGGROUP_INDEX)}*-${HASH(dialparties,workingext)}#@from-internal&))
  5492. exten => s,n,Noop(Built External dialstring component for ${HASH(dialparties,workingext)}: ${HASH(dialparties,DIALSTRING)})
  5493. exten => s,n,Return()
  5494.  
  5495. exten => internal,1,Set(DEVICES=${DB(AMPUSER/${HASH(dialparties,workingext)}/device)})
  5496. exten => internal,n,While($["${SET(DEVICE=${SHIFT(DEVICES,&)})}" != ""])
  5497. exten => internal,n,Noop(Working with device ${DEVICE})
  5498. exten => internal,n,GotoIf($["${HASH(dialparties,USE_CONFIRMATION)}"!="FALSE"]?useconfirmation)
  5499. exten => internal,n,Set(HASH(dialparties,DEVICE_DS)=${DB(DEVICE/${DEVICE}/dial)})
  5500. exten => internal,n,GotoIf($[${REGEX("^PJSIP" ${HASH(dialparties,DEVICE_DS)})}]?pjsip:setds)
  5501. exten => internal,n(pjsip),Noop(Discovered PJSIP Endpoint ${HASH(dialparties,DEVICE_DS)})
  5502. exten => internal,n,Set(HASH(dialparties,DEVICE_DS)=${PJSIP_DIAL_CONTACTS(${HASH(dialparties,DEVICE_DS):6})})
  5503. exten => internal,n,GotoIf($["${HASH(dialparties,DEVICE_DS)}"!=""]?foundcontacts:nocontacts)
  5504. exten => internal,n(foundcontacts),Noop(Discovered PJSIP Endpoint ${HASH(dialparties,DEVICE_DS)})
  5505. exten => internal,n,Goto(setds)
  5506. exten => internal,n(nocontacts),Noop(Discovered PJSIP Endpoint ${HASH(dialparties,DEVICE_DS)})
  5507. exten => internal,n,Goto(next)
  5508. exten => internal,n(setds),Set(HASH(dialparties,DIALSTRING)=${HASH(dialparties,DIALSTRING)}${HASH(dialparties,DEVICE_DS)}&)
  5509. exten => internal,n,Goto(next)
  5510. exten => internal,n(useconfirmation),Set(HASH(dialparties,DIALSTRING)=Local/LC-${DEVICE}@from-internal&)
  5511. exten => internal,n,Goto(next)
  5512. exten => internal,n(next),EndWhile
  5513. exten => internal,n,Return()
  5514.  
  5515. ;--== end of [dialparties-getdialstring] ==--;
  5516.  
  5517.  
  5518. [dialparties-call-trace]
  5519. include => dialparties-call-trace-custom
  5520. exten => s,1,GotoIf($["${REGEX("#$" ${HASH(dialparties,workingext)})}" = "0" && $["${HASH(dialparties,RGMETHOD)}"="hunt" | "${HASH(dialparties,RGMETHOD)}"="random" | "${HASH(dialparties,RGMETHOD)}"="memoryhunt" | "${HASH(dialparties,RGMETHOD)}"="firstavailable" | "${HASH(dialparties,RGMETHOD)}"="firstnotonphone"]]?notrace)
  5521. exten => s,n,ExecIf($["${HASH(dialparties,CIDNUM)}"!=""]?Set(DB(CALLTRACE/${HASH(dialparties,workingext)})})=${HASH(dialparties,CIDNUM)}):Noop(DbDel CALLTRACE/${HASH(dialparties,workingext)} - Caller ID is not defined. ${DB_DELETE(CALLTRACE/${HASH(dialparties,workingext)})}))
  5522. exten => s,n,Goto(return)
  5523. exten => s,n(notrace),Set(HASH(dialparties_EXT_HUNT,${HASH(dialparties,workingext)})=${HASH(dialparties,DIALSTRING)})
  5524. exten => s,n(return),Return()
  5525.  
  5526. ;--== end of [dialparties-call-trace] ==--;
  5527.  
  5528.  
  5529. [dialparties-firstnotonphone]
  5530. include => dialparties-firstnotonphone-custom
  5531. exten => s,1,Set(I=0)
  5532. exten => s,n,Set(Z=0)
  5533. exten => s,n,While($["${SET(HASH(dialparties,workingext)=${HASH(dialparties_EXTLIST,${I})})}" != ""])
  5534. exten => s,n,Gosub(dialparties-isextavail,s,1(${HASH(dialparties,workingext)}))
  5535. exten => s,n,GotoIf($["${GOSUB_RETVAL}"!="0"]?next)
  5536. exten => s,n,Set(HASH(dialparties_EXTENAVAIL,${Z})=${HASH(dialparties,workingext)})
  5537. exten => s,n,Set(HASH(dialparties_DSARRAYNEW,${HASH(dialparties,workingext)})=1)
  5538. exten => s,n,Set(Z=${MATH(${Z}+1,int)})
  5539. exten => s,n(next),Set(I=${MATH(${I}+1,int)})
  5540. exten => s,n,EndWhile
  5541. exten => s,n,Set(I=0)
  5542. exten => s,n,While($["${SET(HASH(dialparties,workingext)=${HASH(dialparties_EXTLIST,${I})})}" != ""])
  5543. exten => s,n,GotoIf($["${HASH(dialparties_DSARRAYNEW,${HASH(dialparties,workingext)})}"=""]?next1)
  5544. exten => s,n,Set(HASH(dialparties_EXTENAVAIL,${I})=${HASH(dialparties,workingext)})
  5545. exten => s,n,Set(HASH(dialparties_DSARRAYNEW,${HASH(dialparties,workingext)})=1)
  5546. exten => s,n,Set(Z=${MATH(${Z}+1,int)})
  5547. exten => s,n(next1),Set(I=${MATH(${I}+1,int)})
  5548. exten => s,n,EndWhile
  5549. exten => s,n,ClearHash(dialparties_EXTLIST)
  5550. exten => s,n,Set(I=0)
  5551. exten => s,n,While($["${SET(HASH(dialparties,workingext)=${HASH(dialparties_EXTENAVAIL,${I})})}" != ""])
  5552. exten => s,n,Set(HASH(dialparties_EXTENAVAIL,${I})=${HASH(dialparties,workingext)})
  5553. exten => s,n(next2),Set(I=${MATH(${I}+1,int)})
  5554. exten => s,n,EndWhile
  5555. exten => s,n,ClearHash(dialparties_EXTENAVAIL)
  5556. exten => s,n,ClearHash(dialparties_DSARRAYNEW)
  5557. exten => s,n,Return()
  5558.  
  5559. ;--== end of [dialparties-firstnotonphone] ==--;
  5560.  
  5561.  
  5562. [dialparties-builddshunt]
  5563. include => dialparties-builddshunt-custom
  5564. exten => s,1,GotoIf($["${HASH(dialparties,CIDNUM)}"=""]?return)
  5565. exten => s,n,Set(DB(CALLTRACE/${HASH(dialparties,workingext)})})=${HASH(dialparties,CIDNUM)})
  5566. exten => s,n,GosubIf($["${HASH(dialparties,RGMETHOD)}"="random"]?dialparties-builddshunt-shuffle,s,1())
  5567. exten => s,n,Set(I=0)
  5568. exten => s,n,While($["${SET(HASH(dialparties,workingext)=${HASH(dialparties_EXTLIST,${I})})}" != ""])
  5569. exten => s,n,GotoIf($["${HASH(dialparties_EXT_HUNT,${HASH(dialparties,workingext)})}"=""]?next)
  5570. exten => s,n,Set(HASH(dialparties,myhuntmember)=HuntMember${HASH(dialparties,HUNT_LOOPS)})
  5571. exten => s,n,GotoIf($[$["${HASH(dialparties,RGMETHOD)}"="hunt" | "${HASH(dialparties,RGMETHOD)}"="random" | "${HASH(dialparties,RGMETHOD)}"="firstavailable" | "${HASH(dialparties,RGMETHOD)}"="firstnotonphone"] = 0]?memoryhunt)
  5572. exten => s,n,Set(${HASH(dialparties,myhuntmember)}=${HASH(dialparties_EXT_HUNT,${HASH(dialparties,workingext)})})
  5573. exten => s,n,Goto(increaseloopcount)
  5574. exten => s,n(memoryhunt),GotoIf($["${HASH(dialparties,RGMETHOD)}"!="memoryhunt"]?increaseloopcount)
  5575. exten => s,n,ExecIf($["${HASH(dialparties,HUNT_LOOPS)}"="0"]?Set(HASH(dialparties,DSHUNT)=${HASH(dialparties_EXT_HUNT,${HASH(dialparties,workingext)})}):Set(HASH(dialparties,DSHUNT)=${HASH(dialparties,DSHUNT)}${HASH(dialparties_EXT_HUNT,${HASH(dialparties,workingext)})}))
  5576. exten => s,n,Set(${HASH(dialparties,myhuntmember)}=${HASH(dialparties,DSHUNT)})
  5577. exten => s,n(increaseloopcount),ExecIf($["${${HASH(dialparties,myhuntmember)}}" != "" & ${REGEX("&$" ${${HASH(dialparties,myhuntmember)}})}]?Set(${HASH(dialparties,myhuntmember)}=${${HASH(dialparties,myhuntmember)}:0:-1}))
  5578. exten => s,n,Set(HASH(dialparties,HUNT_LOOPS)=${MATH(${HASH(dialparties,HUNT_LOOPS)}+1,int)})
  5579. exten => s,n(next),Set(I=${MATH(${I}+1,int)})
  5580. exten => s,n,EndWhile
  5581. exten => s,n(return),Return()
  5582.  
  5583. ;--== end of [dialparties-builddshunt] ==--;
  5584.  
  5585.  
  5586. [dialparties-builddshunt-shuffle]
  5587. include => dialparties-builddshunt-shuffle-custom
  5588. exten => s,1,Set(I=0)
  5589. exten => s,n,While($["${SET(HASH(dialparties,workingext)=${HASH(dialparties_EXTLIST,${I})})}" != ""])
  5590. exten => s,n,Set(rand=${RAND(0,5000)})
  5591. exten => s,n,While($["${HASH(dialparties_EXTLISTRAND,${HASH(dialparties,workingext)}:${rand})}"!=""])
  5592. exten => s,n,Set(rand=${RAND(0,5000)})
  5593. exten => s,n,EndWhile
  5594. exten => s,n,Set(HASH(dialparties_EXTLISTRAND,${HASH(dialparties,workingext)}:${rand})=${HASH(dialparties,workingext)})
  5595. exten => s,n,Set(I=${MATH(${I}+1,int)})
  5596. exten => s,n,EndWhile
  5597. exten => s,n,ClearHash(dialparties_EXTLIST)
  5598. exten => s,n,Set(dialparties_EXTLISTRANDKEYS=${SORT(${HASHKEYS(dialparties_EXTLISTRAND)})})
  5599. exten => s,n,Set(I=0)
  5600. exten => s,n,While($["${SET(dialparties_EXTLISTRANDKEY=${SHIFT(dialparties_EXTLISTRANDKEYS)})}" != ""])
  5601. exten => s,n,Set(HASH(dialparties_EXTLIST,${I})=${dialparties_EXTLISTRANDKEY})
  5602. exten => s,n,Set(I=${MATH(${I}+1,int)})
  5603. exten => s,n,EndWhile
  5604. exten => s,n,ClearHash(dialparties_EXTLISTRAND)
  5605. exten => s,n,Return()
  5606.  
  5607. ;--== end of [dialparties-builddshunt-shuffle] ==--;
  5608.  
  5609.  
  5610. [dialparties-checkblkvm]
  5611. include => dialparties-checkblkvm-custom
  5612. exten => s,1,GotoIf($[$["${HASH(dialparties,NODEST)}"!="" & "${HASH(dialparties,USE_CONFIRMATION)}"="FALSE"] = 0]?endblkvm)
  5613. exten => s,n,GotoIf($[$[${REGEX("auto-blkvm" ${HASH(dialparties,DIALOPTS)})} | ${REGEX("auto-confirm" ${HASH(dialparties,DIALOPTS)})} | ${REGEX("confirm" ${HASH(dialparties,DIALOPTS)})}] = 0]?addblkvm)
  5614. exten => s,n,Noop(NODEST: ${HASH(dialparties,NODEST)} blkvm enabled macro already in dialopts: ${HASH(dialparties,DIALOPTS)})
  5615. exten => s,n,Goto(endblkvm)
  5616. exten => s,n(addblkvm),Set(HASH(dialparties,DIALOPTS)=${HASH(dialparties,DIALOPTS)}M(auto-blkvm))
  5617. exten => s,n,Noop(NODEST: ${HASH(dialparties,NODEST)} adding M(auto-blkvm) to dialopts: ${HASH(dialparties,DIALOPTS)})
  5618. exten => s,n(endblkvm),Return()
  5619.  
  5620. ;--== end of [dialparties-checkblkvm] ==--;
  5621.  
  5622.  
  5623. [dialparties-ringallv2]
  5624. include => dialparties-ringallv2-custom
  5625. exten => s,1,GotoIf($["${HASH(dialparties,SKIPREMAINING)}" = "1" | $["${HASH(dialparties,EXTLISTCOUNT)}"="1" & "${HASH(dialparties,FMGRP_PRIMARYREMOVED)}"="0"]]?timerrealprering,1)
  5626. exten => s,n,GotoIf($["${HASH(dialparties,EXTLISTCOUNT)}"="1" & "${HASH(dialparties,FMGRP_PRIMARYREMOVED)}"="1"]?timergrptime,1)
  5627. exten => s,n,GotoIf($["${HASH(dialparties,EXTLISTCOUNT)}"="1"]?timertotalprering,1)
  5628. exten => s,n,Set(HASH(dialparties,TIMER)=${HASH(dialparties,FMGRP_TOTALPRERING)})
  5629. exten => s,n,Set(HASH(dialparties,FINALDS)=Local/FMPR-${HASH(dialparties_EXTLIST,0)}@from-internal&Local/FMGL-)
  5630. exten => s,n,Set(I=1)
  5631. exten => s,n,While($["${SET(HASH(dialparties,workingext)=${HASH(dialparties_EXTLIST,${I})})}" != ""])
  5632. exten => s,n,GotoIf($["${HASH(dialparties,workingext)}"="" | "${HASH(dialparties,workingext)}"="${HASH(dialparties,PRIMARY_EXT)}"]?next)
  5633. exten => s,n,Set(HASH(dialparties,FINALDS)=${HASH(dialparties,FINALDS)}${HASH(dialparties,workingext)}-)
  5634. exten => s,n(next),Set(I=${MATH(${I}+1,int)})
  5635. exten => s,n,EndWhile
  5636. exten => s,n,ExecIf($["${HASH(dialparties,FINALDS)}" != "" & ${REGEX("-$" ${HASH(dialparties,FINALDS)})}]?Set(HASH(dialparties,FINALDS)=${HASH(dialparties,FINALDS):0:-1}))
  5637. exten => s,n,Set(HASH(dialparties,FINALDS)=${HASH(dialparties,FINALDS)}@from-internal)
  5638. exten => s,n,Set(_FMUNIQUE=${CHANNEL})
  5639. exten => s,n,Set(_RingGroupMethod=ringall)
  5640. exten => s,n,Set(_FMPRERING=${MATH(${HASH(dialparties,FMGRP_PRERING)}-2,int)})
  5641. exten => s,n,Set(_FMREALPRERING=${HASH(dialparties,FMGRP_REALPRERING)})
  5642. exten => s,n,Set(_FMGRPTIME=${HASH(dialparties,FMGRP_GRPTIME)})
  5643. exten => s,n,ExecIf($["${HASH(dialparties,RECALL_MASTERMODE)}" = "ringallv2"]?Set(_FMPRIME=FALSE):Set(_FMPRIME=TRUE))
  5644. exten => s,n,Noop(FMUNIQUE: ${FMUNIQUE}, FMRERING: ${FMPRERING}, FMREALPRERING: ${FMREALPRERING}, FMGRPTIME: ${FMGRPTIME})
  5645. exten => s,n,GotoIf($["${HASH(dialparties,USE_CONFIRMATION)}"!="FALSE"]?useconfirmation,1)
  5646. exten => s,n,Return()
  5647.  
  5648. exten => timerrealprering,1,Set(HASH(dialparties,TIMER)=${HASH(dialparties,FMGRP_REALPRERING)})
  5649. exten => timerrealprering,n,Return()
  5650.  
  5651. exten => timergrptime,1,Set(HASH(dialparties,TIMER)=${HASH(dialparties,FMGRP_GRPTIME)})
  5652. exten => timergrptime,n,Return()
  5653.  
  5654. exten => timertotalprering,1,Set(HASH(dialparties,TIMER)=${HASH(dialparties,FMGRP_TOTALPRERING)})
  5655. exten => timertotalprering,n,Return()
  5656.  
  5657. exten => useconfirmation,1,Set(_USE_CONFIRMATION=${HASH(dialparties,USE_CONFIRMATION)})
  5658. exten => useconfirmation,n,Set(_RINGGROUP_INDEX=${HASH(dialparties,RINGGROUP_INDEX)})
  5659. exten => useconfirmation,n,Set(HASH(dialparties,USE_CONFIRMATION)=FALSE)
  5660. exten => useconfirmation,n,Return()
  5661.  
  5662. ;--== end of [dialparties-ringallv2] ==--;
  5663.  
  5664.  
  5665. [dialparties-finalbuild]
  5666. include => dialparties-finalbuild-custom
  5667. exten => s,1,GotoIf($["${HASH(dialparties,RGMETHOD)}"="hunt" | "${HASH(dialparties,RGMETHOD)}"="random" | "${HASH(dialparties,RGMETHOD)}"="memoryhunt" | "${HASH(dialparties,RGMETHOD)}"="firstavailable" | "${HASH(dialparties,RGMETHOD)}"="firstnotonphone"]?hunt,1:nohunt,1)
  5668.  
  5669. exten => hunt,1,Set(HASH(dialparties,FINALDS)=,)
  5670. exten => hunt,n,ExecIf($["${HASH(dialparties,TIMER)}"!=""]?Set(HASH(dialparties,FINALDS)=${HASH(dialparties,FINALDS)}${HASH(dialparties,TIMER)}))
  5671. exten => hunt,n,Set(HASH(dialparties,FINALDS)=${HASH(dialparties,FINALDS)},${DIALOPTS})
  5672. exten => hunt,n,Set(HuntMembers=${HASH(dialparties,HUNT_LOOPS)})
  5673. exten => hunt,n,Set(MACRODIALGOTO_PRI=huntdial)
  5674. exten => hunt,n,Return()
  5675.  
  5676. exten => nohunt,1,Set(HASH(dialparties,FINALDS)=${HASH(dialparties,FINALDS)},)
  5677. exten => nohunt,n,ExecIf($["${HASH(dialparties,TIMER)}"!=""]?Set(HASH(dialparties,FINALDS)=${HASH(dialparties,FINALDS)}${HASH(dialparties,TIMER)}))
  5678. exten => nohunt,n,ExecIf($["${HASH(dialparties,TIMER)}"!="" & "${HASH(dialparties,USE_CONFIRMATION)}"!="FALSE"]?Set(__RT=${HASH(dialparties,TIMER)}))
  5679. exten => nohunt,n,Set(HASH(dialparties,FINALDS)=${HASH(dialparties,FINALDS)},${HASH(dialparties,DIALOPTS)})
  5680. exten => nohunt,n,ExecIf($["${HASH(dialparties,SCREEN)}"!=""]?Set(HASH(dialparties,FINALDS)=${HASH(dialparties,FINALDS)}p))
  5681. exten => nohunt,n,GotoIf($["${HASH(dialparties,USE_CONFIRMATION)}"!="FALSE"]?useconfirmation,1)
  5682. exten => nohunt,n(nohuntend),Set(MACRODIALGOTO_PRI=normdial)
  5683. exten => nohunt,n,Return()
  5684.  
  5685. exten => useconfirmation,1,Set(__RG_IDX=${HASH(dialparties,RINGGROUP_INDEX)})
  5686. exten => useconfirmation,n,ExecIf($["${HASH(dialparties,CIDNUM)}"!=""]?Set(__CALLCONFIRMCID=${HASH(dialparties,CIDNUM)}):Set(__CALLCONFIRMCID=999))
  5687. exten => useconfirmation,n,Goto(nohunt,nohuntend)
  5688.  
  5689. ;--== end of [dialparties-finalbuild] ==--;
  5690.  
  5691.  
  5692. [dialparties-setrvol]
  5693. include => dialparties-setrvol-custom
  5694. exten => s,1,Set(HASH(dialparties,RVOL_MODE)=${RVOL_MODE})
  5695. exten => s,n,Set(HASH(dialparties,RVOL)=${RVOL})
  5696. exten => s,n,Set(HASH(dialparties,RVOL_PARENT)=${RVOL_PARENT})
  5697. exten => s,n,Noop(RVOL_MODE is: ${HASH(dialparties,RVOL_MODE)} )
  5698. exten => s,n,Noop(RVOL is: ${HASH(dialparties,RVOL)})
  5699. exten => s,n,Noop(RVOLPARENT is: ${HASH(dialparties,RVOL_PARENT)})
  5700. exten => s,n,GotoIf($["${DIALPLAN_EXISTS(dialparties-setrvol,${HASH(dialparties,RVOL_MODE)},1)}"="1"]?${HASH(dialparties,RVOL_MODE)},1)
  5701. exten => s,n,Return()
  5702.  
  5703. exten => force,1,Set(__RVOL=${HASH(dialparties,RVOL_PARENT)})
  5704.  
  5705. exten => no,1,Return()
  5706. exten => no,n,Return()
  5707. exten => no,n,Set(__RVOL=${HASH(dialparties,RVOL)})
  5708. exten => no,n,Return()
  5709. exten => no,n,Return()
  5710.  
  5711. exten => yes,1,Set(__RVOL=${HASH(dialparties,RVOL_PARENT)})
  5712.  
  5713. exten => never,1,Set(__RVOL=${HASH(dialparties,RVOL)})
  5714.  
  5715. ;--== end of [dialparties-setrvol] ==--;
  5716.  
  5717.  
  5718. [macro-pinsets]
  5719. include => macro-pinsets-custom
  5720. exten => s,1,Set(try=1)
  5721. exten => s,n,GotoIf($[${ARG2} = 1]?cdr,1)
  5722. exten => s,n,GotoIf($["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]?auth:return)
  5723. exten => s,n(auth),Progress
  5724. exten => s,n,Read(dtmf,agent-pass,0,n,1,10)
  5725. exten => s,n,GotoIf($["${DB(PINSETS/${ARG1}/${dtmf})}" = "${ARG1}"]?return:askpin)
  5726. exten => s,n(askpin),Set(try=$[${try}+1])
  5727. exten => s,n,GotoIf($[${try} > 4]?hangup)
  5728. exten => s,n,Read(dtmf,auth-incorrect,0,n,1,10)
  5729. exten => s,n(validate),GotoIf($["${DB(PINSETS/${ARG1}/${dtmf})}" = "${ARG1}"]?return:askpin)
  5730. exten => s,n(hangup),Hangup
  5731. exten => s,n(return),Noop(returning back)
  5732.  
  5733. exten => cdr,1,GotoIf($["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]?auth:return)
  5734. exten => cdr,n,Set(try=1)
  5735. exten => cdr,n(auth),Progress
  5736. exten => cdr,n,Read(dtmf,agent-pass,0,n,1,10)
  5737. exten => cdr,n,GotoIf($["${DB(PINSETS/${ARG1}/${dtmf})}" = "${ARG1}"]?setaccountcode:askpin)
  5738. exten => cdr,n(askpin),Set(try=$[${try}+1])
  5739. exten => cdr,n,GotoIf($[${try} > 4]?hangup)
  5740. exten => cdr,n,Read(dtmf,auth-incorrect,0,n,1,10)
  5741. exten => cdr,n(validate),GotoIf($["${DB(PINSETS/${ARG1}/${dtmf})}" = "${ARG1}"]?setaccountcode:askpin)
  5742. exten => cdr,n(hangup),Hangup
  5743. exten => cdr,n(setaccountcode),Set(CHANNEL(accountcode)=${dtmf})
  5744. exten => cdr,n(return),Noop(returning back)
  5745.  
  5746. ;--== end of [macro-pinsets] ==--;
  5747.  
  5748.  
  5749. [ext-featurecodes]
  5750. include => ext-featurecodes-custom
  5751. exten => *38,1,Goto(from-internal,*38,1)
  5752.  
  5753. exten => *40,1,Goto(from-internal,*40,1)
  5754.  
  5755. exten => *41,1,Goto(from-internal,*41,1)
  5756.  
  5757. exten => *39,1,Goto(from-internal,*39,1)
  5758.  
  5759. exten => *30,1,Goto(from-internal,*30,1)
  5760.  
  5761. exten => *31,1,Goto(from-internal,*31,1)
  5762.  
  5763. exten => *10,1,Goto(from-internal,*10,1)
  5764.  
  5765. exten => 555,1,Goto(from-internal,555,1)
  5766.  
  5767. exten => 7777,1,Goto(from-internal,7777,1)
  5768.  
  5769. exten => *12,1,Goto(from-internal,*12,1)
  5770.  
  5771. exten => 666,1,Goto(from-internal,666,1)
  5772.  
  5773. exten => *43,1,Goto(from-internal,*43,1)
  5774.  
  5775. exten => *60,1,Goto(from-internal,*60,1)
  5776.  
  5777. exten => *88,1,Goto(from-internal,*88,1)
  5778.  
  5779. exten => *85,1,Goto(from-internal,*85,1)
  5780.  
  5781. exten => *86,1,Goto(from-internal,*86,1)
  5782.  
  5783. exten => *37,1,Goto(from-internal,*37,1)
  5784.  
  5785. exten => *36,1,Goto(from-internal,*36,1)
  5786.  
  5787. exten => *44,1,Goto(from-internal,*44,1)
  5788.  
  5789. exten => *98,1,Goto(from-internal,*98,1)
  5790.  
  5791. ;--== end of [ext-featurecodes] ==--;
  5792.  
  5793.  
  5794. [app-hotelwakeup]
  5795. include => app-hotelwakeup-custom
  5796. exten => *68,1,Macro(user-callerid,)
  5797. exten => *68,n,Answer
  5798. exten => *68,n,Wait(1)
  5799. exten => *68,n,AGI(agi://127.0.0.1/wakeup)
  5800. exten => *68,n,Hangup
  5801.  
  5802. ;--== end of [app-hotelwakeup] ==--;
  5803.  
  5804.  
  5805. [app-vmblast]
  5806. include => app-vmblast-custom
  5807. exten => vmblast,1(digits),ExecIf($["${DIGITS}" != ""]?SayDigits(${DIGITS}))
  5808. exten => vmblast,n(msg),ExecIf($["${VMBMSG}" != ""]?Background(${VMBMSG}))
  5809. exten => vmblast,n,Background(if-correct-press&digits/1)
  5810. exten => vmblast,n,WaitExten(20,)
  5811. exten => vmblast,n,Playback(sorry-youre-having-problems&goodbye)
  5812. exten => vmblast,n,Hangup
  5813.  
  5814. exten => 1,1,VoiceMail(${GRPLIST:1},s)
  5815. exten => 1,n,Hangup
  5816.  
  5817. ;--== end of [app-vmblast] ==--;
  5818.  
  5819.  
  5820. [paging-chanspy]
  5821. include => paging-chanspy-custom
  5822. exten => s,1,Answer
  5823. exten => s,n,Wait(1)
  5824. exten => s,n,Playback(beep&extension)
  5825. exten => s,n,SayAlpha(${AMPUSER})
  5826. exten => s,n,Playback(calling)
  5827. exten => s,n,SayDigits(${DIALED})
  5828. exten => s,n,ExecIf($["${DEVICE_STATE(${ORIG_CHANNEL})}" = "NOT_INUSE"]?Playback(sorry&this&channel&has-expired))
  5829. exten => s,n,ExecIf($["${DEVICE_STATE(${ORIG_CHANNEL})}" = "NOT_INUSE"]?Busy(5))
  5830. exten => s,n,ExecIf($["${DEVICE_STATE(${ORIG_CHANNEL})}" = "NOT_INUSE"]?Hangup())
  5831. exten => s,n,ChanSpy(${ORIG_CHANNEL},qEB)
  5832. exten => s,n,Hangup
  5833.  
  5834. ;--== end of [paging-chanspy] ==--;
  5835.  
  5836.  
  5837. [dponeapi_beep]
  5838. include => dponeapi_beep-custom
  5839. exten => s,1,Answer
  5840. exten => s,n,Playback(beep)
  5841. exten => s,n,Hangup
  5842.  
  5843. exten => ss,1,Answer
  5844. exten => ss,n,Playback(beep&beep)
  5845. exten => ss,n,Hangup
  5846.  
  5847. ;--== end of [dponeapi_beep] ==--;
  5848.  
  5849.  
  5850. [dponeapi_spy]
  5851. include => dponeapi_spy-custom
  5852. exten => s,1,ChanSpy(${channelname},bq)
  5853.  
  5854. ;--== end of [dponeapi_spy] ==--;
  5855.  
  5856.  
  5857. [sangomaconnect_make_calls_with]
  5858. include => sangomaconnect_make_calls_with-custom
  5859. exten => _.X,1,Macro(blkvm-set,)
  5860. exten => _.X,n,Goto(ext-local,${EXTEN},1)
  5861.  
  5862. ;--== end of [sangomaconnect_make_calls_with] ==--;
  5863.  
  5864.  
  5865. [confroom-direct]
  5866. include => confroom-direct-custom
  5867. exten => _X.,1,Macro(user-callerid,)
  5868. exten => _X.,n,Set(CONNECTEDLINE(name,i)=Conference)
  5869. exten => _X.,n,Set(CONNECTEDLINE(name-pres,i)=allowed)
  5870. exten => _X.,n,Set(CONNECTEDLINE(num,i)=${EXTEN})
  5871. exten => _X.,n,Set(CONNECTEDLINE(num-pres)=allowed)
  5872. exten => _X.,n,Set(CONFBRIDGE(user,quiet)=yes)
  5873. exten => _X.,n,Set(CONFBRIDGE(user,announcement)=beep)
  5874. exten => _X.,n,ConfBridge(${EXTEN},,,)
  5875. exten => _X.,n,Hangup
  5876.  
  5877. ;--== end of [confroom-direct] ==--;
  5878.  
  5879.  
  5880. [from-pms]
  5881. include => from-pms-custom
  5882. include => receptionist
  5883. include => clean
  5884. include => mini-bar
  5885. include => pms-dialout
  5886. include => housekeeping-service
  5887. include => app-vmmain
  5888. include => app-hotelwakeup
  5889. include => ext-dnd-hints
  5890. include => restapps-device-hints
  5891. exten => h,1,Hangup
  5892. exten => h,n,Noop(====> From PMS <====)
  5893.  
  5894. ;--== end of [from-pms] ==--;
  5895.  
  5896.  
  5897. [receptionist]
  5898. include => receptionist-custom
  5899. exten => 100,1,Goto(from-internal,${EXTEN},1)
  5900. exten => 100,n,Hangup
  5901.  
  5902. ;--== end of [receptionist] ==--;
  5903.  
  5904.  
  5905. [clean]
  5906. include => clean-custom
  5907. exten => *36,1,Noop(====> Room ${CALLERID(num)} is Clean now <====)
  5908. exten => *36,n,AGI(agi://127.0.0.1/mk_clean.agi,${CALLERID(num)},1)
  5909. exten => *36,n,Hangup
  5910.  
  5911. ;--== end of [clean] ==--;
  5912.  
  5913.  
  5914. [mini-bar]
  5915. include => mini-bar-custom
  5916. exten => *37,1,Noop(====> Room ${CALLERID(num)} ask a mini-bar <====)
  5917. exten => *37,n,Playback(pms/drink-code)
  5918. exten => *37,n(read_key),Read(Minibar,,1,,,5)
  5919. exten => *37,n,GotoIf($["${Minibar}" != "*"]?add_mini_bar)
  5920. exten => *37,n,Set(minibar=${mini_bar})
  5921. exten => *37,n,AGI(agi://127.0.0.1/minibar.agi,${CALLERID(num)},${minibar})
  5922. exten => *37,n,Playback(goodbye)
  5923. exten => *37,n,Goto(end)
  5924. exten => *37,n(add_mini_bar),Set(mini_bar=${mini_bar}${Minibar} )
  5925. exten => *37,n,SayNumber(${Minibar:0:1},c)
  5926. exten => *37,n,Goto(read_key)
  5927. exten => *37,n(end),Hangup
  5928.  
  5929. ;--== end of [mini-bar] ==--;
  5930.  
  5931.  
  5932. [pms-dialout]
  5933. include => pms-dialout-custom
  5934. exten => _.,1,Noop(====> pms-dialout - from-pms <====)
  5935. exten => _.,n,Noop(for => ${CALLERID(NUM)})
  5936. exten => _.,n,Set(lck=${DB(LOCKED/${CALLERID(NUM)})})
  5937. exten => _.,n,Set(cbr=${DB(CBR/${EXTEN})})
  5938. exten => _.,n,Noop(cbr => ${cbr} : lck => ${lck})
  5939. exten => _.,n,Noop( ---> Extension ${CALLERID(NUM)})
  5940. exten => _.,n,Noop( ---> Calling ${EXTEN})
  5941. exten => _.,n,Noop( ---> CBR value = ${cbr})
  5942. exten => _.,n,GotoIf($["${cbr}" = "1"]?accept)
  5943. exten => _.,n,GotoIf($["${cbr}" = "0"]?deny)
  5944. exten => _.,n(accept),GotoIf($["${lck}" = "0"]?:lock)
  5945. exten => _.,n,Goto(from-internal,${EXTEN},1)
  5946. exten => _.,n,Hangup
  5947. exten => _.,n(lock),Playback(extension&ha/locked)
  5948. exten => _.,n(end),Dial(local/100,tr)
  5949. exten => _.,n,Hangup
  5950. exten => _.,n(deny),Playback(cannot-complete-as-dialed)
  5951. exten => _.,n,Hangup
  5952.  
  5953. ;--== end of [pms-dialout] ==--;
  5954.  
  5955.  
  5956. [housekeeping-service]
  5957. include => housekeeping-service-custom
  5958. exten => *44,1,Noop(----- Housekeeping Service ---------)
  5959. exten => *44,n,Answer
  5960. exten => *44,n,Playback(room-service)
  5961. exten => *44,n(details),Noop(----- Details of services ---------)
  5962. exten => *44,n(enter),Read(service,astcc-please-enter-your&service&to-hear-menu-again&press-hash,2,,,5)
  5963. exten => *44,n,GotoIf($["${service}" = ""]?details)
  5964. exten => *44,n,GotoIf($["${LEN(${service})}" = "2"]?:enter)
  5965. exten => *44,n,AGI(agi://127.0.0.1/hk.agi,${CALLERID(num)},${service},true)
  5966. exten => *44,n,GotoIf($["${HOUSEKEEPING}" = "false"]?details)
  5967. exten => *44,n,Playback(the-number-u-dialed)
  5968. exten => *44,n,SayDigits(${service})
  5969. exten => *44,n,Read(valid,if-this-is-correct&press-1,1,,,5)
  5970. exten => *44,n,GotoIf($["${valid}"="2"]?details)
  5971. exten => *44,n,GotoIf($["${valid}"="1"]?:enter)
  5972. exten => *44,n,Set(DB(service/${CALLERID(num)})=${service})
  5973. exten => *44,n,AGI(agi://127.0.0.1/hk.agi,${CALLERID(num)},${service})
  5974. exten => *44,n,Playback(your-msg-has-been-saved)
  5975. exten => *44,n,Playback(goodbye)
  5976. exten => *44,n,Hangup
  5977.  
  5978. exten => _*44xx,1,Noop(----- Housekeeping Service ${EXTEN:-2} called ---------)
  5979. exten => _*44xx,n,Answer
  5980. exten => _*44xx,n,Set(service=${EXTEN:-2})
  5981. exten => _*44xx,n,AGI(agi://127.0.0.1/hk.agi,${CALLERID(num)},${service},true)
  5982. exten => _*44xx,n,GotoIf($["${HOUSEKEEPING}" = "false"]?again)
  5983. exten => _*44xx,n,Playback(the-number-u-dialed)
  5984. exten => _*44xx,n,SayDigits(${service})
  5985. exten => _*44xx,n,Read(valid,if-this-is-correct&press-1,1,,,5)
  5986. exten => _*44xx,n,GotoIf($["${valid}"="1"]?save:again)
  5987. exten => _*44xx,n(again),Hangup
  5988. exten => _*44xx,n(save),Set(DB(service/${CALLERID(num)})=${service})
  5989. exten => _*44xx,n,AGI(agi://127.0.0.1/hk.agi,${CALLERID(num)},${service})
  5990. exten => _*44xx,n,Playback(your-msg-has-been-saved)
  5991. exten => _*44xx,n,Playback(goodbye)
  5992. exten => _*44xx,n,Hangup
  5993.  
  5994. ;--== end of [housekeeping-service] ==--;
  5995.  
  5996.  
  5997. [sangomartapi-conferences]
  5998. include => sangomartapi-conferences-custom
  5999. exten => _[c][o][n][f][e][r][e][n][c][e]X!,1,Goto(confroom-direct,${EXTEN:10},1)
  6000.  
  6001. ;--== end of [sangomartapi-conferences] ==--;
  6002.  
  6003.  
  6004. [scd-intercom-originate]
  6005. include => scd-intercom-originate-custom
  6006. exten => _98X.,1(1),Set(ALERTINFO=Direct-Intercom)
  6007. exten => _98X.,n,Set(_DOPTIONS=b(autoanswer^s^1(${ALERTINFO},${CALLINFO})))
  6008. exten => _98X.,n,Dial(PJSIP/${EXTEN},10,${DOPTIONS},tr)
  6009. exten => _98X.,n,Hangup
  6010.  
  6011. ;--== end of [scd-intercom-originate] ==--;
  6012.  
  6013.  
  6014. [sipstation-welcome]
  6015. include => sipstation-welcome-custom
  6016. exten => _.,1,Set(ISNUM=${REGEX("[0-9]" ${CALLERID(number)})})
  6017. exten => _.,n,Set(DB(sipstation/${EXTEN}/lastcall/cnum)=${CALLERID(number)})
  6018. exten => _.,n,Set(DB(sipstation/${EXTEN}/lastcall/cnam)=${CALLERID(name)})
  6019. exten => _.,n,Set(DB(sipstation/${EXTEN}/lastcall/time)=${EPOCH})
  6020. exten => _.,n,Answer
  6021. exten => _.,n,Wait(1)
  6022. exten => _.,n,Playback(you-have-reached-a-test-number&silence/1)
  6023. exten => _.,n,SayDigits(${EXTEN})
  6024. exten => _.,n,Playback(your&calling&from&silence/1)
  6025. exten => _.,n,GotoIf($["${ISNUM}" = "1"]?valid:notvalid)
  6026. exten => _.,n(valid),SayDigits(${CALLERID(number)})
  6027. exten => _.,n,Hangup
  6028. exten => _.,n(notvalid),Playback(unavailable&number)
  6029. exten => _.,n,Hangup
  6030.  
  6031. ;--== end of [sipstation-welcome] ==--;
  6032.  
  6033.  
  6034. [voipinnovations-welcome]
  6035. include => voipinnovations-welcome-custom
  6036. exten => _.,1,Set(ISNUM=${REGEX("[0-9]" ${CALLERID(number)})})
  6037. exten => _.,n,Set(DB(voipinnovations/${EXTEN}/lastcall/cnum)=${CALLERID(number)})
  6038. exten => _.,n,Set(DB(voipinnovations/${EXTEN}/lastcall/cnam)=${CALLERID(name)})
  6039. exten => _.,n,Set(DB(voipinnovations/${EXTEN}/lastcall/time)=${EPOCH})
  6040. exten => _.,n,Answer
  6041. exten => _.,n,Wait(1)
  6042. exten => _.,n,Playback(you-have-reached-a-test-number&silence/1)
  6043. exten => _.,n,SayDigits(${EXTEN})
  6044. exten => _.,n,Playback(your&calling&from&silence/1)
  6045. exten => _.,n,GotoIf($["${ISNUM}" = "1"]?valid:notvalid)
  6046. exten => _.,n(valid),SayDigits(${CALLERID(number)})
  6047. exten => _.,n,Hangup
  6048. exten => _.,n(notvalid),Playback(unavailable&number)
  6049. exten => _.,n,Hangup
  6050.  
  6051. ;--== end of [voipinnovations-welcome] ==--;
  6052.  
  6053.  
  6054. [crm-hangup]
  6055. include => crm-hangup-custom
  6056. exten => s,1,Noop(Sending Hangup to CRM)
  6057. exten => s,n,Noop(HANGUP CAUSE: ${HANGUPCAUSE})
  6058. exten => s,n,ExecIf($[${LEN(${CRM_VOICEMAIL})} > 0]?Set(__CRM_VOICEMAIL=${VMSTATUS}))
  6059. exten => s,n,Noop(MASTER CHANNEL: ${CHANNEL(UNIQUEID)} = ${MASTER_CHANNEL(CHANNEL(UNIQUEID))})
  6060. exten => s,n,GotoIf($["${CHANNEL(UNIQUEID)}"!="${MASTER_CHANNEL(CHANNEL(UNIQUEID))}"]?return)
  6061. exten => s,n,Set(__CRM_HANGUP=1)
  6062. exten => s,n,AGI(agi://127.0.0.1/sangomacrm.agi)
  6063. exten => s,n(return),Return()
  6064.  
  6065. ;--== end of [crm-hangup] ==--;
  6066.  
  6067.  
  6068. [from-internal-additional]
  6069. include => from-internal-additional-custom
  6070. include => app-cf-unavailable-prompt-on
  6071. include => app-cf-unavailable-on
  6072. include => app-cf-unavailable-off
  6073. include => app-cf-prompting-on
  6074. include => app-cf-on
  6075. include => app-cf-off-any
  6076. include => app-cf-off
  6077. include => app-cf-busy-prompting-on
  6078. include => app-cf-busy-on
  6079. include => app-cf-busy-off-any
  6080. include => app-cf-busy-off
  6081. include => app-cf-toggle
  6082. include => ext-cf-hints
  6083. include => app-callwaiting-cwon
  6084. include => app-callwaiting-cwoff
  6085. include => ext-meetme
  6086. include => app-dictate-send
  6087. include => app-dictate-record
  6088. include => app-dnd-toggle
  6089. include => app-dnd-on
  6090. include => app-dnd-off
  6091. include => ext-dnd-hints
  6092. include => app-fax
  6093. include => app-fmf-toggle
  6094. include => ext-findmefollow
  6095. include => fmgrps
  6096. include => app-speakingclock
  6097. include => app-speakextennum
  6098. include => app-echo-test
  6099. include => app-calltrace
  6100. include => ext-intercom-users
  6101. include => park-hints
  6102. include => app-parking
  6103. include => ext-queues
  6104. include => app-recordings
  6105. include => ext-group
  6106. include => grps
  6107. include => app-vmmain
  6108. include => app-dialvm
  6109. include => app-allowlist
  6110. include => app-blacklist
  6111. include => app-contactmanager-sd
  6112. include => app-userlogonoff
  6113. include => ext-local-confirm
  6114. include => findmefollow-ringallv2
  6115. include => app-pickup
  6116. include => app-chanspy
  6117. include => ext-test
  6118. include => ext-local
  6119. include => outbound-allroutes
  6120. include => app-hotelwakeup
  6121. include => vmblast-grp
  6122. include => restapps-device-hints
  6123. include => sangomartapi-conferences
  6124. exten => h,1,Hangup
  6125.  
  6126. ;--== end of [from-internal-additional] ==--;
  6127.  
  6128.  
  6129. [from-internal-noxfer-additional]
  6130. include => from-internal-noxfer-additional-custom
  6131. exten => h,1,Hangup
  6132.  
  6133. ;--== end of [from-internal-noxfer-additional] ==--;
  6134.  
  6135.  
  6136.  
Tags: Asterisk
Add Comment
Please, Sign In to add comment