суббота, 24 марта 2012 г.

Call-центр\IP PBX Oktell: Вывод пользователя из группового номера


IP PBX Oktell


Задача:
В случае, когда пользователь участвует в групповом номере и приходит много звонков, нет возможности совершить исходящий звонок, так как сразу после завершения текущего разговора приходит следующий звонок. Для решения такой задачи нужно вывести пользователя из группового номера.
Решение:
1) Попросить администратора убрать пользователя из группового номер
Не самый лучший вариант.

2) Воспользоваться возможностью web интерфейсом Oktell'a.
Для этого перейдем в раздел Администрирование\ Внешние модули\Разделы меню
Нажимаем "Добавить" и в качестве "Адреса страницы веб-сервиса" укажем следующий адрес:
http://192.168.0.20:4055/execsvcscriptplain?name=phone_buttons&startparam1=[user_guid]&async=0&timeout=10
,где
phone_buttons - название служебного сценария.
[user_guid] - id оператора, открывшего создаваемый пункт меню


Создаем служебный сценарий "phone_buttons".
На старт данного сценария передается [user_guid]. Сохраняем его в переменную текстовую  Userid.


Далее в компоненте "Присвоение" служебной переменной "(сл) Возвращаемое значение 1(строка)" присваиваем выражение:


'<html>
<body topmargin="300">
<H1 align="center" height="500">
<a target="Ready" href="http://192.168.0.20:4055/execsvcscriptplain?name=Управление 
групповым номером 8888&startparam1='+[Userid]+'&startparam2=0&async=0&timeout=10">
Выйти из группового номера 8888</a>
</H1>
<p align="center" height="500">
======================================================================================
</p>
<H1 align="center" height="500">
<a target="Busy" href="http://192.168.0.20:4055/execsvcscriptplain?name=Управление 
групповым номером 8888&startparam1='+[Userid]+'&startparam2=1&async=0&timeout=10">
Войти в групповой номер 8888</a>
</H1>
 <iframe hidden name="Ready" frameborder="0" height="0"  >   
 </iframe>
<iframe hidden name="Busy" frameborder="0" height="0">  
 </iframe>
</body>
</html>'

,где по ссылкам будет запускаться служебный сценарий "Управление групповым номером 8888" и в качестве параметра будет передаваться "1" или "0", в зависимости выбранной ссылки.

В после перезапуска клиентского приложения, в разделе "Внешние модули", появиться созданный пункт меню "Управление номером"


Теперь рассмотрим сценарий "Управление групповым номером 8888", в котором происходит добавление или удаления пользователя из группового номера


Если переданный параметр был  "1", то прежде чем добавлять пользователя в групповой номер, проверяем нет ли уже его там. Если нет, то добавляем пользователя в групповой номер с помощью SQL запроса:

declare @id uniqueidentifier
select @id=ExtraId from A_NumberPlanAction npa
inner join A_NumberPlan np on np.Id=npa.NumID and np.Prefix='8888'
insert into A_RuleRecords(ID, InnerAddressType, StartTime, FinishTime, RuleId, ReactId, Account)
values(NewId(), @objtype, 0, 90, @id, @idobject, '')

Если переданный параметр был  "0", то удаляем пользователя из группового номера  с помощью SQL запроса:


declare @id uniqueidentifier
select @id=ExtraId from A_NumberPlanAction npa
inner join A_NumberPlan np on np.Id=npa.NumID and np.Prefix='8888'
delete from A_RuleRecords
where InnerAddressType=@objtype and ReactId=@idobject and RuleId=@id


 И что бы сбросить с него очередь, меняем его статус на "Отсутствует" с помощью запроса:

'http://192.168.0.20:4055/wp_setuserstate?user='+[Userid]+'&userstateid=3'
а потом на "На месте" с помощью запроса:

'http://192.168.0.20:4055/wp_setuserstate?user='+[Userid]+'&userstateid=1'

В конце сценария перезапускаем сервер состояния с помощью компонента "Статус объекта", для того чтобы все изменения вступили в силу.

Вот и все! Вопросы в комментарии.