среда, 24 августа 2011 г.

Call-центр\IP PBX Oktell: Получить путь к записи разговора, по завершению коммутации

IP PBX Oktell


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

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

В "Главном сценарии"  создадим глобальную переменную "Флаг".
Присвоим ей значение "1" . Только в том случае, когда нам это необходимо.


Сохраняем.

Создаем служебный сценарий "1_Сбор контента".
Он будет назначен как "Служебный сценарий обработки контента". Подробнее про назначение сценария тут
 
В нем в качестве стартового параметра передается XML-файл, содержащий информацию о коммутации.


Создаем   глобальную переменную "Флаг" ( в нее передается значение из Главного сценария).
Проверяем ее значение.



Анализируем XML-файл с помощью компонента "Парсер".
 Поисковый запрос: commutation>property_simple[key=idconnection]
Сначала получаем количество коммутаций, в рамках цепочки коммутации. Берем последний ID коммутации. т.к. первый  это ID коммутации с IVR сценарием.





Теперь получаем ID последней коммутации.


  
Выполняем SQL запрос в базу, для получения пути к файлу.
Т.к. имя файла не храниться в БД, то придется его "склеить"

SQL запрос :
declare @aln nvarchar(10)
declare @bln nvarchar(10)
declare @idrecdir int
declare @ts nvarchar(50)
declare @path nvarchar(1000)

select top 1 @aln=case when alinenum<blinenum then alinenum else blinenum end,
@bln=case when blinenum>alinenum then blinenum else alinenum end,
@idrecdir=idrecdir, 
@ts=replace(convert(nvarchar(10), TimeStart, 121),'-','_')+'__'+replace(convert(nvarchar(20), TimeStart, 114),':','_') from A_Stat_Connections_1x1
where Id=@id and isrecorded=1

set @path='C:\Program Files\oktell\Server\RecordedFiles\'
if (@idrecdir>0)
select @path=path from A_Stat_RecordDirectories where id=@idrecdir

set @filename=@path+replace(substring(@ts, 1, 10),'_','')+'\'+substring(@ts, 13, 2)+substring(@ts, 16, 2)+'\mix_'+@aln+'_'+@bln+'__'+@ts+'.wav'  

Назначаем параметры. 


Сохраняем


SQL запрос вернет нам путь к файлу. Теперь его можно указать в качестве пути для отправку на почту, для воспроизведения и т.д. В примере для наглядности я просто вывел его в качестве уведомления.



Переходим в раздел "Общие настройки".
1) Тут назначаем "Служебный сценарий обработки контента"
2)  Выставляем настройки записи разговоров.





Сохраняем

Осуществляем входящий звонок. Разговариваем. Кладем трубочку и видим уведомление:



D:\RecFile\201108241712\mix_13001_16003__2011_08_24__17_12_30_327.wav




четверг, 18 августа 2011 г.

Call-центр\IP PBX Oktell: Отобразить карточку диалога после ручного набора

IP PBX Oktell

Задача:
Оператор набирает номер в ручном режиме. Необходимо после разговора заполнить данные формы.

И так приступаем к реализации...
Нужно определять после какого конкретного звонка отображать карточку. Я решил ввести префикс, например *
Соответственно в сценарии маршрутизации внутренних звонков будем этот префикс анализировать.


Если есть префикс *, то удаляем его. И переключаем на внешнюю линию. Если переключение произошло, то определяем ID оператора (человека который набирает номер) и делаем запись в таблицу (структура таблицы чуть ниже). Далее дезактивируем и активируем задачу ( для чего и что за задачу-чуть ниже). 


Создаем таблицу абонентов в разделе Call-центр.





Сохраняем.

Создаем еще одну таблицу, которая будет заполняться выборкой из таблицы User_tab_clients.
Т.е. выбираем все записи у кого поле status не равен 1

"Прикрепленная таблица БД" нужна для того, что бы в сценарии диалога использовать переменные типа "Поле таблицы"


Назначаем ID как "Идентификатор",  phone как "Телефон"


Сохраняем.

Создаем сценарий диалога. В нем получаем имя оператора. Делаем запись в нашу таблицу. И присваиваем служебной переменной "Результат звонка" значение 2. Подробнее тут




Форма диалога выглядит так:



Используемые переменные: 

Сохраняем сценарий.

Создаем задачу.

Тип: С запросом у оператора


Выбираем всех операторов, независимо от того, будут ли они участвовать задаче.
Выбираем вариант обхода операторов "Пользовательская процедура" ( о не чуть ниже)


