Описание интеграционного протокола Oktell web-soсket protocol

Материал из Oktell
Перейти к: навигация, поиск

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


КРАТКОЕ ОПИСАНИЕ ВОЗМОЖНОСТЕЙ ТЕЛЕФОНИИ ОКТЕЛ

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

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

Например, выяснить, какому клиенту/контакту принадлежит определившийся номер телефона или введенный им вручную с помощью DTMF-набора номер договора, отфильтровать по черному списку, переключить вызов на ответственного за работу с этим контактом пользователя, если пользователя нет в системе - переключить на секретаря, а если контакт новый - соединить с отделом продаж. Если ответственный пользователь занят, предложить оставить голосовое сообщение для VIP клиентов. В момент поступления звонка открыть карточку у пользователя, которому звонок поступает. Закрыть ее автоматически, если пользователь так и не снял трубку (а снял кто-то другой, или звонок потерялся). Или выполнить какое-то важное с т.з. веб-системы действие в случае, если пользователь оставил заказ на встречный звонок, например.

Именно сценарии придают жизнь и востребованность октеллу и его сервисов

Среди событий октелла, отрабатываемых в сценариях поступление внешнего звонка. завершение звонка. переключение абонента на пользователя, группу пользователей, задачу коллцентра. любое из интересующих явлений в ходе обработки звонка (от преобразования номера абонента в нужный формат и сверки времени поступления звонка до обработки контента звонка после завершения и выявления там факта состоявшейся конференции). наступление определенного времени. периодический запуск по таймеру. поступление/отправка e-mail. поступление/отправка sms/icq/jabber. контрольные события коллцентра (оператор первым положил трубку, оператор слишком долго находится в перерыве или поствызывной обработке, число операторов в задаче меньше минимально допустимого, число абонентов в очереди задачи больше допустимого и т.д.) ручной запуск сценария по инициативе пользователя или веб-системы. исходящий звонок от пользователя поступление голосовой почты появление где-то в базе данных интересующего события (например появление новой записи в таблице абонентов) появление где-то на веб-ресурсе интересующего события (например температура на улице опустилась ниже нуля) и т.д.


ПРЕДЛАГАЕМАЯ СХЕМА ИНТЕГРАЦИИ


рис.1


Сервер октелл взаимодействует с телефонами и с веб-сервером CRM. Веб-сервер CRM взаимодействует ответно с сервером Октелл и с браузерами.

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

Пользователи могут работать - стационарно каждый за своим компьютером. - перемещаться с одного рабочего место за другое. - работать посменно за одним рабочим местом. (Рабочее место = компьютер + телефон)

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

Существуют два подхода к решению.

1. Жесткая привязка пользователя к телефонной учетной записи.

+: При взаимодействии октелла и веб-системы используются одни и те же идентификаторы (например логины пользователей), соответственно отсутствует проблема привязки как таковая.

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


2. Телефон привязывается к компьютеру, а в момент логина пользователя сопоставление производится через этот компьютер.

+: Кто бы ни залогинился с этого компьютера, приобретает управление телефоном, все звонки пользователю попадают на этот телефон.

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

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

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

рис.4

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

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

Веб-система производит запросы к октеллу. В том числе и команды. Октелл отправляет ответы на запросы.

Взаимодействие на транспортном уровне может происходить по websocket, http, udp. Формат представления сообщений json или xml. Формат самих сообщений определяется непосредственно протоколом интеграции. Например вот так выглядит сообщение из октелла в веб-систему о факте входящего вызова в формате json:


Json.jpg рис.5

Для исполнения динамических методов в веб-срм по событиям в октелле существует запрос, в ответ на который веб-система перечисляет список действий, инициативу исполнения которых она готова отдать наружу в октелл. При описании метода упоминаются человеческое название, краткий код метода, описание для администратора, настраивающего октелл, список входных параметров с упоминанием типов (и возможных значений для перечислений), список выходных параметров, если метод возвращает данные и призван влиять на алгоритм сценария в октелле, признак того, нужно ли исполнять метод с привязкой к конкретному пользователю, или это обращение к серверу вообще, разрешено ли отменять исполнение (например для метода «открыть карточку такую-то» возможна отмена, означающая «закрыть карточку такую-то»), куда октеллу гнать запрос - через сокет (стандартный для взаимодействия канал) или по http на альтернативный url веб-сервера.


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


WEB-SOCKET ПРОТОКОЛ

Между октеллом и веб-сервером CRM-системы существует один канал для обмена сообщениями. Все сообщения имеют идентификаторы для организации серий типа “запрос-ответ”. Сообщения могут адресоваться конкретному пользователю или относиться к общим. В первом случае указывается идентификатор/логин пользователя. Касается обоих направлений пересылки.

Установка соединения может производиться как октеллом, так и веб-сервером CRM-системы. В случае разрыва соединения сторона-инициатор вновь организует подключение. Рукопожатие на установление web-socket соединения предлагается также стороной-инициатором. Подробнее http://ru.wikipedia.org/wiki/WebSocket.

Каждое сообщение представляет из себя строку XML или JSON в кодировке UTF8. Сообщения в общем потоке данных в канале отделяются друг от друга байтами 0 и 255. 0 - в начале сообщений, 255 в конце. Форматы XML и JSON представления данных в текстовом виде гарантируют отсутствие байтов 0 и 255 в теле сообщений.

Сообщения длиной более 64К упаковываются в Base64 и разбиваются на несколько сообщений длиной до 64К. Формат multipart сообщения определен отдельно.

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

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


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


СПИСОК МЕТОДОВ ИНТЕРФЕЙСА

Взаимодействие происходит путем обмена сообщениями по установившемуся между серверами транспортному каналу. Часть сообщений носят вид событий, часть - вид запросов (команд), часть - вид ответов на запросы. Каждое сообщение представляет собой байтовое представление текста с escape-последовательностями, описывающего объект в виде структуры JSON (возможен вариант XML), преобразованного через кодировку UTF8.

На первом уровне объекта - массив из двух значений: строковый кодовый идентификатор сообщения, именованный список параметров:

  [ "messagecode", {"var1":"value1", "var2":"value2", ...} ]

В общем случае среди параметров могут присутствовать сложные объекты (массивы и словари):

  "var1":["a", "b", "c"]  или "var2":{"a":1, "b":2, "c":3}

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

Если транспортный канал единый (например websock), то сообщения разделяются последовательностью байтов 255 и 0, то есть 0 добавляется к сообщению в начало, 255 в конец. При необходимости длинные сообщения разбиваются на несколько более мелких, каждое из которых не превышает 64кБ.


ОБМЕН ДАННЫМИ ОБ АКТИВНЫХ ПОЛЬЗОВАТЕЛЯХ.


-> getactiveusers Запрос из Октелла в CRM на возврат текущих активных (авторизованных) пользователей. Применяется при старте одной из систем в момент организации подключения.

  [
   "getactiveusers",
   {
    "qid": "9C44D978-E380-4405-B1B9-C4894BF188A7"
   }
  ]


-> activeusers Ответное сообщение из CRM в Октелл со списком активных авторизованных пользователей CRM.

  [
   "activeusers",
   {
    "qid": "9C44D978-E380-4405-B1B9-C4894BF188A7",
    "users": [
     {"userlogin": "ivanov", "userid": "20394857203948752345"},
     {"userlogin": "petrov", "userid": "kasjdfhlaksjdfhlaks"},
     {"userlogin": "sidorov", "userid": "987495873948573945"}
    ]
   }
  ]



<- login Сообщение из CRM в Октелл об авторизации пользователя. Запрос кросс-авторизации в Октелле.

  [
   "login",
   {
    "qid": "9D484E0E-BE08-47B5-ABBD-490936881056",
    "userlogin": "ivanov",
    "userid": "29834234234"
   }
  ]


-> loginresult Сообщение из Oktell в CRM о результате кросс-авторизации пользователя. Может быть отправлено в ответ на запрос кросс-авторизации в Октелле, а может быть отправлено самостоятельно по результатам обработки сообщения activeusers.

  [
   "loginresult",
   {
    "qid": "939AA33E-011F-4FEC-B60A-8BC1B4888B5A",
    "userlogin": "ivanov",
    "userid": "29834234234",
    "result": 0,
    "error": 50093,
    "errormsg": "Пользователь уже зарегистрирован"
   }
  ]

<- logout Сообщение из CRM в Октелл о выходе (логауте) пользователя. Команда на кросс-логаут в Октелле.

  [
   "logout",
   {
    "qid": "9D484E0E-BE08-47B5-ABBD-490936881056",
    "userlogin": "ivanov",
    "userid": "29834234234"
   }
  ]


-> logoutresult Сообщение из Oktell в CRM о результате кросс-логаута пользователя. Может быть отправлено в ответ на запрос кросс-логаута в Октелле, а может быть отправлено самостоятельно в случае длительного отсутствия откликов от пользователя (не задействовано).

  [
   "logoutresult",
   {
    "qid": "4B25E210-2D67-4675-A5AE-46DC9CBC32F9",
    "userlogin": "ivanov",
    "userid": "29834234234",
    "result": 1
   }
  ]

-> pbxnumberstatechanged Сообщение из Октелл о смене состояния внутреннего номера (или группы внутренних номеров)

  [
   "pbxnumberstatechanged",
   {
    "qid": "5B9508DF-565B-44E1-A122-6FEB70ADA0B9",
    "numbers": [
  	 {"num": "425", "numstateid": 3},
  	 {"num": "427", "numstateid": 2},
  	 {"num": "#82", "numstateid": 3}
    ]
   }
  ]


ОБМЕН СОСТОЯНИЯМИ ПОЛЬЗОВАТЕЛЕЙ


-> userstatechanged Сообщение из Октелла в CRM о смене состояния пользователя в Октелле. Отправляется на имя пользователя, чье состояние сменилось. Отправляется как результат запроса на смену состояния или независимо.

  [
   "userstatechanged",
   {
    "qid": "66F8D479-0234-47DF-B043-3A065FF464A7",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "userstateid": 2,
    "onredirect": true,
    "onlunch": false,
    "oncallcenter": false
   }
  ]

<- setuserstate Запрос из CRM к Октеллу на смену состояния пользователя от его имени. При проведении изменений в ответ отправляется сообщение userstatechanged.

  [
   "setuserstate",
   {
    "qid": "2A45010A-8EEA-4876-90CB-F062459D4BE2",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "userstateid": 2,
    "onredirect": false,
    "lunchreasonid": 120,
    "lunchreasonmsg": ""
   }
  ]
  //* lunchreasonid и lunchreasonmsg - расширение для будущей статистики, устанавливают причину перерыва. id - если причина одна из стандартных. msg - если что-то уникальное юзер ввел.

<- entercallcenter Запрос из CRM на вход в режим коллцентра. При проведении изменений в ответ отправляется сообщение userstatechanged.

  [
   "entercallcenter",
   {
    "qid": "7DD2ED7A-B6BF-4988-A780-99719C65CA5D",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
   }
  ]


<- exitcallcenter Запрос из CRM на выход из режима коллцентра. При проведении изменений в ответ отправляется сообщение userstatechanged.

  [
   "exitcallcenter",
   {
    "qid": "6E899456-C373-48EB-949E-E2C0D79D45EA",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
   }
  ]


ТЕКСТОВЫЙ ЧАТ


-> usertextmessagereceived Сообщение-событие из Oktell в CRM о новом входящем текстовом сообщении чата.

  [
   "usertextmessagereceived",
   {
    "qid": "D5582E04-2964-438C-A8DB-21AF898BBAE0",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "messageid": "0263C7BF-DEB3-406F-9CF9-6F56D828C755",
    "snduserlogin": "Петров",
    "snduserid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
    "sndusername": "Петров Антон Григорьевич",
    "messagetext": "раз два три четыре пять вышел зайчик погулять",
    "messagedate": "2011-03-27 14:12:28",
   }
  ]

<- Запрос из CRM в Oktell на отправку текстового сообщения в рамках чата другому пользователю.

  [
   "sendusertextmessage",
   {
    "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "messageid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
    "recvuserlogin": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
    "recvuserid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
    "messagetext": "раз два три четыре пять вышел зайчик погулять",
   }
  ]


ГОЛОСОВАЯ ПОЧТА


-> voicemailreceived Сообщение из Октелла в CRM о факте поступления голосовой почты на ящик пользователя.

  [
   "voicemailreceived",
   {
    "qid": "080C0DF2-442B-410E-9204-4ADB3399FCC0",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
   }
  ]


ВСПЛЫВАЮЩИЕ УВЕДОМЛЕНИЯ


-> shownotifymessage Сообщение(запрос) из Октелла об уведомлении пользователя по аналогии с всплывающими Октелловскими уведомлениями

 [
   "shownotifymessage",
   {
    "qid": "99CC8C57-1793-486A-AFB1-6E5CA3E6855E",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "sender": "0263C7BF-DEB3-406F-9CF9-6F56D828C755",
    "text": "Петров",
    "autohide": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
    "type": 262144,
    "backcolor": "00FF0000",
    "uniquekey": "E7899B61-55C3-4007-91EE-DDB348913AA8",
   }
  ]
  //* uniquekey - код сообщения. Может отсутствовать. Но если есть - допускается одновременное отображение только одного уведомления с таким кодом (либо закрывать автоматически предыдущее, либо не отображать это)
  //* backcolor - hex AARRGGBB
  //* type - тип сообщения из флагового списка кратных двойке кодов


СООБЩЕНИЯ ОТ АТС


-> phoneevent_ringstarted Сообщение из Октелла в CRM о входящем звонке. Не имеет отношения к постановке звонка в очередь. Фактически когда телефон пользователя начал звенеть.

  [
   "phoneevent_ringstarted",
   {
    "qid": "00488421-97E4-443B-81B7-D645E403AEBB",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "chainid": "D6C8232D-4E4A-48BB-954E-C719582A4718",
    "callerlineid": "BC1FD50B-651F-459D-B659-28230E919673",
    "callerlinenum": "13027",
    "callerdirection": "oktell_pbx",
    "callerid": "73439170203",
    "callername": "ОАО Металлург",
    "callerdescription": "Металлоконструкции, изделия из черных и цветных металлов",
    "callerinfo": "Абонент: 315, Задача 'Входящие в коллцентр'",
    "callercomment": "Еще что-то об абоненте",
    "calleruserlogin": "",
    "calleruserid": "00000000-0000-0000-0000-000000000000",
    "isextline": true,
    "canfax": true,
    "canvideo": false,
    "isconference": false,
    "confid": "00000000-0000-0000-0000-000000000000",
    "confname": "",
    "confroom": 0,
    "confinviternumber": "",
    "confinviteruserid": "00000000-0000-0000-0000-000000000000",
    "confinviteruserlogin": "",
    "istask": true,
    "taskid": "F94BD1FE-B628-4CC3-B215-F3F84B275EDD",
    "taskname": "Входящие в коллцентр"
   }
  ]
  //* Частично могут отсутстовать параметры, описывающие абонента. 
  //    Если istask=false, то остутствуют taskid, taskname, tasktalklimitsec, taskfromhandlesec
  //    Если звонок не от другого пользователя, то отсутствуют calleruserlogin, calleruserid
  //    Если isconference=false, то отсутствует confid, confname, confroom

-> phoneevent_ringstopped Сообщение из Октелла в CRM о прекращении входящего вызова. Если пользователь не снял трубку, а вызов прекратился.

  [
   "phoneevent_ringstopped",
   {
    "qid": "BEB91146-BA27-4236-9CAC-EF562719E7E5",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "chainid": "D6C8232D-4E4A-48BB-954E-C719582A4718"
   }
  ]

-> phoneevent_commstarted Сообщение из Октелла в CRM о коммутации

  [
   "phoneevent_commstarted",
   {
    "qid": "B7ACFEC1-65BB-4773-A425-DC39F5D1A48C",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "chainid": "D6C8232D-4E4A-48BB-954E-C719582A4718",
    "commutationid": "072F2EE0-4B3B-49A7-AB5B-E213AE752A53"
    "callerlineid": "BC1FD50B-651F-459D-B659-28230E919673",
    "callerlinenum": "13027",
    "callerid": "73439170203",
    "callername": "ОАО Металлург",
    "callerdescription": "Металлоконструкции, изделия из черных и цветных металлов",
    "callerinfosimple": "Абонент: 315, Задача 'Входящие в коллцентр'",
    "callercomment": "Еще что-то об абоненте",
    "calleruserlogin": "",
    "calleruserid": "00000000-0000-0000-0000-000000000000",
    "isextline": true,
    "canfax": true,
    "canvideo": false,
    "cansendfiles": true,
    "canbuildconf": true,
    "isivrscript": false,
    "isconference": false,
    "confid": "00000000-0000-0000-0000-000000000000",
    "confname": "",
    "confroom": 0,
    "istask": true,
    "taskid": "F94BD1FE-B628-4CC3-B215-F3F84B275EDD",
    "taskname": "Входящие в коллцентр",
    "tasktalklimitsec": 180,
    "taskfromhandlesec": 24
   }
  ]
  //* Частично могут отсутстовать параметры, описывающие абонента. 
  //    Если istask=false, то остутствуют taskid, taskname, tasktalklimitsec, taskfromhandlesec
  //    Если звонок не от другого пользователя, то отсутствуют calleruserlogin, calleruserid
  //    Если isconference=false, то отсутствует confid, confname, confroom

