Страница 2 из 3
Re: Asterisk как облачная ATC
Добавлено: 03 июл 2014, 18:35
ded
Это не два интерфейса
Aven писал(а):AGI - для интеграции с внешними программами (в основном скриптами).
AMI - для управления Asterisk по сети.
AMI - это интерфейс.
Хорошо бы Вам книжки почитать из базы знаний на
http://asterisk.ru. На форуме обучаться - бессистемно.
За такой сложное дело берётесь, так подтяните теорию и матчасть то!
Re: Asterisk как облачная ATC
Добавлено: 03 июл 2014, 18:46
vladqa
Как не два интерфейса?
AGI - это ведь тоже интерфейс (даже исходя из названия)
Я, конечно, прочитал "Астериск - будущее телефонии".
Я просто хочу уловить разницу в предоставляемых возможностях между AMI/AGI. Другими словами хорошо бы понять типовые сценарии использования одного и другого, что бы понять, какой из этих способов взаимодействия мне выбрать (или комбинировать оба?)
Re: Asterisk как облачная ATC
Добавлено: 03 июл 2014, 18:48
vladqa
Например, из AGI можно вызывать Dial
А в AMI используют метод Originate (при этом в cdr не пишется ничего)
Я понимаю, что Dial соединяет каналы, а Originate создает канал и соединяет. Но все равно на практике в чем состоит глубокий смысл, не пойму )
Re: Asterisk как облачная ATC
Добавлено: 03 июл 2014, 19:23
Vlad1983
Понявший "Астериск - будущее телефонии", такими вопросами не задается.
Re: Asterisk как облачная ATC
Добавлено: 04 июл 2014, 07:50
virus_net
В своем сообщении я привел ссылки на описание и того и другого.
Прочитав первый абзац и там и там, на мой взгляд, становится понятно в чем разница и зачем один, а зачем второй.
+ абсолютно справедливое и уже цитируемое сообщение
Aven`а
нам не понятно что именно вам не понятно и какие тут могут оставаться вопросы после прочтения всего приведенного
Re: Asterisk как облачная ATC
Добавлено: 04 июл 2014, 16:18
vladqa
Понявший "Астериск - будущее телефонии", такими вопросами не задается
Да бросьте вы. В книге про AGI/AMI вообще толком ничего не сказано. И про то и про другое в целом написано "вы можете управлять астериском через этот интерфейс" и приведены несколько простейших скриптов.
А моя задача несколько шире и, кажется, астериск для нее не особо предназначен.
Если все-таки есть тут добрые люди, то надеюсь, что намекнут мне, в какую сторону дальше рыть. Сейчас сижу экспериментирую с различными вариантами.
Что я сделал:
- Подключил астериск через ODBC к БД.
- Научил астериск читать информацию о SIP-устройствах из таблицы sipfriends. Теперь имею возможность динамически регистрировать новые SIP-устройства.
- Каждому устройству выделяю рандомное имя.
- Завел другую таблицу 'phones' вида: <имя устройства из sipfriends> - внутренний номер - имя пользователя
- Все звонки перенаправляю в AGI-скрипт, в котором (для звонков на внутренние номера):
1. Смотрим реальный callerid
2. Ищем его в базе, если находим, то
3. Смотрим в таблице phones, есть ли у пользователя другой телефон с таким добавочным номером. Если есть, берем имя этого устройства из sipfriends и делаем вызов на него.
Вроде бы худо-бедно работает.
Но остается открытым вопрос с биллингом. Например, как можно разорвать разговор при достижении абонентом нулевого баланса на счету? Ведь AGI-скрипт блокируемый и пока абонент говорит, скрипт ожидает завершения команды dial.
Я так понимаю, что на пару с AGI нужно еще использовать AMI, который умеет перехватывать события. Я прав?
Re: Asterisk как облачная ATC
Добавлено: 04 июл 2014, 16:44
ded
RADIUS
Re: Asterisk как облачная ATC
Добавлено: 04 июл 2014, 17:09
vladqa
RADIUS
Спасибо за намек! Можно ли буквально чуть-чуть подробнее?
Re: Asterisk как облачная ATC
Добавлено: 04 июл 2014, 17:11
gosha
cdr в радиус не интересно. То что есть не может слать апдейты и убивать звонки.
Re: Asterisk как облачная ATC
Добавлено: 04 июл 2014, 17:35
virus_net
vladqa писал(а):как можно разорвать разговор при достижении абонентом нулевого баланса на счету?
Вариант "А":
у команды DIAL есть опция
L:
Код: Выделить всё
L(x[:y[:z]]):
x - Maximum call time, in milliseconds
y - Warning time, in milliseconds
z - Repeat time, in milliseconds
Limit the call to <x> milliseconds. Play a warning when <y> mill
iseconds are left. Repeat the warning every <z> milliseconds until time
expires.
Перед тем как совершить вызов выясняем сколько максимально по времени абонент сможет поговорить на свои деньги с другим абонентом и вызываем DIAL с соответствующей опцией и соответствующим временем.
Вариант "Б":
Постоянно мониторить активные вызовы и смотреть кол-во секунд с начала разговора, вычислять стоимость, сравнивать с балансом - баланс 0 или менее - команда на принудительный hangup вызова.