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

Материал из Oktell
Перейти к: навигация, поиск
Строка 51: Строка 51:
 
:* появление где-то на веб-ресурсе интересующего события (например температура на улице опустилась ниже нуля)
 
:* появление где-то на веб-ресурсе интересующего события (например температура на улице опустилась ниже нуля)
 
и т.д.
 
и т.д.
 +
  
  
Строка 83: Строка 84:
  
 
В рамках такой интеграции WebCRM может предоставлять в Oktell некоторые общие сервисы, которые доступны администратору при настройке сценариев Oktell. Например, доступ к БД WebCRM на поиск маршрута для обработки звонка конкретного клиента. Подробнее в разделе [[#Dynamic|Динамическое взаимодействие]].
 
В рамках такой интеграции WebCRM может предоставлять в Oktell некоторые общие сервисы, которые доступны администратору при настройке сценариев Oktell. Например, доступ к БД WebCRM на поиск маршрута для обработки звонка конкретного клиента. Подробнее в разделе [[#Dynamic|Динамическое взаимодействие]].
 +
  
  
Строка 111: Строка 113:
 
Применительно к этому способу интеграции существует ряд дополнительных методов интерфейса. Большинство таких методов доступно и при [[#Arch1|схеме интеграции 1]], но не являются там необходимыми, так как часть данных и работ проводится на веб-сервере WebCRM.
 
Применительно к этому способу интеграции существует ряд дополнительных методов интерфейса. Большинство таких методов доступно и при [[#Arch1|схеме интеграции 1]], но не являются там необходимыми, так как часть данных и работ проводится на веб-сервере WebCRM.
 
Исключение составляет метод обращения к БД Oktell на исполнение хранимой процедуры и возврат результатов (<span style="color:green">''execpredefineddbstoredproc''</span>). Он существует только для этого способа интеграции, при этом разрешенные для исполнения хранимые процедуры содержатся там же в конфигурационном файле ''websock.config''.
 
Исключение составляет метод обращения к БД Oktell на исполнение хранимой процедуры и возврат результатов (<span style="color:green">''execpredefineddbstoredproc''</span>). Он существует только для этого способа интеграции, при этом разрешенные для исполнения хранимые процедуры содержатся там же в конфигурационном файле ''websock.config''.
 +
  
  
Строка 154: Строка 157:
  
 
<span style="color:red">ВНИМАНИЕ! Ограничение: Oktell не позволяет пользователям логиниться с разных рабочих мест одновременно. Делается это для того, чтобы каждому пользователю соответствовало не более одного телефона.
 
<span style="color:red">ВНИМАНИЕ! Ограничение: Oktell не позволяет пользователям логиниться с разных рабочих мест одновременно. Делается это для того, чтобы каждому пользователю соответствовало не более одного телефона.
 +
  
  
Строка 198: Строка 202:
  
 
Структура каждого сообщения - это список из двух объектов, первый из которых - тип сообщения, второй - словарь параметров. В словаре обязательно присутствует идентификатор запроса (поле <span style="color:green">''qid''</span> с любым текстовым уникальным значением). В случае, когда сообщение производится от имени пользователя, присутствуют его идентификаторы (<span style="color:green">''userid''</span> и/или <span style="color:green">''userlogin''</span>).
 
Структура каждого сообщения - это список из двух объектов, первый из которых - тип сообщения, второй - словарь параметров. В словаре обязательно присутствует идентификатор запроса (поле <span style="color:green">''qid''</span> с любым текстовым уникальным значением). В случае, когда сообщение производится от имени пользователя, присутствуют его идентификаторы (<span style="color:green">''userid''</span> и/или <span style="color:green">''userlogin''</span>).
 
  
 
Среди параметров находятся и индивидуальные параметры сообщения. Поддерживается произвольная вложенность объектов: строк, чисел, дат, словарей, списков.
 
Среди параметров находятся и индивидуальные параметры сообщения. Поддерживается произвольная вложенность объектов: строк, чисел, дат, словарей, списков.
Строка 240: Строка 243:
  
 
Подробно список и интерфейс методов динамического взаимодействия приведен в разделе [[#DynamicMethods|Методы динамического взаимодействия]].
 
Подробно список и интерфейс методов динамического взаимодействия приведен в разделе [[#DynamicMethods|Методы динамического взаимодействия]].
 +
  
  

Версия 07:32, 7 октября 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 протоколу. Поддерживаются версии

В зависимости от выбранной схемы интеграции и выбранного в настройках направления и способа подключения одна из сторон производит подключение (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.

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


>>> 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. Периодически пробивает канал связи, напоминая о жизнеспособности подключения. Необязательно

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

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