Понявший "Астериск - будущее телефонии", такими вопросами не задается
Да бросьте вы. В книге про AGI/AMI вообще толком ничего не сказано. И про то и про другое в целом написано "вы можете управлять астериском через этот интерфейс" и приведены несколько простейших скриптов.
А моя задача несколько шире и, кажется, астериск для нее не особо предназначен.
Если все-таки есть тут добрые люди, то надеюсь, что намекнут мне, в какую сторону дальше рыть. Сейчас сижу экспериментирую с различными вариантами.
Что я сделал:
- Подключил астериск через ODBC к БД.
- Научил астериск читать информацию о SIP-устройствах из таблицы sipfriends. Теперь имею возможность динамически регистрировать новые SIP-устройства.
- Каждому устройству выделяю рандомное имя.
- Завел другую таблицу 'phones' вида: <имя устройства из sipfriends> - внутренний номер - имя пользователя
- Все звонки перенаправляю в AGI-скрипт, в котором (для звонков на внутренние номера):
1. Смотрим реальный callerid
2. Ищем его в базе, если находим, то
3. Смотрим в таблице phones, есть ли у пользователя другой телефон с таким добавочным номером. Если есть, берем имя этого устройства из sipfriends и делаем вызов на него.
Вроде бы худо-бедно работает.
Но остается открытым вопрос с биллингом. Например, как можно разорвать разговор при достижении абонентом нулевого баланса на счету? Ведь AGI-скрипт блокируемый и пока абонент говорит, скрипт ожидает завершения команды dial.
Я так понимаю, что на пару с AGI нужно еще использовать AMI, который умеет перехватывать события. Я прав?