В ряде случаев сотруднику не положено видеть настоящий номер телефона клиента. Рассмотрим возможный подход в решении этой задачи. Сотруднику будет передаваться подменный номер, на который он сможет перезвонить.
Перейдите в раздел Система → Кастомизация системных файлов
Откройте для редактирования конфигурационный файл modules.conf. Установите режим «Добавлять в конец файла»
Подключим модуль для вычисления хэш суммы:
load => func_md5.so
Откройте для редактирования конфигурационный файл extensions.conf. Установите режим «Добавлять в конец файла»
Опишем контекст для подмены номера
[dial_create_chan-custom]exten => s,1,NoOp() ; Только для входящих; same => n,ExecIf($["${CHANNEL(channeltype)}"=="Local"||"${FROM_DID}x"=="x"]?return) ; Обработка не требуется, если звонит внутренний номер. same => n,ExecIf(${DIALPLAN_EXISTS(internal,${CONNECTEDLINE(num)},1)}?return) ; Обработка не требуется, если номера нет в списке. same => n,ExecIf($[${DIALPLAN_EXISTS(bluring-extensions,${CHANNEL(endpoint)},1)} ==0]?return) ; Получим кэш номера. same => n,Set(blNumber=${CONNECTEDLINE(num):-4}*${MD5(${CONNECTEDLINE(num)})}) same => n,Set(DB(bluring/${blNumber})=${CONNECTEDLINE(num)}) ; Подмена callerid same => n,Set(CONNECTEDLINE(num)=${blNumber}) same => n,Set(CONNECTEDLINE(name)=${blNumber}) same => n,return
Опишем контекст с номерами, для которых нужно подменять номер
[bluring-extensions]; Разрешаем подмену для номера 201exten =>201,1,NoOp(); Разрешаем подмену всех четырехзначных номеровexten => _XXXX,1,NoOp()
Предусмотрим возможность перезвонить на подменный номер
[all_peers](+)exten => _XXXX*.,1,Set(number=${DB(bluring/${EXTEN})}) same => n,ExecIf($["${number}x"=="x"]?hangup) same => n,Goto(all_peers,${number},1)