Oktell Web-Socket Protocol — различия между версиями

Материал из Oktell
Перейти к: навигация, поиск
Строка 311: Строка 311:
 
# Для конкретного телефона в [[Карта сети|карте сети]] Oktell задается конкретный пользователь WebCRM, при логине производится автоматическая привязка (если телефону назначен также пользователь по умолчанию, то он отключается). Обратный процесс при выходе выходе пользователя WebCRM. При этом телефоном считается учетная запись (комбинация логин-пароль или IP-адрес устройства, в зависимости от типа регистрации), и фактически разные устройства могут в течение времени принимать эти значения.
 
# Для конкретного телефона в [[Карта сети|карте сети]] Oktell задается конкретный пользователь WebCRM, при логине производится автоматическая привязка (если телефону назначен также пользователь по умолчанию, то он отключается). Обратный процесс при выходе выходе пользователя WebCRM. При этом телефоном считается учетная запись (комбинация логин-пароль или IP-адрес устройства, в зависимости от типа регистрации), и фактически разные устройства могут в течение времени принимать эти значения.
 
# Во время логина WebCRM в сообщении указывает любой идентификатор (или их список) рабочего места, с которого осуществляется запуск (это может быть HostName, IP-адрес, или любой другой уникальный идентификатор, указанный для сопоставления также и в карте сети в качестве адреса компьютера). Соединенный с этим компьютером логической связью телефон в карте сети становится рабочим телефоном авторизованного таким образом пользователя. По аналогии с работой клиентских приложений Oktell.
 
# Во время логина WebCRM в сообщении указывает любой идентификатор (или их список) рабочего места, с которого осуществляется запуск (это может быть HostName, IP-адрес, или любой другой уникальный идентификатор, указанный для сопоставления также и в карте сети в качестве адреса компьютера). Соединенный с этим компьютером логической связью телефон в карте сети становится рабочим телефоном авторизованного таким образом пользователя. По аналогии с работой клиентских приложений Oktell.
 +
 +
В случае [[#Arch2|схемы интеграции 2]] требуется указание как логина, так и пароля для проведения полной проверки, причем пароль необходимо указывать в виде MD5 хеша. В случае [[#Arch1|схемы интеграции 1]] подразумевается, что авторизация пользователя происходит в WebCRM, и указания пароля при кросс-логине в Oktell не требуется.
 +
 +
<pre>
 +
[
 +
"login",
 +
{
 +
  "qid": "9D484E0E-BE08-47B5-ABBD-490936881056",
 +
  "userlogin": "ivanov",
 +
  "userid": "29834234234",
 +
  "password": ""
 +
}
 +
]
 +
</pre>
  
 
<pre>
 
<pre>

Версия 08:22, 16 ноября 2012

Наверх


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



Краткое описание возможностей телефонии Oktell

Стандартный функционал Oktell предоставляет пользователям:

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

и т.д.


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

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


Именно сценарии придают жизнь Oktell и его сервисам.

Среди событий Oktell, отрабатываемых в сценариях:

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

и т.д.



Схема интеграции 1 (межсерверное соединение)

Arch1.jpg


Сервер Oktell взаимодействует с телефонами и с веб-сервером WebCRM.

Веб-сервер WebCRM взаимодействует ответно с сервером Oktell и с браузерами.

Между сервером Oktell и веб-сервером WebCRM существует только один канал для двустороннего обмена сообщениями.

Установка соединения может производиться как сервером Oktell, так и веб-сервером WebCRM. В случае разрыва соединения сторона-инициатор вновь организует подключение.

  1. При выборе соединения со стороны сервера WebCRM в настройках Web-Socket Oktell должен быть выбран один из режимов «CRM к Oktell» с указанием требуемого способа авторизации.
  2. При выборе соединения со стороны сервера Oktell должен быть выбран один из режимов «Oktell к CRM» с указанием версии протокола Web-Socket.

После установки соединения системы обмениваются данными друг о друге, об авторизованных пользователях, о динамических методах. Все авторизованные в WebCRM пользователи автоматически становятся авторизованными в Oktell. В дальнейшем авторизация подключающихся пользователей и вывод отключившихся осуществляется с помощью сообщений login и logoff. Считается, что авторизацию пользователь проходит на веб-сервере WebCRM, и повторной проверки пароля в Oktell не требуется. Поэтому при организации сообщений login поле password не требует указания.

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

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

В рамках такой интеграции WebCRM может предоставлять в Oktell некоторые общие сервисы, которые доступны администратору при настройке сценариев Oktell. Например, доступ к БД WebCRM на поиск маршрута для обработки звонка конкретного клиента. Подробнее в разделе Динамическое взаимодействие.



Схема интеграции 2 (клиент-серверное соединение)

Arch2.jpg


Сервер Oktell взаимодействует с телефонами и с конечными клиентами (браузерами).

Веб-сервер CRM взаимодействует только с клиентами и БД.

Между Oktell и каждым клиентом существует один или несколько каналов для двустороннего обмена сообщениями (поддерживается работа в нескольких вкладках браузера).

В данном случае клиенты (браузеры) производят коннект к серверу Oktell, и в его настройках Web-Socket должен быть выбран способ соединения «Браузеры к Oktell», а в сообщениях login должен быть указан пароль (MD5).

При таком способе интеграции у WebCRM не требуется наличие собственного Web-Socket сервера. Каждый клиент (браузер) подключается по Web-Socket протоколу непосредственно к серверу Oktell. Веб-сервер занимается формированием страниц и предоставлением данных из БД WebCRM. Непосредственная взаимосвязь между серверами WebCRM и Oktell отсутствует, доступ не требуется, клиенты самостоятельно обрабатывают и объединяют данные двух систем. По такому принципу реализованы Web-клиент Oktell и плагин Oktell.js.

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

В отличие от схемы интеграции 1, где Oktell запрашивает у сервера WebCRM список динамических методов и форм, здесь роль хранилища этих списков выполняет конфигурационный файл websock.config в рабочем каталоге сервера Oktell.

Применительно к этому способу интеграции существует ряд дополнительных методов интерфейса. Большинство таких методов доступно и при схеме интеграции 1, но не являются там необходимыми, так как часть данных и работ проводится на веб-сервере WebCRM. Исключение составляет метод обращения к БД Oktell на исполнение хранимой процедуры и возврат результатов (execpredefineddbstoredproc). Он существует только для этого способа интеграции, при этом разрешенные для исполнения хранимые процедуры содержатся там же в конфигурационном файле websock.config.



Привязка пользователя к телефону

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

Пользователи могут работать:

  • стационарно каждый за своим компьютером.
  • перемещаться с одного рабочего место за другое.
  • работать посменно за одним рабочим местом.

(Рабочее место = компьютер + телефон)

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


Существуют два подхода к решению, также возможны их комбинации в рамках одного сервера.

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

Для этого в карте сети Oktell в свойствах телефона требуется указание пользователя WebCRM

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

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


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

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

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


Синхронизация учетных записей Oktell и WebCRM может производиться по логинам (по умолчанию) или по GUID-идентификаторам. Соответственно в персональных запросах должны указываться userlogin и/или userid.

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


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



Взаимодействие по каналу связи

Socket 3.jpg


Все взаимодействие между Oktell и WebCRM (а также между Oktell и браузером) идет по общему каналу путем двустороннего обмена сообщениями между сторонами.

Взаимодействие на транспортном уровне происходит по Web-Socket протоколу. Поддерживаются версии

Примеры WebSocket Handshake.

В зависимости от выбранной схемы интеграции и выбранного в настройках направления и способа подключения одна из сторон производит подключение (Oktell к серверу WebCRM, сервер WebCRM к Oktell, клиенты WebCRM к Oktell). Рукопожатие (handshake) на установление Web-Socket соединения предлагается также стороной-инициатором. Подробнее. Рукопожатие является HTTP запросом и при необходимости поддерживает прохождение Basic или Digest-авторизации. В качестве логина и пароля выступают указанные в настройках Web-Socket значения. Описание процедуры рукопожатия описывается в документации к каждой версии протокола Web-Socket.

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

Возможные направления и типы сообщений:

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

Каждое сообщение представляет из себя строку JSON или XML в кодировке UTF-8. Сообщения в общем потоке данных в канале отделяются друг от друга в соотвествии с версией используемого протокола Web-Socket:

  • Версии rfc6455 v13, v8, v7 подразумевают использование фреймов, в заголовках которых определяется тип и размер.
  • Версии 76 и 75 подразумевают отделение сообщений байтами 0 и 255. 0 - в начале сообщения, 255 - в конце. Форматы XML и JSON представления данных в текстовом виде гарантируют отсутствие байтов 0 и 255 в теле сообщений.

Формат самих сообщений определяется непосредственно протоколом интеграции Oktell-WebCRM. Например вот так выглядит сообщение из Oktell в WebCRM о факте входящего вызова в формате json:

Json.jpg

Сообщения длиной более 64 КБ упаковываются в Base64 и разбиваются на несколько сообщений длиной до 64К. Для этого используется формат multipart-сообщения в протоколе Oktell-WebCRM. Если версия протокола Web-Socket для передачи сообщений использует фреймы (rfc6455 v13, v8, v7), то способ отправки длинных сообщений в нескольких фреймах определен в самом протоколе. Однако это имеет ограничение: при передаче одного длинного сообщения в нескольких фреймах, оно не может быть прервано передачей других сообщений.

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

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



Динамическое взаимодействие

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

Сразу после организации подключения к серверу WebCRM Oktell производит запрос доступных в WebCRM динамических методов (как было сказано выше, в рамках схемы интеграции 2 вместо запроса к WebCRM осуществляется загрузка сведений из файла websock.config). В ответ WebCRM перечисляет список действий, инициативу исполнения которых она готова отдать наружу в Oktell. При описании метода упоминаются:

  • человеческое название,
  • краткий код метода,
  • описание для администратора, настраивающего Oktell,
  • список входных параметров с упоминанием типов (и возможных значений для перечислений),
  • список выходных параметров, если метод возвращает данные и призван влиять на алгоритм сценария в Oktell,
  • признак того, нужно ли исполнять метод с привязкой к конкретному пользователю, или это обращение к серверу вообще,
  • разрешено ли отменять исполнение (например для метода «открыть карточку такую-то» возможна отмена, означающая «закрыть карточку такую-то»),
  • куда Oktell направлять запрос - через Web-Socket (стандартный для взаимодействия канал) или по HTTP на альтернативный URL веб-сервера.

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

В интеграционном интерфейсе Oktell-WebCRM отсутствует таким образом необходимость конкретизировать методы WebCRM. В момент настройки сценария Oktell администратор уже имеет о них информацию и настраивает конкретный сценарий под место.

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


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

Ни об одном из перечисленных в примере методов WebCRM сервер Oktell не знает, зато знает администратор, настраивающий систему на работу совместно с WebCRM.


Подробно список и интерфейс методов динамического взаимодействия приведен в разделе Методы динамического взаимодействия.



Список методов общего интерфейса

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

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

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

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

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

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


Обмен данными об активных пользователях


>>> getactiveusers

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

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


<<< activeusers

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

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



<<< login

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

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

  1. Для конкретного телефона в карте сети Oktell задается конкретный пользователь WebCRM, при логине производится автоматическая привязка (если телефону назначен также пользователь по умолчанию, то он отключается). Обратный процесс при выходе выходе пользователя WebCRM. При этом телефоном считается учетная запись (комбинация логин-пароль или IP-адрес устройства, в зависимости от типа регистрации), и фактически разные устройства могут в течение времени принимать эти значения.
  2. Во время логина WebCRM в сообщении указывает любой идентификатор (или их список) рабочего места, с которого осуществляется запуск (это может быть HostName, IP-адрес, или любой другой уникальный идентификатор, указанный для сопоставления также и в карте сети в качестве адреса компьютера). Соединенный с этим компьютером логической связью телефон в карте сети становится рабочим телефоном авторизованного таким образом пользователя. По аналогии с работой клиентских приложений Oktell.

В случае схемы интеграции 2 требуется указание как логина, так и пароля для проведения полной проверки, причем пароль необходимо указывать в виде MD5 хеша. В случае схемы интеграции 1 подразумевается, что авторизация пользователя происходит в WebCRM, и указания пароля при кросс-логине в Oktell не требуется.

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


>>> loginresult

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

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



<<< logout

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

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


>>> logoutresult

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

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



Обмен состояниями пользователей


<<< 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",
 }
]


