Служебный сценарий обработки контента — различия между версиями

Материал из Oktell
Перейти к: навигация, поиск
(Новая страница: «В ходе обработки внешнего звонка сервером производится сбор так называемого контента. Эт...»)
 
Строка 1: Строка 1:
−
В ходе обработки внешнего звонка сервером производится сбор так называемого контента.  
+
: В ходе обработки внешнего звонка сервером производится сбор так называемого контента.  
−
Это идентификационная информация по линии, абоненту, времени, а также перечень всех коммутаций с указанием имени сценария, идентификатора и имени оператора, времени начала, времени конца, продолжительности и пр.  
+
:Это идентификационная информация по линии, абоненту, времени, а также перечень  
−
Запуск данного сценария происходит автоматически после окончания звонка.
+
:всех коммутаций с указанием имени сценария, :идентификатора и имени оператора, времени начала,  
−
Какой именно служебный сценарий будет отвечать за обработку контента выбираем и назначаем в разделе Администрирование,общие настройки,сценарии АТС, "служебный сценарий обработки контента".
+
:времени конца, продолжительности и пр.  
 +
:Запуск данного сценария происходит автоматически после окончания звонка.
 +
: Какой именно служебный сценарий будет отвечать за обработку контента выбираем и назначаем  
 +
:в разделе Администрирование,общие :настройки,сценарии АТС, "служебный сценарий обработки контента".
  
−
Прежде чем обрабатывать контент,нужно ознакомиться в каком виде он нам становиться доступным.
+
: Прежде чем обрабатывать контент,нужно ознакомиться в каком виде он нам становиться доступным.
−
Для этого создадим простой служебный сценарий - "обработка контента".
+
:Для этого создадим простой служебный сценарий - "обработка контента".
  
 
[[Файл:con01.png]]
 
[[Файл:con01.png]]
  
−
В компоненте старт, выбираем параметры запуска, а точнее создаем переменную в которую система передаст эти самые параметры запуска,в нашем случае это и будет контент.
+
: В компоненте старт, выбираем параметры запуска, а точнее создаем переменную в которую система  
 +
:передаст эти самые параметры запуска,в нашем случае это и будет контент.
  
 
[[Файл:con02.png]]
 
[[Файл:con02.png]]
  
−
Далее используем компонент "Сохранение контента" для того что бы создать физический файл в который сохраниться наш контент.
+
: Далее используем компонент "Сохранение контента" для того что бы создать физический  
−
Для этого,в качестве контента указываем нашу переменную "Контент"
+
:файл в который сохраниться наш контент.
−
Затем для удобства последующего просмотра выбираем тип - txt.
+
:Для этого,в качестве контента указываем нашу переменную "Контент"
−
Файл - выбираем категорию где наш файл создастся и указываем название файла.
+
:Затем для удобства последующего просмотра выбираем тип - txt.
−
После этого сохраняем сценарий,назначаем го в качестве "Служебного сценария сбора контента",после чего производим звонок.
+
:Файл - выбираем категорию где наш файл создастся и указываем название файла.
 +
:После этого сохраняем сценарий,назначаем го в качестве "Служебного сценария сбора контента",
 +
:после чего производим звонок.
  
  
−
Переходим в категорию,которую указали для сохранения контента и раскрываем с помощью блокнота.
+
: Переходим в категорию,которую указали для сохранения контента и раскрываем с помощью блокнота.
  
 
[[Файл:con1.png]]
 
[[Файл:con1.png]]
  
−
Как видно из данного файла - весь контент "обрамлен" в xml. Соответственно для последующего разбора данных мы будем использовать компонент парсер текста, с использованием поискового языка OQuery.
+
: Как видно из данного файла - весь контент "обрамлен" в xml. Соответственно для последующего  
 +
:разбора данных мы будем использовать компонент парсер текста, с использованием поискового языка OQuery.
 +
:Давайте рассмотрим структуру более подробно.
 +
:Для примера возьмем строчку из контента:
  
−
Давайте рассмотрим структуру более подробно.
+
:''<property_simple key="idchain" value="21819d69-6d1e-40b5-898b-a6c387a555bc" />''
−
Для примера возьмем строчку из контента:
+
  
−
''<property_simple key="idchain" value="21819d69-6d1e-40b5-898b-a6c387a555bc" />''
+
: В данной строке property_simple - является тегом,
 +
:key="idchain" - уточняющий атрибут,
 +
:value="21819d69-6d1e-40b5-898b-a6c387a555bc" - конкретизирующий атрибут.
  
−
В данной строке property_simple - является тегом,
+
: Таким образом для того что бы получить значение ID цепочки коммутации строим следующий поисковый запрос:
−
key="idchain" - уточняющий атрибут,
+
−
value="21819d69-6d1e-40b5-898b-a6c387a555bc" - конкретизирующий атрибут.
+
  
−
Таким образом для того что бы получить значение ID цепочки коммутации строим следующий поисковый запрос:
+
:''property_simple[key="idchain"]''
  
−
''property_simple[key="idchain"]''
+
:Где, следуя синтаксису OQuery, property_simple - тег,[key="idchain"] - атрибут с известным нам значением и названием.
  
−
Где следуя синтаксису OQuery property_simple - тег,[key="idchain"] - атрибут с известным нам значением и названием.
+
: Далее рассмотрим служебный сценарий сбора контента, в котором используя последовательный парсинг контента,
 +
:мы получим необходимые значения и сохраним все в БД.
  
−
Далее рассмотрим служебный сценарий сбора контента, в котором используя последовательный парсинг контента,мы получим необходимые значения и сохраним все в БД.
+
: Во первых создадим таблицу в БД, в которую будем в итоге складировать все полученные данные.
 +
:В ходе примера получим следующие данные:
 +
*ID цепочки коммутации,
 +
*Номер внешней линии,
 +
*CallerID,
 +
*CalledID,
 +
*Время начала,
 +
*Время конца,
 +
*Имя пользователя, обслужившего вызов последним,
 +
*Номер линии,обслужившей вызов последней,
 +
*ID пользователя,обслужившего вызов последним.
  
−
Во первых создадим таблицу в БД, в которую будем в итоге складировать все полученные данные.
+
:Из такого набора данным все поля делаем NVarchar,кроме Время начала,Время конца,которые создаем как Date/time.
−
В ходе примера получим следующие данные:
+
−
ID цепочки коммутации,
+
−
Номер внешней линии,
+
−
CallerID,
+
−
CalledID,
+
−
Время начала,
+
−
Время конца,
+
−
Имя пользователя, обслужившего вызов последним,
+
−
Номер линии,обслужившей вызов последней,
+
−
ID пользователя,обслужившего вызов последним.
+
−
 
+
−
Из такого набора данным все поля делаем NVarchar,кроме Время начала,Время конца,которые создаем как Date/time.
+
  
 
[[Файл:con7.png]]
 
[[Файл:con7.png]]
  
−
Далее переходим непосредственно к нашему сценарию.
+
: Далее переходим непосредственно к нашему сценарию.
  
 
[[Файл:con2.png]]  
 
[[Файл:con2.png]]  
  
−
Рассмотрим настройки компонента "Парсер"
+
:Рассмотрим настройки компонента "Парсер"
−
Документ - переменная "Контент".
+
*Документ - переменная "Контент".
−
Алгоритм - Язык OQuery
+
*Алгоритм - Язык OQuery
−
Поисковый запрос - property_simple[key="idchain"]
+
*Поисковый запрос - property_simple[key="idchain"]
−
Функция - что нужно нам найти в документе - значение атрибута.
+
*Функция - что нужно нам найти в документе - значение атрибута.
−
Номер элемента - оставляем пустым.
+
*Номер элемента - оставляем пустым.
−
Атрибут - value
+
*Атрибут - value
−
Результат в переменную - указываем переменную в которую будем сохранять результат парсера.
+
*Результат в переменную - указываем переменную в которую будем сохранять результат парсера.
  
 
[[Файл:con3.png]]
 
[[Файл:con3.png]]
  
−
Таким же образом настраиваем и все последующие парсеры,не забывая изменять значение атрибута key в поисковом запросе на соответствующий нашему запросу, т.е. следующий парсер будет уже искать номер линии соответственно: property_simple[key="linenumber"]
+
: Таким же образом настраиваем и все последующие парсеры,не забывая изменять значение атрибута  
−
а так же указываем другую переменную.
+
:key в поисковом запросе на соответствующий нашему запросу, т.е. следующий парсер будет уже искать  
 +
:номер линии соответственно: property_simple[key="linenumber"]
 +
:а так же указываем другую переменную.
  
−
Стоит отметить, что парсер позволяет сохранить информацию только в текстовом виде, соответственно при получении временных данных, их прежде всего сохраняем в строковую переменную,а затем при необходимости преобразуем в переменнуюю типа Дата/время.
+
: Стоит отметить, что парсер позволяет сохранить информацию только в текстовом виде, соответственно  
 +
:при получении временных данных, их прежде всего сохраняем в строковую переменную,а затем при  
 +
:необходимости преобразуем в переменную типа Дата/время.
  
−
Так же для того что бы найти первый тег можно использовать указательный суффикс ":first" и для поиска последнего значения ":last".
+
: Так же для того что бы найти первый тег можно использовать указательный суффикс ":first" и для поиска  
−
Таким образом для поиска времени поступления звонка воспользуемся суффиксом :first, поисковый запрос будет выглядеть так:
+
:последнего значения ":last".
−
(property_simple[key="timestart"]):first.
+
: Таким образом для поиска времени поступления звонка воспользуемся суффиксом :first, поисковый запрос  
 +
:будет выглядеть так:
 +
:'''(property_simple[key="timestart"]):first'''.
  
 
[[Файл:con4.png]]
 
[[Файл:con4.png]]
  
−
А для поиска времени окончания коммутации используем суффикс ":last" - (property_simple[key="timestop"]):last.
+
: А для поиска времени окончания коммутации используем суффикс ":last" - '''(property_simple[key="timestop"]):last'''.
  
 
[[Файл:con5.png]]
 
[[Файл:con5.png]]
  
−
Так же суффиксом ":last" воспользуемся,для того что бы определить имя последнего оператора,принявшего звонок,его id и номер его линии.
+
: Так же суффиксом ":last" воспользуемся,для того что бы определить имя последнего оператора,принявшего звонок,
 +
:его id и номер его линии.
  
−
Затем произведем преобразование строчной даты и времени в тип Дата\время и произведем запись в БД,в нашу таблицу.
+
: Затем произведем преобразование строчной даты и времени в тип Дата\время и произведем запись в БД,в нашу таблицу.
  
 
[[Файл:con6.png]]
 
[[Файл:con6.png]]
  
−
После чего произведем сохранение сценария и произведем тестовый звонок.
+
: После чего сохраним сценарий на сервере и совершим тестовый звонок.
  
−
Открыв нашу таблицу мы увидим данные,которые мы собрали с помощью служебного сценария сбора контента.
+
: Открыв нашу таблицу мы увидим данные,которые мы собрали с помощью служебного сценария сбора контента.
  
 
[[Файл:con8.png]]
 
[[Файл:con8.png]]

Версия 06:29, 25 марта 2013

В ходе обработки внешнего звонка сервером производится сбор так называемого контента.
Это идентификационная информация по линии, абоненту, времени, а также перечень
всех коммутаций с указанием имени сценария, :идентификатора и имени оператора, времени начала,
времени конца, продолжительности и пр.
Запуск данного сценария происходит автоматически после окончания звонка.
Какой именно служебный сценарий будет отвечать за обработку контента выбираем и назначаем
в разделе Администрирование,общие :настройки,сценарии АТС, "служебный сценарий обработки контента".
Прежде чем обрабатывать контент,нужно ознакомиться в каком виде он нам становиться доступным.
Для этого создадим простой служебный сценарий - "обработка контента".

Con01.png

В компоненте старт, выбираем параметры запуска, а точнее создаем переменную в которую система
передаст эти самые параметры запуска,в нашем случае это и будет контент.

Con02.png

Далее используем компонент "Сохранение контента" для того что бы создать физический
файл в который сохраниться наш контент.
Для этого,в качестве контента указываем нашу переменную "Контент"
Затем для удобства последующего просмотра выбираем тип - txt.
Файл - выбираем категорию где наш файл создастся и указываем название файла.
После этого сохраняем сценарий,назначаем го в качестве "Служебного сценария сбора контента",
после чего производим звонок.


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

Con1.png

Как видно из данного файла - весь контент "обрамлен" в xml. Соответственно для последующего
разбора данных мы будем использовать компонент парсер текста, с использованием поискового языка OQuery.
Давайте рассмотрим структуру более подробно.
Для примера возьмем строчку из контента:
<property_simple key="idchain" value="21819d69-6d1e-40b5-898b-a6c387a555bc" />
В данной строке property_simple - является тегом,
key="idchain" - уточняющий атрибут,
value="21819d69-6d1e-40b5-898b-a6c387a555bc" - конкретизирующий атрибут.
Таким образом для того что бы получить значение ID цепочки коммутации строим следующий поисковый запрос:
property_simple[key="idchain"]
Где, следуя синтаксису OQuery, property_simple - тег,[key="idchain"] - атрибут с известным нам значением и названием.
Далее рассмотрим служебный сценарий сбора контента, в котором используя последовательный парсинг контента,
мы получим необходимые значения и сохраним все в БД.
Во первых создадим таблицу в БД, в которую будем в итоге складировать все полученные данные.
В ходе примера получим следующие данные:
  • ID цепочки коммутации,
  • Номер внешней линии,
  • CallerID,
  • CalledID,
  • Время начала,
  • Время конца,
  • Имя пользователя, обслужившего вызов последним,
  • Номер линии,обслужившей вызов последней,
  • ID пользователя,обслужившего вызов последним.
Из такого набора данным все поля делаем NVarchar,кроме Время начала,Время конца,которые создаем как Date/time.

Con7.png

Далее переходим непосредственно к нашему сценарию.

Con2.png

Рассмотрим настройки компонента "Парсер"
  • Документ - переменная "Контент".
  • Алгоритм - Язык OQuery
  • Поисковый запрос - property_simple[key="idchain"]
  • Функция - что нужно нам найти в документе - значение атрибута.
  • Номер элемента - оставляем пустым.
  • Атрибут - value
  • Результат в переменную - указываем переменную в которую будем сохранять результат парсера.

Con3.png

Таким же образом настраиваем и все последующие парсеры,не забывая изменять значение атрибута
key в поисковом запросе на соответствующий нашему запросу, т.е. следующий парсер будет уже искать
номер линии соответственно: property_simple[key="linenumber"]
а так же указываем другую переменную.
Стоит отметить, что парсер позволяет сохранить информацию только в текстовом виде, соответственно
при получении временных данных, их прежде всего сохраняем в строковую переменную,а затем при
необходимости преобразуем в переменную типа Дата/время.
Так же для того что бы найти первый тег можно использовать указательный суффикс ":first" и для поиска
последнего значения ":last".
Таким образом для поиска времени поступления звонка воспользуемся суффиксом :first, поисковый запрос
будет выглядеть так:
(property_simple[key="timestart"]):first.

Con4.png

А для поиска времени окончания коммутации используем суффикс ":last" - (property_simple[key="timestop"]):last.

Con5.png

Так же суффиксом ":last" воспользуемся,для того что бы определить имя последнего оператора,принявшего звонок,
его id и номер его линии.
Затем произведем преобразование строчной даты и времени в тип Дата\время и произведем запись в БД,в нашу таблицу.

Con6.png

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

Con8.png