Убираем лишнее. Подгоняем городской номер под единый формат для всех абонентов АТС.

Как Вы набираете городской номер? Большинство людей набирает его в формате _8XXXXXXXXXX. Но иногда нужно постараться учесть все варианты. Для этого я написал маленькую обработку, которой поделюсь чуть ниже.

Номер мы будет подгонять под единый формат телефонных кодов стран, то есть для РФ это будет _7XXXXXXXXXX. "+" уберём. Некоторые VoIp ТА и ПО обрабатывают его не корректно.

Мне на Asterisk поступают внешние вызовы от 2 провайдеров связи и 3 транов по IAX2 каналам.

Первый провайдер присылает номер без кода страны. 10 цифр.

Второй присылает сразу в необходимом нам формате. Оставляем его без обработки.

Займёмся входящим маршрутом для первого провайдера:

Что бы привести его в нужный нам формат необходимо всего лишь добавить "7" что мы и делаем:

exten => s,1,Set(CALLERID(all)=7${CALLERID(num)})

Дальше можно отдать вызов абоненту.

Но это можно использовать не только во входящих вызовах, но и исходящих.

Для технических специалистов привычны проблемы когда пользователь делает что-то, так как он привык, у него не получается и он считает систему не работающей в целом, не поняв её принципов действия. И это иногда раздражает.

Что бы избавиться от этой проблемы мы учтём, что кто-то набирает номер 8XXXXXXXXXX, кто-то 98XXXXXXXXXX, а кто-то вообще так, что это и предугадать сложно. Вот для таких ребят мы в обработку их исходящего вызова добавим ещё 2 параметра:

exten => s,n,Set(CALLERID(all)=7${CALLERID(num):-10:10})

Обратите внимание на конец строки:

· Минус обозначает "начинать с конца"

· Взять 10 символов

· Сохранить 10 символов

· Остальное отсекаем

Получается: мы сохраняем номер и код города без когда страны. Без 8, без 7, без 98 и без _[0-9]ZX. Подставляем нужный нам код и отдаём вызов дальше.

Таким же образом я обрабатываю входящие вызовы через IAX2.

Данная обработка очень проста и эффективна. Удачного внедрения.