>>> usertextmessageviewed

Сообщение-событие из Oktell в CRM о прочитанности отправленного сообщения.

[
 "usertextmessageviewed",
 {
  "qid": "D5582E04-2964-438C-A8DB-21AF898BBAE0",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "vieweduserid": "66D12297-E400-4862-BD24-F6DACCFDF9DA",
  "messageids": [
    "0263C7BF-DEB3-406F-9CF9-6F56D828C755",
    "4B5110FD-899B-4429-A659-2B9695B4D89E"
  ]
 }
]


<<< sendusertextmessage

Запрос из 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": "раз два три четыре пять вышел зайчик погулять",
 }
]


<<< setusermessageviewed

Запрос из CRM в Oktell на выставление признака прочитанности текстового сообщения пользователем. В ответ возвращается количество реально отмеченных сообщений. Может быть больше или меньше указанного. Событие о прочитанности отправляется пользователю, указанному в поле senderuserid.

[
 "setusermessageviewed",
 {
  "qid": "AA29AE60-50C3-48EE-A32E-3D98265D7412",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "senderuserid": "689BD58D-2288-4E93-8647-58FB0756F3CA",
  "messageids": [ 
    "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240", 
    "4748964E-9ADC-4999-9ACB-12B8B46660CF" 
  ]
 }
]



Голосовая почта


>>> voicemailreceived

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

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



Всплывающие уведомления


>>> shownotifymessage

Команда из Oktell в CRM об уведомлении пользователя по аналогии с всплывающими уведомлениями клиентского приложения Oktell

[
 "shownotifymessage",
 {
  "qid": "99CC8C57-1793-486A-AFB1-6E5CA3E6855E",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "id": "A33027E1-096F-38B8-1198-BB4D7C15823A",
  "sender": "АТС",
  "text": "Петров",
  "savedb": "true",
  "autohide": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
  "dtformat": "dd.MM.yyyy HH:mm:ss",
  "dt": "25.09.2011 13:07:12",
  "type": 262144,
  "backcolor": "00FF0000",
  "uniquekey": "E7899B61-55C3-4007-91EE-DDB348913AA8",
 }
]
//* id - идентификатор сообщения. Присутствует, если сообщение сохранено в БД.
//* savedb: true|false. Сохранено ли сообщение в БД.
//* dt - дата/время генерации уведомления.
//* uniquekey - код сообщения. Может отсутствовать. Но если есть - допускается одновременное отображение только 
             одного уведомления с таким кодом (либо закрывать автоматически предыдущее, либо не отображать это)
//* backcolor - hex AARRGGBB
//* type - тип сообщения из флагового списка кратных двойке кодов



<<< setnotifyshown

Запрос из CRM в Oktell об установке признака прочтенности уведомления.

[
 "setnotifyshown",
 {
  "qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "id": "A33027E1-096F-38B8-1198-BB4D7C15823A",
  "wasshown": false
	}
 }
]
//* id - идентификатор сообщения. Может отсутствовать. Но если есть - допускается одновременное отображение только 
             одного уведомления с таким кодом (либо закрывать автоматически предыдущее, либо не отображать это)
//* ids - список идентификаторов отображенных уведомлений.			 
//* backcolor - hex AARRGGBB
//* type - тип сообщения из флагового списка кратных двойке кодов



Сообщения от АТС


>>> phoneevent_ringstarted

Сообщение из Oktell в 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

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

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



>>> phoneevent_commstarted

Сообщение из Oktell в 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

Сообщение из Oktell в 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

Сообщение из Oktell в 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

Сообщение из Oktell в CRM о завершении соединения с IVR сценарием.

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



>>> phoneevent_acmcallstarted

Сообщение из Oktell в 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

Сообщение из Oktell в CRM об остановке автодозвона.

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



>>> phoneevent_faxstarted

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

[
 "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

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

[
 "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"
 }
]
//* error: список FaxError



>>> phoneevent_faxreceived

Cообщение из Oktell о завершении приема факса со ссылками на файлы.

[
 "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 к Oktell на совершение звонка. В зависимости от текущего состояния линии - запускается автодозвон или нет, звонок на внешнюю линию, во внутрений номерной план, или автоопределение, сначала вызываться сам пользователь будет, а потом звонок абоненту, или сначала дозвон до абонента, а потом вызов пользователя.

[
 "pbxautocallstart",
 {
  "qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "number": "425",
  "direction": "int",
  "sequence": "abonent",
  "intercom": false
 }
]
//* direction: int, ext, undefined (внутрь, наружу, автоопределение)
//* sequence: abonent, user (сначала до абонента, сначала до пользователя)
//* intercom: true|false (интерком-вызов, обычный вызов)


>>> pbxautocallstartresult

Ответ из Oktell в 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 к Oktell на прекращение автодозвона

[
 "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",
  "intercom": false  
 }
]


>>> 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"
 }
]



>>> pbxdeclinecall

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

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



<<< pbxabortcall

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

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



<<< pbxmakeflash

Запрос из CRM в Oktell на программную эмуляцию флэш.

[
 "pbxmakeflash",
 {
  "qid": "DD836C5D-4F3E-4FD2-9B60-24E330B03FC6",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "mode": "default"
 }
]
//* mode - abort, switch, next - устанавливает поведение, если на удержании уже находится абонент.
		abort - обрыв текущему и переключение на того кто на удержании
		switch - возврат к тому, кто на удержании, с размещением текущего на удержании
		next - обрыв текущему и переход сразу в набор номера



<<< pbxmaketransfer

Запрос из CRM в Oktell на перевод текущего звонка.
Если A соединен с B, и от А приходит команда трансфер(C), то абонента B переключает на C, а A в отбой.
Если A соединен с B, а в это время во флеше/холде находится D, то абонента B переключает на C, а A соединяется с D.
Если A ни с кем не соединен, то просто отбой в A.

[
 "pbxmaketransfer",
 {
  "qid": "DD836C5D-4F3E-4FD2-9B60-24E330B03FC6",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "transferto": "475"
 }
]
//* transferto - номер, на который осуществить перевод.



<<< pbxclearflash

Запрос из CRM в Oktell на обрыв линии, находящейся на удержании.

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



<<< pbxfaxreceive

Запрос из CRM в Oktell на переключение в прием факса.

[
 "pbxfaxreceive",
 {
  "qid": "59305AD1-40A5-476A-B76D-2DAB1F2A89D3",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "linkmode": "simple"
 }
]
//* linkmode - full, simple - устанавливает формат ссылок, в котором будут указаны полученные файлы
		в событии об окончании приема.
			full - вернуть абсолютную ссылку на скачивание через http.
			simple - вернуть относительную ссылку на скачивание.
		При формировании абсолютной ссылки в качестве доменного имени берется значение из 
		раздела [[Интеграция с WEB-Socket CRM]] общих настроек Oktell.


<<< pbxfaxstop

Запрос из CRM в Oktell на прерывание приема/передачи факса.

[
 "pbxfaxstop",
 {
  "qid": "59305AD1-40A5-476A-B76D-2DAB1F2A89D3",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 }
]



<<< pbxmakeflash

Запрос из CRM в Oktell на программную эмуляцию флэш.

