VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Макрос, AGI или..

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

debian-asterisk
Сообщения: 62
Зарегистрирован: 22 май 2016, 11:12
Контактная информация:

Макрос, AGI или..

Сообщение debian-asterisk »

Привет, снова понедельник! снова лето, снова все постарели на 1 год)

есть несколько транков.
вот как сделать так:
мобильные номера своего региона вызывать через trunk1 для офиса, trunk1-1 для филиала, trunk1-2 для другого филиала
а все остальные мобильные вызывать через trunk2, trunk2-1, trunk2-2 соответственно для каждого филиала?

конечно, можно писать так:
; офис
exten => +89162X.,1,Dial(....trunk1.....)
exten => +89262X.,1,Dial(....trunk1.....)
exten => +89632X.,1,Dial(....trunk1.....)
и т.д.
; филиал 1
exten => +89162X.,1,Dial(....trunk1-1.....)
exten => +89262X.,1,Dial(....trunk1-1.....)
exten => +89632X.,1,Dial(....trunk1-1.....)

Но это это занимает более 10 строк (все коды операторов надо перечислить)
Умножьте это на количество филиалов (ведь у каждого филиала будет свои исходящие транки)

Я пока не осилил как мне в PHP или PERL скрипт написать, или же связать с MySQL. Понимаю, что это займет приличное время на изучение материала.

Но вроде задача очень простая, неоткуда брать начальные знания, теорию по моему вопросу.
Поэтому решил эту задачу через Макросы решить.
Но вот Гугл только примитивные макросы выдает.

Исходные данные:
1) Транки известны
2) Маски кодов мобильных операторов известны: я их взял с гугла + с сайта россвязи

п.с.
Есть так называемые AEL и LUA. Но я их на закуску буду изучать, когда все будет настроено и будет работать на 100%, тогда разве что могу экспериментировать.

Спасибо за наводку :)
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

Re: Макрос, AGI или..

Сообщение ded »

Коды
exten => +89162X.
exten => +89262X.
exten => +89632X.
это на Россвязи? +89162X. - что это за страна (учитывая то, что + = 00, то есть 0089162X.)??

Придите уже к стандарту е164.

В вашем случае все коды надо всё равно залить в базу, где разбить диапазоны по регионам, и при вызове делать примерно так:
exten => +79ХХХХХХХХХ,1,GotoIf($['запрос_из_базы_это_региональный_номер?' = "yes"]?local)
exten => +79ХХХХХХХХХ,n,Dial(SIP/Common_trunk/${EXTEN})
exten => +79ХХХХХХХХХ,n,Hangup
exten => +79ХХХХХХХХХ,n(local),Dial(chan_dongle/${EXTEN})
exten => +79ХХХХХХХХХ,n,Hangup
debian-asterisk
Сообщения: 62
Зарегистрирован: 22 май 2016, 11:12
Контактная информация:

Re: Макрос, AGI или..

Сообщение debian-asterisk »

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


Я так и пишу сейчас, но хочется создать 1 макрос с этим перебором кодов (локал , не локал)
и вызывать этот макрос много раз.

В данный момент текст с вызовом мобильных дублируется более 10 раз. Представьте, сколько это "тупого" текста, хотя можно было вызывать 1 строкой макрос.

В этом вся суть
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

Re: Макрос, AGI или..

Сообщение ded »

Откуда можно это было знать? Указали бы
exten => +79162X.
exten => +79262X.
exten => +79632X. (и точку в конце не надо, ибо длина номера - фиксированная).
и ничего бы не спалили.
Отговорка, не принимается
debian-asterisk писал(а):Я так и пишу сейчас, но хочется создать 1 макрос с этим перебором кодов (локал , не локал)
и вызывать этот макрос много раз.
Чё то Вас слово макрос очень настраивает.
Кусок диалплана, который я привёл выше, делает то же самое.
debian-asterisk
Сообщения: 62
Зарегистрирован: 22 май 2016, 11:12
Контактная информация:

Re: Макрос, AGI или..

Сообщение debian-asterisk »

понял, полная жопа какая-то.