-> phoneevent_commstopped Сообщение из Октелла в CRM о завершении коммутации. Не путать со звонком. Коммутаций в рамках обработки звонка может быть много.

[

   "phoneevent_commstopped",
   {
    "qid": "D514511C-BD4F-406B-B9C7-695CDC6C40E7",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "chainid": "D6C8232D-4E4A-48BB-954E-C719582A4718",
    "commutationid": "072F2EE0-4B3B-49A7-AB5B-E213AE752A53"
   }
  ]

-> phoneevent_ivrstarted Сообщение из Октелла в CRM о соединении с IVR-сценарием.

  [
   "phoneevent_ivrstarted",
   {
    "qid": "46E07742-0B24-4DD6-B4C6-12CDC1F7B938",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "scriptname": "(Служебный) Вход в АТС",
    "chainid": "D6C8232D-4E4A-48BB-954E-C719582A4718",
    "commutationid": "072F2EE0-4B3B-49A7-AB5B-E213AE752A53"
   }
  ]

-> phoneevent_ivrstopped Сообщение из Октелла в CRM о завершении соединения с IVR сценарием.

  [
   "phoneevent_ivrstopped",
   {
    "qid": "FC9DD78C-1A5F-4E06-9AB5-A9CEDE025F6A",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
   }
  ]

-> phoneevent_acmcallstarted Сообщение из Октелла в CRM о запуске автодозвона.

  [
   "phoneevent_acmcallstarted",
   {
    "qid": "410B1930-423E-4632-B3DE-54EC48C0E8A0",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "chainid": "D6C8232D-4E4A-48BB-954E-C719582A4718",
    "callnumber": "471",
    "isextline": false,
    "callername": "Сигизмунд Львович Кац",
   }
  ]

-> phoneevent_acmcallstopped Сообщение из Октелла в CRM об остановке автодозвона.

  [
   "phoneevent_acmcallstopped",
   {
    "qid": "410B1930-423E-4632-B3DE-54EC48C0E8A0",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "chainid": "D6C8232D-4E4A-48BB-954E-C719582A4718",
   }
  ]

-> phoneevent_faxstarted Сообщение из Октелла о начале факс-сеанса на оппозитном канале.

  [
   "phoneevent_faxstarted",
   {
    "qid": "28979AE8-8E06-4EED-9114-98CB126CA8F4",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "chainid": "D6C8232D-4E4A-48BB-954E-C719582A4718",
    "opponentlineid": "BC1FD50B-651F-459D-B659-28230E919673",
    "faxdirection": "send",
    "description": ""
   }
  ]

-> phoneevent_faxstopped Сообщение из Октелла о завершении факс-сеанса на оппозитном канале (следом возврат в коммутацию, если трубку не положили там).

  [
   "phoneevent_faxstopped",
   {
    "qid": "324CD087-BC2D-4FF3-A9BD-86A7276A4DED",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "chainid": "D6C8232D-4E4A-48BB-954E-C719582A4718",
    "result": 0,
    "error": 65289,
    "errormsg": "NoFaxPages"
   }
  ]

-> phoneevent_faxreceived Cообщение из Октелла о завершении приема факса со ссылками на файлы.

  [
   "phoneevent_faxreceived",
   {
    "qid": "C20E48DF-628D-4954-ADDE-D2C3B31C6700",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "result": 1,
    "files": [
     {
      "filename": "",
      "filesize": 172934,
      "filelink": "\/temp\/receivedfax\/a802d3ea\/img01.tiff",
      "availabletill": "2011-03-27 23:39:18",
     },
     {...},
     {...}
    ]
   }
  ]
  //* Даже если result=0, могут быть частично полученные файлы.



КОМАНДЫ К АТС


<- pbxautocallstart Запрос из CRM к Октеллу на совершение звонка. В зависимости от текущего состояния линии - запускается автодозвон или нет, звонок на внешнюю линию, во внутрений номерной план, или автоопределение, сначала вызываться сам пользователь будет, а потом звонок абоненту, или сначала дозвон до абонента, а потом вызов пользователя.

  [
   "pbxautocallstart",
   {
    "qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "number": "425",
    "direction": "int",
    "sequence": "abonent"
   }
  ]
  //* direction: int, ext, undefined, -
  //* sequence: abonent, user, -


-> pbxautocallstartresult Ответ из Октелла в CRM на запрос звонка.

  [
   "pbxautocallstartresult",
   {
    "qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "number": "425",
    "direction": "int",
    "sequence": "abonent",
    "result": 0,
    "error": 5,
    "errormsg": "cntNumberNotFound"
   }
  ]
  //* error, errormsg: EACMAnswer:
  //*   cntStartedSuccessfully = 0, //Звонок успешно взят в реализацию
  //*   cntUserNotReady = 1, //У осуществляющего вызов пользователя не найдены линии, готовые линии, или состояние кривое
  //*   cntBusy = 2, //При звонке на внутренний номер - признак занятости. В очереди и сам повисеть может (в дальнейшем реализуем как раз ожидание в очереди...)
  //*   cntExtLineNotFound = 3, //Не найдены готовые внешние линии (если будем на это замес делать.. возможно просто будет стоять и ждать.. )
  //*   cntError = 4, //Прочие ошибки, исключения.
  //*   cntControlNotReady = 5, //Режим не доделан.
  //*   cntNumberNotFound = 6 //Внутренний номер не найден (по факту, если сервак сам будет определять направление звонка, это вообще не будет задействовано)

<- pbxautocallabort Запрос из CRM к Октеллу на прекращение автодозвона

  [
   "pbxautocallabort",
   {
    "qid": "28BF3E8F-1F97-47AB-BD42-92D174D4A705",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
   }
  ]

<- pbxtransfercall Аналогично запросу из CRM на совершение звонка - запрос на совершение переключения. Если линия свободна - действует аналогично полностью запросу на звонок. Если пользователь в разговоре - через флэш набирает указанный номер.

  [
   "pbxtransfercall",
   {
    "qid": "81FBE5C2-E81B-4D0D-8AC0-72C22ACCD4E2",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "number": "425",
    "direction": "int",
    "sequence": "abonent"
   }
  ]


-> pbxtransfercallresult И аналогичный ответ из Oktell в CRM.

  [
   "pbxtransfercallresult",
   {
    "qid": "81FBE5C2-E81B-4D0D-8AC0-72C22ACCD4E2",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "number": "425",
    "direction": "int",
    "sequence": "abonent",
    "result": 0,
    "error": 5,
    "errormsg": "cntNumberNotFound"
   }
  ]

Запрос из CRM к Октеллу на отклонение звонка.

  [
   "pbxdeclinecall",
   {
    "qid": "0AFB2B0C-A68F-448B-9B4B-AB42096D4E95",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
   }
  ]

<- pbxabortcall Запрос из CRM к Октеллу на обрыв текущего существующего сеанса связи. Не путать с DeclineCall. Прекращает коммутацию, если существует, прекращает автодозвон, если запущен.

  [
   "pbxabortcall",
   {
    "qid": "53F2EE86-46AF-4A37-8C60-2F27EADD10DE",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
   }
  ]



<- pbxmakeflash Запрос из CRM в Октелл на программную эмуляцию флэш.

  [
   "pbxmakeflash",
   {
    "qid": "DD836C5D-4F3E-4FD2-9B60-24E330B03FC6",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
   }
  ]


ЗАПУСК СЛУЖЕБНОГО СЦЕНАРИЯ


<- startsvcscript Запрос из CRM в Октелл на запуск служебного сценария.

  [
   "startsvcscript",
   {
    "qid": "244E3867-470E-4A56-904D-D435D57CFBFE",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "scriptname": "Служебный сценарий получения почты",
    "startparam1": "значение параметра 1",
    "startparam2": "значение параметра 2",
    "startparam3": "значение параметра 3",
    "startparam4": "значение параметра 4",
    "startparam5": "значение параметра 5",
    "waitresponse": true,
    "waittimeoutsec": 10
   }
  ]


-> startsvcscriptresult Ответ Октелла на запрос запуска служебного сценария.

  [
   "startsvcscriptresult",
   {
    "qid": "244E3867-470E-4A56-904D-D435D57CFBFE",
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "scriptname": "Служебный сценарий получения почты",
    "result": 0,
    "returnvalue": "присвоенный в сценарии результат",
    "error": 10
   }
  ]
  //*   error: 10 - файл не найден, 11 - исключение, 12 - таймаут