[
 "pbxmakeflash",
 {
  "qid": "DD836C5D-4F3E-4FD2-9B60-24E330B03FC6",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "mode": "default"
 }
]
//* mode - abort, switch, next - устанавливает поведение, если на удержании уже находится абонент.
			abort - обрыв текущему и переключение на того кто на удержании
			switch - возврат к тому, кто на удержании, с размещением текущего на удержании
			next - обрыв текущему и переход сразу в набор номера

Запуск служебного сценария


<<< startsvcscript, execsvcscript

Запрос из CRM в Oktell на запуск служебного сценария. startsvcscript - от имени пользователя, execsvcscript - без указания пользователя от имени сервера.

[
 "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
 }
]
[
 "execsvcscript",
 {
  "qid": "244E3867-470E-4A56-904D-D435D57CFBFE",
  "scriptname": "Служебный сценарий получения почты",
  "startparam1": "значение параметра 1",
  "startparam2": "значение параметра 2",
  "startparam3": "значение параметра 3",
  "startparam4": "значение параметра 4",
  "startparam5": "значение параметра 5",
  "waitresponse": true,
  "waittimeoutsec": 10
 }
]
//* scriptname - название сценария в общем разделе.
//* startparamN - строковое значение соответствующего параметра.
		При необходимости передать больше параметров следует объединять параметры в одну строку
		с использованием символа-разделителя, а в самом сценарии производить обратную операцию.
//* waitresponse - ожидать ли ответа.
//* waittimeoutsec - таймаут ожидания ответа в секундах. 0 - вечно.


>>> startsvcscriptresult, execsvcscriptresult

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

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



Методы динамического взаимодействия

Информация от CRM о поддерживаемых методах, доступных Oktell для инициации исполнения.

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


Методы:

  1. >>> getavailablemethods
  2. <<< availablemethods
  3. >>> executemethod
  4. >>> cancelmethod
  5. <<< methodresult

Формы:

  1. >>> getavailableforms
  2. <<< availableforms
  3. >>> showform
  4. >>> closeform
  5. <<< formresult



>>> getavailablemethods

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

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


<<< availablemethods

Сообщение-ответ из 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

Сообщение-команда из Oktell в 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 в Oktell с возвратом выходных значений. Не отправляется, если исполнение прерывается командой CancelMethod.

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



>>> cancelmethod

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

[
 "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

Сообщение-команда из Oktell в 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 в Oktell при закрытии карточки пользователем с возвратом выходных значений. Не отправляется, если отображение прерывается командой 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

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

[
 "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, ответы от Oktell, события из Oktell


<<< confhandleevent

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

[
 "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": "Петров",
   },
   {...},
   {...}
  ]
 }
]
//* conference:accessmode - free|shared|closed (свободный вход, вход по запросу, вход запрещен)
//* conference:recordrights - director|competitors|selected (только управляющий, все участники, избранные участники)
			Определяет, кто может прослушивать запись конференции.
//* competitors - список автоматически приглашаемых участников. Допускается/следует указывать только один 
			параметр из набора {userid|userlogin, lineid, intnumber, extnumber}
//* список recordusers следует указывать, если conference:recordrights=selected.


>>> createnewconferenceresult

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

[
 "createnewconferenceresult",
 {
  "qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "result": 0,
  "error": 1,
  "errormsg": "alreadyexists",
 }
]



<<< 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
  }
 }
]
//* competitor - указывает на одного участника конференции. 
/    	достаточно/следует указывать только один из набора определяющих участника идентификаторов 
							{competitorid, userid|userlogin, lineid}

//*  competitor:cantalk - может ли говорить
//*  competitor:canlisten - может ли слышать
//*  competitor:ghosthelp - в режиме прослушки:помощи для одного из подслушиваемых каналов - 
					может ли слышать подключившегося супервизора


>>> 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"
 }
]



<<< 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",
 }
]
//* ghostmode - monitor, help, conference (подслушивание, помощь, конференция)

>>> 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",
  }
 }
]
//* competitor - указывает на одного участника конференции. 
/    	достаточно/следует указывать только один из набора определяющих участника идентификаторов 
	{competitorid, userid|userlogin, lineid}


>>> 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
  }
 }
]
	
//* competitor - указывает на одного участника конференции. 
/    	достаточно/следует указывать только один из набора определяющих участника идентификаторов 
	{competitorid, userid|userlogin, lineid}


>>> 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
   },
   {...},
   {...}
  ]
 }
]
//* competitors - список автоматически приглашаемых участников. Допускается/следует указывать только один 
			параметр из набора {userid|userlogin, lineid, intnumber, extnumber}


>>> 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
 }
]



События из Oktell, касающиеся конференций


>>> 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



Состояния пользователей и линий


>>> userstatechanged

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

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



<<< setuserstate

Запрос из CRM к Oktell на смену состояния пользователя от его имени. При проведении изменений в ответ отправляется сообщение 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 - если что-то уникальное юзер ввел.



<<< 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"
  }
 }
]



<<< getmyuserinfo

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

[
 "getmyuserinfo", 
 { 
  "qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",
 "userlogin": "Иванов",
 "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",	
 }	  

] </pre>


>>> getmyuserinforesult

Ответ из Oktell в CRM с ответом на запрос информации о текущем авторизованном пользователе.

[
 "getmyuserinforesult",
 {
  "qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "username": "Иванов Иван Иванович",
  "mainpbxnumber": "471",
  "hasline": 1,
  "lineid": "267F8F36-4713-4B66-81BD-019512E56E7E",
  "linenumber": "17374",
  }
 }
]



<<< getuserphoto

Запрос из CRM в Oktell о текущем изображении (аватарке) указанного пользователя.

[
 "getuserphoto",
 {
  "qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "photoownerlogin": "Петров",
  "photoownerid": "3F140170-AEEF-4621-AF9D-247116AE1411"
  "mode": "link"
 }
]
//* mode - link, page, data. По умолчанию page. 
		link - вернуть абсолютную ссылку на скачивание через http.
		page - вернуть относительную ссылку на скачивание.
		вернуть данные изображения в base64.
	При формировании абсолютной ссылки в качестве доменного имени берется значение из 
	раздела [[Интеграция с WEB-Socket CRM]] общих настроек Oktell.
//* photoownerlogin, photoownerid - логин и/или идентификатор пользователя, чья аватарка требуется
	Может не указываться, тогда будет возвращена аватарка авторизованного пользователя.


>>> getuserphotoresult

Ответ из Oktell в CRM с ответом на запрос информации о текущем авторизованном пользователе.

[
 "getuserphotoresult",
 {
  "qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "result": 1,
  "link": "http://..."
  "link32": "http://..."
  "link96": "http://..."
  }
 }
]
//* result. В случае отсутствия файла или по любой другой причине неудачи описание неудачи
		будет находиться в поле errormsg. Например "File not found".
//* imagedatab64. В случае возврата целиком изображения, оно будет в base64 строке содержаться в поле.
//* link, link32, link96. В случае возврата ссылки на изображение в полях лежат соответственно
		ссылки на полное изображение, 32х32- и 96x96- пиксельные образы.



<<< getalluserphotolink

Запрос из CRM в Oktell на получение ссылок на текущие изображения (аватарки) всех пользователей системы.

[
 "getalluserphotolink",
 {
  "qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "mode": "link"
 }
]
//* mode - link, page. По умолчанию page. 
		link - вернуть абсолютную ссылку на скачивание через http.
		page - вернуть относительную ссылку на скачивание.
	При формировании абсолютной ссылки в качестве доменного имени берется значение из 
	раздела [[Интеграция с WEB-Socket CRM]] общих настроек Oktell.


>>> getalluserphotolinkresult

Ответ из Oktell в CRM с ответом на запрос ссылкок на текущие изображения (аватарки) всех пользователей системы.

[
 "getalluserphotolinkresult",
 {
  "qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "result": 1,
  "links": [ 
   {
    "userid": "C6036E73-FB90-4F0C-B780-81CE5659BFEA",
    "userlogin": "Сидоров",
    "link": "http://...",
    "link32x32": "http://...",
    "link96x96": "http://...",
   },
   ...
  ]
 }
]
//* result. Если в наборе есть хотя бы одна аватарка, будет содержать 1. Иначе 0.
//* links. Содержит набор пользовательских словарей, в каждом из которых идентификатор, 
		логин и набор ссылок link, link32, link96. В полях лежат соответственно
		ссылки на полное изображение, 32х32- и 96x96- пиксельные образы.



<<< setmyuserphoto

Запрос из CRM в Oktell на установку нового изображения (аватарки) текущего пользователя.

	[
	 "setmyuserphoto",
	 {
	  "qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",
	  "userlogin": "Иванов",
	  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
	  "filepath": "",
	  "imagedatab64": "",
	  "filename": ""
	 }
	]
//* filepath - если файл уже на сервере где-то, то это путь к нему - 
		относительный рабочего каталога, относительный файлового хранилища, или абсолютный.
		Допускается устанавливать в качестве аватарки изображения размером не более 1 MБ.
   либо
//* imagedatab64 и filename - если файл целиком прокачивается через веб-сокет, то тут base64 строка
		с образом файла.

//* если не указано ни filepath, ни imagedatab64, ни filename - стирает текущую аватарку.


>>> setmyuserphotoresult

Ответ из Oktell в CRM с ответом на запрос информации о текущем авторизованном пользователе.

[
 "setmyuserphotoresult",
 {
  "qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "result": 1
  }
 }
]
//* result. В случае отсутствия файла или по любой другой причине неудачи описание неудачи
			будет находиться в поле errormsg. Например "File not found".



<<< changepassword

Запрос из CRM в Oktell на изменение пароля текущего авторизованного пользователя

[
 "changepassword",
 {
  "qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "newpwdmd5": "",
  "oldpwdmd5": ""
 }
]
//* oldpwdmd5 - MD5 текущего пароля.
//* newpwdmd5 - MD5 нового пароля.


>>> changepasswordresult

Ответ от Oktell в CRM о результате изменения пароля.

[
 "changepasswordresult",
 {
  "qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "result": 0,
  "errormsg": "password should be md5 string"	
 }
]



<<< 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"
 }
]



<<< getcurrentqueue

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

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


>>> getcurrentqueueresult

Ответ из 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": "ООО МДГХ"
     },
     {...},
     {...}
    ]
   },
   {...},
   {...}
  ]
 }
]



<<< 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"
 }
]



<<< getflashedabonentinfo

Запрос из CRM в Oktell на возврат информации об абоненте, находящемся на удержании.

[
 "getflashedabonentinfo",
 {
  "qid": "DC35D182-8BAB-4DE4-919C-5F79090D92DE",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"
 }
]


>>> getcallingoutabonentinforesult

Ответ из Oktell в CRM. Возвращает информацию об абоненте, находящемся на удержании

[
 "getflashedabonentinforesult",
 {
  "qid": "DC35D182-8BAB-4DE4-919C-5F79090D92DE",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "containsflashed": 1,
  "abonent": {
    "chainid": "19ADB2C3-A0B5-47AB-AB2C-CBE15CF98968",
    "isconference": 0,
	"conferenceid": "0D2A4CA1-FF17-473B-A5E9-E035CB16E257",
	"conferenceroom": "#124",
	"conferencename": "Планерка",
	"conferencedescription": "",
    "name": "",
    "comment": "",
    "description": "",
    "simplename": "",
    "number": "89032728973",
    "lineid": "98F670D2-20E2-4883-B45E-42CDE1F3365F",
    "linenumber": "13005",
    "userid": "",
    "userlogin": "",
    "username": ""
   }
 }
]



<<< getextendedlineinfo

Запрос из CRM в Oktell на возврат расширенной информации о текущей линии и ее оппозитных абонентах: текущее состояние, информация об абоненте в коммутации, информация об абоненте на удержании.

[
 "getextendedlineinfo",
 {
  "qid": "55D54351-651E-4EC2-8E48-1D5136811FB9",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"
 }
]


>>> getextendedlineinfo

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

[
 "getextendedlineinforesult",
 {
  "qid": "55D54351-651E-4EC2-8E48-1D5136811FB9",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "linestateid": 5,
  "linestatestr": "lsCommutated,
  "chainid": "19ADB2C3-A0B5-47AB-AB2C-CBE15CF98968",
  "datetimeformat" = "dd.MM.yyyy HH:mm:ss",
  "activetimestart" = "01.12.2011 16:59:28",
  "abonent": {
    "isconference": false,
	"conferenceid": "0D2A4CA1-FF17-473B-A5E9-E035CB16E257",
	"conferenceroom": "#124",
	"conferencename": "Планерка",
	"conferencedescription": "",
    "iscommutated": false,
    "iswaitingfaxline": false,
    "iswaitinginflash": false,
    "iswaitingforanswer": false,
	"number": "",
	"name": "",
	"description": "",
	"userid": "",
	"userlogin": "",
	"username": "",
	"comment": "",
	"simplename": "",
	"lineid": "",
	"linenumber": "",
	"isextline": false,
    "iswaitingforanswer": false,
	"extnumber": "",
	"queuesourceid": 1,
	"queuesourcestr": "",
    "isivr": false,
	"ivrname": "",
    "isautocall": false,
	"number": "",
    "isringing": false,
	"ringtimesec": 172,
	"isconference": false,
		"conferenceid": "",
		"conferencename": "",
		"conferenceroom": "",
		"conferencedescription": "",
		"inviteruserid": "",
		"inviterusername": "",
		"inviteruserlogin": "",
	"number": "",
	"name": "",
	"comment": "",
	"description": "",
	"direction": "",
	"isextline": true,
	"istask": false,
		"taskid": "",
		"taskname": "",
	"userid": "",
	"userlogin": "",
	"username": "",
	"lineid": "",
	"linenumber": ""
  }
  "isflashing": true,
  "flashed": {
    "isconference": true,
	"conferenceid": "0D2A4CA1-FF17-473B-A5E9-E035CB16E257",
	"conferenceroom": "#124",
	"conferencename": "Планерка",
	"conferencedescription": "",
	"number": "",
    "name": "",
    "description": "",
    "userid": "",
    "userlogin": "",
    "username": "",
    "comment": "",
    "simplename": "",
    "lineid": "",
    "linenumber": "",
    "isextline": false
  }
 }
]
//* С отступом в примере указаны поля, появляющиеся в случае, если базовое булево поле имеет значение true. 
//      Например, если isringing=true, то указанные с отступом поля будут присутствовать и представлять собой
//      информацию об абоненте, осуществляющем вызов текущего канала.



Управление переадресацией


<<< getredirectrules

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

[
 "getredirectrules",
 {
  "qid": "4CC7EDEC-499B-4C03-95D3-57B8C30FC110",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 }
]


>>> getredirectrulesresult

Ответ из Oktell в CRM. Возвращает список правил переадресации для текущего пользователя с их настройками.

[
 "getredirectrulesresult",
 {
  "qid": "4CC7EDEC-499B-4C03-95D3-57B8C30FC110",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "redirectrules": [
   {
    "id": "5FD3120D-E86B-4F4B-B57C-AC32343CD00F",
    "caption": "Постоянное",
    "description": "Действует всегда, когда я в состоянии переадресации",
    "priority": 1,
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "isenabled": true,
    "allowcascade": true,
    "state": 2,
    "statestr": "Active",
    "destinationnumber": "89050213951",
    "onlyforredirectstate": true,
    "definesources": true,
    "sources": [
     {
      "type": 0,
      "typestr": "ExtNumber",
      "description": "",
      "srcnumber": "4959741589",
      "srcid": ""
     },
     ...
    ],
    "defineschedule": true,
    "tformat": "HH:mm:ss",
    "schedule": [
     {
      "weekday": 0,
      "weekdaystr": "Sunday",
      "tstart": "00:00:00",
      "tstop": "23:59:59",
     },
     ...
    ]
   },
   ...
  ]
 }
]
//*  state: disabled=0, enabled=1, active=2
//*  defineschedule - если false, значит активно всегда
//*  definesources - если false, значит для всех номеров
//*  sourcetype - extnumber=0, user=1, client=3, clientgroup=4. 
		Если номер - то указывается scrnumber, иначе srcid



<<< saveredirectrules

Запрос из CRM в Oktell. Сохраняет новое/измененное правило переадресации для текущего пользователя.

[
 "saveredirectrules",
 {
  "qid": "4CC7EDEC-499B-4C03-95D3-57B8C30FC110",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "redirectrules": [
   {
    "id": "5FD3120D-E86B-4F4B-B57C-AC32343CD00F",
    "caption": "Постоянное",
    "description": "Действует всегда, когда я в состоянии переадресации",
    "priority": 1,
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "isenabled": true,
    "allowcascade": true,
    "destinationnumber": "89050213951",
    "onlyforredirectstate": true,
    "definesources": true,
    "sources": [
     {
      "type": 0,
      "typestr": "ExtNumber",
      "description": "",
      "srcnumber": "4959741589",
      "srcid": ""
     },
     ...
    ],
    "defineschedule": true,
    "tformat": "HH:mm:ss",
    "schedule": [
     {
      "weekday": 0,
      "weekdaystr": "Sunday",
      "tstart": "00:00:00",
      "tstop": "23:59:59",
     },
     ...
    ]
   },
   ...
  ]
 }
]
//*  state: disabled=0, enabled=1, active=2
//*  defineschedule - если false, значит активно всегда
//*  definesources - если false, значит для всех номеров
//*  sourcetype - extnumber=0, user=1, client=3, clientgroup=4. Если номер - то указывается scrnumber, иначе srcid


>>> saveredirectrulesresult

Ответ из Oktell в CRM. Возвращает список правил переадресации для текущего пользователя с их настройками.

[
 "saveredirectrulesresult",
 {
  "qid": "4CC7EDEC-499B-4C03-95D3-57B8C30FC110",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "result": 1
 }
]



<<< deleteredirectrules

Запрос из CRM в Oktell. Удаляет указанные правила переадресации для текущего пользователя.

[
 "deleteredirectrules",
 {
  "qid": "4CC7EDEC-499B-4C03-95D3-57B8C30FC110",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"
  "ids": [
   "5FD3120D-E86B-4F4B-B57C-AC32343CD00F",
   ...
  ]
 }
]


>>> deleteredirectrulesresult

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

[
 "deleteredirectrulesresult",
 {
  "qid": "4CC7EDEC-499B-4C03-95D3-57B8C30FC110",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"
 }
]



<<< setredirectruleenabled

Запрос из CRM в Oktell. Включает/выключает указанные правила переадресации.

[
 "setredirectruleenabled",
 {
  "qid": "4CC7EDEC-499B-4C03-95D3-57B8C30FC110",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"
  "id": "5FD3120D-E86B-4F4B-B57C-AC32343CD00F",
  "enabled": true
 }
]


>>> setredirectruleenabledresult

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

[
 "setredirectruleenabledresult",
 {
  "qid": "4CC7EDEC-499B-4C03-95D3-57B8C30FC110",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"
 }
]



Контент звонка


<<< 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
 }
]



Журнал звонков


<<< getpbxcalljournal

Запрос из CRM в Oktell на возврат журнала звонков АТС по указанному фильтру в соответствии с правами пользователя. В том числе ссылки на файлы записей разговоров.

[
 "getpbxcalljournal",
 {
  "qid": "4CC7EDEC-499B-4C03-95D3-57B8C30FC110",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "filter": {
    "idconn": "08708573-4AF9-45F2-83B7-B8A0DDEF52EC",
    "idchain": "94B5B657-3009-45E0-9095-F5D7BA163EB2",
    "datestart": "2011-04-07",
    "datestop": "2011-04-07",
    "timestart": "08:00:00",
    "timestop": "20:00:00",
    "connectiontype": "all",
    "intnumber": "",
    "outnumber": "89503222555",
    "minduration": 1,
    "userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
    "userlogin: "Петров"
    "comment": "",
    "showcallcenter": false,
    "taskid": "00000000-0000-0000-0000-000000000000"
  }
 }
]
//* filter - фильтр для запроса. Все поля не являются обязательными.
	По умолчанию возвращаются разговоры за текущий день с 8:00 до 17:00 без звонков call-центра 
		длительностью более 1 секунды, которые доступны авторизованному пользователю по правам контроля.
	К фильтру могут быть применены: 
		idconn - идентификатор конкретно интересующей коммутации.
		idchain - идентификатор конкретно интересующей цепочки коммутаций/сессии.
		datestart - дата начала интересующего периода. Включительно.
		datestop - дата окончания интересующего периода. Включительно.
		timestart - время начала интересующего внутридневного интервала. 
		timestop - время окончания интересующего внутридневного интервала. 
		connectiontype - тип соединения (all, incoming, outcoming, internal, conference).
		intnumber - интересующий внутренний номер.
		outnumber - интересующий внешний номер.
		minduration - минимальная длительность коммутации в секундах, может быть действительным значением.
		userid - идентификатор интересующего пользователя.
		userlogin - логин интересующего пользователя.
		comment - строка включения в комментарии.
		showcallcenter: true|false. Отображать ли коммутации call-центра.
		taskid - идентификатор задачи в рамках коллцентра, чьи звонки интересны.


<<< getpbxcalljournalresult

Ответ от Oktell в CRM. Возвращает журнал звонков АТС по указанному фильтру в соответствии с правами пользователя.

[
 "getpbxcalljournalresult",
 {
  "qid": "4CC7EDEC-499B-4C03-95D3-57B8C30FC110",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "dtformat": "dd.MM.yyyy HH:mm:ss",
  "data": [
   {
    "commutationid": "044d56f9-7137-49b6-bacf-a10370a54df4",
    "chainid": "672ec703-e77a-47b1-b698-cb8488352fc9",
    "connectiontype": 10,
    "connectiontypestr": "conference",
    "dtstart": "2011-04-09 19:55:30",
    "dtanswer": "2011-04-09 19:55:30",
    "dtstop": "2011-04-09 19:55:33",
    "length": 2,
    "answerlength": 0,
    "hascomment": false,
    "isbetweenusers": true,
    "fromcc": false,
    "isconf": true,
    "isrecorded": true,
    "recordlink": "/download/rec/AQAAAAAQIKvNHczNCBEBAAAA",
    "fileext": "wav",
    "auserid": "AA3B3E14-2B44-4D08-8C62-3C616F9D27E3",
    "auserlogin": "Крючков",
    "alineid": "A117499D-23EA-4BF8-A6B9-F49580E9628C",
    "alinenumber": "16001",
    "aoutnumber": "Семен Егорович Крючков",
    "anumberdialed": "",
    "atext": "Семен Егорович Крючков",
    "conferenceid": "224476F1-2E41-4C8F-BA85-6BEF0EBB5339",
    "conferenceroom": "751",
    "conferencename": "Автоконференция #751 09.04.11 19:55:30",
    "conferencedirectorid": "AA3B3E14-2B44-4D08-8C62-3C616F9D27E3",
    "conferencedirectorlogin": "Крючков",
    "conferencedirectorname": "Семен Егорович Крючков",
    "reasonstop": -1,
    "stopside": "a"
   },
   {
    "commutationid": "5F64DECF-194C-474B-8CA7-824E82A1C072",
    "chainid": "22A01B17-064B-4E19-99BA-FED96680AF25",
    "connectiontype": 5,
    "connectiontypestr": "ctOuterInner",
    "dtstart": "2011-04-09 19:57:24",
    "dtanswer": "2011-04-09 19:57:24",
    "dtstop": "2011-04-09 19:58:13",
    "length": 49,
    "answerlength": 0,
    "hascomment": true,
    "isbetweenusers": true,
    "fromcc": false,
    "isrecorded": true,
    "recordlink": "/download/rec/AAAAAABwOltxHczNCGlCAACBPgAA",
	  "fileext": "mp3",
    "isconf": false,
    "auserid": "AA3B3E14-2B44-4D08-8C62-3C616F9D27E3",
    "auserlogin": "Крючков",
    "alineid": "A117499D-23EA-4BF8-A6B9-F49580E9628C",
    "alinenumber": "16001",
    "aoutnumber": "Семен Егорович Крючков",
    "anumberdialed": "",
    "atext": "Семен Егорович Крючков",
    "buserid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",
    "buserlogin": "Петров",
    "blineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",
    "blinenumber": "17004",
    "boutnumber": "",
    "bnumberdialed": "217",
    "btext": "Петр Петрович Петров",
    "reasonstop": -1,
    "stopside": "b"
   }
   {...},
   {...}
  ]
 }
]
//* dtformat - формат представления даты/времени.
//* data - набор попавших в выдачу коммутаций/конференций. Каждая запись - в отдельном словаре.
	commutationid - идентификатор коммутации.
	chainid - идентификатор цепочки коммутаций/сессии.
	connectiontype, connectiontypestr - Тип соединения:
		ctInnerOuter	= 1, //внутренняя линия с внешней линией
		ctInnerIvr	= 2, //внутренняя линия с IVR
		ctInnerInner	= 3, //внутренняя линия с внутренней линией
		ctOuterIvr	= 4, //внешняя линия с IVR
		ctOuterInner	= 5, //внешняя линия с внутренней линией линией
		ctOuterOuter	= 6, //внешняя линия с внешней линией		
		ctIvrOuter	= 7, //IVR с внешней линией		
		ctIvrInner	= 8, //IVR с внутренней линией
		ctConference	= 10,//Конференция
		ctSelector	= 11,//Селекторное совещание
	dtstart - дата/время начала вызова перед осуществлением коммутации.
	dtanswer - дата/время ответа и начала коммутации.
	dtstop - дата/время окончания коммутации
	length - длительность в секундах
	answerlength - длительность ответа в секундах.
	hascomment - true|false. Имеет ли данная коммутация комментарий.
	isbetweenusers - true|false. Является ли текущая коммутация между пользователями системы.
	fromcc - true|false. Произведена ли текущая коммутация в рамках работы call-центра.
	isrecorded - true|false. Записана ли коммутация.
	recordlink - относительная ссылка на скачивание файла записи разговора.
	fileext - если файл записан, то его расширение mp3 или wav. Возвращает только если в полном 
			результате менее 5 записей, иначе поле отсутствует.
	isconf - true|false. Является ли текущая запись конференцией.
	auserid - идентификатор пользователя абонента a. 
			Если IVR - 'ab000000-0000-0000-0000-000000000000',
			Если внешний абонент - 'bf000000-0000-0000-0000-000000000000'
	auserlogin - логин пользователя абонента a.
	alineid - идентификатор линии абонента a.
	alinenumber - номер линии абонента a.
	aoutnumber - номер абонента a (CallerId).
	anumberdialed - набранный абонентом a номер.
	atext - текстовое описание абонента a.
	buserid - идентификатор пользователя абонента b. 
			Если IVR - 'ab000000-0000-0000-0000-000000000000',
			Если внешний абонент - 'bf000000-0000-0000-0000-000000000000'
	buserlogin - логин пользователя абонента b.
	blineid - идентификатор линии абонента b.
	blinenumber - номер линии абонента b.
	boutnumber - номер абонента b (CallerId).
	bnumberdialed - набранный абонентом b номер.
	btext - текстовое описание абонента b.
	reasonstop - причина разрыва коммутации.
	stopside - a, b. По чьей инициативе коммутация прервана.



<<< getpbxcallcomment

Запрос из CRM в Oktell на возврат комментария к указанной коммутации.

[
 "getpbxcallcomment",
 {
  "qid": "1E3C27C0-BE28-4621-AD39-6D1B31EB37EB",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "commutationid": "73567FD4-EFB9-46BF-9346-35B8638FE644"
 }
]


<<< getpbxcallcommentresult

Ответ от Oktell в CRM. Возвращает комментарий к запрошенной коммутации.

[
 "getpbxcallcommentresult",
 {
  "qid": "1E3C27C0-BE28-4621-AD39-6D1B31EB37EB",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "commutationid": "73567FD4-EFB9-46BF-9346-35B8638FE644",
  "comment": "раз два три четыре пять вышел зайчик погулять"
 }
]



<<< setpbxcallcomment

Запрос из CRM в Oktell на установку комментария для указанной коммутации.

[
 "setpbxcallcomment",
 {
  "qid": "3AB79A11-24FB-4D10-B7FD-5FD1653A679D",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "commutationid": "73567FD4-EFB9-46BF-9346-35B8638FE644"
  "comment": "раз два три четыре пять вышел зайчик погулять"
 }
]


<<< setpbxcallcommentresult

Ответ от Oktell в CRM. Возвращает результат установки комментария к коммутации.

[
 "setpbxcallcommentresult",
 {
  "qid": "3AB79A11-24FB-4D10-B7FD-5FD1653A679D",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "result": 1
 }
]



<<< getpbxmycalljournal

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

[
 "getpbxmycalljournal",
 {
  "qid": "F95D0A08-D904-49C9-A4B9-8C02B1781A89",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "linkmode": "full",
  "filter": {
    "datestart": "2011-04-07",
    "datestop": "2011-04-07",
    "comment": "",
    "number": "89503222555",
    "media": "all",
    "type": "all"
  }
 }
]
//* linkmode - full, simple - устанавливает формат ссылок, в котором будут указаны полученные файлы
		в событии об окончании приема.
			full - вернуть абсолютную ссылку на скачивание через http.
			simple - вернуть относительную ссылку на скачивание.
		При формировании абсолютной ссылки в качестве доменного имени берется значение из 
		раздела [[Интеграция с WEB-Socket CRM]] общих настроек Oktell.
