Назад | Перейти на главную страницу

FreePBX - Как переписать идентификатор вызывающего абонента с переадресацией «следуй за мной»?

Сэм звонит на линию прямого набора Джули, и поскольку ее нет за своим столом (и из-за правила «следуй за мной»), звонок переадресовывается на ее мобильный.

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))})

надеюсь, это поможет