Переадресация для Asterisk

Переадресация- штука интересная и количество сценариев переадресации звонка очень много.
В случае описываемом мной переадресация выполняется безусловно и включатеся по желанию абонента (вообще данный пример очень просто перделывется в условную переадресацию и если дойдут руки я постараюсь раскрыть эту тему), но все осложняется тем, что сервер на котором регистрируется Asterisk с выходом в город не умеет обрабатывать SIP сообщение 302-Moved Temporarily (Используется SIP канал, но диалплан может быть применен и к другим технологиям). Недостаток метода который я опишу здесь в том, что потребуется 2 Trunk'а или 1, но многоканальный (<2 канала). Метод использует собственную базу данных Asterisk astDB, поэтому советую прочитать об этом, поскольку подробно останавливаться на этом моменте я не буду.

И так приступим: вот весь кусок диалплана, который отвечает за переадресацию вызова:

exten => #21,1,Set(DB(REDIRECT/${CALLERID(num)})=${EXTEN})

exten => #21#,1,Set(NOREDIRNUM=${DB_DELETE(REDIRECT/${CALLERID(num)})})

exten => s,1,Set(REDIRECTNUM=${DB(REDIRECT/${EXTEN})})
exten => s,n,GotoIf($[${ISNULL(${REDIRECTNUM})}]?internal:redirect)
exten => s,n(internal),Dial(SIP/${EXTEN})
exten => s,n(redirect),Dial(SIP/TRUNK/${REDIRECTNUM})


Теперь давайте разберем по частям, что за чем идет и что за что отвечает.

Как я уже сказал, переадресация выполняется по желанию клиента. То есть для того, чтобы использовать переадресацию нужно ее включить:

exten => #21,1,Set(DB(REDIRECT/${CALLERID(num)})=${EXTEN})

Эта команда запоминает набранный номер, и номер с которого он был набран, и сохраняет в базе данных Asterisk.

Здесь после набора комбинации #21 нужно донабрать номер для переадресации. Я помещаю в семейство REDIRECT набранный номер ${EXTEN}, который будет доступен по ключу ${CALLERID(num)}. То есть, проще говоря введенный номер будет храниться в таблице REDIRECT в строке ${CALLERID(num)} или доступен по адресу REDIRECT/${CALLERID(num)} базы данныx Asterisk (Команда DB). Переменная ${CALLERID(num)} хранит в себе номер, с которого присходит вызов.

Выключение переадресации происходит подобным образом:

exten => #21#,1,Set(NOREDIRNUM=${DB_DELETE(REDIRECT/${CALLERID(num)})})

Абонент, набирая комбинацию #21# с помощью утилиты DB_DELETE очищает ячейку REDIRECT/${CALLERID(num)}

Здесь я использовал переменную NOREDIRNUM чтобы просто выпонить какие-либо действия с через Set() потому как она ругалась на отсутсвие знака "=". Но вообще можно попробывать и так:

exten => #21#,1,Set(DB_DELETE(REDIRECT/${CALLERID(num)}))

Следующие несколько строк занимаются как раз самым основным — реализацией вызова. Давайте рассмотрим их подробнее:

exten => s,1,Set(REDIRECTNUM=${DB(REDIRECT/${EXTEN})})

Данная строка извлекаем содержимое ячейки REDIRECT/${EXTEN} (номер переадрисации) и присваивает ее значение переменной REDIRECTNUM, для того чтобы проверить задан ли вообще номер переадрисации для данного абонента. То есть если, скажем мы звоним абоненту по номеру 100, то данная команда присваевает значение ячейки REDIRECT/100 переменной REDIRECTNUM.

exten => s,n,GotoIf($[${ISNULL(${REDIRECTNUM})}]?internal:redirect)

Далее производится проверка существования номера перадресации: Если переменная REDIRECTNUM ISNULL (пуста/неопределена) то мы переходим к строке с меткой internal и вызываем абонента по его основному номеру:

exten => s,n(internal),Dial(SIP/${EXTEN})

Если же переменная REDIRECTNUM не пуста, то вызываем номер, указанный в ней.

exten => s,n(redirect),Dial(SIP/TRUNK/${REDIRECTNUM})

