Использование режима DND с возможностью переадресации на Asterisk 16 + FreePBX 14
Многие пользователи просили сделать возможность переадресации вызовов на мобильный при установке DND (do not disturb) режима на рабочем телефоне. Так как DND режим не предполагает переадресации, то пришлось свою обработку для этого режима.
Все ниже описанные действия производились на Asterisk 16 + FreePBX 14.
В итоге добавлена возможность активации\де-активации DND режима по звонку самому себе (на всякий слушай, вдруг кому будет так удобней), возможность задание переадресации для конкретных внутренних номеров (не всем пользователям нужно такое поведение DND режима).
В файл /etc/asterisk/extentions_custom.conf
добавляем (постарался подробно описать что делает и как работают секции).
[from-internal-custom]
include => dnd-on-off
include => dnd-transfer-check
exten => _XXXX,1,GoSub(dnd-on-off,s,1,(${EXTEN}))
exten => _XXXX,n,GoSub(dnd-transfer-check,s,1,(${EXTEN}))
exten => _XXXX,n,Goto(from-internal-additional,${EXTEN},1)
[dnd-on-off]
; --------------------------------------------------------------------------
; Включение\Отключение режима DND по звонку самому себе
;
; -- Инструкция:
; При звонке на свой внутренний номер, включается или отключается режим DND.
; --------------------------------------------------------------------------
;
exten => s,1,NoOp(DND - Activate\Deactivate)
exten => s,n,ExecIf($["${CALLERID(number)}" = "${ARG1}"]?Goto(app-dnd-toggle,*76,1))
exten => s,n,Return()
[dnd-transfer-check]
; --------------------------------------------------------------------------------------------
; Задание необходимой переадресации на мобильный телефон в DND режиме.
;
; -- Инструкция:
; В условии REGEX("^()" в () указываем внутренние номера для которых необходимо перенаправлять
; входящие на мобильные при активном режиме DND. Прим. - REGEX("^(1100|1101)"
; --------------------------------------------------------------------------------------------
;
exten => s,1,NoOp(DND transfer call)
exten => s,n,ExecIf($[${REGEX("^(1100)" ${ARG1})}]?GoSub(dnd-transfer-call,s,1(${ARG1})))
exten => s,n,Return()
[dnd-transfer-call]
; ------------------------------------------------------------------------------------------------
; Проверка на включенный режим DND и указание номера для переадресации.
;
; -- Инструкция:
; Под указателем "insert DND transfer rule below" добавляем строку вида:
; exten => s-XXXX,1,Goto(outbound-allroutes,8XXXXXXXXXX,1), где вместо s-XXXX указываем внутренний
; номер абонента, а вместо 8XXXXXXXXXX номер мобильного для переадресации.
;
; Прим. - exten => s-1100,1,Goto(outbound-allroutes,8800000000,1)
; ------------------------------------------------------------------------------------------------
;
exten => s,1,NoOp(Transfer Call on DND activate)
exten => s,n,GotoIf($["${DB(DND/${ARG1})}" != ""]?s-${ARG1},1)
exten => s,n,Return()
; insert DND transfer rule below
;exten => s-XXXX,1,Goto(outbound-allroutes,8XXXXXXXXXX,1)
Чтобы корректно отрабатывал DND режим из меню IVR (к примеру при прямом наборе абонента с включенным режимом DND с переадресацией), в файл /etc/asterisk/extensions_override_freepbx.conf
добавляем.
; Модификация обработки звонков для корректной работы DND режима из IVR меню
;
[from-did-direct]
exten => _X.,1,GoSub(dnd-transfer-check,s,1,(${EXTEN}))
include => ext-findmefollow
include => ext-local
[from-did-direct-ivr]
include => from-did-direct-ivr-custom
exten => _X.,1,GoSub(dnd-transfer-check,s,1,(${EXTEN}))
exten => _X.,n,GotoIf($[${DIALPLAN_EXISTS(from-did-direct,${EXTEN},1)} = 0]?i,1)
exten => _X.,n,Macro(blkvm-clr,)
exten => _X.,n,Set(__NODEST=)
exten => _X.,n,Goto(from-did-direct,${EXTEN},1)
Памятка
Оставлю небольшую памятку по работе с DND режимом через консоль.
- как вывести список номеров с активированным DND режимом.
- как убрать режим на конкретном номере.
- как выставить режим DND на конкретном номере.
asterisk -rx 'database show DND'
asterisk -rx 'database del DND 1000'
asterisk -rx 'database put DND 1000'
Обсуждение
Нет комментариев.