Advertisement
KC9UZR

extensions.conf

Jun 8th, 2021
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.76 KB | None | 0 0
  1. ;--------------------------------------------------------------------------------;
  2. ; Do NOT edit this file as it is auto-generated by FreePBX. All modifications to ;
  3. ; this file must be done via the web gui. There are alternative files to make ;
  4. ; custom modifications. ;
  5. ;--------------------------------------------------------------------------------;
  6.  
  7. ;*******************************************************************************
  8. ; AUTO-GENERATED AND CUSTOM USER DIALPLAN INCLUDED HERE *
  9. ;*******************************************************************************
  10.  
  11. ;--------------------------------------------------------------------------------;
  12. ; Customizations to this dialplan should be made in extensions_custom.conf
  13. ; See extensions_custom.conf.sample for an example.
  14. ;
  15. ; If you need to use [macro-dialout-trunk-predial-hook], [ext-did-custom], or
  16. ; [from-internal-custom] for example, place these in this file or they will get overwritten.
  17. ;
  18. ; WARNING ABOUT: #include extensions_override_freepbx.conf
  19. ;
  20. ; This include file is put first to allow the auto-generated dialplan in FreePBX
  21. ; to be overwritten if necessary. Overriding auto-generated dialplan should be done
  22. ; with extreme caution. In almost all cases any custom dialplan SHOULD be put in
  23. ; extensions_custom.conf which will not hurt a FreePBX generated dialplan. In some
  24. ; very rare and custom situations users may have a need to override what FreePBX
  25. ; automatically generates. If so anything in this file will do that. If you come up
  26. ; with situations where you need to modify the existing dialplan or macros, put it
  27. ; here.
  28. ;
  29. #include extensions_override_freepbx.conf
  30. #include extensions_additional.conf
  31. #include extensions_custom.conf
  32. ;--------------------------------------------------------------------------------;
  33.  
  34.  
  35.  
  36. ;*******************************************************************************
  37. ; DIALPLAN OPEN TO THE PUBLIC, USING INBOUND DIDS AND SIMILAR *
  38. ;*******************************************************************************
  39. ;
  40.  
  41. ;-------------------------------------------------------------------------------
  42. ; from-digital:
  43. ;
  44. ; Context to set for PRI's and equivalent
  45. ;
  46. [from-digital]
  47. include => from-pstn
  48. ;-------------------------------------------------------------------------------
  49.  
  50. ;-------------------------------------------------------------------------------
  51. ; from-analog:
  52. ;
  53. ; Context to set for analog DAHDi cards and equivalent
  54. ;
  55. [from-analog]
  56. include => from-dahdi
  57. ;-------------------------------------------------------------------------------
  58.  
  59. ;-------------------------------------------------------------------------------
  60. ; from-trunk:
  61. ;
  62. ; Context is really just an alias of from-pstn
  63. ;
  64. [from-trunk]
  65. include => from-pstn
  66. ;-------------------------------------------------------------------------------
  67.  
  68. ;-------------------------------------------------------------------------------
  69. ; from-pstn:
  70. ;
  71. ; Entry context for calls from the outside world to hit FreePBX
  72. [from-pstn]
  73. include => from-pstn-custom ; this context include remains for legacy reasons, but should not be used.
  74. include => ext-did
  75. include => ext-did-post-custom
  76. include => from-did-direct
  77. include => ext-did-catchall ; THIS MUST COME AFTER ext-did
  78. ;-------------------------------------------------------------------------------
  79.  
  80. ;-------------------------------------------------------------------------------
  81. ; from-pstn-e164-us:
  82. ;
  83. ; The context is designed for providers who send calls in e164 format and is
  84. ; biased towards NPA calls, callerid and dialing rules. It will do the following:
  85. ;
  86. ; DIDs in an NPA e164 format of +1NXXNXXXXXX will be converted to 10 digit DIDs
  87. ;
  88. ; DIDs in any other format will be delivered as they are, including e164 non NPA
  89. ; DIDs which means they will need the full format including the + in the inbound
  90. ; route.
  91. ;
  92. ; CallerID(number) presented in e164 NPA format will be trimmed to a 10 digit CID
  93. ;
  94. ; CallerID(number) presented in e164 non-NPA (country code other than 1) will be
  95. ; reformated from: +<CountryCode><Number> to 011<CountryCode><Number>
  96. ;
  97. [from-pstn-e164-us]
  98. exten => _+1NXXNXXXXXX/_+1NXXNXXXXXX,1,Set(CALLERID(number)=${CALLERID(number):2})
  99. exten => _+1NXXNXXXXXX/_NXXNXXXXXX,2,Goto(from-pstn,${EXTEN:2},1)
  100. exten => _+1NXXNXXXXXX/_+NX.,1,Set(CALLERID(number)=011${CALLERID(number):1})
  101. exten => _+1NXXNXXXXXX/_011NX.,n,Goto(from-pstn,${EXTEN:2},1)
  102. exten => _+1NXXNXXXXXX,1,Goto(from-pstn,${EXTEN:2},1)
  103. exten => _[0-9+]./_+1NXXNXXXXXX,1,Set(CALLERID(number)=${CALLERID(number):2})
  104. exten => _[0-9+]./_1NXXNXXXXXX,1,Set(CALLERID(number)=${CALLERID(number):1})
  105. exten => _[0-9+]./_NXXNXXXXXX,n,Goto(from-pstn,${EXTEN},1)
  106. exten => _[0-9+]./_+NX.,1,Set(CALLERID(number)=011${CALLERID(number):1})
  107. exten => _[0-9+]./_011NX.,n,Goto(from-pstn,${EXTEN},1)
  108. exten => _[0-9+].,1,Goto(from-pstn,${EXTEN},1)
  109. exten => s/_+1NXXNXXXXXX,1,Set(CALLERID(number)=${CALLERID(number):2})
  110. exten => s/_NXXNXXXXXX,n,Goto(from-pstn,${EXTEN},1)
  111. exten => s/_+NX.,1,Set(CALLERID(number)=011${CALLERID(number):1})
  112. exten => s/_011NX.,n,Goto(from-pstn,${EXTEN},1)
  113. exten => s,1,Goto(from-pstn,${EXTEN},1)
  114. ;-------------------------------------------------------------------------------
  115.  
  116. ;-------------------------------------------------------------------------------
  117. ; from-pstn-toheader
  118. ;
  119. ; The context is designed for providers who send the DID in the TO: SIP header
  120. ; only. The format of this header is:
  121. ;
  122. ; To: <sip:2125551212@172.31.74.25>
  123. ;
  124. ; So the DID must be extracted between the sip: and the @, which this does
  125. ;
  126. [from-pstn-toheader]
  127. exten => _.,1,NoOp(Attempting to extract DID from SIP To header)
  128. exten => _.,n,gotoif($["${CHANNEL(channeltype)}"="SIP"]?SIP)
  129. exten => _.,n,gotoif($["${CHANNEL(channeltype)}"="PJSIP"]?PJSIP)
  130. exten => _.,n,NoOp(Unable to determine SIP channel type)
  131. exten => _.,n,goto(from-pstn,${EXTEN},1))
  132. exten => _.,n(SIP),Goto(from-pstn,${CUT(CUT(SIP_HEADER(To),@,1),:,2)},1)
  133. exten => _.,n(PJSIP),Goto(from-pstn,${CUT(CUT(PJSIP_HEADER(read,To),@,1),:,2)},1)
  134. ;-------------------------------------------------------------------------------
  135.  
  136. ;-------------------------------------------------------------------------------
  137. ; trust-pai-as-cid:
  138. ;
  139. ; Calling this function will set Asterisks CallerID for this call to be what
  140. ; was provided in the P-Asserted-Identity header.
  141. ;
  142. [trust-pai-as-cid]
  143. exten => s,1,Set(CHANTYPE=${CHANNEL(channeltype)})
  144. exten => s,n,GotoIf($[ "${CHANTYPE}" = "SIP" ]?chansip,1)
  145. exten => s,n,GotoIf($[ "${CHANTYPE}" = "PJSIP" ]?pjsip,1)
  146. ; We can only handle SIP and PJSIP
  147. exten => s,n,Return()
  148.  
  149. exten => chansip,1,Set(PAI=${SIP_HEADER(P-Asserted-Identity)})
  150. exten => chansip,n,Goto(setcid,1)
  151.  
  152. exten => pjsip,1,Set(PAI=${PJSIP_HEADER(read,P-Asserted-Identity)})
  153. exten => pjsip,n,Goto(setcid,1)
  154.  
  155. exten => setcid,1,ExecIf($[ ${LEN(${PAI})} = 0 ]?Return())
  156. exten => setcid,n,Set(NAME=${CUT(PAI,<,1))})
  157. exten => setcid,n,Set(CALLERID(name)=${STRREPLACE(NAME,\")})
  158. exten => setcid,n,NoOp(${NAME})
  159. exten => setcid,n,Set(SIPURI=${CUT(PAI,<,2-)})
  160. exten => setcid,n,Set(TYPE=${CUT(SIPURI,\@,1)})
  161. exten => setcid,n,Set(CALLERID(num)=${CUT(TYPE,:,2-)})
  162. exten => setcid,n,Return()
  163. ;-------------------------------------------------------------------------------
  164.  
  165. ;-------------------------------------------------------------------------------
  166. ; from-trunk-pai:
  167. ;
  168. ; This is a replacement for from-trunk that sets the incoming Caller ID
  169. ; to be that provided in the P-Asserted-Identity header.
  170. ;
  171. [from-trunk-pai]
  172. exten => _.,1,NoOp(Attempting to extract Caller ID from PAI Header)
  173. exten => _.,n,Gosub(trust-pai-as-cid,s,1)
  174. exten => _.,n,Goto(from-trunk,${EXTEN},1)
  175. ;-------------------------------------------------------------------------------
  176.  
  177. ;-------------------------------------------------------------------------------
  178. ; from-sip-external
  179. ;
  180. ; This context is the default SIP context unless otherwise changed in the SIP
  181. ; Settings module or other sip configuration locations. This context is hit by
  182. ; either anonymous SIP calls or mis-configured SIP trunks when the incoming call
  183. ; can not be matched with a SIP section.
  184. ;
  185. [from-sip-external]
  186. exten => _.,1,NoOp(Received incoming SIP connection from unknown peer to ${EXTEN})
  187. exten => _.,n,Set(DID=${IF($["${EXTEN:1:2}"=""]?s:${EXTEN})})
  188. exten => _.,n,Goto(s,1)
  189. exten => s,1,GotoIf($["${SIPLANG}"!=""]?setlanguage:checkanon)
  190. exten => s,n(setlanguage),Set(CHANNEL(language)=${SIPLANG})
  191. exten => s,n(checkanon),GotoIf($["${ALLOW_SIP_ANON}"!="yes"]?noanonymous)
  192. exten => s,n,Goto(from-trunk,${DID},1)
  193. exten => s,n(noanonymous),Set(TIMEOUT(absolute)=15)
  194. exten => s,n,Set(receveip=${IF($["${CUT(CHANNEL,/,1)}" != "PJSIP"]?recvip:pjsip,remote_addr)})
  195. exten => s,n,Log(WARNING,"Rejecting unknown SIP connection from ${CHANNEL(${receveip})}")
  196. exten => s,n,Answer
  197. exten => s,n,Wait(2)
  198. exten => s,n,Playback(ss-noservice)
  199. exten => s,n,Playtones(congestion)
  200. exten => s,n,Congestion(5)
  201. exten => h,1,Hangup
  202. exten => i,1,Hangup
  203. exten => t,1,Hangup
  204. ;-------------------------------------------------------------------------------
  205.  
  206.  
  207.  
  208. ;*******************************************************************************
  209. ; INTERNAL DIALPLAN, NOT OPEN TO THE PUBLIC WORLD *
  210. ;*******************************************************************************
  211. ;
  212.  
  213. ;-------------------------------------------------------------------------------
  214. ; from-internal:
  215. ;
  216. ; Internal dialplan that most internal phones have access to
  217. ;
  218. [from-internal]
  219. include => from-internal-noxfer
  220. include => from-internal-xfer
  221. include => bad-number ; auto-generated
  222. exten => h,1,Macro(hangupcall)
  223. ;-------------------------------------------------------------------------------
  224.  
  225. ;-------------------------------------------------------------------------------
  226. ; from-internal-noxfer:
  227. ;
  228. ; Place to put internal dialplan that should not be accessible during a blind
  229. ; transfer, this context will not be visible during such.
  230. ;
  231. [from-internal-noxfer]
  232. include => from-internal-noxfer-custom
  233. include => from-internal-noxfer-additional ; auto-generated
  234. exten => h,1,Macro(hangupcall)
  235. ;-------------------------------------------------------------------------------
  236.  
  237. ;-------------------------------------------------------------------------------
  238. ; from-internal-xfer:
  239. ;
  240. ; Place to put most internal dialplan, will be visible during normal calls and
  241. ; blind transfers.
  242. ;
  243. [from-internal-xfer]
  244. include => from-internal-custom
  245. include => from-internal-additional ; auto-generated
  246. exten => h,1,Macro(hangupcall)
  247. ;-------------------------------------------------------------------------------
  248.  
  249.  
  250.  
  251. ;*******************************************************************************
  252. ; INTERNAL MACROS & SPECIAL CONTEXTS *
  253. ;*******************************************************************************
  254. ;
  255.  
  256. ;-------------------------------------------------------------------------------
  257. ; from-did-direct:
  258. ;
  259. ; forces ext-findmefollow to take precedence over ext-local. Also exposed to
  260. ; the public side to allow an extension number to be used as an external DID
  261. ; without requiring inbound routes to be created, common in many PRI installations
  262. ; where the last 4 digits are used as the extnension and DIDs are delivered in
  263. ; 4 digit formats.
  264. ;
  265. [from-did-direct]
  266. include => ext-findmefollow
  267. include => ext-local
  268. ;-------------------------------------------------------------------------------
  269.  
  270. ;-------------------------------------------------------------------------------
  271. ; macro-dial has been converted into a function.
  272. ; see core/functions.inc/macro-dial.php
  273. ;-------------------------------------------------------------------------------
  274.  
  275. ;-------------------------------------------------------------------------------
  276. ; macro-get-vmcontext:
  277. ;
  278. ; returns the user's voicemail context
  279. ;
  280. [macro-get-vmcontext]
  281. exten => s,1,Set(VMCONTEXT=${DB(AMPUSER/${ARG1}/voicemail)})
  282. exten => s,2,GotoIf($["foo${VMCONTEXT}" = "foo"]?200:300)
  283. exten => s,200,Set(VMCONTEXT=default)
  284. exten => s,300,NoOp()
  285. ;-------------------------------------------------------------------------------
  286.  
  287. ;-------------------------------------------------------------------------------
  288. ; macro-outisbusy:
  289. ;
  290. ; Moved to extensions_additional
  291. ;-------------------------------------------------------------------------------
  292.  
  293. ;-------------------------------------------------------------------------------
  294. ; macro-dialout-trunk-predial-hook:
  295. ;
  296. ; this macro intentionally left blank so it may be safely overwritten for any custom
  297. ; requirements that an installation may have.
  298. ;
  299. ; the macro is called by macro-dialout-trunk just prior to making a Dial() attempt
  300. ; to a trunk.
  301. ;
  302. ; MACRO RETURN CODE: ${PREDIAL_HOOK_RET}
  303. ; if set to "BYPASS" then this trunk will be skipped
  304. ;
  305. ;
  306. [macro-dialout-trunk-predial-hook]
  307. exten => s,1,MacroExit()
  308. ;-------------------------------------------------------------------------------
  309.  
  310. ;-------------------------------------------------------------------------------
  311. ; macro-dialout-one-predial-hook
  312. ;
  313. ; this macro intentionally left blank so it may be safely overwritten for any custom
  314. ; requirements that an installation may have.
  315. ;
  316. ; the macro is called by macro-dialout-trunk just prior to making a Dial() attempt
  317. ; to an individual extension.
  318. ;
  319. [macro-dialout-one-predial-hook]
  320. exten => s,1,MacroExit()
  321. ;-------------------------------------------------------------------------------
  322.  
  323. ;-------------------------------------------------------------------------------
  324. ; macro-dial-hunt-predial-hook
  325. ;
  326. ; this macro intentionally left blank so it may be safely overwritten for any custom
  327. ; requirements that an installation may have.
  328. ;
  329. ; the macro is called by macro-dial just prior to making a Dial() attempt
  330. ; to an individual extension.
  331. ;
  332. [macro-dial-hunt-predial-hook]
  333. exten => s,1,MacroExit()
  334. ;-------------------------------------------------------------------------------
  335.  
  336. ;-------------------------------------------------------------------------------
  337. ; macro-dial-ringall-predial-hook
  338. ;
  339. ; this macro intentionally left blank so it may be safely overwritten for any custom
  340. ; requirements that an installation may have.
  341. ;
  342. ; the macro is called by macro-dial just prior to making a Dial() attempt
  343. ; to a dial string full of extensions.
  344. ;
  345. [macro-dial-ringall-predial-hook]
  346. exten => s,1,MacroExit()
  347. ;-------------------------------------------------------------------------------
  348.  
  349. ;-------------------------------------------------------------------------------
  350. ; macro-dialout-dundi-predial-hook:
  351. ;
  352. ; this macro intentionally left blank so it may be safely overwritten for any custom
  353. ; requirements that an installation may have.
  354. ;
  355. ; the macro is called by macro-dialout-dundi just prior to making a Dial() attempt
  356. ; to a trunk.
  357. ;
  358. ; MACRO RETURN CODE: ${PREDIAL_HOOK_RET}
  359. ; if set to "BYPASS" then this trunk will be skipped
  360. ;
  361. ;
  362. [macro-dialout-dundi-predial-hook]
  363. exten => s,1,MacroExit()
  364. ;-------------------------------------------------------------------------------
  365.  
  366. ;-------------------------------------------------------------------------------
  367. ; default
  368. ;
  369. ; FreePBX does not use the default context. This context is used by asterisk when
  370. ; it has no other information provided and needs to deliver a call. Hitting this means
  371. ; there has been some sort of configuration error, or a potential bug somehwere.
  372. ; This context can be reached from either internal or external sources.
  373. ;
  374. [default]
  375. exten => _.,1,Playback(vm-goodbye)
  376. exten => _.,n,Noop(ERROR: FreePBX Does not use the [default] context, confguration error)
  377. exten => _.,n,Macro(hangupcall)
  378. ;-------------------------------------------------------------------------------
  379.  
  380.  
  381.  
  382. ;*******************************************************************************
  383. ; DEPRECATED DIALPLAN - THESE WILL BE REMOVED, NOT USED BY FREEPBX *
  384. ;*******************************************************************************
  385. ;
  386.  
  387. ;-------------------------------------------------------------------------------
  388. ; macro-fixcid: [DEPRECATED]
  389. ;
  390. ; For some reason, if I don't run setCIDname, CALLERID(name) will be blank in my AGI
  391. ;
  392. [macro-fixcid]
  393. exten => s,1,Set(CALLERID(name)=${CALLERID(name)})
  394. ;-------------------------------------------------------------------------------
  395.  
  396.  
  397. ;-------------------------------------------------------------------------------
  398. ; macro-sayXXXX: [DEPRECATED]
  399. ;
  400. ; Text-To-Speech related macros
  401. ; These all follow common actions. First try to playback a file "tts/custom-md5"
  402. ; where "md5" is the md5() of whatever is going to be played. If that doesn't exist,
  403. ; try to playback using macro-tts-sayXXXXX (where XXXXX is text/digits/etc, same as
  404. ; the macro below). If that macro exits with MACRO_OFFSET=100, then it's done,
  405. ; otherwise, fallback to the default asterisk method.
  406. ;
  407.  
  408. ;-------------------------------------------------------------------------------
  409. ; macro-saytext: [DEPRECATED]
  410. ;
  411. ; say text is purely for text-to-speech, there is no fallback
  412. ;
  413. [macro-saytext]
  414. exten => s,1,Noop(Trying custom SayText playback for "${ARG1}")
  415. exten => s,n,Playback(tts/custom-${MD5(${ARG1})})
  416. exten => s,n,GotoIf($["${PLAYBACKSTATUS}"="SUCCESS"]?done)
  417. ; call tts-saytext. This should set MACRO_OFFSET=101 if it was successful
  418. exten => s,n(tts),Macro(tts-saytext,${ARG1},${ARG2},${ARG3})
  419. exten => s,n,Noop(No text-to-speech handler for SayText, cannot say "${ARG1}")
  420. exten => s,n,Goto(done)
  421. exten => s,tts+101,Noop(tts handled saytext)
  422. ;-------------------------------------------------------------------------------
  423.  
  424. ;-------------------------------------------------------------------------------
  425. ; macro-sayname: [DEPRECATED]
  426. ;
  427. ; say name is for saying names typically, but fallsback to using SayAlpha
  428. ; (saying the word letter-by-letter)
  429. ;
  430. [macro-sayname]
  431. exten => s,1,Noop(Trying custom SayName playback for "${ARG1}")
  432. exten => s,n,Playback(tts/custom-${MD5(${ARG1})})
  433. exten => s,n,GotoIf($["${PLAYBACKSTATUS}"="SUCCESS"]?done)
  434. ; call tts-sayalpha. This should set MACRO_OFFSET=101 if it was successful
  435. exten => s,n(tts),Macro(tts-sayalpha,${ARG1},${ARG2},${ARG3})
  436. exten => s,n,SayAlpha(${ARG1})
  437. exten => s,n,Goto(done)
  438. exten => s,tts+101,Noop(tts handled sayname)
  439. ;-------------------------------------------------------------------------------
  440.  
  441. ;-------------------------------------------------------------------------------
  442. ; macro-saynumber: [DEPRECATED]
  443. ;
  444. ; Say number is for saying numbers (eg "one thousand forty six")
  445. ;
  446. [macro-saynumber]
  447. exten => s,1,Noop(Trying custom SayNumber playback for "${ARG1}")
  448. exten => s,n,Playback(tts/custom-${MD5(${ARG1})})
  449. exten => s,n,GotoIf($["${PLAYBACKSTATUS}"="SUCCESS"]?done)
  450. ; call tts-saynumber. This should set MACRO_OFFSET=101 if it was successful
  451. exten => s,n(tts),Macro(tts-saynumber,${ARG1},${ARG2},${ARG3})
  452. exten => s,n,SayNumber(${ARG1})
  453. exten => s,n,Goto(done)
  454. exten => s,tts+101,Noop(tts handled saynumber)
  455. ;-------------------------------------------------------------------------------
  456.  
  457. ;-------------------------------------------------------------------------------
  458. ; macro-saydigits: [DEPRECATED]
  459. ;
  460. ; Say digits is for saying digits one-by-one (eg, "one zero four six")
  461. ;
  462. [macro-saydigits]
  463. exten => s,1,Noop(Trying custom SayDigits playback for "${ARG1}")
  464. exten => s,n,Playback(tts/custom-${MD5(${ARG1})})
  465. exten => s,n,GotoIf($["${PLAYBACKSTATUS}"="SUCCESS"]?done)
  466. ; call tts-saydigits. This should set MACRO_OFFSET=101 if it was successful
  467. exten => s,n(tts),Macro(tts-saydigits,${ARG1},${ARG2},${ARG3})
  468. exten => s,n,SayDigits(${ARG1})
  469. exten => s,n,Goto(done)
  470. ;-------------------------------------------------------------------------------
  471.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement