В последнее время несколько раз ко мне обращались с просьбой настроить возможность звонить в asterisk не только через 8, но и используя префикс 7 или +7. Чаще всего такая просьба связана с использованием sip клиентов на мобильных телефонах, где часто в записной книге номера записаны через +7. Но при этом некоторые sip провайдеры принимают звонки только начинающиеся с 8, либо только с 7. В таком случае нам нужно самим настроить замену 7 на 8 в астериск или наоборот.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Я возьму за основу dialplan из моей статьи про настройку asterisk. Но в целом это не принципиально, вы легко сможете изменить нужные строки и подстроить под свой план набора. Главное - понять смысл.
Вы звоните в мир по следующему правилу:
exten => _XXX.,1,Dial(SIP/${EXTEN}@397945)
Если ваш провайдер принимает звонки в любых форматах, то вам ничего редактировать не надо. Маска XXX. допускает любой набор - 8, 7 или +7. Но часто бывает так, что провайдер принимает только один конкретный тип набора, а на остальные отвечает, что неправильно набран номер или просто не звонит. В таком случае нам нужно сделать замену неправильного набора на правильный у себя в астериске. Делается это так:
exten => _8XX.,1,Dial(SIP/${EXTEN}@397945) exten => _7XX.,1,Dial(SIP/8${EXTEN:1}@397945) exten => _+7X.,1,Dial(SIP/8${EXTEN:2}@397945)
Первой строкой мы звоним без изменения номера. Во второй строке мы убираем первый символ и добавляем в начало 8. В третьей - убираем 2 первых символа и добавляем 8.
Если вам необходимо наоборот, заменить в астериск 8 на 7, то можно воспользоваться такими правилами:
exten => _8XX.,1,Dial(SIP/7${EXTEN:1}@397945) exten => _7XX.,1,Dial(SIP/${EXTEN}@397945) exten => _+7X.,1,Dial(SIP/${EXTEN:1}@397945)
В первом случае заменяем 8 на 7, во втором ничего не делаем, в третьем просто убираем +.
Для отладки и тестирования работы voip я рекомендую сервис Zadarma. Плюс его в том, что после регистрации вы получите настройки пира для внутренней сети оператора. И внутри этой сети вы можете бесплатно звонить. Например, я одного пира регистрирую на sip клиенте смартфона и с него звоню на второй аккаунт, пир от которого настроен в астериске. Таким образом эмулирую внешний звонок. Удобно отлаживать различные конфигурации звонков, не требуя платного подключения.
Другие материалы по asterisk:
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
- Установка и настройка астериск с нуля
- Мониторинг asterisk в zabbix
- Соединение двух серверов астериск
- Анализ SIP трафика
- Замена +7 на 8 и наоборот
- Ограничение на звонки для группы номеров
Может это не совсем в тему, но может кому пригодится
При входящем звонке я делаю примерно так:
[from-pstn-custom]
exten => _X.,1,GoSub(sub-pstn-custom,s,1(${EXTEN}))
[sub-pstn-custom]
exten => s,1,NoOp(--- Incoming ring from number "${CALLERID(num)}" ---)
same => n,NoOp(--- Redirection number "${CALLERID(RDNIS)}" ---)
same => n,NoOp(--- Dialed number "${CALLERID(DNID)}" ---)
;Повторяем первую строку [from-trunk]
same => n,Set(__DIRECTION=INBOUND)
; Проверяем формат номера
same => n,SET(CIDLEN=${LEN(${CALLERID(num)})})
same => n,Goto(s,fix${CIDLEN})
same => n,Return()
; меняем +7 на 8
same => n(fix12),NoOp(${CALLERID(num):0:2})
same => n,ExecIf($["${CALLERID(num):0:2}" = "+7" ])?Set(CALLERID(num)=8${CALLERID(num):-10}))
same => n,NoOp(--- Replaced number "${CALLERID(num)}" ---)
same => n,Return()
; добавляем 8
same => n(fix10),NoOp(${CALLERID(num)})
same => n,Set(CALLERID(num)=8${CALLERID(num)}))
same => n,NoOp(--- Replaced number "${CALLERID(num)}" ---)
same => n,Return()
; меняем 7 на 8
same => n(fix11),NoOp(${CALLERID(num):0:2})
same => n,ExecIf($["${CALLERID(num):0:1}" = "7" ])?Set(CALLERID(num)=8${CALLERID(num):1}))
same => n,NoOp(--- Replaced number "${CALLERID(num)}" ---)
same => n,Return()
добрый день , не совсем понимаю как настроить dial plan на телефонах grandstream.
Нужно, чтобы при наборе кода 114( код доступа на внешние звонки, не предприятие), мог звонить на сотовые и меж город. Например
114-(82144) 2-66-66 город ( без кода города звонок проходит)
или
114-8-917 хх-хх-ххх
В данный момент при наборе голосовое оповещение"не правильно набран номер"
Спасибо!
Коллега, доброе время суток, в не подскажете по такому вопросу - все подмены прописал, все работает хорошо. Но с одним не могу разобраться как можно прописать так, чтобы при звонке с одного добавочного ( например 333, только с него ) при наборе остальных 3ех значных добавочных перед номером добавлялся 1 знак 9 ( например вместо 332 набиралось 9332 ) Со всех остальных номеров набор должен быть обычным трехзначным. Нужно для хитрой переадресации только с этого номера и в АТС занесены оба типа номеров. Облазил Custom Context... А вот как это через диалплан сделать не пойму... Заранее спасибо и простите за туповатый вопрос...
Не вижу тут никакой проблемы. Пишите правило добавления цифры в диалплане для номера 333 выше правила для остальных 3хх номеров. И все. Dialplan по порядку читается. Как только номер 333 попадает под правило, оно выполняется. Остальные номера 3хх будут обрабатываться следующим правилом.
Я понимаю. У меня в голове затык именно с добавлением, как в данном случае оно выглядит? Третьи сутки настройки вынули из головы тривиальные знания...
Немного выспавшись и почитав, понял, что надо примерно так -
exten => _XXX,n,Set(CALLERID(num)=9${EXTEN})
Но вот остался момент, в PBX при редактировании extensions_custom.conf он тупо игнорирует эту строку.
Все, решил))
exten => _XXX,1,Set(CALLERID(num)=9${CALLERID(num)})
exten => _XXX,2,Goto(9${EXTEN},1)
Теперь осталось привязаться его в одному добавочному!
Сделать надо так:
1. Для номера 333 в настройках пира указать отдельный контекст, куда скопировать все настройки для остальных номеров 3хх, заменив только значение context.
[333]
context=call-from-333
2. В dialplan добавить новый контекст, в самом начале написать правило добавление цифры при звонке на номера 3хх
[call-from-333]
exten => _3XX,1,Dial(SIP/9${EXTEN}@397945)
Примерно так, настройки зависят от вашей конфигурации.
Дальше все настройки как для остальных трехсотых. И все.
Да! Спасибо. Уже начал писать отдельный контекст как раз!
А чем отличается
[call-from-333]
exten => _3XX,1,Dial(SIP/9${EXTEN}@397945)
от моих двух строк?
Всем :) У тебя caller id в первой строке заменяется. Не знаю, насколько это актуально для тебя. Во второй строке идет ссылка куда-то, скорее всего на dial. То есть в таком виде это не законченная настройка, должна быть еще строка с самим звонком.
Я же просто привел пример конкретно звонка с изменением номера.
Правильно это делается вот так:
exten => _+7xxxxxxxxxx,1,GoTo(8${EXTEN:2},1)
exten => _7xxxxxxxxxx,1,GoTo(8${EXTEN:1},1)
exten => _8xxxxxxxxxx,1,Dial(${EXTEN},,)
Это если провайдер хочет только с 8 принимать вызовы.
Чем это лучше того, что предложено в статье? Я еще со времен института и изучения c++ усвоил, что goto лучше не использовать, если можно не использовать. Сейчас даже не помню, почему.
Тем, что не нужно прописывать Dial для каждого префикса. Единый Dial
Понял смысл. Сразу не уловил. В общем случае так действительно удобнее, хотя и не критично.
На одну строчку меньше.
exten = _+7XXXXXXXXXX,1,Goto(${EXTEN:2},1)
exten = _[78]XXXXXXXXXX,1,Goto(${EXTEN:1},1)
exten = _XXXXXXXXXX,1,Dial(SIP/SERVER/8${EXTEN},30)
Добрый день, спасибо еще раз за все статьи.. У меня провайдер предлагает внешний набор номера через 08495...
Врятли это для кого то станет открытием, но чтобы убрать ноль в моём случае, у меня два правила звонка на внешние номера.
exten => _8XX.,1,Dial(SIP/08${EXTEN:1}@21116)
exten => _XXX.,1,Dial(SIP/${EXTEN}@21116)
Здравствуйте, а как допустим подставить для городских номеров префикс из кода города? Что бы народ мог набирать короткие городские номера без 7 ??
Да действительно, работает. Спасибо!
Мне нужен выход через 8 получается я оставляю одну строку
exten => _7XX.,1,Dial(SIP/8${EXTEN:1}@896145)
"то нормально звонит на внешний номер но только ч\з 7 Не пойму где я накосячил."
Из этой строки я делаю вывод, что провайдеру нужно отдавать номер с 7 в начале. Соответственно и все правила должны настроены на 7. То есть должно быть вот так:
exten => _8XX.,1,Dial(SIP/7${EXTEN:1}@896145)
exten => _7XX.,1,Dial(SIP/${EXTEN}@896145)
exten => _+7X.,1,Dial(SIP/${EXTEN:1}@896145)
Добавил себе в dialplan следующие строки:
;Звонок на внешний номер
exten => _XXX.,1,Dial(SIP/${EXTEN}@896145)
exten => _8XX.,1,Dial(SIP/${EXTEN}@896145)
exten => _7XX.,1,Dial(SIP/8${EXTEN:1}@896145)
exten => _+7X.,1,Dial(SIP/8${EXTEN:2}@896145)
Говорит что направление не существует, без разница ч\з 7 или 8 набирать номер. Когда оставляю одну строку:
exten => _XXX.,1,Dial(SIP/${EXTEN}@896145)
то нормально звонит на внешний номер но только ч\з 7 Не пойму где я накосячил.
Так вам надо менять на 7 в начале, а вы в диалплане все меняете на 8. Надо наоборот менять 8 на 7.
Доброе.
Попробуйте freepbx - http://schmoozecom.com/distro-download.php Отличное готовое решение.
P.s. 13 Asterix - LTS . Рекомендую исп-ть его во freepbx.
С freepbx я хорошо знаком, но сам предпочитаю ванильный астериск. Мне с ним быстрее и проще.