ДИНАМИЧЕСКОЕ ВЗАИМОДЕЙСТВИЕ.

Информация от CRM о поддерживаемых методах, доступных Октеллу для инициации исполнения.
 
Общая идея:
В момент создания сценариев в Октелле администратор имеет возможность настроить взаимодействие с CRM.
Взаимодействие представляет собой вызов определенного метода с передачей в него входных параметров,  и возможно ожидание его исполнения с возвратом [нескольких] выходных значений.
При организации подключения Октелл-сервера к CRM-серверу, Октеллом производится запрос доступных в CRM методов. 
По каждому методу дополнительно описывается перечень входных и выходных параметров, их типы, способ исполнения метода (по организованному каналу или отдельным http-подключением), возможность его отмены (для длительных операций, например метод "открыть диалоговую форму" может быть отменен обратным методом "закрыть диалоговую форму", а может быть прерван с тем же результатом).
В интеграционном интерфейсе отсутствует таким образом необходимость конкретизировать методы CRM. В момент настройки сценария администратор уже имеет о них информацию и настраивает конкретный сценарий под место.

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

Серия методов forms - частный случай методов, позволяющий выделить в отдельную категорию работу с карточками. Смысл и способ работы тот же самый. Тем не менее карточки могут быть представлены как методы.

-> getavailablemethods <- availablemethods -> executemethod -> cancelmethod <- methodresult

-> getavailableforms <- availableforms -> showform -> closeform <- formresult



-> getavailablemethods Отправляет из Oktell в CRM сообщение-запрос на возврат доступных динамических методов CRM.

   [
    "getavailablemethods",
    {
     "qid": "76EF6E46-23DA-47B6-B3BD-A7076FEDE170"
    }
   ]


<- availablemethods Cообщение-ответ из CRM в Oktell со списком доступных динамических методов CRM.

   [
     "availablemethods",
     {
       "qid": "76EF6E46-23DA-47B6-B3BD-A7076FEDE170",
       "methods": [
         {
           "key": "16893E86-4D73-4F4C-8629-6E484B2CB5B0", 
   	      "name": "Вернуть данные о компании",
   	      "description": "Возвращает информацию о компании по одному из выбранных идентификаторов, чтобы в дальнейшем использовать при открытии карточки данных о компании",
           "connectiontype": "http",
           "defineuser": false,
           "allowcancel": false,
   	      "inputparams": [
             {
               "key": "type",
               "name": "Тип поиска",
               "description": "",
               "type": "list",
               "items": [
                 {
                   id: "byphone",
                   name: "По номеру телефона"
                 },
                 {
                   id: "byaccount",
                   name: "По номеру договора"
                 }
               ]
             },
             {
               "key": "data",
               "name": "Значение идентификатора",
               "description": "Номер телефона или номер договора (в соответствии с выбранным типом)",
               "type": "string"
             },
             {...},
             {...}
           ]
           "outputparams": [
             {
               "key": "accountid",
               "name": "Идентификатор клиента",
               "description": "Для дальнейшей передачи на отображение карточки",
               "type": "string"
             },
             {...},
             {...}
           ]
         },
         {
           "key": "createrecord", 
   	      "name": "Создать новое дело",
   	      "description": "Отображает контактные данные об абоненте (комании или человеке) при входящем/исходящем звонке",
           "connectiontype": "websock",
           "defineuser": true,
           "allowcancel": false,
   	      "inputparams": [
             {
               "key": "sessionid",
               "name": "Идентификатор сессии звонка",
               "description": "Для связи с номером дела",
               "type": "string"
             }
           ],
   	      "outputparams": [
             {
               "key": "recordid",
               "name": "Идентификатор созданного дела",
               "description": "Для дальнейшей передачи на отображение карточки",
               "type": "string"
             }
             {...},
             {...}
           ]
         },
         {
           "key": "card_records", 
   	      "name": "Показать карточку «ДЕЛА»",
   	      "description": "Отображает контактные данные об абоненте (комании или человеке) при входящем/исходящем звонке",
           "connectiontype": "websock",
           "defineuser": true,
           "allowcancel": true,
   	      "inputparams": [
             {
               "key": "recordid",
               "name": "Номер дела",
               "description": "Номер дела, который ранее был создан при вызове метода «Создать запись дела»",
               "type": "string"
             },
             {
               "key": "accountid",
               "name": "Идентификатор клиента",
               "description": "Идентификатор клиента в базе данных CRM",
               "type": "string"
             },
             {...},
             {...}
           ]
         },
         {...},
         {...}
       ]
     }
   ]

-> executemethod Сообщение-команда из Октелл в CRM на выполнение динамического метода (возможно у конкретного пользователя).

   [
     "executemethod",
     {
       "qid": "4A8E20A1-57F9-4CA6-B4EE-221E2EB00364",
       "userlogin": "Иванов",
       "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
       "methodkey": "createrecord",
       "executionid": "25FC81FC-C5D0-40FB-B4E0-882352E12D86",
       "inputparameters": {
         "sessionid": "2A2C48FE-D8B6-4B51-951A-09D31543D000"
       }
     }
   ]


<- methodresult Сообщение-результат выполнения динамического метода из CRM в Октелл с возвратом выходных значений. Не отправляется, если исполнение прерывается командой CancelMethod.

   [
     "methodresult",
     {
       "qid": "A238110C-6B74-4980-AA23-41402B1E9B0E",
       "methodkey": "createrecord",
       "executionid": "25FC81FC-C5D0-40FB-B4E0-882352E12D86",
       "outputparameters": {
         "recordid": "ADCB1376-BA66-496C-A56E-AB7A7D5A9193"
       }
    }
   ]

-> cancelmethod Сообщение-команда из Октелл на прекращение выполнения ранее запущенного динамического метода.

   [
     "cancelmethod",
     {
       "qid": "6ADC3F1E-B1DD-4768-BAF8-3EEB477B2F17",
       "userlogin": "Иванов",
       "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
       "methodkey": "card_records",
       "executionid": "25FC81FC-C5D0-40FB-B4E0-882352E12D86",
       "forcecancel": 0
     }
   ]

-> getavailableforms Отправляет из Oktell в CRM сообщение-запрос на возврат доступных карточек CRM.

   [
    "getavailableforms",
    {
     "qid": "7A1FF57A-ED91-4033-A42F-1D2AE630450E"
    }
   ]


<- availableforms

  Cообщение-ответ из CRM в Oktell со списком доступных карточек CRM.
  
   [
     "availableforms",
     {
       "qid": "7A1FF57A-ED91-4033-A42F-1D2AE630450E",
       "forms": [
         {
           "key": "B840825C-95BB-49B8-9B30-74D3225701BF", 
   	      "name": "Данные о компании",
   	      "description": "Отображает контактные данные об абоненте (комании или человеке) при входящем/исходящем звонке",
   	      "inputparams": [
             {
               "key": "accountid",
               "name": "Код компании",
               "description": "Код компании, который CRM возвращает в поле [accountid] в ответ на запрос данных о компании по номеру телефона",
               "type": "string"
             },
             {
               "key": "page",
               "name": "Активная страница",
               "description": "Открываемая страница формы по умолчанию при открытии карточки",
               "type": "list",
               "items": [
                 {
                   id: "page1",
                   name: "Контактные данные"
                 },
                 {
                   id: "page2",
                   name: "История взаимодействия"
                 },
                 {
                   id: "page3",
                   name: "Комментарии"
                 }
               ]
             {...},
             {...}
           ]
         },
         {...},
         {...}
       ]
     }
   ]

-> showform Сообщение-команда из Октелл в CRM на открытие карточки у конкретного пользователя.

   [
     "showform",
     {
       "qid": "5CF770AE-E308-41DA-B89E-7BBCE75BE36F",
       "userlogin": "Иванов",
       "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
       "formkey": "B840825C-95BB-49B8-9B30-74D3225701BF",
       "windowid": "9F5D8B1A-8818-41EA-A240-04DA07498C40",
       "inputparameters": {
         "accountid": "05379F49-AB22-4872-B2C2-0D4BA019EA0B",
         "page": "page2"
       }
     }
   ]


<- formresult Сообщение-результат из CRM в Октелл при закрытии карточки пользователем с возвратом выходных значений. Не отправляется, если отображение прерывается командой CloseForm

   [
     "formresult",
     {
       "qid": "EC9E1619-AC1B-4071-98B9-30808B9ED0EC",
       "userlogin": "Иванов",
       "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
       "formkey": "EC9E1619-AC1B-4071-98B9-30808B9ED0EC",
       "windowid": "25FC81FC-C5D0-40FB-B4E0-882352E12D86",
       "outputparameters": {
         "comment": "блаблабла"
       }
    }
   ]

-> closeform Сообщение-команда из Октелл на закрытие карточки у конкретного пользователя.

   [
     "closeform",
     {
       "qid": "FAA1A503-FEC6-4D23-ADA9-2E4FD63F2C96",
       "userlogin": "Иванов",
       "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
       "formkey": "B840825C-95BB-49B8-9B30-74D3225701BF",
       "windowid": "9F5D8B1A-8818-41EA-A240-04DA07498C40",
       "forceclose": 0
     }
   ]



КОНФЕРЕНЦ-СВЯЗЬ

Запросы из CRM, ответы от Октелла, события из Октелла

<- confhandleevent Подписка/отписка на указанную категорию событий сервера конференций.

   [
    "confhandleevent",
    {
     "qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",
     "eventtype": "competitors",
     "handle": true
    }
   ]
   //* eventtype - уровень глубины получаемых сообщений. conferences|competitors|userstates
   //			предполагается, что в общем случае инфа идет только о списке конференций (conferences)
   //          когда юзер находится в конференции - дополнительно о внутреннем состоянии конференции (competitors)
   //			когда юзер настраивает конференцию и выбирает из списка участников для автоматического приглашения - о состояниях всех пользователей (userstates)
   //        Подписками управляет сам внешний модуль. Когда потребность уходит - необходимо отписываться, чтобы не заваливать канал порожняком.
   //* handle - true|false - подписаться/отписаться

<- checkcanconnecttogathertoconference Запрос из CRM к oktell. В момент коммутации, в случае если во флеш-буфере находится абонент, определяет, существует ли возможность переключиться всем вместе в конференцию единой командой. Это возможно, если один из абонентов - конференция, а другой - линия/пользователь.

   [
    "checkcanconnecttogathertoconference",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"
    }
   ]