В качестве таблицы абонентов выбираем вторую нашу таблицу. И ставим галочку "Синхронизировать со списком при каждой активации". Как раз для этого делали дезактивацию и активацию  в сценарии маршрутизации внутренних звонков.


Выбираем наш сценарий, как сценарий запроса на дозвон.


Сохраняем и активируем задачу.


Теперь запускаем SQL Server Management Studio Express. Выполняем запрос:

SELECT [Id]
            ,[Name]

FROM [oktell_settings].[dbo].[A_TaskManager_Tasks]


В получившейся таблице находим нашу задачу и копируем ее ID.

Далее ищем хранимую процедуру A_TaskManager_OperatorsAll_Get_Custom в баз oktell и модифицируем ее.



Текст запроса:

--Задача "Карточка после ручного звонка"

if (@idtask = '42479030-427C-4F7F-9262-87512F5567AD')
    begin
      select Operator_id as Id from User_tab_clients
      where Id = @idabonent
      return   
end
--Дефолтные величины
Select Id
FROM A_Users u
Inner join A_UserParams up on u.Id = up.Iduser
Where IsOperator = 1
end



Где вместо "42479030-427C-4F7F-9262-87512F5567AD" пишем ID вашей задачи.

Нажимаем "Выполнить"

Теперь набираем номер, в нашем случае *89274365636 ( номер вымышлен)


Поговорили. Теперь нажимаем "Завершить"  и у нас всплывает наша карточка.


Выбираем целевой или не целевой и нажимаем "Далее"
Вот и всё. Жду вопросов.

вторник, 16 августа 2011 г.

Call-центр\IP PBX Oktell: Нагрузка на сервер


IP PBX Oktell

И так имеем:

- Oktell 2.6.110812
- Microsoft SQL Server  Express Edition 9.00.4035.00 (установлен на той же машине)
- ОС Windows XP SP3
- 200 sip транков, настроенных на другой сервер Oktell. На котором настроена "долбежка" с проигрыванием файла.


Главный сценарий сделан так:



В мониторинге 200 одновременных коммутаций.


При этом нагрузка на сервер следующая:



Посмотрим статистику обработанных звонков за 16 дней:


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

пятница, 12 августа 2011 г.

Call-центр\IP PBX Oktell: Использование функций URL телефонов Yealink и web интерфейс Oktell

IP PBX Oktell

Используем телефон Yealink T22 и Oktell: 2.6.110811(4240.26472)



Переходим на вкладку Телефон>URL


Тут видим ряд событий, по наступлению которых можно сделать web-запрос на нужный нам адрес. Описание web-интерфейса Oktell тут

Используем запрос (запуск служебного сценария):
http://192.168.0.100:4055/execsvcscript?name=111&startparam1=DND_on&startparam2=Виктор&async=0&timeout=10

192.168.0.100 - IP адрес сервера Oktell
111 - название служебного сценария


В результате, как пример, выводим уведомления.




четверг, 4 августа 2011 г.

Call-центр\IP PBX Oktell: Yeastar E1 Ye110 совместимость с материнскими платами

IP PBX Oktell

Многим известно, что Oktell поддерживает работу с платой Yeastar E1 Ye110.


За время ее эксплуатации были выявлены несколько материнских плат, в работе с которыми появлялись разного рода "полтергейсты" таких как: потеря синхронизации, треск во время разговора, заикания.

Вот список этих материнок:

- Asus P5K SE/EPU
- Asus P7Q57
- Asus P7H55
- Asus P7P55
- HP DL108
- HP DL140
- Super micro X8DA3
Работает на материнской плате: Asus P5VDC-MX.
Похоже дело в чипсетах. На Intel'ских работать не хочет.



Есть дополнения? Пишите! Дополним!


вторник, 2 августа 2011 г.

Call-центр\IP PBX Oktell: Как настроить BLF на Linksys SPA942

IP PBX Oktell

Работает на Oktell'e от версии 2.6.110802 и Linksys SPA942 с версией прошивки 6.1.5(а)

Настраиваем Linksys SPA942 как на скрине.
Т.е. прописываем в поле Extended Function: fnc=fnc=blf+cp;sub=14@192.168.0.12;usr=14;nme=14
Где: 1) 192.168.0.12 ip адресс сервера Oktell.
        2) 14 номер пользователя внутри Oktell.


При этом, что бы телефон отсылал SUBSCRIBE, нужно зарегистрировать любую другую линию на сервере Oktell. 


Надеюсь кому-нибудь пригодится =)