FreePBX custom context

Во FreePBX предусмотрено использование пользовательских (custom) файлов.

Эти файлы находятся в директории конфигурационных файлов Asterisk и имеют отличительные названия, например:

extensions_custom.conf

sip_custom.conf

и т.д. и т.п.

для более подробной информации о структуре файлов и контекстов FreePBX смотрите статью Файлы и стандартные контексты FreePBX

[from-internal]

Стандартный контекст FreePBX from-internal включает в себя файл extensions_custom.conf
Таким образом, если задать какой-либо шаг диалплана в файле extensions_custom.conf
без [имени контекста], это действие будет включено в контекст from-internal и выполняться как диалплан FreePBX.

  exten => _810./_1XX,1,Playback(tt-monkeys)

[from-internal-custom]

Стандартный контекст FreePBX from-internal включает в себя контекст from-internal-custom. Создайте контекст с таким именем в файле extensions_custom.conf
и заданный там диалплан будет выполняться, как диалплан FreePBX.

 exten => _810./_2XX,1,Goto(app-blackhole,hangup,1)

Рассмотрим простой пример:

Для более гибкого использования FreePBX, может потребоваться написание собственных контекстов в диалплане.

Требуется преобразовывать набираемый номер #XX в *XX.

Замените стандартный контекст екстеншенов from-internal на собственный custom.

В файле /etc/asterisk/extensions_custom.conf создайте контекст:

[custom]
exten => _1XX,1,Goto(from-internal,${EXTEN},1)
exten => _[*02-9].,1,Goto(from-internal,${EXTEN},1)
exten => _#.,1,Noop(add)
exten => _#.,n,Set(add=*)
exten => _#.,n,Goto(custom-add,${EXTEN},1)
[custom-add]
exten => _#.,1,Goto(from-internal,${add}${EXTEN:1},1)

При наборе внутренних номеров начинающихся на <1>, а также номеров на другие цифры, вызов будет направлен на обработку в стандартный контекст from-internal. Набранная же решетка <#>, будет заменена звездочкой <*> и направлена туда же.

Предположим у вас имеется АТС соединенная транком Е1 с Asterisk, абоненты которой совершают звонки через Asterisk и далее наружу через канал E1 провайдера подключенный к Asterisk.
Исходящие вызовы должны записываться, а ссылки на записанные файлы отображаться во встроенном интерфейсе CDR FreePBX привязанные к внутреннему номеру абонента удаленной АТС. Вызовы же наружу должны закрываться внешним номером CID.

[from-pbx]
include => record

[record]
exten => _X.,1,Set(CALLERID(all)="${CALLERID(num)}" <8123216111>)
exten => _X.,n,Set(CDR(userfield)=avaya/${CALLERID(name)})
exten => _X.,n,Gosub(sub-record-check-custom1,s,1(out,${EXTEN},))
exten => _X.,n,Dial(DAHDI/g0/${EXTEN}

[sub-record-check-custom1]
exten => s,1,Set(REC_POLICY_MODE_SAVE=${REC_POLICY_MODE})
exten => s,n,GotoIf($["${BLINDTRANSFER}" = ""]?check)
exten => s,n,ResetCDR()
exten => s,n,GotoIf($["${REC_STATUS}" != "RECORDING"]?check)
exten => s,n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)
exten => s,n,MixMonitor(${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MIXMON_FORMAT},a,${MIXMON_POST})
exten => s,n(check),Set(__MON_FMT=${IF($["${MIXMON_FORMAT}"="wav49"]?WAV:${MIXMON_FORMAT})})
exten => s,n,GotoIf($["${REC_STATUS}"!="RECORDING"]?next)
exten => s,n,Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT})
exten => s,n,Return()
exten => s,n(next),ExecIf($[!${LEN(${ARG1})}]?Return())
exten => s,n,ExecIf($["${REC_POLICY_MODE}"="" & "${ARG3}"!=""]?Set(__REC_POLICY_MODE=${ARG3}))
exten => s,n,GotoIf($["${REC_STATUS}"!=""]?${ARG1},1)
exten => s,n,Set(__REC_STATUS=INITIALIZED)
exten => s,n,Set(NOW=${EPOCH})
exten => s,n,Set(__DAY=${STRFTIME(${NOW},,%d)})
exten => s,n,Set(__MONTH=${STRFTIME(${NOW},,%m)})
exten => s,n,Set(__YEAR=${STRFTIME(${NOW},,%Y)})
exten => s,n,Set(__TIMESTR=${YEAR}${MONTH}${DAY}-${STRFTIME(${NOW},,%H%M%S)})
;exten => s,n,Set(__FROMEXTEN=${IF($[${LEN(${AMPUSER})}]?${AMPUSER}:${IF($[${LEN(${REALCALLERIDNUM})}]?${REALCALLERIDNUM}:unknown)})})
exten => s,n,Set(__FROMEXTEN=${CALLERID(name)})
exten => s,n,Set(__CALLFILENAME=${ARG1}-${ARG2}-${FROMEXTEN}-${TIMESTR}-${UNIQUEID})
exten => s,n,Goto(${ARG1},1)



;exten => out,1,ExecIf($["${REC_POLICY_MODE}"=""]?Set(__REC_POLICY_MODE=${DB(AMPUSER/${FROMEXTEN}/recording/out/external)}))
;статус записи вкл
exten => out,1,ExecIf($["${REC_POLICY_MODE}"=""]?Set(__REC_POLICY_MODE=always))
exten => out,n,GosubIf($["${REC_POLICY_MODE}"="always"]?record,1(exten,${ARG2},${FROMEXTEN}))
exten => out,n,Return()


exten => record,1,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)
exten => record,n,MixMonitor(${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MIXMON_FORMAT},,${MIXMON_POST})
exten => record,n,Set(__REC_STATUS=RECORDING)
exten => record,n,Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT})
exten => record,n,Return()

FreePBX

  • freepbx/custom_context.txt
  • Последние изменения: 2018/05/11