-> confcheckcanconnecttogatherresult Ответ из Oktell в CRM на запрос возможности совместного переключения в конференцию.

   [
    "confcheckcanconnecttogatherresult",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "canconnecttogather": true,
     "inconference": false,
    }
   ]

<- connecttogathertoconference Запрос из CRM к oktell. Производит совместное переключение текущего онлайн-абонента и флеш-абонента в существующую конференцию.

   [
    "connecttogathertoconference",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"
    }
   ]



<- buildconferencefromcommutation Запрос из CRM к oktell. Производит преобразование текущей коммутации в конференцию с двумя участниками.

   [
    "buildconferencefromcommutation",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"
    }
   ]

<- attachasghost Запрос из CRM к Oktell. Производит подключение к указанному каналу/пользователю на прослушку/помощь.

   [
    "attachasghost",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "ghostedid": "FE9D6B52-C267-4D39-AC9F-81A0F44713FF",
     "ghostedlogin": "Петров"
    }
   ]


-> attachasghostresult Ответ из Oktell в CRM на запрос о подключении к каналу на прослушку.

   [
    "attachasghostresult",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "result": 0,
     "error": 52703
    }
   ]
   //* ghostedid - ид пользователя или линии, к которому подцепляться для прослушки
   //* ghostedlogin - логин пользователя, к которому подцепляться для прослушки

<- getconferences Запрос из CRM в Oktell на возврат текущих активных конференц-сессий.

   [
    "getconferences",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"
    }
   ]


-> getconferencesresult Ответ из Oktell в CRM со списком текущих активных конференц-сессий.

   [
    "getconferencesresult",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferencelist": [
      {
       "id": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",
       "room": 884,
       "name": "Планерка",
       "description": "",
       "accessmode": 11,
       "accessmodestr": "Free",
       "isselector": true,
       "record": true,
       "creatorid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
       "creatorlogin": "Иванов",
       "creatorname": "Иван Иванович Иванов", 
       "directorid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
       "directorlogin": "Петров",
       "directorname": "Петр Петрович Петров",
       "timestart": "2011-04-03 17:58:22",
       "canvieweachother": true,
       "everyonecaninvite": true,
       "recordrights": 2,
       "recordrightsstr": "Competitors",
       "isghost": false,
       "ghostmode": 11,
       "ghostmodestr": "Monitor"
      },
      {...},
      {...}
     ]
    }
   ]

<- getconferencecompetitors Запрос из CRM в Oktell на возврат текущих участников указанной конференции.

   [
    "getconferencecompetitors",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "F16D26E3-2A78-49C2-AFCE-815611A16E22"
    }
   ]


-> getconferencecompetitorsresult Ответ из Oktell в CRM со списком текущих участников указанной в запросе конференции.

   [
    "getconferencecompetitorsresult",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "F16D26E3-2A78-49C2-AFCE-815611A16E22",
     "competitorlist": [
      {
       "competitorid": "65AC0E98-64DE-41CF-B609-D00A4C8B07FD",
       "chainid": "91687102-E19F-466C-A0BE-B6C3EEF83EE7",
       "sessionid": "91687102-E19F-466C-A0BE-B6C3EEF83EE7",
       "userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
       "userlogin": "Петров",
       "username": "Петр Петрович Петров",
       "lineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",
       "linenumber": "17004",
       "number": "472",
       "intnumber": "472",
       "extnumber": "",
       "confstate": 11,
       "confstatestr": "OnlineTalking",
       "wanttalk": false,
       "isdirector": true,
       "iscreator": false,
       "isghost": false,
       "isghostmajor": false,
       "islifebuoy": false
      },
      {...},
      {...}
     ]
    }
   ]

<- getusersforconferenceinvitelist Запрос из CRM в Oktell на возврат возможных участников конференции (учетных записей всех пользователей системы с указанием их состояний и присутствия в других конференциях).

   [
    "getusersforconferenceinvitelist",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"
    }
   ]

-> getusersforconferenceinvitelistresult Ответ из Oktell в CRM со списком учетных записей, доступных для приглашения в конференцию с их текущими состояниями и присутствием в других конференциях.

   [
    "getusersforconferenceinvitelistresult",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "possiblecompetitorlist": [
      {
       "userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
       "userlogin": "Петров",
       "username": "Петр Петрович Петров",
       "groupid": "F72C315A-F9EA-471E-A679-D4BA4797DB51",
       "groupname": "Руководство"
       "userstate": 5,
       "userstatestr": "usFullbusy",
       "isredirect": false,
       "islunch": false,
       "inconference": true,
       "conferenceid": "F16D26E3-2A78-49C2-AFCE-815611A16E22",
       "confstate": 11,
       "confstatestr": "OnlineTalking"
      },
      {...},
      {...}
     ],
     "result": 1
    }
   ]

<- createnewconference Запрос из CRM в Oktell на создание новой конференции. Указывает параметры самой конференц-сессии, список участников для приглашения на старте.

   [
    "createnewconference",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conference": {
      "id": "17A3F9D2-040C-471B-A4F5-6A13BEB27667",
      "room": 578
      "name": "Совещание с заказчиком",
      "description": "",
      "accessmode": "free",
      "isselector": true,
      "record": true,
      "recordrights": "selected",
      "everyonecaninvite": true,
      "canvieweachother": true
     },
     "competitors": [
      {
       "userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
       "userlogin": "Петров",
       "lineid": "F93FE9C-0B80-4242-BD24-D338BE8E4FC0",
       "intnumber": "472",
       "extnumber": "89047289889",
       "cantalk": true
      },
      {...},
      {...}
     ],
     "recordusers": [
      {
       "userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
       "userlogin": "Петров",
      },
      {...},
      {...}
     ]
    }
   ]


-> createnewconferenceresult Ответ из Oktell в CRM с результатом исполнения команды на создание конференции.

   [
    "createnewconferenceresult",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "result": 0,
     "error": 1,
     "errormsg": "alreadyexists",
    }
   ]
   //* conference:accessmode - free|shared|closed
   //* conference:recordrights - director|competitors|selected
   //* competitors - список автоматически приглашаемых участников. Допускается/следует указывать только один параметр из набора {userid|userlogin, lineid, intnumber, extnumber}
   //* список recordusers имеет смысл только когда conference:recordrights=selected.

<- setupexistingconference Запрос из CRM в Oktell от имени управляющего конференции на изменение параметров указанной конференции.

   [
    "setupexistingconference",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conference": {
      "id": "17A3F9D2-040C-471B-A4F5-6A13BEB27667",
      "room": 578
      "name": "Совещание с заказчиком",
      "description": "",
      "accessmode": "free",
      "isselector": true,
      "recordrights": "selected",
      "everyonecaninvite": true,
      "canvieweachother": true,
      "ghostmode": "monitor"
     },
     "recordusers": [
      {
       "userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
       "userlogin": "Петров",
      },
      {...},
      {...}
     ]
    }
   ]


-> setupexistingconferenceresult Ответ из Oktell в CRM с результатом исполнения команды на изменение параметров конференции.

   [
    "setupexistingconferenceresult",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "result": 0,
     "error": 1,
     "errormsg": "notfound",
    }
   ]
   //* conference:accessmode - free|shared|closed
   //* conference:recordrights - director|competitors|selected
   //* conference:ghostmode - monitor|help|talk
   //* список recordusers имеет смысл только когда conference:recordrights=selected.

<- getconferenceinfo Запрос из CRM в Oktell на возврат текущих параметров указанной конференции.

   [
    "getconferenceinfo",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3"
    }
   ]


-> getconferenceinforesult Ответ из Oktell в CRM. Возвращает текущие настройки указанной в запросе конференции, текущих ее участников и их состояния.

   [
    "getconferenceinforesult",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "result": 1,
     "conference": {
       "id": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",
       "room": 884,
       "name": "Планерка",
       "description": "",
       "accessmode": 11,
       "accessmodestr": "Free",
       "isselector": true,
       "record": true,
       "creatorid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
       "creatorlogin": "Иванов",
       "creatorname": "Иван Иванович Иванов", 
       "directorid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
       "directorlogin": "Петров",
       "directorname": "Петр Петрович Петров",
       "timestart": "2011-04-03 17:58:22",
       "canvieweachother": true,
       "everyonecaninvite": true,
       "recordrights": 2,
       "recordrightsstr": "Competitors",
       "isghost": false,
       "ghostmode": 11,
       "ghostmodestr": "Monitor"
     },
     "competitors": [
      {
       "userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
       "userlogin": "Петров",
       "lineid": "F93FE9C-0B80-4242-BD24-D338BE8E4FC0",
       "intnumber": "472",
       "extnumber": "89047289889",
       "cantalk": true
      },
      {...},
      {...}
     ],
     "recordusers": [
      {
       "userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
       "userlogin": "Петров",
      },
      {...},
      {...}
     ]
    }
   ]

<- stopconference Запрос из CRM в Oktell от имени управляющего конференции на прекращение указанной конференции.

   [
    "stopconference",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3"
    }
   ]


-> stopconferenceresult Ответ из Oktell в CRM с результатом выполнения запроса на прекращение указанной конференции.

   [
    "stopconferenceresult",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",
     "result": 0,
     "error": 1,
     "errormsg": "accessdenied"
    }
   ]

<- confsetvoiceparams Запрос из CRM в Oktell от имени управляющего конференции на изменение голосовых свойств канала указанного участника указанной конференции.

   [
    "confsetvoiceparams",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",
     "competitor": {
      "competitorid": "249995A5-8A64-49CC-87CA-D797FCFB7782",
      "userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
      "userlogin": "Петров",
      "lineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",
      "cantalk": true,
      "canlisten": true,
      "ghosthelp": false
     }
    }
   ]


-> confsetvoiceparamsresult Ответ из Oktell в CRM с результатом выполнения запроса на изменение голосовых свойств канала.

   [
    "confsetvoiceparamsresult",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",
     "result": 0,
     "error": 1,
     "errormsg": "accessdenied"
    }
   ]
   //*  competitor:cantalk - может ли говорить
   //*  competitor:canlisten - может ли слышать
   //*  competitor:ghosthelp - в режиме прослушки:помощи для одного из подслушиваемых каналов - может ли слышать подключившегося супервизора
   //*  достаточно/следует указывать только один из набора определяющих участника идентификаторов {competitorid, userid|userlogin, lineid}

<- confsetwanttalk Запрос из CRM в Oktell от имени простого бесправного участника селекторного совещания на взятие голоса (сообщение для управляющего).

   [
    "confsetwanttalk",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",
     "wanttalk": true
    }
   ]


-> confsetwanttalkresult Ответ из Oktell в CRM с результатом выполнения запроса на взятие голоса.

   [
    "confsetwanttalkresult",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",
     "result": 1
    }
   ]

<- confsetghostmode Запрос из CRM в Oktell от имени прослушивающего супервизора на изменение режима конференц-помощи.

   [
    "confsetghostmode",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",
     "ghostmode": "help",
    }
   ]


-> confsetghostmoderesult Ответ из Oktell в CRM с результатом выполнения запроса на изменение режима конференц-помощи.

   [
    "confsetghostmoderesult",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",
     "result": 1
    }
   ]

<- exitconference Запрос из CRM в Oktell от имени любого участника на выход из конференции. В канал подается отбой. Альтернативой является положение трубки на телефоне.

   [
    "exitconference",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3"
    }
   ]


-> exitconferenceresult Ответ из Oktell в CRM с результатом выполнения запроса на выход из конференции.

   [
    "exitconferenceresult",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",
     "result": 1
    }
   ]

<- confdisconnectcompetitor

Запрос из CRM в Oktell от имени управляющего конференцией на вывод из конференции указанного участника.

[

    "confdisconnectcompetitor",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",
     "competitor": {
      "competitorid": "249995A5-8A64-49CC-87CA-D797FCFB7782",
      "userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
      "userlogin": "Петров",
      "lineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",
     }
    }
   ]


-> confdisconnectcompetitorresult Ответ из Oktell в CRM с результатом выполнения запроса на вывод указанного в запросе участника.

   [
    "confdisconnectcompetitorresult",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",
     "result": 1
    }
   ]

<- enterconference

Запрос из CRM в Oktell на вход в конференцию. При необходимости осуществляет запрос на вход у управляющего. Прерывание может производиться командой exitconference

[

    "enterconference",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3"
    }
   ]


-> enterconferenceresult Ответ из Oktell в CRM с результатом выполнения запроса на вход в конференцию.

   [
    "enterconferenceresult",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",
     "result": 1
    }
   ]

<- confdisconnectcompetitor

Запрос-команда из CRM в Oktell от имени управляющего конференцией на разрешение/запрет входа в конференцию указанному участнику, ранее запросившему право входа.

   [
    "confpermitdenyentrance",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",
     "competitor": {
      "competitorid": "249995A5-8A64-49CC-87CA-D797FCFB7782",
      "userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
      "userlogin": "Петров",
      "lineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",
      "permit": true
     }
    }
   ]


-> confpermitdenyentranceresult Ответ из Oktell в CRM с результатом выполнения запроса на разрешение/запрет входа в конференцию участнику.

   [
    "confpermitdenyentranceresult",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",
     "result": 1
    }
   ]

<- invitetoconference

Запрос из CRM в Oktell от имени управляющего конференцией или любого другого участника на приглашение в конференцию стороннего абонента (пользователя, линию, абонента по внутреннему/внешнему номеру).

   [
    "invitetoconference",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",
     "competitors": [
      {
       "userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
       "userlogin": "Петров",
       "lineid": "F93FE9C-0B80-4242-BD24-D338BE8E4FC0",
       "intnumber": "472",
       "extnumber": "89047289889",
       "cantalk": true
      },
      {...},
      {...}
     ]
    }
   ]


-> invitetoconference Ответ из Oktell в CRM с результатом выполнения запроса на приглашение нового участника конференции.

   [
    "invitetoconference",
    {
     "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",
     "result": 1
    }
   ]
   //* competitors - список автоматически приглашаемых участников. Допускается/следует указывать только один параметр из набора {userid|userlogin, lineid, intnumber, extnumber}

События из Октелла по теме конференций.


-> conflistchanged Событие из Oktell в CRM об изменении списка текущих активных конференций.

   [
    "conflistchanged",
    {
     "qid": "2A6380B4-ADD4-4CD3-9A5C-9483A3B3723A",
     "conferencelist": [
      {
       "id": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",
       "room": 884,
       "name": "Планерка",
       "description": "",
       "accessmode": 11,
       "accessmodestr": "Free",
       "isselector": true,
       "record": true,
       "creatorid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
       "creatorlogin": "Иванов",
       "creatorname": "Иван Иванович Иванов", 
       "directorid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
       "directorlogin": "Петров",
       "directorname": "Петр Петрович Петров",
       "timestart": "2011-04-03 17:58:22",
       "canvieweachother": true,
       "everyonecaninvite": true,
       "recordrights": 2,
       "recordrightsstr": "Competitors",
       "isghost": false,
       "ghostmode": 11,
       "ghostmodestr": "Monitor"
      },
      {...},
      {...}
     ]
    }
   ]



