Страница 2 из 2

Re: "Интересное" ограничение исходящих вызовов

Добавлено: 14 фев 2018, 17:23
fecyt
А можно было просто сделать свой контекст для этих сотрудников, и было бы три строки а не 92 шаблона...

Re: "Интересное" ограничение исходящих вызовов

Добавлено: 15 фев 2018, 08:46
chardisdze
ну по сути я и сделал для данных ext отдельный контекст с шаблонами.
Если не трудно, поясните пожалуйста, каким образом данный функционал запихать в три строки?

Re: "Интересное" ограничение исходящих вызовов

Добавлено: 15 фев 2018, 10:02
fecyt
Если контекст используется для сотрудников, кому есть выход только на определенную нумерацию, мне кажется нет смысла указывать для каждого сотрудника в этом контексте свое правило. Достаточно трех общих

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

exten => _XXX,1,Goto(from-internal,${EXTEN},1)
exten => _XXXXXX,1,Goto(from-internal,${EXTEN},1)
exten => _X.,1,Hangup()
Ну и для некорректного ввода, если в этом есть необходимость.

Re: "Интересное" ограничение исходящих вызовов

Добавлено: 15 фев 2018, 10:04
fecyt
Или под шаблоном в 92 правила Вы подразумеваете 92 варианта ввода номера?

Re: "Интересное" ограничение исходящих вызовов

Добавлено: 15 фев 2018, 15:24
chardisdze
почти. DEF-лист операторов сотовой связи содержит данные по всем телефонным пулам. Например номер 9999999699 это номер Приморского края, а 9999999700 номер уже Нижегородской области, но одного оператора. И для того чтобы разрешить звонить на номера только Нижегородской области и приходиться работать с шаблонами, коих вагон. Если интересно, могу выкинуть что получилось.
А из опыта старожил, есть способы интереснее и правильнее (как они считают). Но судить не имею права, т.к. еще только двигаюсь к познанию новых методов и способов, а у них опыта больше ;)

Re: "Интересное" ограничение исходящих вызовов

Добавлено: 15 фев 2018, 16:08
fecyt
Ну, тут Вам уже ответили, завести все это в БД и чекать оттуда.

Re: "Интересное" ограничение исходящих вызовов

Добавлено: 15 фев 2018, 16:42
chardisdze
Изучаю :D

Re: "Интересное" ограничение исходящих вызовов

Добавлено: 15 фев 2018, 22:40
shader
Вполне простая задача.... Решается (как выше верно упомянули) правильней всего AGI и БД.
У меня так сделано: есть в БД таблица направлений. В ней я указываю шаблон дозвона, уровень доступа (cor - class of restriction. Тэрмин честно стырил у Авайи :)))), статус направления. (всего около 802 записи).
К этой таблице соотношением один ко многим привязана другая таблица, где прописаны доступные исходящие операторы и их цены (на каждое конкретное направление). Есть таблица cor - в ней я создал градации уровня доступа (всего получилось около 20 шт: только экстренные службы, только город, только область, Россия, СНГ, ближнее зарубежье ну и др). таблица пересечений cor: с каких на какие можно звонить.

В начале каждого звонка:
-проверятся право абонента звонить на конкретный номер
- выбирается наиболее недорогой провайдер для этого направления
а диалплан выглядит почти так :

exten => _X.,1,AGI(do-some-cool-magic.pl)
same => n,Dial(SIP/${provider}/${to_exten},60,${dial_opts})

Начать, в общем то не так сложно (если есть базовые навыки программмирования.
Для парсинга и манипуляции с данными телефонии хорошо подходит perl. И не надо устанавливать. Уже встроен в любой linux.

Начинаем так: Берем класс: http://search.cpan.org/~jamesgol/asteri ... isk/AGI.pm
прикручиваем к системе: cpan install Asterisk::AGI

Хотим ходить в БД? Не вопрос: http://search.cpan.org/~timb/DBI-1.640/DBI.pm
cpan install DBI (+DBD::Pg для postgres, для других хз. Читать доку.)

Хотим отправлять в процессе звонка сообщения? к примеру, в Jabber, пфф, легко:
http://search.cpan.org/~dapatrick/Net-X ... et/XMPP.pm

Хотим стильно, модно, молодежно? Не вопрос! Telegram:
http://search.cpan.org/~robertof/WWW-Te ... /BotAPI.pm

Хотим не говнокодить и вынести нужные вещи в аккуратный конфиг? ОК:
http://search.cpan.org/~sherzodr/Config ... /Simple.pm

Ну и конечно, думаю бессысленно напоминать про всю мощь регулярных выражений в Perl ;)


test.pl:

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

...
use strict;
...
use Asterisk::AGI;
...
my $AGI             = new Asterisk::AGI; # создаем экземпляр класса
my $exten           = $AGI->get_variable('EXTEN') # Читаем из диалплана переменную EXTEN;
my $callerid        = $AGI->get_variable('CALLERID(num)'); # Читаем из диалплана номер звонящего
...
# Читаем миллион других переменных
# Творим с этими переменными что-то невероятное
my $dbh = DBI->connect("dbi:Pg:dbname=$dbname;host=$host","$username","$password", {PrintError => 0});
# Подключились к БД. Запросы и прочее см. Доку (ссылка выше)
# Идем в БД 

# И пишем обратно в диалплан:
$AGI->set_variable('new_caiilng_num',$callerid);
...

Re: "Интересное" ограничение исходящих вызовов

Добавлено: 15 фев 2018, 23:36
ded
выбирается наиболее недорогой провайдер для этого направления
Механизм уже многократно отработанный в софтсвичах - Least Cost Routing (LCR), реализован во FreeSWITCH например как модуль - mod_lcr
https://freeswitch.org/confluence/displ ... CH/mod_lcr