//* filter - фильтр для запроса. Все поля не являются обязательными.
	По умолчанию возвращаются разговоры за текущий день с 8:00 до 17:00, в которых
		участвовал авторизованный пользователь			
	К фильтру могут быть применены: 
		datestart - дата начала интересующего периода. Включительно.
		datestop - дата окончания интересующего периода. Включительно.
		comment - строка включения в комментарии.
		number - интересующий номер оппонента.
		media - external, internal, all. Среда вызова.
		type - тип звонка:
			incoming - входящий звонок.
			outcoming - исходящий звонок.
			missed - пропущенный звонок. Что является пропущенным звонком определяется в разделе
					[[Менеджер очередей]] общих настроек Oktell.
			conference - конференция.
			selector - селекторное совещание.
			all - все типы звонков.


<<< getpbxmycalljournalresult

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

[
 "getpbxmycalljournalresult",
 {
  "qid": "F95D0A08-D904-49C9-A4B9-8C02B1781A89",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "dtformat": "dd.MM.yyyy HH:mm:ss",
  "data": [
   {
    "type": 1,
    "typestr": "incoming",
    "media": 2,
    "mediastr": "internal",
    "commutationid": "73567FD4-EFB9-46BF-9346-35B8638FE644",
    "chainid": "46fe0543-4a58-49c5-b501-644b8ddad69a",
    "dtstart": "2011-04-09 19:55:25",
    "dtanswer": "2011-04-09 19:55:27",
    "dtstop": "2011-04-09 19:56:29",
    "length": 61,
    "number": "14",
    "alineid": "3294CD8F-7865-436A-AC2E-CEA481D8F52D",
    "alinenumber": "17011",
    "blineid": "021BDECD-196B-408F-8C36-8C37C0A94C5A",
    "blinenumber": "17014",
    "isrecorded": true,
    "recordlink": "http://192.168.0.12:4055/download/rec/AQAAAADQfMDNHczNCBEBAAAA",
    "hascomment": true,
    "abonentname": "Петр Петрович Петров",
    "isconf": false
   },
   {
    "type": 10,
    "typestr": "conference",
    "media": 10,
    "mediastr": "conference",
    "commutationid": "20CF9B5A-5FFE-4456-8984-E7B79D7166EE",
    "chainid": "E443FEA7-5ABB-49CB-A28D-8CC25F404E97",
    "dtstart": "2011-04-09 19:58:12",
    "dtanswer": "2011-04-09 19:58:12",
    "dtstop": "2011-04-09 19:59:45",
    "length": 93,
    "alineid": "3294CD8F-7865-436A-AC2E-CEA481D8F52D",
    "alinenumber": "17011",
    "isconf": true,
    "conferenceid": "224476F1-2E41-4C8F-BA85-6BEF0EBB5339",
    "conferenceroom": "751",
    "conferencename": "Автоконференция #751 09.04.11 19:55:30",
    "conferencedirectorid": "AA3B3E14-2B44-4D08-8C62-3C616F9D27E3",
    "conferencedirectorlogin": "Крючков",
    "conferencedirectorname": "Семен Егорович Крючков",
    "isrecorded": true,
    "recordlink": "http://192.168.0.12:4055/download/rec/AAAAAACQSBTLHczNCGlCAACBPgAA",
    "hascomment": true
   },
   {...},
   {...}
  ]
 }
]
//* dtformat - формат представления даты/времени.
//* data - набор попавших в выдачу коммутаций/конференций. Каждая запись - в отдельном словаре.
		type, typestr - тип звонка:
			incoming 	= 1 - входящий звонок.
			outcoming 	= 2 - исходящий звонок.
			missed 		= 3 - пропущенный звонок. Что является пропущенным звонком определяется 
						в разделе [[Настройки менеджера очередей|Менеджер очередей]] общих настроек Oktell.
			conference 	= 10 - конференция.
			selector 	= 11 - селекторное совещание.			
		media, mediastr - тип среды вызова:
			external 	= 2 - внешняя среда.
			internal 	= 1 - внутренний вызов.
			conference 	= 10 - конференция.
			selector 	= 11 - селекторное совещание.
		commutationid - идентификатор коммутации.
		chainid - идентификатор цепочки коммутаций/сессии.
		dtstart - дата/время начала вызова перед осуществлением коммутации.
		dtanswer - дата/время ответа и начала коммутации.
		dtstop - дата/время окончания коммутации
		length - длительность в секундах
		alineid - идентификатор линии абонента a.
		alinenumber - номер линии абонента a.
		blineid - идентификатор линии абонента b, если это коммутация.
		blinenumber - номер линии абонента b, если это коммутация.
		isrecorded - true|false. Записана ли коммутация.
		recordlink - относительная или абсолютная ссылка на скачивание файла записи разговора.
		hascomment - true|false. Имеет ли данная коммутация комментарий.
		abonentname - текстовое описание оппозитного абонента коммутации.
		isconf - true|false. Является ли текущая запись конференцией(селектором) или нет.
		conferenceid - идентификатор конференции/селектора.
		conferenceroom - номер комнаты конференции/селектора.
		conferencename - название конференции/селектора.
		conferencedirectorid - идентификатор управляющего пользователя конференции/селектора.
		conferencedirectorlogin - логин управляющего пользователя конференции/селектора.
		conferencedirectorname - имя управляющего пользователя конференции/селектора.



<<< removepbxcallrecord

Запрос из CRM в Oktell. Удаляет запись разговора указанной коммутации в соответствии с правами доступа.

[
 "removepbxcallrecord",
 {
  "qid": "DF061C5B-1B3B-41AA-94FF-A7A2F8FA6AE7",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "commutationid": "73567FD4-EFB9-46BF-9346-35B8638FE644"
 }
]


<<< removepbxcallrecordresult

Ответ от Oktell в CRM. Возвращает результат удаления записи разговора.

[
 "removepbxcallrecordresult",
 {
  "qid": "DF061C5B-1B3B-41AA-94FF-A7A2F8FA6AE7",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "result": 1
 }
]



Номерной план


>>> pbxnumberstatechanged

Сообщение из Oktell о смене состояния внутреннего номера (или группы внутренних номеров)

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



<<< 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 на возврат всех внутренних номеров системы. Не требует указания авторизованного пользователя, так как может исполняться по инициативе сервера WebCRM. В примере приведен запрос для формирования ответа с перечнем номеров в простом виде.

[
 "getpbxnumbers",
 {
  "qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",
  "mode": "simple"
 }
]
//* mode: simple, full (простой вид, полный вид).


>>> 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"
  ]
 }
]


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

[
 "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)



<<< getallusernumbers

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

[
 "getallusernumbers",
 {
  "qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "fillsubordinates": true
 }
]
//* fillsubordinates: true|false. По умолчанию false.
	Включать ли информацию о подчиненных (добавляет каждому пользователю поле "sub":true|false)


>>> getallusernumbersresult

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

[
 "getallusernumbersresult",
 {
  "qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "users": [
   {"id": "47A8B3A0-0B33-41BB-9D08-1D9EB0D6F09B",
    "name: "Петров",
    "sub": true,
    "main: "14",
    "nums": "14, 625, 773"
   },
   {"id": "5A84368D-5ED3-434B-8EB2-41AE86E1566A",
    "name: "Иванов",
    "sub": false
   },
   ...
  ]
 }
]
/*  users:main - основной прямой номер,
/*  users:nums - перечень номеров, в которых участвует пользователь или его текущая линия. 
			Порядок следования от главного к групповым, затем от главного к групповым с участием линии.
/*  users:sub - является ли подчиненным пользователем (в соответствии с правами авторизованного пользователя)
			Включается только если в запросе установлен флаг fillsubordinates.



Преобразования


<<< getuserbyline

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

[
 "getuserbyline",
 {
  "qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "linekey": "17002"
	}
 }
]


>>> getuserbylineresult

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

[
 "getuserbylineresult",
 {
  "qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "founduser": {
   "userid": "BE6A252A-D7E7-4D15-8D75-385A210DF997",
   "userlogin": "john",
   "username": "John Smith"
  }
 }
]
//* founduser - информация о связанном с указанной линии пользователе - его идентификатор, логин, имя.
		Если линия указана неверно или к ней в данный момент не привязан пользователь - null.



<<< getlinebyuser

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

[
 "getlinebyuser",
 {
  "qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "userkey": "ivanov"
	}
 }
]


>>> getlinebyuserresult

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

[
 "getlinebyuserresult",
 {
  "qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "foundline": {
   "lineid": "FA86E75A-6383-42B7-873C-37A0654B18EF",
   "linenum": "17002"
  }
 }
]
//* foundline - информация о связанной с указанным авторизованным пользователем линии - ее идентификатор, номер.
		Если пользователь указана неверно, или не авторизован - null.
		''Пользователь по умолчанию'' считается авторизованным.



Служебные методы


<<< getversionresult

Запрос из CRM в Oktell на возврат информации о версии сервера Oktell.

[
 "getversion",
 {
  "qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "showalloweddbstoredprocs": 1
 }
]
//* showalloweddbstoredprocs: true|false. Отображать ли список доступных хранимых процедур БД.


>>> getversionresult

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

[
 "getversionresult",
 {
  "qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "version": {
   "text": "Версия программы: 2.7.110808(4237.32979). Версия БД: 110713.",
   "dated": "110808",
   "build": "2.7.4237.32979",
   "datedhal": "110808",
   "buildhal": "2.15.3.2871",
   "webserverport": 4067
  }
  "alloweddbstoredprocs": {
   "w_favoritegetbyuser": 1,
   "w_favoritesavebyuser": 1,
   "w_favoritedeletebyuser": 1,
   "w_clientsget": 1,
   "w_clientgroupsget": 1
  }
 }
]
//* version - информация о версии сервера логики и HAL.
//* version:webserverport - номер порта [[Серверный_HTTP_интерфейс|HTTP веб-сервера oktell]].
//* alloweddbstoredprocs - перечень хранимых процедур, доступных для исполнения в БД Oktell 
				посредством метода <span style="color:green">''execpredefineddbstoredproc''</span>	



<<< gettemphttppass

Запрос из CRM в Oktell. Генерирует и возвращает временный пароль на доступ к HTTP веб-серверу без авторизации. Временный пароль живет не более 10 секунд до первого обращения к HTTP с указанием этого пароля среди параметров запроса. Пароль привязывается к IP адресу дополнительно. После этого вне зависимости от способа авторизации, установленного для HTTP веб-сервера Oktell, однократный вызов любого метода серверного веб-интерфейса возможен без авторизации с указанием среди параметров дополнительного служебного параметра temppass=A, где A - выданный временный пароль.

Доступно для схемы интеграции 2.

[
 "gettemphttppass",
 {
  "qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "responsetowebsock": true
 }
]


>>> gettemphttppassresult

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

[
 "gettemphttppassresult",
 {
  "qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "password": "6f3200ac"
 }
]
//* password - временный пароль для подстановки в качестве значения параметра temppass 
		при осуществлении GET или POST запроса к HTTP веб-серверу Oktell.
		Следует иметь в виду, что даже в случае POST запроса со специальным контентом
		указание параметра-пароля возможно в теле самой страницы (по аналогии с GET запросом).



<<< triggercustomevent

Запрос из CRM в Oktell на генерацию пользовательского произвольного события всем или только указанным пользователям. Может быть использовано в схеме интеграции 2. Производит массовую рассылку указанного события. Точно также как и все остальные события требует подписки.

[
 "triggercustomevent",
 {
  "qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "eventname": "newClientCategoryAdded",
  "eventparam": "строка"
  "sendback": 1, // отправлять мне самому или нет
 }
]
[
 "triggercustomevent",
 {
  "qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "eventname": "newClientCategoryAdded",
  "eventparam": "строка",
  "recipients": [
   "Петров",
   "Сидоров"
  ]
 }
]
[
 "triggercustomevent",
 {
  "qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "eventname": "newClientCategoryAdded",
  "eventparam": { "param1": "123", "p2": { "asdfasd": "sdfgsdf" } , ... },
  "recipients": [
   "C45D4911-BDE2-40C0-8D11-A4AFF1F160CC",
   "BA2C4BAC-7A7C-4959-B1A7-2F63C248DF3D"
  ]
 }
]
//* recipients - список идентификаторов/логинов получателей сообщений. 
			Может не быть указанным, тогда отправка производится всем.
//* sendback - генерировать ли событие для самого отправителя. Имеет смысл, поскольку
			в случае использования нескольких вкладок в браузере, каждое из подключений
			получит событие независимо.
//* eventname - название пользовательского события.
//* eventparam - параметр пользовательского события. Переходит в сгенерированное сообщение без изменений.
			Может содержать строку, набор, массив, словарь - все что угодно.


>>> gettemphttppassresult

Событие из Oktell пользователям CRM. Отправляется всем пользователям, указанным при запросе на рассылку события.

[
 "customevent",
 {
  "qid":"aaa3f5c9-bcd5-4bf9-aef9-0b4ee735170d",
  "userlogin": "Петров",
  "userid": "C45D4911-BDE2-40C0-8D11-A4AFF1F160CC",
  "eventname": "newClientCategoryAdded",
  "triggereduserid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "triggereduserlogin": "Иванов",
  "eventparam": { "param1": "123", "p2": { "asdfasd": "sdfgsdf" } , ... }
 }
]
//* eventname - название пользовательского события.
//* eventparam - параметр пользовательского события в неизменном виде, как в запросе.
//* triggereduserid - идентификатор пользователя-рассыльщика.
//* triggereduserlogin - логин пользователя-рассыльщика.



<<< gettotalqueue

Запрос из CRM в Oktell на возврат информации обо всех очередях. Может использоваться без указания пользователя. Не рекомендуется к частому использованию, так как требует значительных вычислительных ресурсов.

[
 "gettotalqueue",
 {
  "qid": "DDDB5BCA-A200-448C-93C7-EFEAE5AFE48D",
  "skipempty": true
 }
]


>>> gettotalqueueresultresult

Ответ из Oktell в CRM. Возвращает список всех очередей и их абонентов

[
 "gettotalqueueresult",
 {
  "qid": "DDDB5BCA-A200-448C-93C7-EFEAE5AFE48D",
  "result": [
   {
    "numid": "507db30b-f8f7-46cf-b3c7-6b8ba7b696a8",
    "numprefix": "12",
    "ruleid": "6ffab1ac-7b9b-4ba2-8547-233175368b6d",
    "rulename": "Денис"
    "queue": [
     {
      "objectid": "928efda2-a3b3-423b-9d49-d2e76879c718",
      "chainid": "d1c2b337-6293-4ea0-a355-f59caaeff54b",
      "srcelementid": "38d8b6ad-a68b-4075-a1a3-038510f20a54",
      "objecttype": 0,
      "objecttypestr": "qotQueueLogic",
      "queuesource": 1,
      "queuesourcestr": "qsLineLogic",
      "callerid": "14",
      "calledid": "12",
      "isuser": true,
      "userid": "da803f01-ea77-40fa-bc9d-e2efb36fd5a8",
      "userlogin": "Peter",
      "username": "Петр Александрович",  
      "department": "Программисты",
      "managedlineid": "38d8b6ad-a68b-4075-a1a3-038510f20a54",
      "managedlinenumber": "16001",
      "srclineid": "38d8b6ad-a68b-4075-a1a3-038510f20a54",
      "srclinenumber": "16001",  
      "queuepriority": 9,
      "startqueuetime": "2012-06-07 12:58:44",
      "lenqueue": 1.4375,
      "istask": false
      }
    ]
   },
   ...
   {}
  ]
 }
]
//* result - содержит список всех очередей. Очередь при этом содержится в словаре.
//*  result:numid - идентификатор стандартного внутреннего номера, при котором данная очередь.
//*  result:numprefix - стандартный внутреннего номер, при котором данная очередь.
//*  result:ruleid - идентификатор номерного правила, при котором данная очередь.
//*  result:rulename - название номерного правила, при котором данная очередь.
//*  result:queue - список абонентов очереди в порядке убывания. Каждый абонент содержится в словаре.



whoareyou

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

Применяется в схеме интеграции 1.

[
 "whoareyou",
 {
  "qid": "4FEEB8EF-DF4B-47AE-8EFE-4BDA577A6FF8",
  "type": "ws-server",
  "name": "Iris CRM",
  "version": 10.5
 }
]
//* type - собственный тип сервера, осуществляющего запрос. 
			Oktell при запросе указывает значение ''commserver''.
			WebCRM может указывать что либо отличное, например ''ws-server'' или ''crm-server''.
//* name - собственное название службы. 
//* version - собственная версия службы. 


iam

Двунаправленный ответ на запрос whoareyou. Возвращает информацию об удаленной стороне.

[
 "iam",
 {
  "qid": "080C0DF2-442B-410E-9204-4ADB3399FCC0",
  "type": "commserver",
  "name": "Oktell",
  "version": 100425,
  "build": "2.5.3928.8022"
 }
]
//* type - тип удаленного сервера. 
			Oktell при запросе указывает значение ''commserver''.
			WebCRM может указывать что либо отличное, например ''ws-server'' или ''crm-server''.
//* name - название службы на удаленнм сервере.
//* version - версия службы на удаленном сервере. 



<<< execpredefineddbstoredproc

Запрос из CRM в Oktell. Исполняет указанную хранимую процедуру в БД Oktell и возвращает данные всех сформированных в ходе выполнения наборов. Доступные для исполнения процедуры содержатся в конфигурационном файле websocket.config, а также могут быть возвращены методом getversion.

Не требует указания пользователя.

Доступно для схемы интеграции 2.

[
 "execpredefineddbstoredproc",
 {
  "qid": "7198D943-7BA9-443D-B283-55812BC82AFB",
  "procedure": "T_GetFavorites",
  "inputparams": {
	 "param1": "XXX", 
	 "param2": 10
	}
 }
]
//* procedure - название процедуры из разрешенного списка. 
//* inputparams - значения параметров процедуры. Имена параметров могут содержать в начале символ ''@'',
		В случае его отсутствия он добавляется автоматически.
		Если в списке присутствует параметр ''authorizeduserid'', его значение будет принудительно заменено
			на идентификатор текущего авторизованного пользователя в Oktell. Этим можно пользоваться для
			создания в БД процедур, учитывающих инициатора исполнения.


>>> execpredefineddbstoredprocresult

Ответ из Oktell в CRM. Возвращает результат исполнения хранимой процедуры в БД Oktell. Перечисляет все выходные наборы данных.

[
 "execpredefineddbstoredprocresult",
 {
  "qid": "7198D943-7BA9-443D-B283-55812BC82AFB",
  "result": 1,
  "errorcode": 0,
  "errorstr": "",
  "dataset": [
   [
    ["column1", "column2", "column3"],
    ["row1val1", "row1val2", "row1val3" ],
    ["row2val1", "row2val2", "row2val3" ],
    ...
   ],
   [
    ["column1", "column2"]
   ],
   ...
  ]
 }
]
//* result - 1 или 0. Успешно или неудачно проведена операция.
//* errorcode - код ошибки. 50044 - служебное значение, в случае запрета или исключения при исполнении, 
			не связанного с ошибкой SQL
//* errorstr - описание ошибки. 
//* dataset - наборы данных по порядку выдачи в ходе исполнения хранимой процедуры.
		Набор - это список строк, каждая из которых - список значений по ячейкам.
		Первая строка в наборе - всегда содержит названия столбцов набора.



<<< exectmcall

Запрос из CRM в Oktell. Осуществляет размещение короткого задания на дозвон и соединение с указанным оператором (пользователем). Дозвониться до одного из указанных абонентов-номеров группы A, соединить с одним из указанных абонентов-номеров группы B. Результатом выполнения является одна коммутация.

Не требует указания пользователя.

[
 "exectmcall",
 {
  "qid": "BE06A1E4-759A-4BFA-8D15-5FCF756EEE53",
  "taskid": "qud82039lsdfmnasd",
  "a_abonents": [
   "7931289",
   "83959279394",
   "425",
   "688C1DD6-7429-4B47-819D-C15827654A53",
   { 
    "type": 11,
	"key": "84951435565"
   }
  ],
  "b_abonents": [
   "1211F58F-93AE-470C-895D-E3A163E8FF5F",
   "ivanov",
   "2BC51D79-BA63-47D7-93CA-1F283029C529",
   {
    "type": 12,
    "key": "1211F58F-93AE-470C-895D-E3A163E8FF5F"
   }
  ]
  "mode": 0
 }
]
[
 "exectmcall",
 {
  "qid": "BE06A1E4-759A-4BFA-8D15-5FCF756EEE53",
  "taskid": "qud82039lsdfmnasd",
  "taskcode": "xxxxx",
  "a_abonents": ["4952172020"],
  "b_abonents": ["417"],
  "mode": 0,
  "ownertext": "Задача соединения",
  "sessionid": "FB232E90-524A-453C-95BA-1B42251F5A14",
  "projectid": "F95BA34E-2CE2-49FA-B3C2-4344199F5B42",
  "a_callerid": "4959261589",
  "a_music": "Фоновое воспроизведение для оператора",
  "a_usequeue": false,
  "a_queuepriority": 10,
  "a_timeoutsec": 40,
  "b_callerid": "4952172020",
  "b_music": "?**ivr?Фоновое воспроизведение",
  "b_usequeue": true,
  "b_queuepriority": 5,
  "b_timeoutsec": 40,
 }
]
Обязательными параметрами являются только a_abonents и b_abonents. Остальные имеют значения по умолчанию.
			
//* taskid - уникальный строковый идентификатор задания. 
				Может быть не указан, тогда генерируется автоматически.
//* taskcode - пользовательский код задачи, передается в сценарии, обслуживающие дозвоны.
//* a_abonents - набор из одного или нескольких абонентов, относящихся к группе A.
//* b_abonents - набор из одного или нескольких абонентов, относящихся к группе B.
		abonent:type - типы представления о конкретном абоненте
			Undefined	  = 0, //Не определен, определить автоматически.
			External	  = 11,//Внешний номер	
			InternalItem	  = 12,//Внутренний элемент - пользователь или линия, 
						задаются ключами (идентификатор, номер, логин, имя).
			InternalRule	  = 13,//Стандартный внутренний номер
			InternalFast	  = 14,//Быстрый номер
			InternalEmergency = 15,//Экстренный номер
			InternalIVR	  = 16,//Сценарий IVR
//* mode: 
		0 - вызывает сначала группу A (достает первого ответившего), 
			потом абонентов группы B (достает первого ответившего)
		1 - вызывает сначала группу B (достает первого ответившего), 
			потом абонентов группы A (достает первого ответившего)
		2 - вызывает одновременно всех, достает первого ответившего из группы A 
			и первого ответившего из группы B.
//* a_music, b_music - мелодия ожидания для абонентов группы A и B. Задается с помощью строки:
	- ''?**ivr?scriptname'', где scriptname - название фонового медиа сценария IVR.
	- ''?**ff?filepath'', где filepath - абсолютный путь к звуковому файлу (*.mp3 или *.wav).
	- ''?**ff?folderpath'', где folderpath - абсолютный путь к каталогу со звуковыми файлами, выбираются рандомно.
	- ''?**ff?filename'', где filename - название файла с расширением (*.mp3 или *.wav) в стандартном каталоге Snd.
	- абсолютный путь к каталогу cо звуковыми файлами 
	- абсолютный путь к файлу 
	- название файла с расширением в стандартном каталоге Snd
	- название фонового медиа-сценария IVR
	- если не указывать, указывать неверно или указывать пустоту - играется 
		[[Музыкальное сопровождение#Alternative|альтернативная мелодия ожидания]] (возможно сценарий) из общих настроек
//* sessionid - генерируемый идентификатор цепочки коммутаций/сессии.
//* ownertext - название владельца служебного сценария набора номеров.
//* projectid - привязанный идентификатор проекта (участвует в поиске сценариев).
//* a_usequeue, b_usequeue: true|false. Использовать ли очередь ожидания при вызове внутренних абонентов.
//* a_queuepriority, b_queuepriority: числовой приоритет при размещении в очередях. 
		Традиционно чем меньше значение - тем больше приоритет. 
		Значения по умолчанию определены в [[Настройки менеджера очередей|общих настройках]]
//* a_timeoutsec, b_timeoutsec: таймаут в секундах для вызова абонентов соответствующей группы.
		Режим использования таймаута задается в разделе [[Настройки менеджера очередей|настроек менеджера очередей]].


>>> exectmcallresult

Ответ из Oktell в CRM. Возвращает результат исполнения хранимой процедуры в БД Oktell. Перечисляет все выходные наборы данных.

[
 "exectmcallresult",
 {
  "qid": "BE06A1E4-759A-4BFA-8D15-5FCF756EEE53",
  "taskid": "qud82039lsdfmnasd"
 }
]
//* taskid - возвращает идентификатор запущенного задания.
		В дальнейшем с помощью него можно будет отменить задание (если оно еще не будет к тому времени исполнено)



<<< stoptmcall

Запрос из CRM в Oktell. Отменяет ранее запущенное методом exectmcall задание, если оно еще не завершило исполнение.

Не требует указания пользователя.

[
 "stoptmcall",
 {
  "qid": "DDA55585-F598-4F8C-B605-E6E186E6D859",
  "taskid": "qud82039lsdfmnasd"
 }
]


>>> stoptmcallresult

Ответ от Oktell в CRM. Возвращает результат отмены задания.

[
 "stoptmcallresult",
 {
  "qid": "DDA55585-F598-4F8C-B605-E6E186E6D859",
  "taskid": "qud82039lsdfmnasd",
  "success": false,
  "errortext": "task not found"
 }
]



<<< ping

Запрос из CRM в Oktell. Периодически пробивает канал связи, напоминая о жизнеспособности подключения. Требуется для Схемы интеграции 2 и необязательно для Схемы интеграции 1.

Не требует указания пользователя.

[
 "ping",
 {
  "qid": "DDA55585-F598-4F8C-B605-E6E186E6D859"
 }
]


>>> pong

Ответ от Oktell в CRM на запрос ping.

[
 "pong",
 {
  "qid": "DDA55585-F598-4F8C-B605-E6E186E6D859"
 }
]



<<< subscribeevent, unsubscribeevent

Запрос из CRM в Oktell. Производит соответсвенно подписку и отписку на указанные события.

Доступно и требуется только для схемы интеграции 2.

В схеме интеграции 1 события поступают в полном объеме, часть из них объединяются и отправляются на сервер WebCRM без привязки к пользователю; ожидается, что сервер WebCRM самостоятельно размножит их. К таким событиям относятся, например pbxnumberstatechanged, conflistchanged и им подобные. Остальные же направляются с привязкой к пользователю и только в случае, когда пользователь авторизован из-под CRM.

[
 "subscribeevent",
 {
  "qid": "DDA55585-F598-4F8C-B605-E6E186E6D859"
  "eventmethod": "userstatechanged",  
 }
]
[
 "subscribeevent",
 {
  "qid": "DDA55585-F598-4F8C-B605-E6E186E6D859"
  "eventmethod": [
   "userstatechanged",
   "pbxnumberstatechanged"
  ]
 }
]
[
 "unsubscribeevent",
 {
  "qid": "DDA55585-F598-4F8C-B605-E6E186E6D859"
  "eventmethod": "userstatechanged",  
 }
]

События, требующие подписки:

  • pbxnumberstatechanged
  • pbxnumberlistmodified
  • shownotifymessage
  • usertextmessagereceived
  • usertextmessageviewed
  • voicemailreceived
  • userstatechanged
  • phoneevent_acmcallstarted
  • phoneevent_acmcallstopped
  • phoneevent_ringstarted
  • phoneevent_ringstopped
  • phoneevent_ivrstarted
  • phoneevent_ivrstopped
  • phoneevent_commstarted
  • phoneevent_commstopped
  • phoneevent_faxstarted
  • phoneevent_faxstopped
  • phoneevent_faxreceived
  • linestatechanged
  • chainstatechanged
  • flashstatechanged
  • conferenceevent
  • conflistchanged
  • confparamschanged
  • confcompositionchanged
  • confcompetitorstatechanged
  • confentrancedenied
  • confentrancepermitted
  • confentrancerequest
  • confnotifyinvite
  • confpossiblecompetitorstatechanged
  • customevent
  • executemethod (список доступных динамических методов содержится в файле websock.config)
  • cancelmethod
  • showform (список доступных динамических форм содержится в файле websock.config)
  • closeform


>>> subscribeeventresult, unsubscribeeventresult

Ответ от Oktell в CRM на запросы subscribeeventresult и unsubscribeeventresult соответственно.

[
 "subscribeeventresult",
 {
  "qid": "DDA55585-F598-4F8C-B605-E6E186E6D859"
  "result": 1
 }
]