-> "conf***" Другие событие из Oktell в CRM об изменениях на сервере конференций. Общий список возможных событий приведен ниже.

   [
    "conf***",
    {
     "qid": "2A6380B4-ADD4-4CD3-9A5C-9483A3B3723A",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "eventinfo": {
        ***
     }
    }
   ]
   //* confparamschanged, 
   //* confcompositionchanged, 
   //* confcompetitorstatechanged, 
   //* confentrancedenied, 
   //* confentrancepermitted, 
   //* confentrancerequest, 
   //* confnotifyinvite, 
   //* confpossiblecompetitorstatechanged



<- getuserstate Запрос из CRM в Oktell состояния указанного пользователя системы.

   [
    "getuserstate",
    {
     "qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    }
   ]


-> getuserstateresult Ответ из Oktell в CRM с полным состоянием указанного в запросе пользователя системы.

   [
    "getuserstateresult",
    {
     "qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "userstate": 5,
     "userstateid": 5,
     "userstatestr": "usFullbusy",
     "onredirect": true,
     "onlunch": false,
     "oncallcenter": false
    }
   ]

<- checkuserintask Запрос из CRM в Oktell о присутствии указанного пользователя в задачах коллцентра.

[

    "checkuserintask",
    {
     "qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    }
   ]


-> checkuserintaskresult Ответ из Oktell в CRM с ответом на запрос присутствия указанного в запросе пользователя в задачах коллчентра. Описание задачи в случае положительного ответа.

   [
    "checkuserintaskresult",
    {
     "qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "intask": true,
     "task": {,
      "id": "1D565B41-1D16-46DE-B2C5-CF55ED5279F0",
      "name": "Исходящий обзвон",
      "code": "af-2329",
      "direction": "outgoing",
      "contacttype": 0,
      "contacttypestr": "Call",
      "projectid": "E6ADBA0D-C9FF-40F2-96FF-6D2F455F9D5A"
     }
    }
   ]

<- getcurrentlinestate Запрос из CRM в Oktell состояния телефонной линии указанного пользователя.

   [
    "getcurrentlinestate",
    {
     "qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    }
   ]


-> getcurrentlinestateresult Ответ из Oktell в CRM с полным состоянием телефонной линии указанного в запросе пользователя системы.

   [
    "getcurrentlinestateresult",
    {
     "qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "hasline": true,
     "lineid": "866692FC-DA08-459D-BAA1-428F9BA6A0D1",
     "linenumber": "17012",
     "linetype": 5,
     "linetypestr": "ltIntIP",
     "linestate": 32,
     "linestatestr": "lsCommutated"
    }
   ]

<- getcurrentlinestate Запрос из CRM в Oktell состояния очереди указанного пользователя.

[

    "getcurrentqueue",
    {
     "qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    }
   ]


-> getcurrentlinestateresult Ответ из Oktell в CRM с состоянием очереди указанного в запросе пользователя системы.

   [
    "getcurrentqueueresult",
    {
     "qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "queue": [
      {
       "objectid": "723114EE-2ABF-4806-9BC6-FBB532C31B44",
       "objecttype": 0,
       "objecttypestr": "qotQueueLogic",
       "queuesource": 1,
       "queuesourcestr": "qsLineLogic",
       "queuepriority": 9,
       "srcelementid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",
       "srclineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",
       "srclinenumber": "17004",
       "startqueuetime": "2011-04-05 15:02:28",
       "lenqueue": 72,
       "managedlineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",
       "managedlinenumber": "17004",
       "callerid": "472",
       "calledid": "479",
       "isuser": true,
       "userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
       "userlogin": "Петров",
       "username": "Петр Петрович Петров",
       "department": "Руководство",
       "chainid": "02B99AD3-C954-4FD3-B07D-DFEDD83C0BF5",
       "istask": true,
       "taskid": "95575C37-5FDE-412C-8F42-36D55B1EC6BB",
       "taskname": "Входящая кампания",
       "taskdirection": "incoming",
       "tasklistid": "7D9A3E9C-0AD3-4C68-BC02-4EBFE3684507",
       "tasklistinfo": [
        {
         "key": "Название организации",
         "value": "ООО МДГХ"
        },
        {...},
        {...}
       ]
      },
      {...},
      {...}
     ]
    }
   ]

<- getchaincontent Запрос из CRM в Oktell на возврат контента текущей сессии, в которой участвует линия указанного пользователя. Кто инициировал звонок, когда, с кем коммутировался, кто переключал, куда, на кого, когда, были ли комментарии какие-то установлены в контент...

[

    "getchaincontent",
    {
     "qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"
    }
   ]


-> getchaincontentresult Ответ из Oktell в CRM с контентом текущей сессии указанного в запросе пользователя.

   [
    "getchaincontentresult",
    {
     "qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "chainid": "19ADB2C3-A0B5-47AB-AB2C-CBE15CF98968",
     "result": 1,
     "content": {
      "chainid": "19ADB2C3-A0B5-47AB-AB2C-CBE15CF98968",
      "createtime": "2011-04-06 20:38:41",
      "customfield": "трололололо",
      "trace": [
       {
        "contentelementtype": "call",
        "pbxdirection": "internal",
        "objectid": "723114EE-2ABF-4806-9BC6-FBB532C31B44",
        "objecttype": 0,
        "objecttypestr": "qotQueueLogic",
        "queuesource": 5,
        "queuesourcestr": "qsIncomingTask",
        "queuepriority": 7,
        "srcelementid": "98F670D2-20E2-4883-B45E-42CDE1F3365F",
        "srclineid": "98F670D2-20E2-4883-B45E-42CDE1F3365F",
        "srclinenumber": "13005",
        "startqueuetime": "2011-04-06 20:38:41",
        "managedlineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",
        "managedlinenumber": "17004",
        "callerid": "89048928835",
        "calledid": "4959211586",
        "isuser": false,
        "department": "",
        "istask": true,
        "taskid": "95575C37-5FDE-412C-8F42-36D55B1EC6BB",
        "taskname": "Входящая кампания",
        "taskdirection": "incoming",
        "tasklistid": "7D9A3E9C-0AD3-4C68-BC02-4EBFE3684507",
        "tasklistinfo": [
         {
          "key": "Название организации",
          "value": "ООО МДГХ"
         }
        ]
       },
       {
        "contentelementtype": "commutation",
        "commutationid": "58D76504-DA2D-42C2-9016-1089A94DC1BF",
        "timestart": "2011-04-06 20:40:01",
        "timeanswer": "2011-04-06 20:40:04",
        "connectiontype": 5,
        "connectiontypestr": "ctOuterInner",
        "isrecorded": true,
        "customfield": "траляляляля",
        "alineid": "98F670D2-20E2-4883-B45E-42CDE1F3365F",
        "alinenumber": "13005",
        "anumberdialed": "4959211586",
        "aoutnumber": "89048928835",
        "aisuser": false,
        "atext": "ООО «СДЗЦ» (89048928835)",
        "blineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",
        "blinenumber": "17004",
        "bnumberdialed": "",
        "boutnumber": "472",
        "bisuser": true,
        "buserid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
        "buserlogin": "Петров",
        "busername": "Петр Петрович Петров",
        "btext": "Петр Петрович Петров",
        "timestop": "2011-04-06 20:42:12",
        "length": 128.32,
        "stopside": "a",
        "stopreason": 2,
        "stopreasonstr": "scrAbonentHangOff"
       },
       {...},
       {...}
      ]
     }
    }
   ]
   * trace:contentelementtype: 

<- setchaincontentcustomfield Запрос из CRM в Oktell на установку комментария в контент текущей сессии, в которой участвует канал указанного пользователя.

   [
    "setchaincontentcustomfield",
    {
     "qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "customfield": "фывафыдвлаожфыдлвао"
    }
   ]


-> setchaincontentcustomfieldresult Ответ из Oktell в CRM с результатом установки комментария в контент текущей сессии, в которой участвует канал указанного в запросе пользователя.

   [
    "setchaincontentcustomfieldresult",
    {
     "qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "chainid": "19ADB2C3-A0B5-47AB-AB2C-CBE15CF98968",
     "result": 1
    }
   ]

<- setchaincontentcustomfield Запрос из CRM в Oktell на возврат комментария из контента текущей сессии, в которой участвует канал указанного пользователя.

   [
    "getchaincontentcustomfield",
    {
     "qid": "AF4B98AA-51D8-4944-B10C-04B0DE1E1BBC",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    }
   ]


-> getchaincontentcustomfieldresult Ответ из Oktell в CRM. Возвращает комментарий из контента текущей сессии, в которой участвует канал указанного в запросе пользователя.

   [
    "getchaincontentcustomfieldresult",
    {
     "qid": "AF4B98AA-51D8-4944-B10C-04B0DE1E1BBC",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "chainid": "19ADB2C3-A0B5-47AB-AB2C-CBE15CF98968",
     "customfield": "фывафыдвлаожфыдлвао",
     "result": 1
    }
   ]

<- getcallingoutabonentinfo Запрос из CRM в Oktell на возврат информации об абоненте, которому осуществляется исходящий вызов от имени указанного пользователя.

   [
    "getcallingoutabonentinfo",
    {
     "qid": "AF4B98AA-51D8-4944-B10C-04B0DE1E1BBC",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"
    }
   ]


-> getcallingoutabonentinforesult Ответ из Oktell в CRM. Возвращает информацию об абоненте, которому осуществляется исходящий вызов от имени указанного в запросе пользователя.

   [
    "getcallingoutabonentinforesult",
    {
     "qid": "AF4B98AA-51D8-4944-B10C-04B0DE1E1BBC",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "chainid": "19ADB2C3-A0B5-47AB-AB2C-CBE15CF98968",
     "number": "89032728973",
     "name": "",
     "lineid": "98F670D2-20E2-4883-B45E-42CDE1F3365F",
     "linenumber": "13005"
    }
   ]

<- getusersbynumbers Запрос из CRM в Oktell на возврат информации о пользователях системы по указанным внутренним номерам от имени указанного пользователя.

[

    "getusersbynumbers",
    {
     "qid": "20D0F23E-F26A-4BD9-BE65-B6F76D91880A",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "numbers": [
      "883",
      "470",
      "472",
      "485"
     ]
    }
   ]


-> getusersbynumbersresult Ответ из Oktell в CRM. Возвращает информацию о пользователях, которые обнаруживаются системой при парсинге указанных в запросе внутренних номеров.

   [
    "getusersbynumbersresult",
    {
     "qid": "20D0F23E-F26A-4BD9-BE65-B6F76D91880A",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "result": 1,
     "users": [
      {
       "userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
       "userlogin": "Петров",
       "username": "Петр Петрович Петров",
      },
      {
       "userid": "2AC66E31-ADF0-4F84-A589-417A5A599EEA",
       "userlogin": "Сидоров",
       "username": "Сидор Сидорович Сидоров"
      }
     ]
    }
   ]

<- getitemsbynumbers Запрос из CRM в Oktell на возврат информации о пользователях и линиях системы по указанным внутренним номерам от имени указанного пользователя.

[

    "getitemsbynumbers",
    {
     "qid": "0A8B1B7C-E4DD-47FC-A17F-A9200602A8DE",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "numbers": [
      "883",
      "470",
      "472",
      "485"
     ]
    }
   ]


-> getitemsbynumbersresult Ответ из Oktell в CRM. Возвращает информацию о пользователях и линиях, которые обнаруживаются системой при парсинге указанных в запросе внутренних номеров.

   [
    "getitemsbynumbersresult",
    {
     "qid": "0A8B1B7C-E4DD-47FC-A17F-A9200602A8DE",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "result": 1,
     "items": [
      {
       "type": "user",
       "userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
       "userlogin": "Петров",
       "username": "Петр Петрович Петров",
      },
      {
       "type": "user",
       "userid": "2AC66E31-ADF0-4F84-A589-417A5A599EEA",
       "userlogin": "Сидоров",
       "username": "Сидор Сидорович Сидоров"
      },
      {
       "type": "line",
       "lineid": "50203B8C-8079-4B52-8D24-ECDA4BF7877A",
       "linenumber": "17025"
      }
     ]
    }
   ]

<- getsystemnumberbyuser Запрос из CRM в Oktell на возврат системного внутреннего номера, по которому может быть произведен вызов указанного в суб-параметре пользователя от имени указанного пользователя.

   [
    "getsystemnumberbyuser",
    {
     "qid": "0A8B1B7C-E4DD-47FC-A17F-A9200602A8DE",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "user": {
      "userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
      "userlogin": "Петров"
     }
    }
   ]


-> getsystemnumberbyuserresult Ответ из Oktell в CRM. Возвращает системный внутренний номер указанного в суб-параметре пользователя.

   [
    "getsystemnumberbyuserresult",
    {
     "qid": "0A8B1B7C-E4DD-47FC-A17F-A9200602A8DE",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "result": 1,
     "systemnumber": "U28CA980EF9F84B83B4934454AA54FCD8"
     ]
    }
   ]

<- getpbxnumbersforitem Запрос из CRM в Oktell на возврат текстового списка внутренних номеров указанного в суб-параметре пользователя.

[

    "getpbxnumbersforitem",
    {
     "qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"
     "itemtype": "user",
     "itemuserid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
     "itemuserlogin: "Петров"
    }
   ]


-> getpbxnumbersforitemresult Ответ из Oktell в CRM. Возвращает список несистемных внутренних номеров через запятую, по которым возможен вызов пользователя, указанного в суб-параметре запроса.

   [
    "getpbxnumbersforitemresult",
    {
     "qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "itemtype": "user",
     "itemuserid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
     "itemuserlogin: "Петров",
     "itemnumbers": "403, 472"
    }
   ]
   /*  "itemtype": "line",
   /*  "itemlineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",
   /*  "itemlinenumber": "17004"

<- getmainpbxnumberforitem Запрос из CRM в Oktell на возврат основного несистемного внутреннего номера, по которому возможен вызов объекта системы (пользователя/линии), указанного в суб-параметре.

[

    "getmainpbxnumberforitem",
    {
     "qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"
     "itemtype": "user",
     "itemuserid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
     "itemuserlogin: "Петров"
    }
   ]


-> getmainpbxnumberforitemresult Ответ из Oktell в CRM. Возвращает основной несистемный внутренний номер, по которому возможен вызов объекта системы (пользователя/линии), указанного в суб-параметре запроса.

   [
    "getmainpbxnumberforitemresult",
    {
     "qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "itemtype": "user",
     "itemuserid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
     "itemuserlogin: "Петров",
     "itemnumber": "472"
    }
   ]
   /*  "itemtype": "line",
   /*  "itemlineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",
   /*  "itemlinenumber": "17004"

<- getpbxnumbers Запрос из CRM в Oktell на возврат всех внутренних номеров системы. В примере приведен запрос для формирования ответа с перечнем номеров в простом виде.

[

    "getpbxnumbers",
    {
     "qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",
     "mode": "simple"
    }
   ]

<- getpbxnumbers Запрос из CRM в Oktell на возврат всех внутренних номеров системы от имени указанного пользователя. В примере приведен запрос для формирования ответа с перечнем номеров в простом виде.

   [
    "getpbxnumbers",
    {
     "qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "mode": "simple"
    }
   ]


-> getpbxnumbersresult Ответ из Oktell в CRM. Возвращает список всех внутренних номеров системы. В примере приведен ответ на запрос с перечнем номеров в простом виде.

   [
    "getpbxnumbersresult",
    {
     "qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "mode": "simple",
     "numbers": [
      "401",
      "402",
      "403",
      "404",
      "405",
      "471",
      "472",
      "473"
     ]
    }
   ]


<- getpbxnumbers Запрос из CRM в Oktell на возврат всех внутренних номеров системы. В примере приведен запрос для формирования ответа с перечнем номеров в полном виде.

   [
    "getpbxnumbers",
    {
     "qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",
     "mode": "full"
    }
   ]

<- getpbxnumbers Запрос из CRM в Oktell на возврат всех внутренних номеров системы от имени указанного пользователя. В примере приведен запрос для формирования ответа с перечнем номеров в полном виде.

   [
    "getpbxnumbers",
    {
     "qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "mode": "full"
    }
   ]


-> getpbxnumbersresult Ответ из Oktell в CRM. Возвращает список всех внутренних номеров системы. В примере приведен ответ на запрос с перечнем номеров в полном виде со всеми описаниями и состояниями.

   [
    "getpbxnumbersresult",
    {
     "qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",
     "userlogin": "Иванов",
     "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
     "mode": "full",
     "numbers": [
      {
       "id": "9079E514-FECF-4DFD-BF48-5EDE4241E3A1",
       "number": "472",
       "type": 0,
       "typestr": "intRule",
       "isgroup": false,
       "caption": "Петров",
       "state": 5,
       "statestr": "usFullbusy",
       "department": "Руководство"
      },
      {...},
      {...}
     ]
    }
   ]
   /* number:type - intRule(0)|intFast(2)|intIVR(3)|intEmergency(4)
   /* number:state - usDisconnected(0)|usReady(1)|usLunch(2)|usOff(3)|usFullbusy(5)|usReserved(6)|usWOPhone(7)|usError(100)|usRinging(201)