На хабре прямо месячник виртуальных АТС.

Напомним еще про одну — XVB VirtualPBX, коробочное multi-tenant решение, с астериском внутри.

Владелец получает у себя систему интегрированную в свою сеть ( коробка самодостаточная — скачал/купил и пользуйся ) предоставляющюю сервис виртуальной АТС. Никаких подписок, прогона трафика абонентов через полстраны, виндовс серверов — для кого то это все еще большой плюс.

Документация / Скриншоты на сайте / Видео в принципе показывают стандартные возможности.

Рассказ ниже будет о возможной кастомизации которую можно сделать под себя.

Немного напомню про XVB VirtualPBX


Несколько лет назад уже была статья, но с тех пор все сильно поменялось.

для сравнения старый (по ссылке выше) и новый интерфейс
Отчеты:



Онлайн-факс:



Отчеты администратора:



Настройка арендатора:



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



Не поменялась идея:
  • веб администратора для управления арендаторами / настройками групп.
  • тюнинг системы стандартными конфигами asterisk / kamailio, дополнительными модулями.
  • арендатор все настраивает через веб.


Набор функциф стандартный для большинства АТС:

  • IVR
  • запись разговоров
  • умная маршрутизация звонков
  • возможность интеграции с внешними CRM системам
  • уведомления о пропущенный / voice-mail
  • статистика звонков
  • расписание
  • очереди с различными стратегиями дозвона
  • черные / белые списки
  • короткая нумерация
  • телефонная книга
  • API


и не совсем стандартный:

  • полная история звонка ( где был пользователь в каждый момент звонка )
  • трекинг звонков через google-аналитикс / cdr / реалтайм панель / эвенты asterisk / http хуки
  • перевод звонка в одно касание без разрыва разговора ( с сотового на стационарный и обратно )
  • возможность сохранения / быстрое восстановление конфигурации
  • click2call из коробки
  • автоинформатор из коробки
  • предиктивный обзвон из коробки
  • TTS из коробки


Более полный список возможностей тут.

Системе платная, но тем кто еще не совсем оператор можно забрать бесплатно версию залоченную на 10 одновременных звонков ( без лимита количества арендаторов ), 10 одновременных хватит ~ на 100 телефонов.

После скачивания и запуска в vmware плеере можно в принципе начинать пользоваться — арендаторы создаются / телефоны звонят / разговоры пишутся / статистика собирается / отчеты шлются. Но маневры для 'творчества' таки остаются, собственно про них и пойдет рассказ далее.



Упрощение создания АТС, применяем шаблоны конфигурации


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

Алгоритм такой:

создаем нового арендатора настраиваем его ( расписание / простой IVR / пример маршрутов и тд ) и далее в меню профиль пользователя выбираем — сохранить.



копируем полученный XML файл в /opt/VirtualPBX/contrib/ourtmpl.xml

и правим переменную в файле конфигурации /opt/VirtualPBX/etc/xvb.cfg:

ADMIN_TENANTS_TEMPLATES = -----:-----;/opt/VirtualPBX/contrib/utils/rpm/sys_update-data/ru-office.xml:RU-office;/opt/VirtualPBX/contrib/ourtmpl.xml:Наш шаблон


в итоге, при добавлении арендатора можно использовать созданный шаблон 'Наш шаблон':



Создав некоторое количество преднастроенных шаблонов АТС можно сильно упростить себе и клиентам жизнь. После применения шаблона время от создания АТС нового арендатора до начала использования может сократится до времени настройки логинов/паролей в sip телефонах.



Правим шаблоны веб интерфейса арендатора


Установленные шаблоны интерфейса лежат в директории /opt/VirtualPBX/templates,
это файлы шаблонов, практически честный html. Те, что установлены пожаты и
почищены от пробелов, поэтому править их не совсем удобно. Идем сюда и забираем последние актуальные файлы. Правим нужные файлы и раскладываем в нужную директорию:


