Сэм звонит на линию прямого набора Джули, и поскольку ее нет за своим столом (и из-за правила «следуй за мной»), звонок переадресовывается на ее мобильный.
FreePBX перенаправляет вызов по правильному исходящему маршруту, и все работает так, как должно Кроме для CID, представленного на телефоне Джули.
Поскольку Сэм звонит с местного мобильного 07123456789
, FreePBX передает свой CID нашему оператору исходящей почты без международный телефонный код - из-за этого на телефоне Джули появляется множество непредсказуемых CID.
Именно сеть заботится о представлении «правильного» CID - но только в том случае, если у нашего оператора есть номер в правильном формате для начала.
Для правильной передачи CID наш исходящий провайдер требует, чтобы все номера передавались с международным телефонным кодом.
Например: 447123456789
.
Как я могу сказать FreePBX, что:
ЕСЛИ звонок переадресован
и ЕСЛИ это 11 цифр
и ЕСЛИ он начинается с 07 или 020
Изменить CID лишив ведущих 0
и добавить 44
.
Да, наш исходящий оператор позволяет нам отправлять любые CID.
Чтобы уточнить - FreePBX отправляет CID Сэма через.
Но поскольку он отправляет его как 07123456789
он появляется (большую часть времени или не отображается вообще) на телефоне Джули как +7123456789
.
Мне нужно, чтобы CID был отправлен как 447123456789
для оператора и сетей, чтобы перевести его на 07123456789
.
Согласно вашему описанию, CALLERID (num) следует изменить, если он соответствует определенной структуре. Это предполагает использование регулярных выражений.
В Asterisk: полное руководство, описано, как манипулировать строками, чтобы получить новую строку из регулярных выражений
expr1: expr2
Этот оператор сопоставляет expr1 с expr2, где expr2 должно быть регулярным выражением. [92] Регулярное выражение привязывается к началу строки с помощью неявного символа ^.
Если совпадение выполнено успешно и шаблон содержит хотя бы одно подвыражение регулярного выражения - \ (... \) - возвращается строка, соответствующая \ 1; в противном случае оператор сопоставления возвращает количество сопоставленных символов. Если совпадение не удается, а шаблон содержит подвыражение регулярного выражения, возвращается пустая строка; в противном случае возвращается 0.
Я зарегистрировался Онлайн-тестер регулярных выражений и отладчик что ваши условия могут быть представлены регулярным выражением 0 ((7 [0-9] {9}) | (20 [0-9] {8})).
Итак, вы можете попытаться получить новую строку внутри части FollowMe диалплана примерно так:
Set(new_caller_id = 44$[${CALLERID(num)} : 0\((7[0-9]\{9\})|(20[0-9]\{8\})\)])
Обратите внимание, что я поставил первый «\» перед первым «(», чтобы изолировать интересующую нас часть строки и объединить ее с 44, как описано в руководстве. Другой «\» будет служить для экранируйте "{" и "}", которые служат в регулярных выражениях как множители, но имеют особое значение для звездочки (они ограничивают переменные). Я думаю, что в звездочке необходимы обратные косые черты для выхода из фигурных скобок, но я не уверен ( извините, я не могу провести тесты до следующих выходных).
Если идентификатор вызывающего абонента не соответствует регулярному выражению, new_caller_id будет "44", а строка, которую вы ищете, в противном случае. Вы могли бы использовать что-нибудь такое
Set(CALLERID(num) = ${If($[${new_caller_id} = 44]? ${new_caller_id} : ${CALLERID(num))})
надеюсь, это поможет