Страница 1 из 3

Asterisk как облачная ATC

Добавлено: 30 июн 2014, 16:55
vladqa
Здравствуйте!
В нашей компании встала задача предоставить нашим клиентам услугу "Облачной АТС" (могу ошибаться в терминологии, поправьте, пожалуйста).
Суть в следующем: клиенты - мелкие организации, которым нужно предоставить возможность подключить свои телефоны к нашей АТС, указать для них короткие внутренние номера (101, 102, 103..), дать из возможность звонить в пределах своей сети + звонки наружу. То есть, внутренние добавочные номера должны быть изолированы внутри группы телефонных аппаратов клиента.

Ну и биллинг прикрутить ко всему этому тоже будет нужно

Насколько я понимаю, что описывать логику по "разделению" различных клиентов между собой нужно самостоятельно с использованием AMI/AGI, а на стандартные возможности диалплана asterisk надо вообще забить.
В качестве ПО был выбран astrerisk + VOIP-фреймворк adhearsion.

Само-собой, вопросов в духе "а как это все сделать?" я задавать не буду.
Спрошу только лишь у знатоков и тех, кто сталкивался с подобной задачей: правильные ли выбраны инструменты и возможно ли сделать подобное и использованием adhearsion? Или есть какие-либо другие более удобные библиотеки?

Re: Asterisk как облачная ATC

Добавлено: 30 июн 2014, 22:48
gosha
http://www.voip-info.org/wiki/view/Asterisk+AGI

для рубей есть еще пара либ.

Можете сэкономить на программистах и купить готовое на перле, по ссылке ниже:)

Re: Asterisk как облачная ATC

Добавлено: 01 июл 2014, 07:28
virus_net
Мы в итоге писали с нуля сами, на PHP.
vladqa писал(а):описывать логику по "разделению" различных клиентов между собой нужно самостоятельно с использованием AMI/AGI, а на стандартные возможности диалплана asterisk надо вообще забить.
Этой мысли вообще не понял.
  • AMI - Asterisk manager API
    AGI - Asterisk Gateway Interface
И то и то, по сути, командный интерфейс. "Разделить" что-то можно как раз в диалплане.

Re: Asterisk как облачная ATC

Добавлено: 01 июл 2014, 14:04
vladqa
Этой мысли вообще не понял.
Я имел в виду, что от статического диалплана на .conf-файлах придется отказаться и реализовывать всю маршрутизацию и функции динамически в своем приложении

Re: Asterisk как облачная ATC

Добавлено: 01 июл 2014, 20:28
virus_net
вот теперь мысль понятна.
vladqa писал(а): от статического диалплана на .conf-файлах придется отказаться
ну не знаю почему озвучивается как "придется", т.к. это выбор каждого и смотря как "построить". если при изменениях перезаписывать не все и вся, а только то что меняют, то вполне жизнеспособная схема.
а если динамика, то тогда уж => Asterisk RealTime Extensions, а не ami/agi

Re: Asterisk как облачная ATC

Добавлено: 02 июл 2014, 10:43
Samael28
А в чем преимущества realtime перед agi?

Re: Asterisk как облачная ATC

Добавлено: 02 июл 2014, 11:13
Aven
А в чем преимущества окна перед дверью? Это совершенно разные вещи и сравнить их нельзя.

Realtime служит для хранения конфигов в БД.
AGI - для интеграции с внешними программами (в основном скриптами).
AMI - для управления Asterisk по сети.

AGI и AMI не пригодны для хранения информации о пользователях.

Re: Asterisk как облачная ATC

Добавлено: 02 июл 2014, 15:04
Samael28
Оно понятно. Просто вопрос именно в динамичном диалплане. Динамично можно и базу менять внешними запросами. Т.е. аналогия, как с FreePBX. Только конфиги - в базе.

Re: Asterisk как облачная ATC

Добавлено: 03 июл 2014, 07:57
virus_net
Раз вопрос в динамичном dialplan, то для этого в * и есть RealTime.

Re: Asterisk как облачная ATC

Добавлено: 03 июл 2014, 18:26
vladqa
Проанализировав все, что смог найти по астериску, увидел два способа решения задачи:

1. Использовать Asterisk Realtime для динамического создания диалплана. Каждому клиенту выделяется свой контекст, для которого генерируются строки диалплана и пишутся в БД.
Минусы: Сложно генерировать более-менее сложные диалпланы, сложно вносить изменения в сгенерированные диалпланы (например, пользователь изменил тип подключения одного телефона с sip на iax2)

2. Использовать AGI/AMI и обойтись одним контекстом на всех вида:
exten => _X.,1,AGI(/opt/pagi/some-app)

Плюсы: можно динамически в скрипте читать настройки/внутренние номера пользователя из БД и на основании этого выполнять команды через AGI и направлять вызов на другой телефон/ставить в очередь итп.
Минусы: если с AGI все понятно, то для чего именно нужен AMI, я до сих пор не могу понять. В чем ключевая разница между этими интерфейсами и для каких задач надо использовать один, а для каких другой? В AMI можно ловить все события на всех каналах.. но получается, что в AMI нужно много чего реализовывать "с нуля"?

Заранее извиняюсь за этот глупый вопрос, но для меня пока телефония - это некий закрытый клуб )