mkdir -p /opt/VirtualPBX/templates/custom1
cd /opt/VirtualPBX/templates/custom1
ln -s . xvb.RU-Female
ln -s . xvb.RU-Male
cp /new/templates/*.tt /opt/VirtualPBX/templates/custom1/

xvb-ctl reload-tt


  • симлинки нужно делать так как шаблоны привязаны к настройкам языка арендатора.
  • xvb-ctl — утилита для некоторого менеджмента. reload-tt — почистить кеш шаблонов.


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



После этого у пользователей входящих в эту группу интерфейс будет браться из другой директории.

В итоге из стандартного может получится например такое:





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



Хуки


Хуки это обычный перловый модуль который вызывается при старте звонка или после его окончания. По дефолту есть несколько примеров в:

/opt/VirtualPBX/lib/XVBHooks


С помощью хуков перед началом звонка и после его окончания можно сделать все что угодно:
нестандартное логирование, различные проверки, установка внутренний переменных, sms нотификации и пр.

В качестве примера идет модуль для заливки данных в MongoDB:

%hooks = (
				start	=> \&call_start,
				stop	=> \&call_stop
);

#
# call start hook
#
sub call_start {
	my $obj = shift;

	my $ast_callid = $obj->{'_AGI'}->get_variable('CHANNEL');
	my $xvb_callid = $obj->{'_CDR'}->{'CALL_ID'};

	$obj->{'_MONGO_DB'} = MongoDB::Connection->new(host => '127.0.0.1', port => 27017);

	if ( $obj->{'_MONGO_DB'} ) {
		my $cdrs = $obj->{'_MONGO_DB'}->xvb->cdrs;
		my $rc = $cdrs->insert( {	ast_id 		=> $ast_callid,
					timestamp	=> time, 
					xvb_id		=> $xvb_callid, 
					user_id		=> $obj->{'_USER_CREDS'}->{'ACCESS_CODE'},
					callerid	=> $obj->{'_CDR'}->{'CALLER_ID'},
					calledid	=> $obj->{'_CDR'}->{'CALLED_ID'},
					call_type	=> $obj->{'_CDR'}->{'CALL_TYPE'},
					node		=> $obj->{'_CONF'}->{'common_server_id'} } );
	}
}

#
# call stop hook
#
sub call_stop {
	my $obj = shift;

	my $ast_callid = $obj->{'_AGI'}->get_variable('CHANNEL');

	if ( $obj->{'_MONGO_DB'} ) {
		my $cdrs = $obj->{'_MONGO_DB'}->xvb->cdrs;

		my $rc = $cdrs->remove( { ast_id => $ast_callid } );
	}
}

1;


После написания хука его нужно добавить в настройках группы в /ai интерфейсе:



и разрешить в файле конфигурации /opt/VirtualPBX/etc/xvb.cfg:

HOOK = MYHOOK,MYHOOK2




Пред-обработка исходящих звонков с телефонов


Если нужно привести все набираемые номера к какому то определенному виду или добавить кастомную обработку некоторых номеров то можно сделать это в файле /etc/asterisk/xvb/xvb-phone-filters.conf. Пример ниже приводит номера к формату e164:

exten => _00XXXXXXX.,1,Goto(xvb-phones,${EXTEN:2},1)
exten => _8XXXXXXXXXX,1,Goto(xvb-phones,7${EXTEN:1},1)
exten => _+X.,1,Goto(xvb-phones,${EXTEN:1},1)
exten => _810XXXXXXXX.,1,Set(CALLED_NUMBER=${EXTEN:3})
exten => _810XXXXXXXX.,n,Goto(xvb-phones,${EXTEN:3},digits)


Здесь же можно запретить набор определенных номеров ( глобальный черный список для исходящих, для всех арендаторов )

В файле /etc/asterisk/xvb/xvb-phone-service.conf можно прописать свои сервисные коды, например проверка стоимости
звонка на номер XXX:

;
exten => _**44.,1,Set(RATE=${CURL(http://localhost/get_rate?phone=${EXTEN:4})})
exten => _**44.,n,Playback(current-rate)
exten => _**44.,n,agi(d2ms.agi|${RATE}|rur)


тут по URL get_rate отдается стоимость звонка и ниже мы озвучиваем ее пользователю.

Через штатные же конфиги asterisk можно делать интеграцию с FMC и прочие полезные плюшки над входящими звонками.



Вынос регистрации SIP пользователей на kamailio


По дефолту система идет на asterisk но ни, что не мешает использовать kamailio в качестве sip-registrar.

Ставим четвертый kamailio, забираем конфиг kamailio для XVB pbx.

в конфиге правим адреса:

xvb.gw_ip = «172.16.165.129» desc «XVB GW Address» — IP астериска

listen=MY_IP_ADDR — IP камалио



Правим конфиги asterisk. Для случая если все на одно машине так и остается — меняем порт с 5060 на 5080 и делаем пир для kamilio с типом friend, отправляем звонки с него в контекст xvb-phones, в /etc/asterisk/sip.conf:

[sipregistrar]
host=172.16.165.129
port=5060
insecure=port,invite
type=friend
context=xvb-phones


в /opt/VirtualPBX/etc/xvb.cfg добавляем:

[SIP]
REGISTRAR_TYPE = SER
REGISTRAR_IP = 172.16.165.129
REGISTRAR_NAME = sipregistrar


в /etc/asterisk/extconfig.conf правим VPBX_SIPPEERS на VPBX_SIPPEERS_PEERS:

sippeers => odbc,xvb,VPBX_SIPPEERS_PEERS


перестартовываем все, что нужно ( либо сразу всю систему чтоб наверняка :) ) и пользуемся регистрацией локальных сип телефонов через kamailio на 5060 порту и asterisk для внешних транков на 5080. Желающие и умеющие могут пойти дальше и поменять статический адрес asterisk на использование dispatcher и получить кластеризацию.

В качестве заключения


Приведенные примеры показывают в какую сторону можно двигаться чтобы кастомизировать и расширить возможности XVB VirtualPBX не прибегая к помощи разработчиков если то, что в добавок к тому что есть `коробке` хочется, что то добавить.

Комментарии (0)