Надеюсь кому-нибудь это поможет в освоении просторов Asterisk.
Поделиться публикацией

Комментарии 25

    –3
    Чем больше я таких статей вижу, тем сильнее крепнет в моей голове стереотип, что Asterisk это игрушка для проведения лабораторных работ в свое удовольствие.

    Как такую «дружелюбную» и «удобную» систему использовать в продакшене я просто не понимаю. У меня волосы становятся дыбом когда я такое вижу. И ведь это простая и тривиальнейшая операция, а ее натурально надо программировать. Боюсь даже представить как нормально настроить IVR и сколько на это уйдет сил и времени.

    Снимаю шляпу перед автором, разобрался, настроил, другим объяснил.
      0
      На самом деле все все не настолько ужасно как кажется на первый взгляд. Просто все гибко. поэтому большие функции разбиты на маленькие. IVR конфигурируется очень просто кстати. Тем более есть доступная литература ведь. Так что, как говорится- не так страшен черт как его малюют.
        0
        Есть веб интерфейсы, там это можно делать кликнув два раза. Так что не всё так плохо. Вы настройки телефонии циски видели? Астериск после этого прямо рай.
          0
          Web-морду видел только Elastix. Та еще гадость, скажу я вам.
          Что по поводу CUCM. Сам с ним плотно не работал, но мое поверхностное знакомство с ним не оставило плохих впечаьлений. Там конечно много всего, но вроде все на месте.
          Сам же я работаю с Avaya. У нас на ней корпоративная телефония. Я волей не волей сравниваю с ней. Так вот там гораздо все проще. Все понятно и прогнозируемо. Интеграция с Lync-ом, работа с кучей SIP-транков, мержинг конфигурации «на лету», очень удобный и информативный мониторинг реального времени. Короче радость а не АТС, хотя она тоже не без косяков.

          Не хочу холиварить, сравнивать бесплатное софтовое решение с программно-аппаратным комплексом за десятки килобаксов по меньшей мере не корректно.
            0
            Так и знал, слишком ядовит был ваш комментарий, но не в этом дело, давайте тогда сравним платное решение, вот мы продаём решение от Fonality Trixbox pro. Решение до 500 человек, были недавно тендеры по телефонии в колл центрах, так вот мы их выигрываем из за цены, по сравнению с вами 35-40% Вам не страшно? Ведь корпорации уже давно сидят на телефонии на последних технологиях, а битва идёт за средний сектор. Ваши директора поймут что средний сектор не готов платить такие деньги?
              0
              Не очень понял о чем вы, если честно. Я вообще к телефонии имею отношение весьма опосредованное (в плане продаж и внедрения). Мы ее не продаем, слава богу. Мы просто сами пользуемся Avaya. А то что купили именно её, так то просто могли себе позволить вот и все. Зато цена поддержки у нее практически нулевая сейчас.

              То что у Avaya конский ценник, особенно на лицензии, тут я с вами согласен более чем полностью. IVR стоит столько, что дешевле нанять толпу девочек и научить их понимать DTMF. Действительно малый и средний бизнес не потянет такую технику.

              Если я не ошибаюсь, TrixBox — это тоже на базе Астериска. Не совсем понятно почему разница всего 40%.

              Я собственно писал это все к тому, что по сравнению с тем, с чем я имел дело (Avaya, Cisco, 3CX, Snom, Audiocodes) такой подход как приведен в статье — диковат малость. При этом я ничуть не умаляю функциональность системы (про нее я просто не знаю, посему спорить не буду).
                0
                А, а я не понял думал вы авая продаёте, тогда примите мои извинения, а почему разница 40%? Это если сравнивать эквивалентные решения, у авая есть решения повыше уровнем, но стоят они очень много. А 40% в том же сегменте это хорошо, в версии про, другой интерфейс и есть много плюшек.
              +1
              > Сам же я работаю с Avaya. У нас на ней корпоративная телефония

              А кое-кто спрыгивает с Avaya на Switchvox, Asterisk based. — www.digium.com/en/company/casestudies/viewcasestudies/forward-management (сорри, english only).
                –1
                Максим, я конечно понимаю, что авторизованный продавец switchwox и все такое, но постить рекламу в каждом комменте есть некоторый перегиб. Нее?
              0
              > Вы настройки телефонии циски видели? Астериск после этого прямо рай.

              После Asterisk очень сложно работать с коммерческими системами. Такое ощущение, что связан по рукам и ногам.
              +1
              > Asterisk это игрушка для проведения лабораторных работ в свое удовольствие.

              Asterisk — это мощный «кухонный комбайн» телефонии, а не лабораторная игрушка. И на Asterisk работает более 30% всех компаний мира. Дураки? Не думаю.

              > У меня волосы становятся дыбом когда я такое вижу
              А Вы с телефонистами старыми пообщайтесь, которые программировали всякие Нортели и прочие черные ящики. Волосы там встают дыбом.

              > И ведь это простая и тривиальнейшая операция, а ее натурально надо программировать
              ovosglook показал один из вариантов реализации услуги ДВО переадресация номера при помощи встроенной базы Asterisk. Точно также он мог хранить номера в профиле пользователя в службе каталогов LDAP, или в 1С системе (это кстати тоже реализовано, а сколько Вы знаете АТС систем, интегрированных с 1С?) Вы просто купили коробочное решение, где за вас это уже сделали, и пользуетесь этим. С точки зрения абонентов, они не заметят разницы между Вашей АТС и этой реализацией. Разве что Вашей АТС пользоваться не так удобно. Например, еще пару штрихов, и можно сделать автоматическое снятие режима «Переадресация» при первом же исходящем звонке с SIP телефона, тем самым устраняя частую забывчивость пользователей снять режим переадресации.

              Ну и в завершение. Есть GUI для Aterisk — FreePBX. Тоже бесплатная, там все уже реализовано, и не надо ничего программировать (при этом всегда есть возможность «нырнуть» в диалплан и сделать что угодно).

              А есть система на базе коммерческого Asterisk, уже от Digium — www.switchvox.ru.
              Это штука вообще уделывает по полной программе все аналоги. Так что Asterisk — это сила!

                –1
                >Asterisk — это мощный «кухонный комбайн» телефонии, а не лабораторная игрушка. И на Asterisk работает более 30% всех компаний мира. Дураки? Не думаю.
                Статистикой не владею, так что спорить не буду. Но на Cisco, уверен, сидит больше чем на Asterisk-е, и ведь наверняка тоже не дураки.

                >А Вы с телефонистами старыми пообщайтесь, которые программировали всякие Нортели и прочие черные ящики. Волосы там встают дыбом.
                Ну вы бы еще коммутаторы вспомнили. Речь же про технологии 21-ого века.

                >ovosglook показал один из вариантов реализации услуги ДВО переадресация номера при помощи встроенной базы Asterisk…
                Ну вот меряться функционалом — это не лучший способ доказательства. Та же, далеко не самая навороченная Avaya тоже не мало чего умеет. С 1С конечно не интегрируется, по крайней мере простым образом, но вот с LDAP-ом, аж бегом. А IVR-у так вообще пофигу, он в любую базу может сходить. Да и вопросы удобства — тоже спорные. Например у той же присловутой Avaya есть софтовый клиент (не сип клиент, а управляющий). Собирать конференции, управлять huntGroup-ами и прочее можно наглядно прямо с компьютера. И работает это все сразу «из коробки», и не требует танцов с бубнами для написания кучи скриптов, создания Web-морды для пользователя и т.п. Пользователь сам себе может сделать примитивного автосеретаря (можно и сложного, с логикой и хождением в SQL-ные базы, но это уже только спец может сделать). А вот автопровижининг, например в Asterisk-е есть? А автоконфигурация Extention-ов? А аналоговая телефония, а DECT, а все вместе завести, чтоб работало? В общем не стоит меряться пиписьками, тем более что для меня это всего лишь инструмент и меня ни сколько не напрягает, если этот нструмент хуже другого, коль он меня устраивает на 100%.

                >Это штука вообще уделывает по полной программе все аналоги. Так что Asterisk — это сила!
                Любая система должна решать задачу и если она это делает приемлемым для Вас образом — она сила.
                  0
                  Как не странно, сейчас очень многие цепляют циски (особенно младшие модели) именно к астериску — работает как часы.

                  Вообще, мне кажется что даже если пригласить спецов на первоначальную настройку астериска и долго и упорно им платить, все равно получится сильно дешевле платных «дружелюбных» систем. ИМХО
                    0
                    > Но на Cisco, уверен, сидит больше чем на Asterisk-е
                    Вот тут Вы ошибаетесь. На телефонных решениях Cisco намного меньше народа сидит, чем на Asterisk.

                    > А IVR-у так вообще пофигу, он в любую базу может сходить.
                    Вау! Этаж нада! Аж в любую базу может сходит. И что, даже в NoSQL базу от Амазон aws.amazon.com/dynamodb/ ?? Ага, а говорите, в любую…

                    > Собирать конференции, управлять huntGroup-ами и прочее можно наглядно прямо с компьютера
                    Смешно. И это преподносится как нечто необычное…

                    > И работает это все сразу «из коробки», и не требует танцов с бубнами для написания кучи скриптов, создания Web-морды для пользователя
                    Вам же сказали, не хотите плясать — поставьте в пару кликов AsteriskNOW GUI. WEB морда там есть, ее не надо создавать.

                    > А вот автопровижининг, например в Asterisk-е есть
                    Уважаемый, Asterisk — это SIP B2UA. Автопровижининг — это комплексное решение, вовлекающее сетевой сниффер, базу сигнатур, и ПО по генерации конфигов. Это за пределами Asterisk. Для FreePBX есть модули для некоторых моделей телефонов. Switchvox умеет автоматически конфигурировать телефоны SNOM и Polycom.

                    > А аналоговая телефония, а DECT, а все вместе завести, чтоб работало?
                    Вы что, с луны свалились? Про платы аналоговые Digium знаем? А про SIP шлюзы Eltex? А про DECT KIRK с масштабированием до тысяч абонентов.

                    Отдыхает Ваша Avaya, и ждет ее такой же финал, как и Nortel, подразделение которого она купила.
                    Дурачить людей в эпоху Интернет долго не получится.
                      –1
                      Ладно, ладно. Все понял. Не буду больше осквернять святыню человеческой гениальности упоминанием грабительской проприетарщины. Прошу прощения если оскорбил вас в лучших чувствах.

                      Только скажите мне, Святой отец, как в свящем писании говорится, можно ли применить новый конфиг (наприме диал план) «на лету»?

                      P.S.
                      >Вот тут Вы ошибаетесь. На телефонных решениях Cisco намного меньше народа сидит, чем на Asterisk.
                      Пруф будьте добры.
                      Вокруг себя вижу несколько компаний на Cisco, парочку на Avaya, есть даже костыльные решения от 3СХ и брендов типа Panasonic, а вот ни Asteriske никого не видел.

                      И вообще, вы, религиозные фанатики, люди странные. Во всем видете какой-нибудь заговор. Avaya это не моя, и мне глубоко положить что с ней будет завтра. Мое финансовое состояние никак не зависит от нее. Я даже спорить не с вами дальше не буду. Это во-первых бесполезно, а во-вторых: я, в отличии от ввас, не хочу распаляться ради черт знает чего.
                        +1
                        Как минимум, можно сделать dialplan reload, причем не влияя существующие линнии. Ну а вообще, в диалплане можно использовать внешние вызовы через AGI и вообще весь callflow вывести, например, в php. Ну а там уже накрутить можно еще больше.
                          0
                          На сколько я помню в астериске диалплан можно положить в базу данных. Т.е. никаких телодвижений по обновлению конфига.

                          www.voip-info.org/wiki/view/Asterisk+RealTime+Extensions
                          –1
                          >>Вот тут Вы ошибаетесь. На телефонных решениях Cisco намного меньше народа сидит, чем на >>Asterisk.
                          Источник?

                          >>работает более 30% всех компаний мира. Дураки? Не думаю.
                          Источник?

                          >>После Asterisk очень сложно работать с коммерческими системами. Такое ощущение, что связан по >>рукам и ногам.
                          Бред. После циски с астером страшно работать, не знаешь что и где навернется в какой момент. Правда дебажить проще, это да. Ну так нам не за то деньги платят, и не за простоту дебага заказчикам АТС нравится.
                            0
                            >>Вот тут Вы ошибаетесь. На телефонных решениях Cisco намного меньше народа сидит, чем на >>Asterisk.
                            > Источник?

                            Ну хотя бы это — www.voipoffice.ru/news/8950/
                            """
                            при этом открытым АТС принадлежит доля, равная 18% этого рынка. Это больше, чем у любого из крупных производителей офисных АТС: Nortel, Cisco, Avaya.
                            """
                            Это было в 2010 году.

                            >>работает более 30% всех компаний мира. Дураки? Не думаю.
                            > Источник?

                            А это уже экстраполяция тенденций :-) Это моя оценка.

                            >>После Asterisk очень сложно работать с коммерческими системами. Такое ощущение, что связан по >>рукам и ногам.
                            > Бред. После циски с астером страшно работать, не знаешь что и где навернется в какой момент. Правда дебажить проще, это да. Ну так нам не за то деньги платят, и не за простоту дебага заказчикам АТС нравится.

                            Уважаемый, не хамите! Вы сами-то читать умеете? Я написал, что после Asterisk сложно работать с коммерческими системами, связан по рукам и ногам = не хватает функционала, не расширяется, загнал в бизнес-логику, реализованную разработчиками, ничего сделать не можешь, и должен туда втискиваться.

                            А Вы мне что пишите? При чем тут «навернется»? Связан по рукам и ногам имелось в виду именно в рамках функционала и его расширения, не очевидно? Вы назвали это бредом, при этом в качестве аргумента привели то, что циска стабильнее (это я и не оспариваю), но что там дебажить сложно, но за это Вам деньги платят. Это что за методы на научной полемики? :-)
                    +1
                    Есть маленький вопрос. Насколько я понял, для активации переадресации на номер 555555 абонент набирает #21555555. Как система отфильтровывает "#21" от номера 555555. Или в базу так и пойдет "#21555555"?
                      0
                      #21# — это extension. астериска после каждого ввода цифры проверяет ранее введенную последовательность цифр на соответствие какому-нибудь extension'ов dialplana в пределах некоего контекста.
                      Алгоритм выглядит очень грубо так:
                      После ввода определенной последовательности цифр система посимвольно начинает искать соответствие с extensionами. Пользователь дал DTMF команду "#21#555555"
                      У астериски начался проход:
                      SELECT * FROM DIALPLAN WHERE EXTEN='#*' — Result 5 (есть какие-то команды в dialplanе, которые начинаются с решетки)
                      SELECT * FROM DIALPLAN WHERE EXTEN='#2*' Result 1 (есть команда, которая начинается на "#2", но выглядит она как exten => #21#, значит не интересно)
                      SELECT * FROM DIALPLAN WHERE EXTEN='#21*' Result 1 (то же, что и в предыдущем пункте, но тоже не подходит
                      SELECT * FROM DIALPLAN WHERE EXTEN='#21#*' Result 1 (ага, а вот extension #21# есть, значит переходим к его исполнению.
                      Соответственно все, что дальше было введено, а это 555555 передается в качестве входного аргумента

                      основы dialplan.
                      0
                      >exten => s,n(redirect),Dial(SIP/TRUNK/${REDIRECTNUM})

                      Что произойдет, если клиент задаст редирект на другой внутренний номер? Бесконечный цикл? Насколько я понимаю, asterisk «позвонит» в TRUNK, TRUNK позвонит asterisk-у, и так пока одному из них не надоест.
                        0
                        Хотя нет. Звонок от TRUNK к asterisk-у будет идти уже на другой номер. Зациклить не получиться :-)
                        0
                        80 филиалов по стране. Несколько колцентров. все под Центосью+Астериск. Единое телефонное пространство. Единая статистика.

                        Да. Сначала пилили. Настраивали. Зато теперь проблем ноль. Ну почти ноль. Есть текучка, но это нормально.

                        Астериск очень гибок. Если не лезть в дебри, то встает с нуля. Настройки минимальные. Хочешь красоты. Берешь и пилишь.

                        Да. Надо один раз потратить время и въехать. Зато потом красота.
                          0
                          Ну есть еще switchvox… Красота сразу из коробки ;-) Не такой гибкий как Asterisk, хоть и в нем самом Asterisk, но такова цена готового решения — работает так, как придумал не ты, а другой.

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

                        Самое читаемое