Потрачу пару дней в ЖЖ вапо, и посмотрю как все сделать через AGI + PHP + MySQL
у него в отличие от всех книг и сайтов (астериск.ру, астериск.орг пбх и все такое) реальные, рабочие примеры, которые дают более глубокое понимание
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

Re: Макрос, AGI или..

Сообщение ded »

То есть пример

Код: Выделить всё

exten => +79ХХХХХХХХХ,1,GotoIf($['запрос_из_базы_это_региональный_номер?' = "yes"]?local)
exten => +79ХХХХХХХХХ,n,Dial(SIP/Common_trunk/${EXTEN})
exten => +79ХХХХХХХХХ,n,Hangup
exten => +79ХХХХХХХХХ,n(local),Dial(chan_dongle/${EXTEN})
exten => +79ХХХХХХХХХ,n,Hangup
считаете нереальным?
Что такое реальный пример? Который скопипастил, и сразу работает? Это, конечно, даёт более глубокое понимание.
debian-asterisk
Сообщения: 62
Зарегистрирован: 22 май 2016, 11:12
Контактная информация:

Re: Макрос, AGI или..

Сообщение debian-asterisk »

да да, я понял.
завтра набросаю запрос к mysql и тут отпишусь как все получилось или нет.

В идеал хочется одной командой:

exten => _89XXXXXXXXX,1,script(blabla)
same => n,Hangup()

и в скрипте сделать все варианты развития событий.

Это же вообще прелесть, минимизация, приятное чтение.
Филиалов много, соответственно на каждой точке по 2-3 разных оператора. и под кадждого писать коды и вставлять их в extensions.conf
через 2 года , я уволюсь, придет новый сотрудник и снова будет вас тут в инфарт вводить..

а так вот гугл
Изображение
virus_net
Сообщения: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: Макрос, AGI или..

Сообщение virus_net »

ИМХО: Подобные вещи выносить надо в AGI и только в AGI.
debian-asterisk писал(а):В идеал хочется одной командой
Одной не получится, двумя получится:

Код: Выделить всё

exten => _89XXXXXXXXX,1,AGI(blabla.php)
same => n,Dial(${SCRIPT_RETURN})
same => n,Hangup()
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

Re: Макрос, AGI или..

Сообщение ded »

exten => _89XXXXXXXXX,1,ExecIf($['запрос_из_базы_это_региональный_номер']?Dial(chan_dongle/${EXTEN}))

В случае использования AGI конечно строка диалплана будет проще
exten => _89XXXXXXXXX,1,AGI(mobile-dial)

но строчек кода в mobile-dia то меньше не будет, не так ли?
debian-asterisk
Сообщения: 62
Зарегистрирован: 22 май 2016, 11:12
Контактная информация:

Re: Макрос, AGI или..

Сообщение debian-asterisk »

Cпасибо за отклики.
Вопрос решил скриптом Perl

обработал внутренний номер, если вн.номер принадлежит филиалу (или офису), то переменной $транк назначаю соответсвующий транк (типа транк по умолчанию).

Далее тупо перебрал принадлежит ли набранный номер диапазону мобильных операторов нашего региона.
Если да, то
$AGI->exec('Dial','SIP/'.$trunk.'/'.$nomer.',40');

Если нет, то
звонок идет через более дешевого провайдера.

Обошлось без mysql.

Единственный минус, раз в год или полгода надо следить за кодами местных операторов, или новых операторов, который придут в регион.
В принципе, если не следить, то звонки все равно будут идти, но на копеечку дороже.

п.с.
my $cid = $AGI->get_variable('CALLERID(num)'); внутренний номер
my $nomer = $AGI->get_variable('EXTEN'); набранный номер, в данном случае с "9"

п.с. девятку убрал тупой командой: $nomer = $nomer-90000000000;

п.с. говорят, что девятка уже устарело, в воипе можно сразу набирать, но пока решил оставить эту 9, т.к. людям привычнее.

Вопрос: Как вы думаете по поводу "9"? Она вообще нужна? Какие плюсы и минусы на ваш взгляд?
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH