Работа с логикой АТС — различия между версиями

Материал из Oktell
Перейти к: навигация, поиск
Строка 367: Строка 367:
  
 
==Методы для работы с логикой АТС: очередь ожидания==
 
==Методы для работы с логикой АТС: очередь ожидания==
 +
 +
*string Queue_GetCurrentItems ( string xml ). Возвращает мета-описание всех абонентов, находящихся в очереди текущего авторизованного пользователя. Элементы располагаются по убыванию комбинированного приоритета обработки (учитываются выставленный приоритет, направление вызова, а также текущее время ожидания в очереди). При авторизации пользователя с логином «testqueue» в возвращаемом XML-документе даже при фактическом отсутствии очереди постоянно находятся несколько тестовых элементов.
 +
 +
Формат возвращаемого xml (на примере):
 +
 +
<?xml version="1.0" encoding="utf-16"?>
 +
<oktellcommapper version="80710">
 +
<data name="queueitems" count="2">
 +
  <property_set name="queueitem">
 +
    <property_simple key="dateformat" value="dd.MM.yyyy HH:mm:ss" />
 +
    <property_simple key="managedlineid" value="5ae8377b-d7f9-4a39-bb87-e25475aed097" />
 +
    <property_simple key="objecttype" value="0" name="qotQueueLogic" />
 +
    <property_cdata key="username"><![CDATA[Денис]]></property_cdata>
 +
    <property_simple key="lenqueue" value="273000" />
 +
    <property_simple key="srcelementid" value="1302eadd-7600-411e-9ffb-abf445ad8be6" />
 +
    <property_simple key="queuesource" value="0" name="qsLineLogic" />
 +
    <property_cdata key="department"><![CDATA[Руководство]]></property_cdata>
 +
    <property_simple key="calledid" value="14" />
 +
    <property_simple key="callerid" value="21" />
 +
    <property_simple key="idobject" value="12345678-1234-1234-1234-12345678123a" />
 +
    <property_simple key="userid" value="53c0f2d6-9216-4cc3-804f-678c89f12750" />
 +
    <property_simple key="managedlinenum" value="1525" />
 +
    <property_simple key="startqueuetime" value="21.08.2008 10:44:00" />
 +
    <property_simple key="queuepriority" value="10" />
 +
    <property_simple key="idchain" value="abcdef12-abcd-abcd-1234-1234567890ab" />
 +
  </property_set>
 +
  <property_set name="queueitem">
 +
    <property_simple key="dateformat" value="dd.MM.yyyy HH:mm:ss" />
 +
    <property_simple key="tasklistid" value="-1" />
 +
    <property_simple key="idobject" value="12345678-1234-1234-1234-12345678123b" />
 +
    <property_simple key="taskisoutput" value="0" />
 +
    <property_simple key="managedlinenum" value="1001" />
 +
    <property_simple key="userid" value="00000000-0000-0000-0000-000000000000" />
 +
    <property_cdata key="taskname"><![CDATA[Прием входящих]]></property_cdata>
 +
    <property_simple key="calledid" value="5109940" />
 +
    <property_simple key="srcelementid" value="924849c3-851e-4f7c-9513-b63b35417396" />
 +
    <property_simple key="username" value="" />
 +
    <property_simple key="startqueuetime" value="21.08.2008 10:44:00" />
 +
    <property_simple key="objecttype" value="0" name="qotQueueLogic" />
 +
    <property_simple key="lenqueue" value="243000" />
 +
    <property_simple key="callerid" value="89050213951" />
 +
    <property_simple key="queuepriority" value="10" />
 +
    <property_simple key="managedlineid" value="79c950f7-8ae5-48de-8264-520aa331960b" />
 +
    <property_simple key="department" value="" />
 +
    <property_simple key="taskid" value="f58b19a4-527a-4d7a-a3cd-bc1d85e1f45d" />
 +
    <property_simple key="queuesource" value="4" name="qsIncomingTask" />
 +
    <property_simple key="idchain" value="12345678-ab12-ab12-ef34-abcabc123123" />
 +
  </property_set>
 +
</data>
 +
</oktellcommapper>
 +
 +
 +
Типы направлений, по которым производится звонок на внутренней линии (поле objecttype):
 +
 +
public enum EQueueObjectType
 +
{
 +
qotQueueLogic = 0,        //Стандартный вызов из менеджера очередей внутренней АТС.
 +
qotTaskLogic = 1,        //Вызов оператора из обработчика звонка задачи при наличии активного абонента, находящего на линии.
 +
qotAutoCallLogic = 2,        //Обратный вызов пользователя из модуля автодозвона.
 +
qotBackFlash = 3        //Обратный вызов пользователя из АТС для соединения с абонентом на удержании во FLASH-буфере.
 +
}
 +
 +
 +
Типы объектов, производящих дозвон до внутренних номеров (поле queuesource), то есть источники, использующие менеджер очередей АТС (направление qotQueueLogic):
 +
 +
public enum EQueueSource
 +
{
 +
qsLineLogic = 0,        //Другие линии, стандартная работа АТС.
 +
qsIVR = 1,        //Сценарий IVR.
 +
qsInnerTaskLogic = 2,        //Внутренние задачи (не используется)
 +
qsAutoCallManager = 3,        //Автодозвон.
 +
qsIncomingTask = 4        //Входящие задачи.
 +
}
 +
 +
 +
Типы возможных направлений вызова (поле direction в свойствах звонка и задач):
 +
 +
public enum ECallDirection
 +
{
 +
cdAbsent = 0,        //Не заданное направление.
 +
cdIncoming = 1,        //Входящий вызов.
 +
cdOutcoming = 2        //Исходящий вызов.
 +
}
 +
 +
 +
Типы возможных коммутаций (поле type в свойствах коммутаций):
 +
 +
public enum ECommType
 +
{
 +
None = 0,        //Не заданный тип.
 +
Abonent = 1,        //Коммутация с абонентом
 +
IVR = 2        //Коммутация с IVR
 +
}
 +
 +
 +
==Методы для работы с логикой АТС: контент оппозитного канала==
 +
 +
Каждая внешняя линия производит заполнение контента осуществляемого через нее звонка. В контент размещаются как постоянные на всем протяжении активности параметры абонента и канала, так и изменяющиеся параметры, описывающие ход звонка - сценарии, коммутации, задачи с указанием времени начала и завершения.
 +
 +
Контент линии очищается при завершении активной фазы работы канала и создается заново в начале нового вызова.
 +
 +
Среди параметров присутствует пользовательский текстовый параметр CUSTOMINFO. Через него может быть осуществлен обмен информацией между пользователями каналов, с которыми производится коммутация или просто некоторое взаимодействие внешнего абонента на протяжении периода активности.
 +
 +
 +
При работе с контентом из клиентского интерфейса, работа осуществляется не с линией пользователя, а с оппозитным каналом. Оппозитным каналом называется противоположная линия к линии текущего рабочего места пользователя по типу текущего ее состояния. Оппозитными являются внешние линии с принадлежностью к одному из перечисленных направлений:
 +
 +
#линия, находящаяся в коммутации с линией пользователя;
 +
#линия, находящаяся во флеш-буфере линии пользователя;
 +
#линия, осуществляющая входящий вызов на линию пользователя;
 +
#линия, находящаяся во флеш-буфере линии, осуществляющей вызов линии пользователя.
 +
 +
При определении направления оппозитности допускается указание целочисленного индекса направления из приведенного выше списка, а также значение «0», указывающее на автоматическое определение оппозитного канала в порядке приоритетов от меньшего к большему.
 +
 +
*bool Content_SetOppositeCustom ( int destination, string custom ). Устанавливает значение пользовательского поля CUSTOMINFO контента оппозитного канала. Параметр destination указывает направление оппозитного канала, параметр custom определяет новое значение поля CUSTOMINFO. В случае успешного задания возвращается TRUE. В случае любого неуспешного исхода (отсутствия канала по указанному направлению, необнаружения внешней линии, несоответствии прав доступа, исключительных ситуациях) возвращается FALSE.
 +
 +
 +
*string Content_GetOppositeCustom ( int destination ). Возвращает значение пользовательского поля CUSTOMINFO контента оппозитного канала. Параметр destination указывает направление оппозитного канала. Возвращает строку со значением поля в простом виде.
 +
 +
 +
*string Content_GetOppositeFull ( int destination ). Возвращает полный контент оппозитного канала в XML-формате. Параметр destination указывает направление оппозитного канала. Возвращает строку с XML-содержимым контента в простом виде.
 +
 +
 +
Пример содержимого контента:
 +
 +
 +
<?xml version="1.0" encoding="utf-16"?>
 +
<content Version="80903">
 +
<call commcount="2" taskcount="1">
 +
  <property_simple key="datetimeformat" value="dd.MM.yyyy HH:mm:ss" />
 +
  <property_simple key="direction" value="1" name="cdIncoming" />
 +
  <property_simple key="lineid" value="4741e765-f89d-47b2-89f7-0dcd619a8385" />
 +
  <property_simple key="linenumber" value="12001" />
 +
  <property_simple key="callerid" value="Номер не определен" />
 +
  <property_simple key="calledid" value="5109805" />
 +
  <property_simple key="idchain" value="70e29721-165a-4793-97c2-15a4d014d3f1" />
 +
  <property_cdata key="custominfo"><![CDATA[]]></property_cdata>
 +
  <property_simple key="timestart" value="04.09.2008 17:14:30" />
 +
  <property_simple key="timestop" value="04.09.2008 17:14:44" />
 +
  <property_simple key="totalsec" value="13" />
 +
  <activity>
 +
    <commutation index="0">
 +
      <property_simple key="idconnection" value="43ac1678-75bb-4e41-8408-e5c01b60e303" />
 +
      <property_simple key="type" value="2" name="IVR" />
 +
      <property_simple key="timestart" value="04.09.2008 17:14:31" />
 +
      <property_simple key="timestop" value="04.09.2008 17:14:33" />
 +
      <property_simple key="totalsec" value="1" />
 +
      <property_simple key="ivrscriptname" value="Телефонные системы. Вход." />
 +
    </commutation>
 +
    <task index="0">
 +
      <property_simple key="effortid" value="23949836-b72c-4e4b-8be5-eef806a9cbb6" />
 +
      <property_simple key="direction" value="1" name="cdIncoming" />
 +
      <property_simple key="taskid" value="ad76a31a-e661-42a4-a8d5-8365623916cb" />
 +
      <property_simple key="taskname" value="Входящий в телефонные системы" />
 +
      <property_simple key="taskcode" value="" />
 +
      <property_simple key="projectid" value="ab37c6e6-e983-458a-8621-5e0921ade3d1" />
 +
      <property_simple key="tag" value="0" />
 +
      <property_simple key="timeonline" value="04.09.2008 17:14:32" />
 +
      <property_simple key="joinedtableid" value="-1" />
 +
      <property_simple key="timestart" value="04.09.2008 17:14:32" />
 +
      <commutation index="1">
 +
        <property_simple key="idconnection" value="fc8cd4ff-b8b0-48b6-aeb1-662090bfd7d6" />
 +
        <property_simple key="type" value="1" name="Abonent" />
 +
        <property_simple key="timestart" value="04.09.2008 17:14:33" />
 +
        <property_simple key="timestop" value="04.09.2008 17:14:41" />
 +
        <property_simple key="totalsec" value="8" />
 +
        <abonents count="1">
 +
          <abonent index="1">
 +
            <property_simple key="lineid" value="254aa1fc-4e18-4ad3-99ea-eb52417dd5a2" />
 +
            <property_simple key="linenumber" value="16016" />
 +
            <property_simple key="callerid" value="" />
 +
            <property_simple key="userid" value="da803f01-ea77-40fa-bc9d-e2efb36fd5a8" />
 +
            <property_simple key="username" value="Нигметзянов Шамиль" />
 +
          </abonent>
 +
        </abonents>
 +
      </commutation>
 +
    </task>
 +
  </activity>
 +
</call>
 +
</content>
 +
 +
 +
==Методы для работы с логикой АТС: контент цепочки коммутаций==
 +
 +
В системе разделяются понятия коммутации и звонка.
 +
 +
Коммутация - единичное соединение двух любых каналов в общий дуплексный голосовой обмен. У каждой коммутации есть уникальный идентификатор (Guid). В ходе работы системы АТС при переводе звонка, при помещении на удержание и последующем восстановлении в коммутацию, несмотря на то, что закоммутированные объекты и остаются теми же самыми, образованная повторная коммутация представляет собой иной объект с отличающимся набором свойств. В частности имеет другой идентификатор, другое время, другие файлы записи диалога. Коммутация в некотором смысле наиболее примитивный объект.
 +
 +
 +
Звонок - понятие общее, даже несколько виртуализированное. В разных ситуациях звонком могут называться несколько отличающиеся сущности. Так например, с одной стороны звонок - это момент поступления вызова на внешнюю линию от абонента или факт осуществления вызова от одного пользователя другому. С другой стороны звонком может называться весь процесс обслуживания одного абонента: от поступления вызова, до отбоя его линии, включая все переключения, переводы звонка.
 +
 +
Наконец, наиболее общее понятие звонка в системе Oktell представлено понятием цепочки коммутаций. Она характеризуется уникальным идентификатором (Guid). Несколько коммутаций могут быть объединены в одну цепочку по признаку некоторой зависимости. Необходимость ввода такого более общего понятия обусловленена тем, что вызов абонента может повлечь целую серию коммутаций, удержаний, переводов, которые могут продолжаться даже после того, как сам абонент-инициатор из обработки вышел.
 +
 +
В качестве примера цепочки коммутаций можно привести наиболее простой возможный случай: секретарь соединяет директора со специалистом. Для этого секретарь первым снимает трубку, переводя АТС в активный режим (формирование цепочки), звонит специалисту и коммутируется с ним, после этого переводит его на удержание и звонит директору, дожидается его ответа и кладет трубку, соединяя директора и специалиста. Секретарь как инициатор звонка не участвует в основном блоке разговора, однако звонок можно считать все еще обрабатывающимся.
 +
 +
Цепочка коммутаций завершается, когда все задействованные в ней каналы переходят в неактивный режим.
 +
 +
Таким образом, режим обработки вызова абонента, протекающий с серией переключений, в ходе которого постоянно происходит обслуживание канала, инициировавшего цепочку (вызов), также является частным случаем цепочки коммутаций.
 +
 +
Цепочка характерна тем, что на протяжении ее существования принципиально не существует одновременных коммутаций. Все время делится на периоды закоммутированности двух каналов (или IVR)
 +
 +
 +
В этой связи система предоставляет возможность оперировать контентом цепочки коммутаций. Контент представляет собой XML структуру, имеющую в своем составе информацию о всех коммутациях и вызовах. Контент цепочки постоянно пополняется по мере развития пути звонка.
 +
 +
Опрос структуры может производиться из клиентского модуля, связанного в карте сети с телефонным каналом. Контент цепочки непуст в момент коммутации и в момент осуществления вызова с канала пользователя, а также в момент поступления вызова на канал пользователя. Последним элементом в дереве структуры в этом случае будет объект, описывающий абонента, осуществляющего вызов. Это может быть использовано наряду с методами получения информации об очереди для предоставления во всплывающем окне информации об абоненте.
 +
 +
В шапке контента имеется поле CUSTOM, предоставляемое для изменения из клиентского интерфейса пользователем, осуществляющим работу с каналом, участвующим в цепочке.
 +
 +
 +
*bool Chain_SetContentCustom ( string custom ). Устанавливает значение пользовательского поля CUSTOM контента цепочки коммутаций. Параметр custom определяет новое строковое значение поля CUSTOM. В случае успешного задания возвращается TRUE. В случае любого неуспешного исхода (неактивности канала пользователя, отсутствия цепочки, несоответствии прав доступа, исключительных ситуациях) возвращается FALSE.
 +
 +
*string Chain_GetContentCustom ( ). Возвращает значение пользовательского поля CUSTOM контента цепочки коммутаций. Возвращает строку со значением поля в простом виде. В случае невозможности обратиться к контенту цепочки (неактивность канала пользователя, отсутствие цепочки, исключительные ситуации) возвращается NULL.
 +
 +
*string Chain_GetContent ( ). Возвращает в XML-формате полный контент цепочки коммутаций, в которой участвует канал пользователя. Возвращает строку с XML-содержимым контента в простом виде. Каждая коммутация добавляет раздел commutationinfo, каждый вызов (за исключением прямого вызова сценариев IVR) добавляет раздел queueinfo. По мере развития цепочки все новые и новые вызовы размещаются в дереве элемента trace. Для получения и отображения в клиентском интерфейсе информации о вызывающем абоненте необходимо из дерева достать последнюю ветвь queueinfo.
 +
 +
Параметр calldirection формируется для каждого канала, запрашивающего контент, в зависимости от направления текущего вызова в цепочке.
 +
 +
Пример 1 простейшего содержимого контента (опрос в момент поступления/осуществления вызова):
 +
 +
<?xml version="1.0" encoding="utf-16"?>
 +
<oktellcommapper version="80710">
 +
<data name="chaincontent">
 +
  <property_simple key="datetimeformat" value="dd.MM.yyyy HH:mm:ss" />
 +
  <property_simple key="chainid" value="09fbde19-08ac-4e42-9476-11db421c3b0f" />
 +
  <property_simple key="createtime" value="16.10.2008 17:57:01" />
 +
  <property_simple key="calldirection" value="1" name="cdIncoming" />
 +
  <property_cdata key="custom" />
 +
  <property_collection count="1">
 +
    <property_set id="trace">
 +
      <property_collection count="1">
 +
        <property_set name="queueinfo">
 +
          <property_simple key="pbxdirection" value="0" name="internal" />
 +
          <property_simple key="managedlineid" value="cf8330f4-a0bf-4779-9539-ab8ea6c49df7" />
 +
          <property_simple key="objecttype" value="0" name="qotQueueLogic" />
 +
          <property_simple key="username" value="z01" />
 +
          <property_simple key="srcelementid" value="cf8330f4-a0bf-4779-9539-ab8ea6c49df7" />
 +
          <property_simple key="queuesource" value="0" name="qsLineLogic" />
 +
          <property_simple key="department" value="" />
 +
          <property_simple key="calledid" value="" />
 +
          <property_simple key="callerid" value="12" />
 +
          <property_simple key="idobject" value="f42c8dd4-6e6b-4033-9349-5d51971fb251" />
 +
          <property_simple key="userid" value="67e62e9a-a400-4f26-a1ac-b535e17a44f7" />
 +
          <property_simple key="managedlinenum" value="15001" />
 +
          <property_simple key="startqueuetime" value="16.10.2008 17:57:02" />
 +
          <property_simple key="queuepriority" value="10" />
 +
        </property_set>
 +
      </property_collection>
 +
    </property_set>
 +
  </property_collection>
 +
</data>
 +
</oktellcommapper>
 +
 +
 +
Пример 2 простейшего содержимого контента (опрос в момент первой коммутации в цепочке):
 +
 +
<?xml version="1.0" encoding="utf-16"?>
 +
<oktellcommapper version="80710">
 +
<data name="chaincontent">
 +
  <property_simple key="datetimeformat" value="dd.MM.yyyy HH:mm:ss" />
 +
  <property_simple key="chainid" value="09fbde19-08ac-4e42-9476-11db421c3b0f" />
 +
  <property_simple key="createtime" value="16.10.2008 17:57:01" />
 +
  <property_cdata key="custom"><![CDATA[Содержимое контента]]></property_cdata>
 +
  <property_simple key="calldirection" value="1" name="cdIncoming" />
 +
  <property_collection count="1">
 +
    <property_set id="trace">
 +
      <property_collection count="2">
 +
        <property_set name="queueinfo">
 +
          <property_simple key="pbxdirection" value="0" name="internal" />
 +
          <property_simple key="managedlineid" value="cf8330f4-a0bf-4779-9539-ab8ea6c49df7" />
 +
          <property_simple key="objecttype" value="0" name="qotQueueLogic" />
 +
          <property_simple key="username" value="z01" />
 +
          <property_simple key="srcelementid" value="cf8330f4-a0bf-4779-9539-ab8ea6c49df7" />
 +
          <property_simple key="queuesource" value="0" name="qsLineLogic" />
 +
          <property_simple key="department" value="" />
 +
          <property_simple key="calledid" value="" />
 +
          <property_simple key="callerid" value="12" />
 +
          <property_simple key="idobject" value="f42c8dd4-6e6b-4033-9349-5d51971fb251" />
 +
          <property_simple key="userid" value="67e62e9a-a400-4f26-a1ac-b535e17a44f7" />
 +
          <property_simple key="managedlinenum" value="15001" />
 +
          <property_simple key="startqueuetime" value="16.10.2008 17:57:02" />
 +
          <property_simple key="queuepriority" value="10" />
 +
        </property_set>
 +
        <property_set name="commutationinfo" id="e1a5efef-3a37-4f46-8646-207175cfa4df">
 +
          <property_simple key="id" value="e1a5efef-3a37-4f46-8646-207175cfa4df" />
 +
          <property_simple key="timestart" value="16.10.2008 17:57:02" />
 +
          <property_simple key="timeanswer" value="16.10.2008 17:57:08" />
 +
          <property_simple key="connectiontype" value="3" />
 +
          <property_simple key="isrecorded" value="1" />
 +
          <property_simple key="alineid" value="cf8330f4-a0bf-4779-9539-ab8ea6c49df7" />
 +
          <property_simple key="alinenum" value="15001" />
 +
          <property_simple key="anumberdialed" value="14" />
 +
          <property_simple key="aoutnumber" value="" />
 +
          <property_simple key="auserid" value="67e62e9a-a400-4f26-a1ac-b535e17a44f7" />
 +
          <property_simple key="astr" value="z01" />
 +
          <property_simple key="blineid" value="254aa1fc-4e18-4ad3-99ea-eb52417dd5a2" />
 +
          <property_simple key="blinenum" value="16016" />
 +
          <property_simple key="bnumberdialed" value="" />
 +
          <property_simple key="boutnumber" value="14" />
 +
          <property_simple key="buserid" value="da803f01-ea77-40fa-bc9d-e2efb36fd5a8" />
 +
          <property_cdata key="bstr"><![CDATA[Петр]]></property_cdata>
 +
        </property_set>
 +
      </property_collection>
 +
    </property_set>
 +
  </property_collection>
 +
</data>
 +
</oktellcommapper>
 +
 +
 +
==Методы и события для работы с логикой АТС: конференц-связь==
 +
 +
Подробно о режиме конференц-связи и решаемых этой функцией задачах в разделе «Клиентское приложение. Телефон. Конференц-связь» руководства к ПК «Oktell».
 +
 +
Все методы требуют обработки случая NULL-возвращаемого значения.
 +
 +
Возможные состояния участника конференции

Версия 07:23, 26 марта 2014

Наверх

Методы для работы с логикой АТС: набор номера, автодозвон, переключение

  • string CallNumber ( string number ). Запускает сервис автодозвона (при положенной трубке) или набора номера на текущей сессии (при поднятой трубке), в случае если все состояния допускают. Сервис автодозвона предполагает, что сначала производится вызов абонента, и только после его ответа - обратный вызов пользователя и последующая коммутация.

Параметр в виде простой строки с номером. Вызов производится в следующем режиме: При наборе номер ищется сначала среди внутреннего номерного плана, в случае если обнаружен - набирается во внутренний номерной план, если нет - согласно прав доступа текущего пользователя к внешним линиям - вовне. Возвращает XML-строку с описанием ответа сервиса запускавшего набор номера или NULL, если до вызова логика прослойки зарезала команду. Общие примеры параметра и возвращающего значения чуть ниже в этом разделе.


  • string CallNumberEx ( string xml ). Запускает сервис автодозвона (при положенной трубке) или набора номера на текущей сессии (при поднятой трубке), в случае если все состояния допускают. Сервис автодозвона предполагает, что сначала производится вызов абонента, и только после его ответа - обратный вызов пользователя и последующая коммутация. Однако может быть установлен и иной порядок путем указания значения back ключу sequence параметра.

Параметр в виде расширенного XML запроса. В теле запроса помимо номера (key="number") может быть установлено направление (key="direction", варианты: value="0" или name="city", value="1" или name="pbx", value="2" или name="undefined"). В случае пропуска номера или задания неопределенного направления вызов производится в следующем режиме: При наборе номер ищется сначала среди внутреннего номерного плана, в случае если обнаружен - набирается во внутренний номерной план, если нет - согласно прав доступа текущего пользователя к внешним линиям - вовне. Возвращает XML-строку с описанием ответа сервиса осущствлявшего обработку команды или NULL, если до вызова логика прослойки зарезала команду. Общие примеры параметра и возвращающего значения чуть ниже в этом разделе.


  • string SwitchNumber ( string number ). Осуществляет переключение (Flash и набор номера) при активной коммутации или набор номера при отсутствии коммутации (например из интерфейса внутреннего номерного плана). В последнем случае набор номера осуществляется в обратной последовательности: сначала вызывается сам абонент, а после этого уже происходит набор номера абонента.

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


  • string SwitchNumberEx ( string xml ). Осуществляет переключение (Flash и набор номера) при активной коммутации или набор номера при отсутствии коммутации (например из интерфейса внутреннего номерного плана). В последнем случае набор номера осуществляется в обратной последовательности: сначала вызывается сам абонент, а после этого уже происходит набор номера абонента. Однако может быть установлен и иной порядок путем указания значения direct ключу sequence параметра.

Параметр в виде расширенного XML запроса. В теле запроса помимо номера (key="number") может быть установлено направление (key="direction", варианты: value="0" или name="city", value="1" или name="pbx", value="2" или name="undefined"). В случае пропуска номера или задания неопределенного направления вызов производится в следующем режиме: При наборе номер ищется сначала среди внутреннего номерного плана, в случае если обнаружен - набирается во внутренний номерной план, если нет - согласно прав доступа текущего пользователя к внешним линиям - вовне. Возвращает XML-строку с описанием ответа сервиса осущствлявшего обработку команды или NULL, если до вызова логика прослойки зарезала команду.


Пример xml ответа сервера:

<?xml version="1.0" encoding="utf-16"?>
<oktellcommapper version="80710">

  <property_set name="result">
    <property_simple key="code" value="0" name="cntStartedSuccessfully" />
  </property_set>

</oktellcommapper>


Пример xml запроса:

<?xml version="1.0" encoding="utf-16"?>
<oktellcommapper version="80710">

  <property_set name="callnumber">
    <property_simple key="number" value="425" />
    <property_simple key="direction" name="pbx" />
    <property_simple key="sequence" name="direct" /> 
  </property_set>

</oktellcommapper>


Типы возвращаемых кодов при старте вызовов через автодозвон:

public enum EACMAnswer
{
cntStartedSuccessfully  = 0, //Звонок успешно взят в реализацию 
cntUserNotReady = 1,        //У осуществляющего вызов пользователя не найдены линии, готовые линии, или состояние кривое 
cntBusy = 2,        //При звонке на внутренний номер - признак занятости. В очереди и сам повисеть может (в дальнейшем реализуем как раз  ожидание в очереди...) 
cntExtLineNotFound = 3,        //Не найдены готовые внешние линии (если будем на это замес делать.. возможно просто будет стоять и ждать.. ) 
cntError = 4,        //Прочие ошибки, исключения. 
cntControlNotReady = 5,        //Режим не доделан. 
cntNumberNotFound = 6        //Внутренний номер не найден (по факту, если сервак сам будет определять направление звонка, это вообще не будет задействовано) 
}


Типы направлений вызовов, передаваемых в параметре direction:

public enum EOutcomingDirection
{
city = 0,        //Вызов на внешнее направление (в город или в АТС за внешними линиями) 
pbx = 1,        //Вызов на внутреннее направление (внутренний номерной план сервера) 
undefined  = 2,        //Автоматическое определение. При наличии внутреннего номера - набор во внутреннее направление, при отсутствии внутреннего номера - во внешнее 
}


  • bool DeclineCall ( ). Посылает на сервер АТС отказ от входящего вызова. Возвращается TRUE, если отказ принят системой. Сервер обрабатывает этот случай аналогично пропуску вызова по таймауту.


  • void AutoCallAbort ( ). Осуществляет остановку запущенного процесса автодозвона для авторизованного пользователя. В случае, если процесса автодозвона не обнаружено, или он перешел в фазу обработки в АТС (например, абонент снял трубку, и осуществляется обратный вызов пользователя), ничего не происходит.

ВНИМАНИЕ! В системе для одного пользователя может существовать только один процесс автодозвона. Любой последующий вызов без завершения предыдущего будет обрывать активную сессию и начинать ее с новыми параметрами заново.


Методы для работы с логикой АТС: факсимильные сообщения

  • bool FaxStartReceive ( string xml ). Запускает сеанс получения факсимильного сообщения на оппозитном канале коммутации. Команда может быть осуществлена только в момент коммутации при наличии у оппозитного канала возможности работы с факсимильными сообщениями. Для определения параметров и факта коммутации используется событие CommutationStarted канала OnCommunicate. В качестве параметра передается строка с XML форматированием, содержащим путь к файлу для сохранения после получения. В XML свойстве property_cdata ожидается значение ключа «filepath» и значении CDATA - пути к файлу. В случае, если файл существует, он будет перезаписан. Если факсимильное сообщение содержит несколько страниц, то каждая будет сохранена в указанном каталоге с добавлением в конец имени файла атрибута «_page» (то есть fn_page1.bmp, fn_page2.bmp и т.д.). Возвращает TRUE, если команда передана на сервер и FALSE, если текущие свойства и состояние канала не подходят.

Пример параметра:

<?xml version="1.0" encoding="utf-16"?>
<oktellcommapper version="80710">

  <property_set name="startfaxreceive">
    <property_cdata key="filepath"><![CDATA[C:\Принятые факсы\Договор_аренды.bmp]]></property_cdata>
  </property_set>

</oktellcommapper>


  • bool FaxStartTransmit ( string xml ). Запускает сеанс отправки факсимильного сообщения на оппозитном канале коммутации. Команда может быть осуществлена только в момент коммутации при наличии у оппозитного канала возможности работы с факсимильными сообщениями. Для определения параметров и факта коммутации используется событие CommutationStarted канала OnCommunicate. В качестве параметра передается строка с XML форматированием, содержащим пути к файлам, требующим отправки в контексте запускаемого сеанса. Возвращает TRUE, если команда передана на сервер и FALSE, если текущие свойства и состояние канала не подходят.

<?xml version="1.0" encoding="utf-16"?> <oktellcommapper version="80710">

 <property_set name="faxtransmit">
   <property_cdata key="filepath" value="0"><![CDATA[C:\Принятые факсы\Договор_аренды_стр1.bmp]]></property_cdata>
   <property_cdata key="filepath" value="1"><![CDATA[C:\Принятые факсы\Договор_аренды_стр2.bmp]]></property_cdata>
   <property_cdata key="filepath" value="2"><![CDATA[C:\Принятые факсы\Договор_аренды_стр3.bmp]]></property_cdata>
 </property_set>

</oktellcommapper>


  • bool FaxStop (). Прерывает текущий сеанс факсимильного взаимодействия на оппозитном канале и возвращает канал в закоммутированное состояние с оппозитным каналом. Возвращает TRUE, если команда передана на сервер и FALSE, если текущие свойства и состояние канала не подходят.


События АТС по линии пользователя

События канала OnCommunicate (здесь) инициированные АТС для интерфейсного блока работы с телефоном и управления каналом:

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

Пример:

<?xml version="1.0" encoding="utf-16"?>
<oktellcommapper version="80710">

  <event id="231" name="commutationstarted">
    <property_simple key="idchain" value="abcdef12-abcd-abcd-1234-1234567890ab" />
    <property_simple key="idconnection" value="12345678-1234-1234-1234-abcdef123456" />
    <property_simple key="canfax" value="1" />
    <property_simple key="opponentdescription" value="Иванов Сергей" />
    <property_simple key="opponentname" value="Иванов Сергей" />
    <property_simple key="opponentnumber" value="" />
    <property_simple key="opponentlineid" value="cf8330f4-a0bf-4779-9539-ab8ea6c49df7" />
    <property_simple key="opponentlinenumber" value="" />
  </event>


  • CommutationStopped (232). Событие АТС о разрыве коммутации на канале устройства, связанного в карте с текущим рабочим местом.

Пример:

<?xml version="1.0" encoding="utf-16"?>
<oktellcommapper version="80710">

  <event id="232" name="commutationstopped">
    <property_simple key="idchain" value="abcdef12-abcd-abcd-1234-1234567890ab" />
    <property_simple key="idconnection" value="12345678-1234-1234-1234-abcdef123456" />
  </event>


  • FaxStopped (233). Событие АТС о начале факс-сеанса на оппозитном канале. Может быть использовано для отображения в интерфейсе управления каналом команды остановки и возврата к коммутации с абонентом.

Пример:

<?xml version="1.0" encoding="utf-16"?> <oktellcommapper version="80710">

 <event id="233" name="faxstarted">
   <property_simple key="description" value="4952217859" />
   <property_simple key="issending" value="0" />
   <property_simple key="idchain" value="abcdef12-abcd-abcd-1234-1234567890ab" />
 </event>


  • FaxStopped (234). Событие АТС о завершении факс-сеанса на оппозитном канале.

Пример:

<?xml version="1.0" encoding="utf-16"?> <oktellcommapper version="80710">

 <event id="234" name="faxstopped">
   <property_simple key="idchain" value="abcdef12-abcd-abcd-1234-1234567890ab" />
 </event>


  • FaxFilesReceived (235). Событие АТС о завершении приема файлов по факс-сеансу на оппозитном канале. Содержит признак успешности или неудачи, а также весь перечень путей к файлам, куда сохранены принятые значения, или текст сообщения об ошибке.

Пример:

<?xml version="1.0" encoding="utf-16"?> <oktellcommapper version="80710">

 <event id="235" name="faxfilesreceived">
   <property_simple key="success" value="1" />
   <property_simple key="errortext" value="" />
   <property_cdata key="requestedpath"><![CDATA[C:\Принятые факсы\Договор_аренды.bmp]]></property_cdata>
   <property_cdata key="filepath" value="0"><![CDATA[C:\Принятые факсы\Договор_аренды_page1.bmp]]></property_cdata>
   <property_cdata key="filepath" value="1"><![CDATA[C:\Принятые факсы\Договор_аренды_page2.bmp]]></property_cdata>
 </event>

</oktellcommapper>


  • RingStarted (236). Событие АТС о начале входящего вызова на линию пользователя. Может быть использовано для опроса и отображения очереди и/или контента оппозитного канала. А также для смены контента в режиме его отображения в случае, когда происходит смена ведущего канала вызывающей стороны.

Поле isconf определяет, инициирован ли текущий вызов менеджером конференций. Если да, то поле idconf содержит идентификатор конференции, в которую осуществляется приглашение; в противном случае поле отсутствует. Параметры конференции можно узнать по идентификатору путем использования методов раздела «Конференц-связь», название доступно также в поле callername параметра. Поля callerlineid, callerlinenum, calleruserid, callerdirection, callerid, callername. указывают на соответствующие описательные параметры вызывающего абонента, соответственно идентификатор линии, номер линии, идентификатор вызывающего пользователя, направление вызова, номер вызывающего абонента или номер комнаты конференции, имя вызывающего абонента или название конференции. Первые три из перечисленных полей не присутствуют в параметре, если осуществляется вызов из конференции.

Примеры:

<?xml version="1.0" encoding="utf-16"?> <oktellcommapper version="80710">

 <event id="236" name="ringstarted">
   <property_simple key="idchain" value="abcdef12-abcd-abcd-1234-1234567890ab" />
   <property_simple key="isconf" value="1" />
   <property_simple key="idconf" value="12345678-1234-1234-1234-abcdef123456" />
   <property_simple key="callerdirection" value="conference" />
   <property_simple key="callerid" value="#144" />
   <property_simple key="callername" value="Совещание технического отдела" />
 </event>

</oktellcommapper>


<?xml version="1.0" encoding="utf-16"?> <oktellcommapper version="80710">

 <event id="236" name="ringstarted">
   <property_simple key="idchain" value="abcdef12-abcd-abcd-1234-1234567890ab" />
   <property_simple key="isconf" value="0" />
      <property_simple key="callerlineid" value="cf2dd474-e2ab-3cad-561f-ab12cdef5678" />
   <property_simple key="callerlinenum" value="17016" />
   <property_simple key="calleruserid" value="09f78612-9408-4f69-b0e4-1357a37a3026" />
      <property_simple key="callerdirection" value="oktell_pbx" />
   <property_simple key="callerid" value="31" />
   <property_simple key="callername" value="Зиннуров Альберт" />
 </event>

</oktellcommapper>


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

Может быть использовано для скрытия полей/форм отображения контента и информации об абоненте.

Пример:

<?xml version="1.0" encoding="utf-16"?> <oktellcommapper version="80710">

 <event id="237" name="ringfinished">
   <property_simple key="idchain" value="abcdef12-abcd-abcd-1234-1234567890ab" />
 </event>

</oktellcommapper>


  • ACMStarted (238). Событие АТС об активации автодозвона на канале пользователя.

Пример:

<?xml version="1.0" encoding="utf-16"?> <oktellcommapper version="80710">

 <event id="238" name="acmstarted">
   <property_simple key="idchain" value="abcdef12-abcd-abcd-1234-1234567890ab" />
 </event>

</oktellcommapper>


  • ACMFinished (239). Событие АТС о деактивации автодозвона на канале пользователя.

Пример:

<?xml version="1.0" encoding="utf-16"?> <oktellcommapper version="80710">

 <event id="239" name="acmfinished">
   <property_simple key="idchain" value="abcdef12-abcd-abcd-1234-1234567890ab" />
 </event>

</oktellcommapper>


  • FlashHoldAction (240). Событие АТС о смене состояния флеш-буфера канала пользователя. Генерируется сервером в клиентское приложение пользователя-владельца канала, когда производятся любые операции с флеш-буфером: поставлен на удержание другой канал, вызван из удержания и восстановлен в коммутации, переведен из удержания на другой объект, коммутацию, очередь, сценарий, отбит из буфера, или самостоятельно перешел в режим отбоя.

Возможные варианты действий (событий о смене состояния):

Put           = 1, //Размещен во флеш-буфере на удержание
Return        = 2, //Возвращен в коммутацию с каналом
Abort         = 3, //Удален из буфера по отбою канала-владельца
Lost          = 4, //Удален из буфера по собственной инициативе
Switch        = 5  //Переведен на другой объект в коммутацию или ожидание

Пример:

<?xml version="1.0" encoding="utf-16"?>
<oktellcommapper version="80710">

  <event id="240" name="flashholdaction">
    <property_simple key="action" value="1" name="put" />
    <property_simple key="idchain" value="abcdef12-abcd-abcd-1234-1234567890ab" />
  </event>

</oktellcommapper>


  • ChainStateChange (241). Событие АТС о смене состояния регистрации линии пользователя в цепочке коммутаций. Связывание с цепочкой (type = 1) и отвязка от цепочки (type = 2).

Отвязка в ситуации, когда вызывающий абонент прекратил дозвон, а анализатор очереди не обнаруживает элементов, возникает совместно с RingFinished. В общем случае генерируется чаще. Однако стоит иметь в виду, что в некоторых случаях канал может быть возвращен в обработку той же цепочки. В случае, если событие указывает о выходе из цепочки, дополнительное свойство «ishandled» будет указывать, произошло это по причине снятия трубки другим каналом группового номера (значение «1», «handled»), или нет (значение «0», «lost»).

Пример 1:

<?xml version="1.0" encoding="utf-16"?>
<oktellcommapper version="80710">

  <event id="241" name="chainstatechange">
    <property_simple key="idline" value="123dbaf4-12ab-34cd-56ef-ab12cdef5678" />
    <property_simple key="idchain" value="abcdef12-abcd-abcd-1234-1234567890ab" />
    <property_simple key="type" value="1" name="enter" />
  </event>

</oktellcommapper>


Пример 2:

<?xml version="1.0" encoding="utf-16"?>
<oktellcommapper version="80710">

  <event id="241" name="chainstatechange">
    <property_simple key="idline" value="123dbaf4-12ab-34cd-56ef-ab12cdef5678" />
    <property_simple key="idchain" value="abcdef12-abcd-abcd-1234-1234567890ab" />
    <property_simple key="type" value="0" name="exit" />
    <property_simple key="ishandled" value="0" name="lost" />
  </event>

</oktellcommapper>


  • LineStateChange (242). Событие АТС о смене состояния линии пользователя. Практически все смены состояния (за исключением кризисных явлений вроде потери связи с сервером оборудования) пробрасываются через это событие.

Возможные состояния линии описаны в разделе « Работа со статусом пользователя. Допустимые состояния линии».

Пример:

<?xml version="1.0" encoding="utf-16"?> <oktellcommapper version="80710">

 <event id="242" name="linestatechange">
   <property_simple key="idline" value="123dbaf4-12ab-34cd-56ef-ab12cdef5678" />
   <property_simple key="lstate" value="1" name="lsReady" />
 </event>

</oktellcommapper>


  • CallDetected (243). Событие АТС об обнаружении факта звонка с подчиненным пользовательским каналом. При получении этого события гарантируется наличие непустого контента цепочки коммутаций (метод Chain_GetContent).

Пример:

<?xml version="1.0" encoding="utf-16"?> <oktellcommapper version="80710">

 <event id="243" name="calldetected">
   <property_simple key="idchain" value="ea80cc82-2bb4-df1d-6683-e71663bcf742" />
 </event>

</oktellcommapper>


Методы для работы с логикой АТС: очередь ожидания

  • string Queue_GetCurrentItems ( string xml ). Возвращает мета-описание всех абонентов, находящихся в очереди текущего авторизованного пользователя. Элементы располагаются по убыванию комбинированного приоритета обработки (учитываются выставленный приоритет, направление вызова, а также текущее время ожидания в очереди). При авторизации пользователя с логином «testqueue» в возвращаемом XML-документе даже при фактическом отсутствии очереди постоянно находятся несколько тестовых элементов.

Формат возвращаемого xml (на примере):

<?xml version="1.0" encoding="utf-16"?> <oktellcommapper version="80710">

 <property_set name="queueitem">
   <property_simple key="dateformat" value="dd.MM.yyyy HH:mm:ss" />
   <property_simple key="managedlineid" value="5ae8377b-d7f9-4a39-bb87-e25475aed097" />
   <property_simple key="objecttype" value="0" name="qotQueueLogic" />
   <property_cdata key="username"><![CDATA[Денис]]></property_cdata>
   <property_simple key="lenqueue" value="273000" />
   <property_simple key="srcelementid" value="1302eadd-7600-411e-9ffb-abf445ad8be6" />
   <property_simple key="queuesource" value="0" name="qsLineLogic" />
   <property_cdata key="department"><![CDATA[Руководство]]></property_cdata>
   <property_simple key="calledid" value="14" />
   <property_simple key="callerid" value="21" />
   <property_simple key="idobject" value="12345678-1234-1234-1234-12345678123a" />
   <property_simple key="userid" value="53c0f2d6-9216-4cc3-804f-678c89f12750" />
   <property_simple key="managedlinenum" value="1525" />
   <property_simple key="startqueuetime" value="21.08.2008 10:44:00" />
   <property_simple key="queuepriority" value="10" />
   <property_simple key="idchain" value="abcdef12-abcd-abcd-1234-1234567890ab" />
 </property_set>
 <property_set name="queueitem">
   <property_simple key="dateformat" value="dd.MM.yyyy HH:mm:ss" />
   <property_simple key="tasklistid" value="-1" />
   <property_simple key="idobject" value="12345678-1234-1234-1234-12345678123b" />
   <property_simple key="taskisoutput" value="0" />
   <property_simple key="managedlinenum" value="1001" />
   <property_simple key="userid" value="00000000-0000-0000-0000-000000000000" />
   <property_cdata key="taskname"><![CDATA[Прием входящих]]></property_cdata>
   <property_simple key="calledid" value="5109940" />
   <property_simple key="srcelementid" value="924849c3-851e-4f7c-9513-b63b35417396" />
   <property_simple key="username" value="" />
   <property_simple key="startqueuetime" value="21.08.2008 10:44:00" />
   <property_simple key="objecttype" value="0" name="qotQueueLogic" />
   <property_simple key="lenqueue" value="243000" />
   <property_simple key="callerid" value="89050213951" />
   <property_simple key="queuepriority" value="10" />
   <property_simple key="managedlineid" value="79c950f7-8ae5-48de-8264-520aa331960b" />
   <property_simple key="department" value="" />
   <property_simple key="taskid" value="f58b19a4-527a-4d7a-a3cd-bc1d85e1f45d" />
   <property_simple key="queuesource" value="4" name="qsIncomingTask" />
   <property_simple key="idchain" value="12345678-ab12-ab12-ef34-abcabc123123" />
 </property_set>

</oktellcommapper>


Типы направлений, по которым производится звонок на внутренней линии (поле objecttype):

public enum EQueueObjectType 
{
qotQueueLogic = 0,        //Стандартный вызов из менеджера очередей внутренней АТС. 
qotTaskLogic = 1,        //Вызов оператора из обработчика звонка задачи при наличии активного абонента, находящего на линии. 
qotAutoCallLogic = 2,        //Обратный вызов пользователя из модуля автодозвона. 
qotBackFlash = 3        //Обратный вызов пользователя из АТС для соединения с абонентом на удержании во FLASH-буфере. 
}


Типы объектов, производящих дозвон до внутренних номеров (поле queuesource), то есть источники, использующие менеджер очередей АТС (направление qotQueueLogic):

public enum EQueueSource 
{
qsLineLogic = 0,        //Другие линии, стандартная работа АТС. 
qsIVR = 1,        //Сценарий IVR. 
qsInnerTaskLogic = 2,        //Внутренние задачи (не используется) 
qsAutoCallManager = 3,        //Автодозвон. 
qsIncomingTask = 4        //Входящие задачи. 
}


Типы возможных направлений вызова (поле direction в свойствах звонка и задач):

public enum ECallDirection
{
cdAbsent = 0,        //Не заданное направление. 
cdIncoming = 1,        //Входящий вызов. 
cdOutcoming = 2        //Исходящий вызов. 
}


Типы возможных коммутаций (поле type в свойствах коммутаций):

public enum ECommType
{
None = 0,        //Не заданный тип. 
Abonent = 1,        //Коммутация с абонентом 
IVR = 2        //Коммутация с IVR 
}


Методы для работы с логикой АТС: контент оппозитного канала

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

Контент линии очищается при завершении активной фазы работы канала и создается заново в начале нового вызова.

Среди параметров присутствует пользовательский текстовый параметр CUSTOMINFO. Через него может быть осуществлен обмен информацией между пользователями каналов, с которыми производится коммутация или просто некоторое взаимодействие внешнего абонента на протяжении периода активности.


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

  1. линия, находящаяся в коммутации с линией пользователя;
  2. линия, находящаяся во флеш-буфере линии пользователя;
  3. линия, осуществляющая входящий вызов на линию пользователя;
  4. линия, находящаяся во флеш-буфере линии, осуществляющей вызов линии пользователя.

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

  • bool Content_SetOppositeCustom ( int destination, string custom ). Устанавливает значение пользовательского поля CUSTOMINFO контента оппозитного канала. Параметр destination указывает направление оппозитного канала, параметр custom определяет новое значение поля CUSTOMINFO. В случае успешного задания возвращается TRUE. В случае любого неуспешного исхода (отсутствия канала по указанному направлению, необнаружения внешней линии, несоответствии прав доступа, исключительных ситуациях) возвращается FALSE.


  • string Content_GetOppositeCustom ( int destination ). Возвращает значение пользовательского поля CUSTOMINFO контента оппозитного канала. Параметр destination указывает направление оппозитного канала. Возвращает строку со значением поля в простом виде.


  • string Content_GetOppositeFull ( int destination ). Возвращает полный контент оппозитного канала в XML-формате. Параметр destination указывает направление оппозитного канала. Возвращает строку с XML-содержимым контента в простом виде.


Пример содержимого контента:


<?xml version="1.0" encoding="utf-16"?> <content Version="80903"> <call commcount="2" taskcount="1">

 <property_simple key="datetimeformat" value="dd.MM.yyyy HH:mm:ss" />
 <property_simple key="direction" value="1" name="cdIncoming" />
 <property_simple key="lineid" value="4741e765-f89d-47b2-89f7-0dcd619a8385" />
 <property_simple key="linenumber" value="12001" />
 <property_simple key="callerid" value="Номер не определен" />
 <property_simple key="calledid" value="5109805" />
 <property_simple key="idchain" value="70e29721-165a-4793-97c2-15a4d014d3f1" />
 <property_cdata key="custominfo"><![CDATA[]]></property_cdata>
 <property_simple key="timestart" value="04.09.2008 17:14:30" />
 <property_simple key="timestop" value="04.09.2008 17:14:44" />
 <property_simple key="totalsec" value="13" />
 <activity>
   <commutation index="0">
     <property_simple key="idconnection" value="43ac1678-75bb-4e41-8408-e5c01b60e303" />
     <property_simple key="type" value="2" name="IVR" />
     <property_simple key="timestart" value="04.09.2008 17:14:31" />
     <property_simple key="timestop" value="04.09.2008 17:14:33" />
     <property_simple key="totalsec" value="1" />
     <property_simple key="ivrscriptname" value="Телефонные системы. Вход." />
   </commutation>
   <task index="0">
     <property_simple key="effortid" value="23949836-b72c-4e4b-8be5-eef806a9cbb6" />
     <property_simple key="direction" value="1" name="cdIncoming" />
     <property_simple key="taskid" value="ad76a31a-e661-42a4-a8d5-8365623916cb" />
     <property_simple key="taskname" value="Входящий в телефонные системы" />
     <property_simple key="taskcode" value="" />
     <property_simple key="projectid" value="ab37c6e6-e983-458a-8621-5e0921ade3d1" />
     <property_simple key="tag" value="0" />
     <property_simple key="timeonline" value="04.09.2008 17:14:32" />
     <property_simple key="joinedtableid" value="-1" />
     <property_simple key="timestart" value="04.09.2008 17:14:32" />
     <commutation index="1">
       <property_simple key="idconnection" value="fc8cd4ff-b8b0-48b6-aeb1-662090bfd7d6" />
       <property_simple key="type" value="1" name="Abonent" />
       <property_simple key="timestart" value="04.09.2008 17:14:33" />
       <property_simple key="timestop" value="04.09.2008 17:14:41" />
       <property_simple key="totalsec" value="8" />
       <abonents count="1">
         <abonent index="1">
           <property_simple key="lineid" value="254aa1fc-4e18-4ad3-99ea-eb52417dd5a2" />
           <property_simple key="linenumber" value="16016" />
           <property_simple key="callerid" value="" />
           <property_simple key="userid" value="da803f01-ea77-40fa-bc9d-e2efb36fd5a8" />
           <property_simple key="username" value="Нигметзянов Шамиль" />
         </abonent>
       </abonents>
     </commutation>
   </task>
 </activity>

</call> </content>


Методы для работы с логикой АТС: контент цепочки коммутаций

В системе разделяются понятия коммутации и звонка.

Коммутация - единичное соединение двух любых каналов в общий дуплексный голосовой обмен. У каждой коммутации есть уникальный идентификатор (Guid). В ходе работы системы АТС при переводе звонка, при помещении на удержание и последующем восстановлении в коммутацию, несмотря на то, что закоммутированные объекты и остаются теми же самыми, образованная повторная коммутация представляет собой иной объект с отличающимся набором свойств. В частности имеет другой идентификатор, другое время, другие файлы записи диалога. Коммутация в некотором смысле наиболее примитивный объект.


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

Наконец, наиболее общее понятие звонка в системе Oktell представлено понятием цепочки коммутаций. Она характеризуется уникальным идентификатором (Guid). Несколько коммутаций могут быть объединены в одну цепочку по признаку некоторой зависимости. Необходимость ввода такого более общего понятия обусловленена тем, что вызов абонента может повлечь целую серию коммутаций, удержаний, переводов, которые могут продолжаться даже после того, как сам абонент-инициатор из обработки вышел.

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

Цепочка коммутаций завершается, когда все задействованные в ней каналы переходят в неактивный режим.

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

Цепочка характерна тем, что на протяжении ее существования принципиально не существует одновременных коммутаций. Все время делится на периоды закоммутированности двух каналов (или IVR)


В этой связи система предоставляет возможность оперировать контентом цепочки коммутаций. Контент представляет собой XML структуру, имеющую в своем составе информацию о всех коммутациях и вызовах. Контент цепочки постоянно пополняется по мере развития пути звонка.

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

В шапке контента имеется поле CUSTOM, предоставляемое для изменения из клиентского интерфейса пользователем, осуществляющим работу с каналом, участвующим в цепочке.


  • bool Chain_SetContentCustom ( string custom ). Устанавливает значение пользовательского поля CUSTOM контента цепочки коммутаций. Параметр custom определяет новое строковое значение поля CUSTOM. В случае успешного задания возвращается TRUE. В случае любого неуспешного исхода (неактивности канала пользователя, отсутствия цепочки, несоответствии прав доступа, исключительных ситуациях) возвращается FALSE.
  • string Chain_GetContentCustom ( ). Возвращает значение пользовательского поля CUSTOM контента цепочки коммутаций. Возвращает строку со значением поля в простом виде. В случае невозможности обратиться к контенту цепочки (неактивность канала пользователя, отсутствие цепочки, исключительные ситуации) возвращается NULL.
  • string Chain_GetContent ( ). Возвращает в XML-формате полный контент цепочки коммутаций, в которой участвует канал пользователя. Возвращает строку с XML-содержимым контента в простом виде. Каждая коммутация добавляет раздел commutationinfo, каждый вызов (за исключением прямого вызова сценариев IVR) добавляет раздел queueinfo. По мере развития цепочки все новые и новые вызовы размещаются в дереве элемента trace. Для получения и отображения в клиентском интерфейсе информации о вызывающем абоненте необходимо из дерева достать последнюю ветвь queueinfo.

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

Пример 1 простейшего содержимого контента (опрос в момент поступления/осуществления вызова):

<?xml version="1.0" encoding="utf-16"?> <oktellcommapper version="80710">

 <property_simple key="datetimeformat" value="dd.MM.yyyy HH:mm:ss" />
 <property_simple key="chainid" value="09fbde19-08ac-4e42-9476-11db421c3b0f" />
 <property_simple key="createtime" value="16.10.2008 17:57:01" />
 <property_simple key="calldirection" value="1" name="cdIncoming" />
 <property_cdata key="custom" />
 <property_collection count="1">
   <property_set id="trace">
     <property_collection count="1">
       <property_set name="queueinfo">
         <property_simple key="pbxdirection" value="0" name="internal" />
         <property_simple key="managedlineid" value="cf8330f4-a0bf-4779-9539-ab8ea6c49df7" />
         <property_simple key="objecttype" value="0" name="qotQueueLogic" />
         <property_simple key="username" value="z01" />
         <property_simple key="srcelementid" value="cf8330f4-a0bf-4779-9539-ab8ea6c49df7" />
         <property_simple key="queuesource" value="0" name="qsLineLogic" />
         <property_simple key="department" value="" />
         <property_simple key="calledid" value="" />
         <property_simple key="callerid" value="12" />
         <property_simple key="idobject" value="f42c8dd4-6e6b-4033-9349-5d51971fb251" />
         <property_simple key="userid" value="67e62e9a-a400-4f26-a1ac-b535e17a44f7" />
         <property_simple key="managedlinenum" value="15001" />
         <property_simple key="startqueuetime" value="16.10.2008 17:57:02" />
         <property_simple key="queuepriority" value="10" />
       </property_set>
     </property_collection>
   </property_set>
 </property_collection>

</oktellcommapper>


Пример 2 простейшего содержимого контента (опрос в момент первой коммутации в цепочке):

<?xml version="1.0" encoding="utf-16"?> <oktellcommapper version="80710">

 <property_simple key="datetimeformat" value="dd.MM.yyyy HH:mm:ss" />
 <property_simple key="chainid" value="09fbde19-08ac-4e42-9476-11db421c3b0f" />
 <property_simple key="createtime" value="16.10.2008 17:57:01" />
 <property_cdata key="custom"><![CDATA[Содержимое контента]]></property_cdata>
 <property_simple key="calldirection" value="1" name="cdIncoming" />
 <property_collection count="1">
   <property_set id="trace">
     <property_collection count="2">
       <property_set name="queueinfo">
         <property_simple key="pbxdirection" value="0" name="internal" />
         <property_simple key="managedlineid" value="cf8330f4-a0bf-4779-9539-ab8ea6c49df7" />
         <property_simple key="objecttype" value="0" name="qotQueueLogic" />
         <property_simple key="username" value="z01" />
         <property_simple key="srcelementid" value="cf8330f4-a0bf-4779-9539-ab8ea6c49df7" />
         <property_simple key="queuesource" value="0" name="qsLineLogic" />
         <property_simple key="department" value="" />
         <property_simple key="calledid" value="" />
         <property_simple key="callerid" value="12" />
         <property_simple key="idobject" value="f42c8dd4-6e6b-4033-9349-5d51971fb251" />
         <property_simple key="userid" value="67e62e9a-a400-4f26-a1ac-b535e17a44f7" />
         <property_simple key="managedlinenum" value="15001" />
         <property_simple key="startqueuetime" value="16.10.2008 17:57:02" />
         <property_simple key="queuepriority" value="10" />
       </property_set>
       <property_set name="commutationinfo" id="e1a5efef-3a37-4f46-8646-207175cfa4df">
         <property_simple key="id" value="e1a5efef-3a37-4f46-8646-207175cfa4df" />
         <property_simple key="timestart" value="16.10.2008 17:57:02" />
         <property_simple key="timeanswer" value="16.10.2008 17:57:08" />
         <property_simple key="connectiontype" value="3" />
         <property_simple key="isrecorded" value="1" />
         <property_simple key="alineid" value="cf8330f4-a0bf-4779-9539-ab8ea6c49df7" />
         <property_simple key="alinenum" value="15001" />
         <property_simple key="anumberdialed" value="14" />
         <property_simple key="aoutnumber" value="" />
         <property_simple key="auserid" value="67e62e9a-a400-4f26-a1ac-b535e17a44f7" />
         <property_simple key="astr" value="z01" />
         <property_simple key="blineid" value="254aa1fc-4e18-4ad3-99ea-eb52417dd5a2" />
         <property_simple key="blinenum" value="16016" />
         <property_simple key="bnumberdialed" value="" />
         <property_simple key="boutnumber" value="14" />
         <property_simple key="buserid" value="da803f01-ea77-40fa-bc9d-e2efb36fd5a8" />
         <property_cdata key="bstr"><![CDATA[Петр]]></property_cdata>
       </property_set>
     </property_collection>
   </property_set>
 </property_collection>

</oktellcommapper>


Методы и события для работы с логикой АТС: конференц-связь

Подробно о режиме конференц-связи и решаемых этой функцией задачах в разделе «Клиентское приложение. Телефон. Конференц-связь» руководства к ПК «Oktell».

Все методы требуют обработки случая NULL-возвращаемого значения.

Возможные состояния участника конференции