MikoPBX
Модули
MikoPBX
Модули
Допустим, к MikoPBX подключена линия провайдера Манго офис. MikoPBX обычно подключается к этой виртуальной АТС в качестве SIP клиента.
В случае, если вызов поступает на IVR или Очередь, то фактически АТС отвечает на вызов, и Манго после завершения прекращает обработку согласно схеме переадресации. Если никто из сотрудников не ответил, и есть потребоность в дальнейшей обработке вызова внутри атс Манго, то можно выполнить следующие шаги:
[add-trim-prefix-clid-custom] exten => _[0-9*#+a-zA-Z]!,1,NoOp(start check blacklist) same => n,Set(CHANNEL(hangup_handler_push)=hangup-ext,h,1); same => n,Return() exten => _[hit],1,Hangup() [hangup-ext] exten => h,1,SendDTMF(##17) same => n,return [internal-transfer](+) exten => 17,NoOp(Start SIP transfer) same => n,ExecIf($[ "${FROM_CHAN}" == "${CHANNEL}" ]?Goto(redirect-mango,${EXTEN},1)) same => n,ExecIf($[ "${FROM_CHAN}x" != "x" ]?ChannelRedirect(${FROM_CHAN},redirect-mango,${EXTEN},1)) same => n,Hangup() [redirect-mango] exten => _X!,1,SendDTMF(##17) same => n,Hangup() exten => _[hit],1,Hangup()
Создать новое «Приложение dialplan» с типом кода «PHP», текст:
<?php require_once 'Globals.php'; use MikoPBX\Core\Asterisk\AGI; use MikoPBX\Core\System\Util; $agi = new AGI(); $channel = $agi->get_variable('FROM_CHAN', true); $am = Util::getAstManager(); $dtmf = '##223#'; $am = Util::getAstManager(); $dtmfString = str_split($dtmf); foreach ($dtmfString as $code){ $am->sendRequestTimeout('PlayDTMF', ['Digit' => $code, 'Channel' => $channel, 'Duration' => 200]); }
Вместо «223» следует указать номер, куда адресовать вызов. Сохраните изменения. Из адресной строки браузера скопируйте идентификатор приложения. Пример
DIALPLAN-APP-9CC99C82EFAF40CFF908D8519749AFF0
Нужно перейти в web интерфейсе MikoPBX в раздел «Система» - «Кастомизация системных фалов» и добавить в конец файла «/etc/asterisk/features.conf» на следующий:
[applicationmap](+) redirectDtmf => #9,peer,AGI,DIALPLAN-APP-9CC99C82EFAF40CFF908D8519749AFF0.php
Обратите внимание, указываем идентификатор приложения и расширение «.php».
Далее добавляем в конец файла /etc/asterisk/extensions.conf:
[add-trim-prefix-clid-custom] exten => _.X!,1,ExecIf($["${EXTEN}" == "h"]?Hangup()) same => n,Set(__DYNAMIC_FEATURES=redirectDtmf) same => n,return [internal-transfer](+) ; повесим на номер 991 переадресацию, при наборе **991 и ##911 будет работать селпая и консультативные переадерсации ; ** - код "слепой" переадресации по умолчнаю ; ## - код "консультативной" переадресации по умолчанию exten => 991,NoOp(Start SIP transfer) same => n,ExecIf($[ "${ATTENDEDTRANSFER}x" != "x" ]?AGI(DIALPLAN-APP-9CC99C82EFAF40CFF908D8519749AFF0.php)) same => n,ExecIf($[ "${ATTENDEDTRANSFER}x" != "x" ]?Hangup()) same => n,ExecIf($[ "${FROM_CHAN}" == "${CHANNEL}" ]?Goto(redirect-mango,${EXTEN},1)) same => n,ExecIf($[ "${FROM_CHAN}x" != "x" ]?ChannelRedirect(${FROM_CHAN},redirect-mango,${EXTEN},1)) same => n,Hangup() ; Контекст [redirect-mango] опиасывается в статье "Резервный маршрут"
Если в этом файле секция «[add-trim-prefix-clid-custom]» уже объявлена, то следует добавить только строку «same ⇒ n,Set(__DYNAMIC_FEATURES=redirectDtmf)» перед строкой «same ⇒ n,return».
В личном кабинете Манго Офис «Общие настройки» - «Безопасность и ограничения» настроить флажки:
После сохранения настроек, чтобы выполнить переадресацию после ответа на входящий вызов следует набрать комбинацию #9 (описывается в [applicationmap]).