Home » Asterisk » Звонок в Asterisk через 8, +7 или 7, замена +7 на 8

Звонок в Asterisk через 8, +7 или 7, замена +7 на 8

В последнее время несколько раз ко мне обращались с просьбой настроить возможность звонить в asterisk не только через 8, но и используя префикс 7 или +7. Чаще всего такая просьба связана с использованием sip клиентов на мобильных телефонах, где часто в записной книге номера записаны через +7. Но при этом некоторые sip провайдеры принимают звонки только начинающиеся с 8, либо только с 7. В таком случае нам нужно самим настроить замену 7 на 8 в астериск или наоборот.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Администратор Linux» в OTUS. Курс не для новичков, для поступления нужно пройти .

Я возьму за основу 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, во втором ничего не делаем, в третьем просто убираем +.

Другие материалы по asterisk:

Онлайн курс "Администратор Linux"

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Администратор Linux» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров. Проверьте себя на вступительном тесте и смотрите программу детальнее по .

Помогла статья? Есть возможность отблагодарить автора

WiseApp

13 комментариев

  1. Аватар

    Доброе.
    Попробуйте freepbx — http://schmoozecom.com/distro-download.php Отличное готовое решение.

    P.s. 13 Asterix — LTS . Рекомендую исп-ть его во freepbx.

    • Zerox

      С freepbx я хорошо знаком, но сам предпочитаю ванильный астериск. Мне с ним быстрее и проще.

  2. Аватар

    Добавил себе в 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 Не пойму где я накосячил.

    • Zerox

      Так вам надо менять на 7 в начале, а вы в диалплане все меняете на 8. Надо наоборот менять 8 на 7.

  3. Аватар

    Мне нужен выход через 8 получается я оставляю одну строку
    exten => _7XX.,1,Dial(SIP/8${EXTEN:1}@896145)

    • Zerox

      «то нормально звонит на внешний номер но только ч\з 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)

  4. Аватар

    Да действительно, работает. Спасибо!

  5. Аватар

    Здравствуйте, а как допустим подставить для городских номеров префикс из кода города? Что бы народ мог набирать короткие городские номера без 7 ??

  6. Аватар

    Добрый день, спасибо еще раз за все статьи.. У меня провайдер предлагает внешний набор номера через 08495…
    Врятли это для кого то станет открытием, но чтобы убрать ноль в моём случае, у меня два правила звонка на внешние номера.
    exten => _8XX.,1,Dial(SIP/08${EXTEN:1}@21116)
    exten => _XXX.,1,Dial(SIP/${EXTEN}@21116)

  7. Аватар
    Александр

    Правильно это делается вот так:
    exten => _+7xxxxxxxxxx,1,GoTo(8${EXTEN:2},1)
    exten => _7xxxxxxxxxx,1,GoTo(8${EXTEN:1},1)
    exten => _8xxxxxxxxxx,1,Dial(${EXTEN},,)

    Это если провайдер хочет только с 8 принимать вызовы.

    • Zerox

      Чем это лучше того, что предложено в статье? Я еще со времен института и изучения c++ усвоил, что goto лучше не использовать, если можно не использовать. Сейчас даже не помню, почему.

      • Аватар
        Александр

        Тем, что не нужно прописывать Dial для каждого префикса. Единый Dial

        • Zerox

          Понял смысл. Сразу не уловил. В общем случае так действительно удобнее, хотя и не критично.

Добавить комментарий

Ваш e-mail не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.