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

Материал из Oktell
Перейти к: навигация, поиск
(Запуск служебного сценария)
м (Прочие)
 
(не показано 55 промежуточных версии 2 участников)
Строка 26: Строка 26:
  
  
В рамках настройки сценариев Oktell, имеется возможность отправлять синхронные и асинхронные запросы в WebCRM (фактически исполнять методы по событиям в Oktell)и получать ответы и применять их в рамках проведения маршрутизации или любых других действий, реализуемых в сценариях. Например:  
+
В рамках настройки сценариев Oktell, имеется возможность отправлять синхронные и асинхронные запросы в WebCRM (фактически исполнять методы по событиям в Oktell) и получать ответы и применять их в рамках проведения маршрутизации или любых других действий, реализуемых в сценариях. Например:  
 
:* Выяснить, какому клиенту/контакту принадлежит определившийся номер телефона или введенный им вручную с помощью DTMF-набора номер договора, отфильтровать по черному списку, переключить вызов на ответственного за работу с этим контактом пользователя, если пользователя нет в системе - переключить на секретаря, а если контакт новый - соединить с отделом продаж. Если ответственный пользователь занят, предложить оставить голосовое сообщение для VIP клиентов.  
 
:* Выяснить, какому клиенту/контакту принадлежит определившийся номер телефона или введенный им вручную с помощью DTMF-набора номер договора, отфильтровать по черному списку, переключить вызов на ответственного за работу с этим контактом пользователя, если пользователя нет в системе - переключить на секретаря, а если контакт новый - соединить с отделом продаж. Если ответственный пользователь занят, предложить оставить голосовое сообщение для VIP клиентов.  
 
:* В момент поступления звонка открыть карточку у пользователя, которому направляется звонок. Закрыть ее автоматически, если пользователь так и не снял трубку (а снял кто-то другой, или звонок потерялся).  
 
:* В момент поступления звонка открыть карточку у пользователя, которому направляется звонок. Закрыть ее автоматически, если пользователь так и не снял трубку (а снял кто-то другой, или звонок потерялся).  
Строка 38: Строка 38:
 
:* поступление внешнего звонка.
 
:* поступление внешнего звонка.
 
:* завершение звонка.
 
:* завершение звонка.
:* переключение абонента на пользователя, группу пользователей, задачу коллцентра.
+
:* переключение абонента на пользователя, группу пользователей, задачу call-центра.
 
:* любое из интересующих явлений в ходе обработки звонка (от преобразования номера абонента в нужный формат и сверки времени поступления звонка до обработки контента звонка после завершения и выявления там факта состоявшейся конференции).
 
:* любое из интересующих явлений в ходе обработки звонка (от преобразования номера абонента в нужный формат и сверки времени поступления звонка до обработки контента звонка после завершения и выявления там факта состоявшейся конференции).
 
:* наступление определенного времени.
 
:* наступление определенного времени.
Строка 50: Строка 50:
 
:* появление где-то в базе данных интересующего события (например появление новой записи в таблице абонентов)
 
:* появление где-то в базе данных интересующего события (например появление новой записи в таблице абонентов)
 
:* появление где-то на веб-ресурсе интересующего события (например температура на улице опустилась ниже нуля)
 
:* появление где-то на веб-ресурсе интересующего события (например температура на улице опустилась ниже нуля)
и т.д.
+
 
  
  
Строка 56: Строка 56:
 
<div id="Arch1"></div>
 
<div id="Arch1"></div>
 
===Схема интеграции 1 (межсерверное соединение)===
 
===Схема интеграции 1 (межсерверное соединение)===
 +
  
  
Строка 64: Строка 65:
 
Сервер Oktell взаимодействует с телефонами и с веб-сервером WebCRM.  
 
Сервер Oktell взаимодействует с телефонами и с веб-сервером WebCRM.  
  
Веб-сервер WebCRM взаимодействует ответно с сервером Oktell и с браузерами.  
+
Веб-сервер WebCRM взаимодействует ответно с сервером Oktell и с браузерами (клиентами).  
  
 
Между сервером Oktell и веб-сервером WebCRM существует только один [[#Exchange|канал для двустороннего обмена сообщениями]].
 
Между сервером Oktell и веб-сервером WebCRM существует только один [[#Exchange|канал для двустороннего обмена сообщениями]].
Строка 83: Строка 84:
  
 
В рамках такой интеграции WebCRM может предоставлять в Oktell некоторые общие сервисы, которые доступны администратору при настройке сценариев Oktell. Например, доступ к БД WebCRM на поиск маршрута для обработки звонка конкретного клиента. Подробнее в разделе [[#Dynamic|Динамическое взаимодействие]].
 
В рамках такой интеграции WebCRM может предоставлять в Oktell некоторые общие сервисы, которые доступны администратору при настройке сценариев Oktell. Например, доступ к БД WebCRM на поиск маршрута для обработки звонка конкретного клиента. Подробнее в разделе [[#Dynamic|Динамическое взаимодействие]].
 +
  
  
Строка 88: Строка 90:
 
<div id="Arch2"></div>
 
<div id="Arch2"></div>
 
===Схема интеграции 2 (клиент-серверное соединение)===
 
===Схема интеграции 2 (клиент-серверное соединение)===
 +
  
  
Строка 100: Строка 103:
 
Между Oktell и каждым клиентом существует один или несколько [[#Exchange|каналов для двустороннего обмена сообщениями]] (поддерживается работа в нескольких вкладках браузера).
 
Между Oktell и каждым клиентом существует один или несколько [[#Exchange|каналов для двустороннего обмена сообщениями]] (поддерживается работа в нескольких вкладках браузера).
  
В данном случае клиенты (браузеры) производят коннект к серверу Oktell, и в его [[Интеграция_с_Web-Socket_CRM|настройках Web-Socket]] должен быть выбран способ соединения «Браузеры к Oktell», а в сообщениях login должен быть указан пароль (MD5).
+
В данном случае клиенты (браузеры) производят подключения к серверу Oktell, и в его настройках должен быть включен и настроен [[Настройки_веб-сервера|Web-сервер]], а в сообщениях [[#login|''login'']] должен быть указан пароль пользователя (MD5).
  
При таком способе интеграции у WebCRM не требуется наличие собственного Web-Socket сервера. Каждый клиент (браузер) подключается по Web-Socket протоколу непосредственно к серверу Oktell. Веб-сервер занимается формированием страниц и предоставлением данных из БД WebCRM. Непосредственная взаимосвязь между серверами WebCRM и Oktell отсутствует, доступ не требуется, клиенты самостоятельно обрабатывают и объединяют данные двух систем.
+
При таком способе интеграции у WebCRM не требуется наличие собственного Web-Socket сервера. Каждый клиент (браузер) подключается по Web-Socket протоколу непосредственно к серверу Oktell. Веб-сервер CRM занимается формированием страниц и предоставлением данных из БД WebCRM. Непосредственная взаимосвязь между серверами WebCRM и Oktell отсутствует, доступ не требуется, клиенты самостоятельно обрабатывают и объединяют данные двух систем.
По такому принципу реализованы [http://www.oktell.ru/weboktell Web-клиент Oktell] и плагин [http://js.oktell.ru/ Oktell.js].
+
По такому принципу реализованы [http://www.oktell.ru/weboktell Web-клиент Oktell] и плагин [http://js.oktell.ru/ Oktell.js], доступный для встраивания в другие проекты.
  
 
Поскольку клиентов может быть много, при рассылке событий возможна оптимизация за счет исключения тех клиентов, где конкретное событие не является необходимым. Достигается это путем подписки/отписки клиентов на определенные типы сообщений.
 
Поскольку клиентов может быть много, при рассылке событий возможна оптимизация за счет исключения тех клиентов, где конкретное событие не является необходимым. Достигается это путем подписки/отписки клиентов на определенные типы сообщений.
 
В отличие от [[#Arch1|схемы интеграции 1]], где Oktell запрашивает у сервера WebCRM список [[#Dynamic|динамических методов и форм]], здесь роль хранилища этих списков выполняет конфигурационный файл ''websock.config'' в рабочем каталоге сервера Oktell.
 
  
 
Применительно к этому способу интеграции существует ряд дополнительных методов интерфейса. Большинство таких методов доступно и при [[#Arch1|схеме интеграции 1]], но не являются там необходимыми, так как часть данных и работ проводится на веб-сервере WebCRM.
 
Применительно к этому способу интеграции существует ряд дополнительных методов интерфейса. Большинство таких методов доступно и при [[#Arch1|схеме интеграции 1]], но не являются там необходимыми, так как часть данных и работ проводится на веб-сервере WebCRM.
Исключение составляет метод обращения к БД Oktell на исполнение хранимой процедуры и возврат результатов (<span style="color:green">''execpredefineddbstoredproc''</span>). Он существует только для этого способа интеграции, при этом разрешенные для исполнения хранимые процедуры содержатся там же в конфигурационном файле ''websock.config''.
+
 
 +
В отличие от [[#Arch1|схемы интеграции 1]], где Oktell запрашивает у сервера WebCRM список [[#Dynamic|динамических методов и форм]], которые затем могут быть использованы в сценариях Oktell, здесь динамические методы недоступны. Чтобы получить доступ к динамическим методам, следует использовать упрощенный вариант [[#Arch3|схемы интеграции 3]].
 +
 
 +
 
 +
 
 +
 
 +
<div id="Arch3"></div>
 +
===Схема интеграции 3 (межсерверное и клиент-серверное соединение)===
 +
 
 +
 
 +
 
 +
 
 +
[[Файл:Arch_3.jpg|center]]
 +
 
 +
 
 +
Является комбинацией [[#Arch1|схемы 1]] и [[#Arch2|схемы 2]]. То есть клиенты имеют возможность подключаться непосредственно к серверу Oktell, минуя websocket-сервер CRM, а связь с сервером происходит по специальному каналу, который может быть обеспечиваться как websocket-подключением, так и периодическими http подключениями.
 +
 
 +
В этом случае при разработке решений можно пользоваться javascript-библиотекой [http://js.oktell.ru Oktell.js], не требующей ни полного погружения в настоящий интеграционный протокол, ни в настройку websocket. Также в этом случае для CRM не обязательно иметь собственный websocket-сервер для обслуживания клиентов. Более того, можно вообще обойтись лишь настройкой HTTP для обмена сервисными сообщениями вроде [[#whoareyou|взаимных представлений]] и запроса [[#getavailablemethods|динамических методов]] и [[#getavailableforms|форм]]. Исполнение [[#Dynamic|динамических методов и форм]] будет возможно как на сервере, так и на клиентах. На сервере - по межсерверному каналу (http, https, websocket, websocket secure), на клиенте - по индивидуальным websocket-подключениям (защищенным или нет). Все остальные запросы и события имеют персональную подоплеку и отправляются по индивидуальным клиент-серверным подключениям.
 +
 
 +
При этом в случае websocket соединения между серверами Oktell и CRM остается возможность часть клиентов туннелировать через сервер CRM, а часть клиентов обслуживать непосредственно. В этом смысле это самый широкий способ интеграции, и два других выступают частными случаями.
 +
 
  
  
Строка 122: Строка 143:
  
 
Пользователи могут работать:
 
Пользователи могут работать:
:* стационарно каждый за своим компьютером.  
+
:* стационарно каждый за своим рабочим местом.  
 
:* перемещаться с одного рабочего место за другое.
 
:* перемещаться с одного рабочего место за другое.
 
:* работать посменно за одним рабочим местом.
 
:* работать посменно за одним рабочим местом.
Строка 143: Строка 164:
 
'''2. Телефон привязывается к компьютеру, а в момент логина пользователя сопоставление производится через этот компьютер.'''
 
'''2. Телефон привязывается к компьютеру, а в момент логина пользователя сопоставление производится через этот компьютер.'''
  
''Плюсы'': Кто бы ни залогинился с этого компьютера, приобретает управление телефоном, все звонки пользователю попадают на этот телефон.
+
''Плюсы'': Кто бы ни залогинился с этого компьютера, приобретает управление рядом стоящим телефоном, все звонки пользователю попадают на этот телефон.
  
''Минусы'': Требует указания одного из постоянных идентификаторов компьютера в Oktell, а также передачи его из WebCRM в момент логина для привязки. Это может быть айпи адрес, хостнейм или любой другой постоянный идентификатор, задаваемый в конфигурации.
+
''Минусы'': Требует указания одного из постоянных идентификаторов компьютера в Oktell, а также передачи его из WebCRM/web-клиента в момент логина для привязки. Это может быть айпи адрес, хостнейм или любой другой постоянный идентификатор, задаваемый в конфигурации.
  
  
 
Синхронизация учетных записей Oktell и WebCRM может производиться по логинам (по умолчанию) или по GUID-идентификаторам. Соответственно в персональных запросах должны указываться userlogin и/или userid.
 
Синхронизация учетных записей Oktell и WebCRM может производиться по логинам (по умолчанию) или по GUID-идентификаторам. Соответственно в персональных запросах должны указываться userlogin и/или userid.
  
Логин в Oktell нужен для приведения состояния пользователя в готовность. Без этого звонки на пользователя не поступают, а обрабатываются как и в случае, когда он недоступен. Логофф - обратная операция. В ходе взаимодействия пользователю доступны команды управления своим состоянием. Он может отлучиться, выставить перерыв, переадресацию, занятость и т.д. Все это нужно для того, чтобы изменить направление маршрутизации звонков и режим работы коллцентра. А в случае [[#Arch2|Схемы интеграции 2]] также для авторизации.
+
Логин в Oktell нужен для приведения состояния пользователя в готовность. Без этого звонки на пользователя не поступают, а обрабатываются как и в случае, когда он недоступен. Логофф - обратная операция. В ходе взаимодействия пользователю доступны команды управления своим состоянием. Он может отлучиться, выставить перерыв, переадресацию, занятость и т.д. Все это нужно для того, чтобы изменить направление маршрутизации звонков и режим работы call-центра. А в случае [[#Arch2|схемы интеграции 2]] и [[#Arch3|схемы интеграции 3]] также для авторизации. Индивидуальное подключение не обрабатывает никакие запросы, не осуществив авторизацию.
  
  
<span style="color:red">ВНИМАНИЕ! Ограничение: Oktell не позволяет пользователям логиниться с разных рабочих мест одновременно. Делается это для того, чтобы каждому пользователю соответствовало не более одного телефона.
+
<span style="color:red">ВНИМАНИЕ! Ограничение: Oktell не позволяет пользователям авторизовываться с разных рабочих мест одновременно. Делается это для того, чтобы каждому пользователю соответствовало не более одного телефона.  
 +
Однако персональные соединения [[#Arch2|схемы интеграции 2]] и [[#Arch3|схемы интеграции 3]] могут быть множественными, например как вкладки одного браузера. При этом привязка к телефону осуществляется первым авторизовавшимся подключением и остается таковой до закрытия всех вкладок/подключений этого пользователя.
 +
 
  
  
Строка 160: Строка 183:
 
===Взаимодействие по каналу связи===
 
===Взаимодействие по каналу связи===
  
 +
В этом разделе описывается межсерверный канал websocket, а канал HTTP подразумевается ограниченным аналогом.
  
 +
Все взаимодействие между Oktell и WebCRM (а также между Oktell и браузером) идет по общему каналу путем двустороннего обмена сообщениями между сторонами.
  
[[Файл:Socket 3.jpg|center]]
 
  
 +
<center>[[Файл:Socket 3.jpg|500px]][[Файл:Socket 3b.jpg|500px]]</center>
  
Все взаимодействие между Oktell и WebCRM (а также между Oktell и браузером) идет по общему каналу путем двустороннего обмена сообщениями между сторонами.
 
  
 
<div id="websockver"></div>
 
<div id="websockver"></div>
Строка 174: Строка 198:
 
:* [http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-75 75]
 
:* [http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-75 75]
 
:* [http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76 76]
 
:* [http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76 76]
 +
 +
''[[Примеры WebSocket Handshake]]''.
  
 
В зависимости от выбранной схемы интеграции и выбранного в настройках направления и способа подключения одна из сторон производит подключение (Oktell к серверу WebCRM, сервер WebCRM к Oktell, клиенты WebCRM к Oktell).
 
В зависимости от выбранной схемы интеграции и выбранного в настройках направления и способа подключения одна из сторон производит подключение (Oktell к серверу WebCRM, сервер WebCRM к Oktell, клиенты WebCRM к Oktell).
Строка 186: Строка 212:
 
:* Oktell производит запросы к веб-системе. WebCRM отправляет ответы на получаемые запросы.
 
:* Oktell производит запросы к веб-системе. WebCRM отправляет ответы на получаемые запросы.
 
:* WebCRM производит запросы к Oktell. В том числе и команды. Oktell отправляет ответы на запросы.
 
:* WebCRM производит запросы к Oktell. В том числе и команды. Oktell отправляет ответы на запросы.
 +
 +
''В случае HTTP подключения к CRM работа ограничивается запросами из Oktell и ответами на них из CRM.''
  
 
Каждое сообщение представляет из себя строку [http://ru.wikipedia.org/wiki/JSON JSON] или [http://ru.wikipedia.org/wiki/XML XML] в кодировке [http://ru.wikipedia.org/wiki/UTF8 UTF-8]. Сообщения в общем потоке данных в канале отделяются друг от друга в соотвествии с версией используемого протокола Web-Socket:  
 
Каждое сообщение представляет из себя строку [http://ru.wikipedia.org/wiki/JSON JSON] или [http://ru.wikipedia.org/wiki/XML XML] в кодировке [http://ru.wikipedia.org/wiki/UTF8 UTF-8]. Сообщения в общем потоке данных в канале отделяются друг от друга в соотвествии с версией используемого протокола Web-Socket:  
 
:*Версии [http://tools.ietf.org/html/rfc6455 rfc6455 v13], [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-08 v8], [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-07 v7] подразумевают использование фреймов, в заголовках которых определяется тип и размер.
 
:*Версии [http://tools.ietf.org/html/rfc6455 rfc6455 v13], [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-08 v8], [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-07 v7] подразумевают использование фреймов, в заголовках которых определяется тип и размер.
 
:*Версии [http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76 76] и [http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-75 75] подразумевают отделение сообщений байтами 0 и 255. 0 - в начале сообщения, 255 - в конце. Форматы XML и JSON представления данных в текстовом виде гарантируют отсутствие байтов 0 и 255 в теле сообщений.
 
:*Версии [http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76 76] и [http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-75 75] подразумевают отделение сообщений байтами 0 и 255. 0 - в начале сообщения, 255 - в конце. Форматы XML и JSON представления данных в текстовом виде гарантируют отсутствие байтов 0 и 255 в теле сообщений.
 +
 +
''В случае HTTP подключения к CRM запросы из октелл отправляются методом POST с передачей параметра '''data''', значением которого является упакованная в base64 строка JSON или XML.''
  
 
Формат самих сообщений определяется непосредственно [[#Список методов интерфейса|протоколом интеграции Oktell-WebCRM]]. Например вот так выглядит сообщение из Oktell в WebCRM о факте входящего вызова в формате json:
 
Формат самих сообщений определяется непосредственно [[#Список методов интерфейса|протоколом интеграции Oktell-WebCRM]]. Например вот так выглядит сообщение из Oktell в WebCRM о факте входящего вызова в формате json:
  
Сообщения длиной более 64 КБ упаковываются в [http://ru.wikipedia.org/wiki/Base64 Base64] и разбиваются на несколько сообщений длиной до 64К. Для этого используется формат multipart-сообщения в протоколе Oktell-WebCRM. Если версия протокола Web-Socket для передачи сообщений использует фреймы ([http://tools.ietf.org/html/rfc6455 rfc6455 v13], [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-08 v8], [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-07 v7]), то способ отправки длинных сообщений в нескольких фреймах определен в самом протоколе. Однако это имеет ограничение: при передаче одного длинного сообщения в нескольких фреймах, оно не может быть прервано передачей других сообщений.
+
[[Файл:Json.jpg]]
  
Структура каждого сообщения - это список из двух объектов, первый из которых - тип сообщения, второй - словарь параметров. В словаре обязательно присутствует идентификатор запроса (поле <span style="color:green">''qid''</span> с любым текстовым уникальным значением). В случае, когда сообщение производится от имени пользователя, присутствуют его идентификаторы (<span style="color:green">''userid''</span>, <span style="color:green">''userlogin''</span>).
+
Сообщения длиной более 64 КБ упаковываются в [http://ru.wikipedia.org/wiki/Base64 Base64] и разбиваются на несколько сообщений длиной до 64К. Для этого используется формат multipart-сообщения в протоколе Oktell-WebCRM. Если версия протокола Web-Socket для передачи сообщений использует фреймы ([http://tools.ietf.org/html/rfc6455 rfc6455 v13], [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-08 v8], [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-07 v7]), то способ отправки длинных сообщений в нескольких фреймах определен в самом протоколе. Однако это имеет ограничение: при передаче одного длинного сообщения в нескольких фреймах, оно не может быть прервано передачей других сообщений.
  
 +
Структура каждого сообщения - это список из двух объектов, первый из которых - тип сообщения, второй - словарь параметров. В словаре обязательно присутствует идентификатор запроса (поле <span style="color:green">''qid''</span> с любым текстовым уникальным значением). В случае, когда сообщение производится от имени пользователя, присутствуют его идентификаторы (<span style="color:green">''userid''</span> и/или <span style="color:green">''userlogin''</span>).
  
 
Среди параметров находятся и индивидуальные параметры сообщения. Поддерживается произвольная вложенность объектов: строк, чисел, дат, словарей, списков.
 
Среди параметров находятся и индивидуальные параметры сообщения. Поддерживается произвольная вложенность объектов: строк, чисел, дат, словарей, списков.
  
 
[[Файл:Json.jpg]]
 
  
  
  
 
<div id="Dynamic"></div>
 
<div id="Dynamic"></div>
 +
 
===Динамическое взаимодействие===
 
===Динамическое взаимодействие===
  
Строка 212: Строка 242:
 
Взаимодействие представляет собой вызов определенного метода WebCRM с передачей в него входных параметров, и возможно ожидание его исполнения с возвратом (нескольких) выходных значений.
 
Взаимодействие представляет собой вызов определенного метода WebCRM с передачей в него входных параметров, и возможно ожидание его исполнения с возвратом (нескольких) выходных значений.
  
Сразу после организации подключения к серверу WebCRM Oktell производит запрос доступных в WebCRM динамических методов (как было сказано выше, в рамках [[#Arch2|схемы интеграции 2]] вместо запроса к WebCRM осуществляется загрузка сведений из файла ''websock.config'').  
+
Сразу после организации подключения к серверу WebCRM Oktell производит запрос доступных в WebCRM динамических методов (как было сказано выше, это происходит в рамках [[#Arch1|схемы интеграции 1]] и [[#Arch3|схемы интеграции 3]]).  
В ответ WebCRM перечисляет список действий, инициативу исполнения которых она готова отдать наружу в Oktell. При описании метода упоминаются:
+
В ответ WebCRM перечисляет список действий, инициативу исполнения которых она готова отдать наружу в Oktell. При описании метода в представлении указываются:
:* человеческое название,
+
:* человеческое название;
:* краткий код метода,
+
:* краткий код метода;
:* описание для администратора, настраивающего Oktell,
+
:* описание для администратора, настраивающего Oktell;
:* список входных параметров с упоминанием типов (и возможных значений для перечислений),
+
:* список входных параметров с упоминанием типов (и возможных значений для перечислений);
:* список выходных параметров, если метод возвращает данные и призван влиять на алгоритм сценария в Oktell,
+
:* список выходных параметров, если метод возвращает данные и призван влиять на алгоритм сценария в Oktell;
:* признак того, нужно ли исполнять метод с привязкой к конкретному пользователю, или это обращение к серверу вообще,
+
:* признак того, нужно ли исполнять метод с привязкой к конкретному пользователю и в направлении индивидуального пользовательского подключения, или это обращение к серверу вообще;
:* разрешено ли отменять исполнение (например для метода «открыть карточку такую-то» возможна отмена, означающая «закрыть карточку такую-то»),
+
:* разрешено ли отменять исполнение (например для метода «открыть карточку такую-то» возможна отмена, означающая «закрыть карточку такую-то»);
:* куда Oktell направлять запрос - через Web-Socket (стандартный для взаимодействия канал) или по HTTP на альтернативный URL веб-сервера.
+
:* куда Oktell направлять серверный запрос - через стандартное подключение (websocket или http в соответствии с настройками) или по HTTP/HTTPS на альтернативный URL веб-сервера (передача осуществляется точно также POST запросом с упаковкой сообщения в переменную ''data'' в виде base64.
  
 
По каждому методу дополнительно описывается перечень входных и выходных параметров, их типы, способ исполнения метода (по организованному каналу или отдельным http-подключением), возможность его отмены (для длительных асинхронных операций, например метод ''Открыть диалоговую форму'' может быть отменен обратным методом ''Закрыть диалоговую форму'', а может быть прерван с тем же результатом).
 
По каждому методу дополнительно описывается перечень входных и выходных параметров, их типы, способ исполнения метода (по организованному каналу или отдельным http-подключением), возможность его отмены (для длительных асинхронных операций, например метод ''Открыть диалоговую форму'' может быть отменен обратным методом ''Закрыть диалоговую форму'', а может быть прерван с тем же результатом).
  
В [[#Interface|интеграционном интерфейсе Oktell-WebCRM]] отсутствует таким образом необходимость конкретизировать методы WebCRM.  
+
В [[#Interface|интеграционном интерфейсе Oktell<->WebCRM]] отсутствует таким образом необходимость конкретизировать методы WebCRM.  
 
В момент настройки сценария Oktell администратор уже имеет о них информацию и настраивает конкретный сценарий под место.  
 
В момент настройки сценария Oktell администратор уже имеет о них информацию и настраивает конкретный сценарий под место.  
  
 
Администратором определяется одно или несколько из доступных действий, определяется момент исполнения, определяются входные параметры или способ их вычисления, а также режим ожидания, таймаута или асинхронного выполнения.  
 
Администратором определяется одно или несколько из доступных действий, определяется момент исполнения, определяются входные параметры или способ их вычисления, а также режим ожидания, таймаута или асинхронного выполнения.  
В момент работы Oktell отправляет команду на исполнение в соответствии с определенными администратором настройками.  
+
В момент работы Oktell отправляет команду на исполнение в соответствии с определенными администратором настройками и представлением динамического метода.  
 
Если метод призван исполняться синхронно и возвращать некие значения, то сценарий приостанавливается, а после получения ответа сохраняет результаты в переменных сценария и продолжает выполнение.  
 
Если метод призван исполняться синхронно и возвращать некие значения, то сценарий приостанавливается, а после получения ответа сохраняет результаты в переменных сценария и продолжает выполнение.  
 
Работа с динамическими методами и формами производится в сценариях Oktell компонентом [[Общие_компоненты_сценариев#Действие/карточка_в_plugin_или_WebCRM|Действие в WebCRM]].
 
Работа с динамическими методами и формами производится в сценариях Oktell компонентом [[Общие_компоненты_сценариев#Действие/карточка_в_plugin_или_WebCRM|Действие в WebCRM]].
Строка 240: Строка 270:
  
 
Подробно список и интерфейс методов динамического взаимодействия приведен в разделе [[#DynamicMethods|Методы динамического взаимодействия]].
 
Подробно список и интерфейс методов динамического взаимодействия приведен в разделе [[#DynamicMethods|Методы динамического взаимодействия]].
 +
  
  
Строка 258: Строка 289:
 
В каждом сообщении присутствует параметр <span style="color:green">''qid''</span>, содержащий уникальный строковый идентификатор сообщения, обеспечивающий возможность построения из сообщений серий вида «запрос-ответ».
 
В каждом сообщении присутствует параметр <span style="color:green">''qid''</span>, содержащий уникальный строковый идентификатор сообщения, обеспечивающий возможность построения из сообщений серий вида «запрос-ответ».
 
В случае, когда сообщение относится к конкретному пользователю (отправляется от его имени), в нем присутствуют параметры <span style="color:green">''userlogin''</span> и <span style="color:green">''userid''</span>. По умолчанию синхронизация учетных записей пользователей происходит по их уникальным логинам.  
 
В случае, когда сообщение относится к конкретному пользователю (отправляется от его имени), в нем присутствуют параметры <span style="color:green">''userlogin''</span> и <span style="color:green">''userid''</span>. По умолчанию синхронизация учетных записей пользователей происходит по их уникальным логинам.  
 +
 +
 +
 +
 +
====Представление систем друг другу====
 +
 +
-------------------------------------------------------------------
 +
<span style="color:green">'''whoareyou'''</span>
 +
 +
Двунаправленный запрос на возврат информации об удаленной стороне. Служит для выстраивания взаимоотношений на основе типа подключения, а также дает возможность получить имя системы для указания администратору.
 +
Ответом является сообщение ''iam''.
 +
 +
Применяется в [[#Arch1|схеме интеграции 1]].
 +
 +
<pre>
 +
[
 +
"whoareyou",
 +
{
 +
  "qid": "4FEEB8EF-DF4B-47AE-8EFE-4BDA577A6FF8",
 +
  "type": "ws-server",
 +
  "name": "Iris CRM",
 +
  "version": 10.5
 +
}
 +
]
 +
</pre>
 +
<pre>
 +
//* type - собственный тип сервера, осуществляющего запрос.
 +
Oktell при запросе указывает значение ''commserver''.
 +
WebCRM может указывать что либо отличное, например ''ws-server'' или ''crm-server''.
 +
//* name - собственное название службы.
 +
//* version - собственная версия службы.
 +
</pre>
 +
 +
 +
<span style="color:green">'''iam'''</span>
 +
 +
Двунаправленный ответ на запрос ''whoareyou''. Возвращает информацию об удаленной стороне.
 +
 +
<pre>
 +
[
 +
"iam",
 +
{
 +
  "qid": "080C0DF2-442B-410E-9204-4ADB3399FCC0",
 +
  "type": "commserver",
 +
  "name": "Oktell",
 +
  "version": 100425,
 +
  "build": "2.5.3928.8022"
 +
}
 +
]
 +
</pre>
 +
<pre>
 +
//* type - тип удаленного сервера.
 +
Oktell при запросе указывает значение ''commserver''.
 +
WebCRM может указывать что либо отличное, например ''ws-server'' или ''crm-server''.
 +
//* name - название службы на удаленнм сервере.
 +
//* version - версия службы на удаленном сервере.
 +
</pre>
 +
 +
 +
 +
 +
<div id="DynamicMethods"></div>
 +
====Методы динамического взаимодействия====
 +
 +
Информация от CRM о поддерживаемых методах, доступных Oktell для инициации исполнения.
 +
 +
Серия методов forms - частный случай методов, позволяющий выделить в отдельную категорию работу с карточками. Смысл и способ работы тот же самый. Тем не менее карточки могут быть представлены как методы.
 +
 +
----------------------------------------------
 +
 +
Методы:
 +
# <span style="color:green">>>> getavailablemethods<br>
 +
# <span style="color:green"><<< availablemethods<br>
 +
# <span style="color:green">>>> executemethod<br>
 +
# <span style="color:green"><<< methodresult<br>
 +
# <span style="color:green">>>> cancelmethod<br>
 +
# <span style="color:green">>>> executemethodwaitaborted<br>
 +
 +
 +
Формы:
 +
# <span style="color:green">>>> getavailableforms<br>
 +
# <span style="color:green"><<< availableforms<br>
 +
# <span style="color:green">>>> showform<br>
 +
# <span style="color:green">>>> closeform<br>
 +
# <span style="color:green"><<< formresult<br>
 +
# <span style="color:green">>>> showformwaitaborted<br>
 +
 +
 +
------------------------------------------------------------------------------
 +
<div id="getavailablemethods"></div>
 +
<span style="color:green">>>> '''getavailablemethods'''</span>
 +
 +
Отправляет из Oktell в CRM сообщение-запрос на возврат доступных динамических методов CRM. Отправляется только на сервер CRM (websocket или http).
 +
 +
<pre>
 +
[
 +
"getavailablemethods",
 +
{
 +
  "qid": "76EF6E46-23DA-47B6-B3BD-A7076FEDE170"
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green"><<< '''availablemethods'''</span>
 +
 +
Сообщение-ответ из CRM в Oktell со списком доступных динамических методов CRM.
 +
 +
<pre>
 +
[
 +
"availablemethods",
 +
{
 +
  "qid": "76EF6E46-23DA-47B6-B3BD-A7076FEDE170",
 +
  "methods": [
 +
  {
 +
    "key": "16893E86-4D73-4F4C-8629-6E484B2CB5B0",
 +
    "name": "Вернуть данные о компании",
 +
    "description": "Возвращает информацию о компании по одному из выбранных идентификаторов, чтобы в дальнейшем использовать при открытии карточки данных о компании",
 +
    "connectiontype": "http",
 +
    "url": "http://192.168.0.100:4000/pbxapi/method1.php",
 +
    "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": "websocket",
 +
    "defineuser": true,
 +
    "allowcancel": false,
 +
    "inputparams": [
 +
    {
 +
      "key": "sessionid",
 +
      "name": "Идентификатор сессии звонка",
 +
      "description": "Для связи с номером дела",
 +
      "type": "string"
 +
    }
 +
    ],
 +
    "outputparams": [
 +
    {
 +
      "key": "recordid",
 +
      "name": "Идентификатор созданного дела",
 +
      "description": "Для дальнейшей передачи на отображение карточки",
 +
      "type": "string"
 +
    }
 +
    {...},
 +
    {...}
 +
    ]
 +
  },
 +
  {
 +
    "key": "card_records",
 +
    "name": "Показать карточку «ДЕЛА»",
 +
    "description": "Отображает контактные данные об абоненте (комании или человеке) при входящем/исходящем звонке",
 +
    "connectiontype": "default",
 +
    "defineuser": true,
 +
    "allowcancel": true,
 +
    "inputparams": [
 +
    {
 +
      "key": "recordid",
 +
      "name": "Номер дела",
 +
      "description": "Номер дела, который ранее был создан при вызове метода «Создать запись дела»",
 +
      "type": "string"
 +
    },
 +
    {
 +
      "key": "accountid",
 +
      "name": "Идентификатор клиента",
 +
      "description": "Идентификатор клиента в базе данных CRM",
 +
      "type": "string"
 +
    },
 +
    {...},
 +
    {...}
 +
    ]
 +
  },
 +
  {...},
 +
  {...}
 +
  ]
 +
}
 +
]
 +
</pre>
 +
 +
<pre>
 +
//* method:key, param:key - произвольные строковые идентификаторы, упоминаемые при вызове форм из октелла
 +
//* method:name, param:name - краткие человеческие названия, отображаются в списках при настройке сценария.
 +
//* method:description, param:description - описания, если смысл формы/параметра нетривиален, и админу может потребоваться объясняение
 +
//* method:inputparams - список входных параметров, значения которых требуется передавать в командном сообщении на исполнение соответствующего метода.
 +
//* method:outputparams - список выходных параметров, значения которых можно ожидать в сообщении о выполнении метода.
 +
//* param:type - тип параметра: string, int|int64, bool, decimal|float|double, datetime, list. Если не указан - строка. Дает администратору представление.
 +
//* param:items - в случае если тип параметра=list, здесь идет перечисление вариантов списка
 +
//* method:connectiontype - websocket|http|https|default - куда ломиться, через веб-сокет (дефолтный канал), или запросом к http-серверу. Дефолтный канал - если к CRM подключение по HTTP, то запрос по тому же адресу будет.
 +
//* method:defineuser - true|false - определять пользователя, или запрос к веб-серверу вообще.
 +
//* method:allowcancel - true|false - поддерживается ли отмена исполнения (например закрытие открывшейся карточки).
 +
</pre>
 +
 +
 +
------------------------------------------------------------------------------
 +
<span style="color:green">>>> '''executemethod'''</span>
 +
 +
Сообщение-команда из Oktell в CRM на выполнение динамического метода (возможно у конкретного пользователя). В зависимости от представления метода может исполняться на сервере CRM или передаваться в пользовательское подключение.
 +
 +
Параметр ''waitresponsems'' указывает интервал в миллисекундах, которое сценарий предполагает ожидать возврата ответа после исполнения метода; если значение равно нулю, значит метод исполняется асинхронно и ответ не нужен. При этом если происходит прерывание исполнения сценария, или в случае наличия множественных подключений от пользователя при получении первого ответа, отправляется уведомительное событие ''executemethodwaitaborted''.
 +
 +
<pre>
 +
[
 +
"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"
 +
  },
 +
  "waitresponsems": 0
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green"><<< '''methodresult'''</span>
 +
 +
Сообщение-результат выполнения динамического метода из CRM в Oktell с возвратом выходных значений. Не отправляется, если исполнение прерывается командой CancelMethod.
 +
 +
<pre>
 +
[
 +
"methodresult",
 +
{
 +
  "qid": "A238110C-6B74-4980-AA23-41402B1E9B0E",
 +
  "methodkey": "createrecord",
 +
  "executionid": "25FC81FC-C5D0-40FB-B4E0-882352E12D86",
 +
  "outputparameters": {
 +
  "recordid": "ADCB1376-BA66-496C-A56E-AB7A7D5A9193"
 +
  }
 +
}
 +
]
 +
</pre>
 +
 +
 +
------------------------------------------------------------------------------
 +
<span style="color:green">>>> '''cancelmethod'''</span>
 +
 +
Сообщение-команда из Oktell на прекращение выполнения ранее запущенного динамического метода. Отправляется туда же, куда предварительно было отправлено сообщение ''executemethod''.
 +
 +
<pre>
 +
[
 +
"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
 +
}
 +
]
 +
</pre>
 +
 +
 +
------------------------------------------------------------------------------
 +
<span style="color:green">>>> '''executemethodwaitaborted'''</span>
 +
 +
Сообщение-событие из Oktell, уведомляющее сервер/клиента CRM о прекращении ожидания ответа на выполнение метода. Отправляется туда же, куда предварительно было отправлено сообщение ''executemethod''. Отправляется только в том случае, если Oktell производил ожидание ответа (параметр ''waitresponsems'' не был равен нулю).
 +
 +
<pre>
 +
[
 +
"executemethodwaitaborted",
 +
{
 +
  "qid": "6ADC3F1E-B1DD-4768-BAF8-3EEB477B2F17",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "methodkey": "card_records",
 +
  "executionid": "25FC81FC-C5D0-40FB-B4E0-882352E12D86"
 +
}
 +
]
 +
</pre>
 +
 +
 +
------------------------------------------------------------------------------
 +
<div id="getavailableforms"></div>
 +
<span style="color:green">>>> '''getavailableforms'''</span>
 +
 +
Отправляет из Oktell в CRM сообщение-запрос на возврат доступных карточек CRM. Отправляется только на сервер CRM (websocket или http).
 +
 +
<pre>
 +
[
 +
"getavailableforms",
 +
{
 +
  "qid": "7A1FF57A-ED91-4033-A42F-1D2AE630450E"
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green"><<< '''availableforms'''</span>
 +
 +
Сообщение-ответ из CRM в Oktell со списком доступных карточек CRM. Команда на отображение форм отправляется в клиентские подключение (или на сервер-мультиплексор), в серверный канал такие команды не отправляются. В этом основное различие динамических методов и форм.
 +
 +
Следует понимать, что формы могут иметь разное назначение, и соответственно разный способ работы с данными. Например форма некоторого запроса отображается с целью получения данных обратно в сценарий - в этом случае форме нужны выходные параметры, и вызов ее происходит с ожиданием ответа. Одновременно могут существовать и использоваться формы, работающие с данными из CRM и взаимодействующие непосредственно с CRM, возможно находящиеся в отображении длительное время. В этом случае Oktell выступает лишь как инициатор их открытия с передачей входных идентификационных параметров. Таким формам выходные значения не нужны.
 +
 +
<pre>
 +
[
 +
"availableforms",
 +
{
 +
  "qid": "7A1FF57A-ED91-4033-A42F-1D2AE630450E",
 +
  "forms": [
 +
  {
 +
    "key": "formB840825C",
 +
    "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: "Комментарии"
 +
      }
 +
      ]
 +
    {...},
 +
    {...}
 +
    ]
 +
  },
 +
  {...},
 +
  {...}
 +
  ]
 +
}
 +
]
 +
</pre>
 +
 +
 +
------------------------------------------------------------------------------
 +
<span style="color:green">>>> '''showform'''</span>
 +
 +
Сообщение-команда из Oktell в CRM на открытие карточки у конкретного пользователя.
 +
 +
<pre>
 +
[
 +
"showform",
 +
{
 +
  "qid": "5CF770AE-E308-41DA-B89E-7BBCE75BE36F",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "formkey": "formB840825C",
 +
  "windowid": "9F5D8B1A-8818-41EA-A240-04DA07498C40",
 +
  "inputparameters": {
 +
  "accountid": "05379F49-AB22-4872-B2C2-0D4BA019EA0B",
 +
  "page": "page2"
 +
  },
 +
  "waitresponsems": 0
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green"><<< '''formresult'''</span>
 +
 +
Сообщение-результат из CRM в Oktell при закрытии карточки пользователем с возвратом выходных значений. Не отправляется, если отображение прерывается командой CloseForm
 +
 +
<pre>
 +
[
 +
"formresult",
 +
{
 +
  "qid": "EC9E1619-AC1B-4071-98B9-30808B9ED0EC",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "formkey": "formB840825C",
 +
  "windowid": "9F5D8B1A-8818-41EA-A240-04DA07498C40",
 +
  "outputparameters": {
 +
  "comment": "блаблабла"
 +
  }
 +
}
 +
]
 +
</pre>
 +
 +
 +
------------------------------------------------------------------------------
 +
<span style="color:green">>>> '''closeform'''</span>
 +
 +
Сообщение-команда из Oktell на закрытие карточки у конкретного пользователя. Отправляется туда же, куда предварительно было отправлено сообщение ''executemethod''.
 +
 +
<pre>
 +
[
 +
"closeform",
 +
{
 +
  "qid": "FAA1A503-FEC6-4D23-ADA9-2E4FD63F2C96",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "formkey": "formB840825C",
 +
  "windowid": "9F5D8B1A-8818-41EA-A240-04DA07498C40",
 +
  "forceclose": 0
 +
}
 +
]
 +
</pre>
 +
 +
 +
------------------------------------------------------------------------------
 +
<span style="color:green">>>> '''showformwaitaborted'''</span>
 +
 +
Сообщение-событие из Oktell, уведомляющее сервер/клиента CRM о прекращении ожидания ответа на отображение формы. Отправляется туда же, куда предварительно было отправлено сообщение ''showform''. Отправляется только в том случае, если Oktell производил ожидание ответа (параметр ''waitresponsems'' не был равен нулю).
 +
 +
<pre>
 +
[
 +
"showformwaitaborted",
 +
{
 +
  "qid": "6ADC3F1E-B1DD-4768-BAF8-3EEB477B2F17",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "formkey": "formB840825C",
 +
  "windowid": "9F5D8B1A-8818-41EA-A240-04DA07498C40"
 +
}
 +
]
 +
</pre>
 +
  
  
Строка 298: Строка 795:
  
 
-------------------------------------------------
 
-------------------------------------------------
 +
<div id="login"></div>
 
<span style="color:green"><<< '''login'''</span>
 
<span style="color:green"><<< '''login'''</span>
  
Сообщение из CRM в Oktell об авторизации пользователя. Запрос кросс-авторизации в Oktell.
+
Сообщение из CRM в Oktell об авторизации пользователя. Запрос кросс-авторизации в Oktell в рамках [[#Arch1|схемы интеграции 1]].
 +
 
 +
Логин используется в частности для привязки пользователя к конкретному телефонному аппарату. Возможны разные варианты привязки:
 +
# Для конкретного телефона в [[Карта сети|карте сети]] Oktell задается конкретный пользователь WebCRM, при логине производится автоматическая привязка (если телефону назначен также пользователь по умолчанию, то он отключается). При выходе выходе пользователя из WebCRM происходит обратный процесс. При этом телефоном считается учетная запись (комбинация логин-пароль или IP-адрес устройства, в зависимости от типа регистрации), и фактически разные устройства могут в течение времени принимать эти значения.
 +
# Во время логина WebCRM в сообщении указывает любой идентификатор (или их список) рабочего места, с которого осуществляется запуск (это может быть HostName, IP-адрес, или любой другой уникальный идентификатор, указанный для сопоставления также и в карте сети в качестве адреса компьютера). Соединенный с этим компьютером логической связью телефон в карте сети становится рабочим телефоном авторизованного таким образом пользователя. По аналогии с работой клиентских приложений Oktell.
 +
 
 +
В случае индивидуальных подключений [[#Arch2|схемы интеграции 2]] и [[#Arch3|схемы интеграции 3]] требуется указание как логина, так и пароля для проведения полной проверки, причем пароль необходимо указывать в виде MD5 хеша. При этом возможно использование сессий (параметры ''sessionid'' и ''expires''). Клиент указывает время жизни сессии в секундах, сервер возвращает идентификатор сессии; в дальнейшем при повторном подключении в указанный интервал времени клиент может указывать сессию и новое время жизни для продления, но не указывать пароль. Если сессия существует (время не вышло, сервер не перезагружался), то авторизация будет подтверждена.
 +
 
 +
<span style="color:green">ВНИМАНИЕ! В версии 2.8 пароли case-sensitive, в версии 2.7 пароли case-insensitive. При переходе между версиями до полного обновления всех паролей рекомендуется указывать пароль в дублированном виде: параметр ''password'' - MD5(lowercase), ''Password'' - MD5(normalcase).
 +
 
 +
В случае [[#Arch1|схемы интеграции 1]] подразумевается, что авторизация пользователя происходит в WebCRM, и указания пароля при кросс-логине в Oktell не требуется, равно как и сессий.
 +
 
 +
<pre>
 +
[
 +
"login",
 +
{
 +
  "qid": "9D484E0E-BE08-47B5-ABBD-490936881056",
 +
  "userlogin": "ivanov",
 +
  "userid": "29834234234",
 +
  "password": "D41D8CD98F00B204E9800998ECF8427E",
 +
  "expires": 86400,
 +
  "usewebrtc": 1
 +
}
 +
]
 +
</pre>
  
 
<pre>
 
<pre>
Строка 309: Строка 831:
 
   "userlogin": "ivanov",
 
   "userlogin": "ivanov",
 
   "userid": "29834234234"
 
   "userid": "29834234234"
 +
}
 +
]
 +
</pre>
 +
 +
<pre>
 +
[
 +
"login",
 +
{
 +
  "qid": "9D484E0E-BE08-47B5-ABBD-490936881056",
 +
  "userlogin": "ivanov",
 +
  "userid": "29834234234",
 +
  "workplace": "wp001",
 +
  "sessionid": "838AC713-9D4D-43E2-A57D-D4F2D7545FB5",
 +
  "expires": 86400
 +
}
 +
]
 +
</pre>
 +
 +
<pre>
 +
[
 +
"login",
 +
{
 +
  "qid": "9D484E0E-BE08-47B5-ABBD-490936881056",
 +
  "userlogin": "ivanov",
 +
  "userid": "29834234234",
 +
  "workplace": [
 +
  "wp001",
 +
  "192.168.0.204",
 +
  "81.22.217.33"
 +
  ]
 
  }
 
  }
 
]
 
]
Строка 316: Строка 868:
 
<span style="color:green">>>> '''loginresult'''</span>
 
<span style="color:green">>>> '''loginresult'''</span>
  
Сообщение из Oktell в CRM о результате кросс-авторизации пользователя. Может быть отправлено в ответ на запрос кросс-авторизации в Oktell, а может быть отправлено самостоятельно по результатам обработки сообщения activeusers.
+
Сообщение из Oktell в CRM о результате авторизации или кросс-авторизации пользователя. Отправляется в ответ на запрос авторизации в Oktell методом ''login'', а в рамках [[#Arch1|схемы интеграции 1]] может быть отправлено самостоятельно по результатам обработки сообщения ''activeusers'' после установки связи с CRM. В случае запроса использования клиентом WebRTC, в ответе направляется информация по учетной записи телефона, ожидающей подключения по SIP.
  
 
<pre>
 
<pre>
Строка 328: Строка 880:
 
   "error": 50093,
 
   "error": 50093,
 
   "errormsg": "Пользователь уже зарегистрирован"
 
   "errormsg": "Пользователь уже зарегистрирован"
 +
}
 +
]
 +
</pre>
 +
 +
<pre>
 +
[
 +
"loginresult",
 +
{
 +
  "qid": "939AA33E-011F-4FEC-B60A-8BC1B4888B5A",
 +
  "userlogin": "ivanov",
 +
  "userid": "29834234234",
 +
  "result": 1,
 +
  "sessionid": "838AC713-9D4D-43E2-A57D-D4F2D7545FB5",
 +
  "expires": 10000,
 +
  "sipuser": "phone81",
 +
  "siplogin": "phone81",
 +
  "sippass": "3kd94FnI",
 +
  "sipport": 5060
 
  }
 
  }
 
]
 
]
Строка 352: Строка 922:
 
<span style="color:green">>>> '''logoutresult'''</span>
 
<span style="color:green">>>> '''logoutresult'''</span>
  
Сообщение из Oktell в CRM о результате кросс-логаута пользователя. Может быть отправлено в ответ на запрос кросс-логаута в Oktell, а может быть отправлено самостоятельно в случае длительного отсутствия откликов от пользователя (не задействовано).
+
Сообщение из Oktell в CRM о результате кросс-логаута пользователя. Может быть отправлено в ответ на запрос кросс-логаута в Oktell, а может быть отправлено самостоятельно в случае длительного отсутствия откликов от пользователя (не задействовано) или выгрузки пользователя по инициативе сервера.
  
 
<pre>
 
<pre>
Строка 362: Строка 932:
 
   "userid": "29834234234",
 
   "userid": "29834234234",
 
   "result": 1
 
   "result": 1
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green"><<< '''updatesession'''</span>
 +
 +
Команда из CRM в Oktell о продлении сессии пользователя (для сохранения возможности производить вход без пароля).
 +
 +
<pre>
 +
[
 +
"updatesession",
 +
{
 +
  "qid": "9D484E0E-BE08-47B5-ABBD-490936881056",
 +
  "userlogin": "ivanov",
 +
  "userid": "29834234234",
 +
  "sessionid": "9238749273982734023",
 +
  "expires": 86400
 
  }
 
  }
 
]
 
]
Строка 375: Строка 964:
 
<span style="color:green"><<< '''entercallcenter'''</span>
 
<span style="color:green"><<< '''entercallcenter'''</span>
  
Запрос из CRM на вход в режим коллцентра. При проведении изменений в ответ отправляется сообщение userstatechanged.
+
Запрос из CRM на вход в режим call-центра. При проведении изменений в ответ отправляется сообщение userstatechanged.
  
 
<pre>
 
<pre>
Строка 391: Строка 980:
 
<span style="color:green"><<< '''exitcallcenter'''</span>
 
<span style="color:green"><<< '''exitcallcenter'''</span>
  
Запрос из CRM на выход из режима коллцентра. При проведении изменений в ответ отправляется сообщение userstatechanged.
+
Запрос из CRM на выход из режима call-центра. При проведении изменений в ответ отправляется сообщение userstatechanged.
  
 
<pre>
 
<pre>
Строка 405: Строка 994:
  
  
 +
-------------------------------------------------
 +
<span style="color:green"><<< '''checkmyuserprivilege'''</span>
 +
 +
Запрос из CRM на проверку наличия у пользователя обще-ролевой привилегии.
 +
 +
<pre>
 +
[
 +
"checkmyuserprivilege",
 +
{
 +
  "qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "code": "DashboardCreate"
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''checkmyuserprivilegeresult'''</span>
 +
 +
Ответ на ''checkmyuserprivilege''.
 +
 +
<pre>
 +
[
 +
"checkmyuserprivilegeresult",
 +
{
 +
  "qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "code": "DashboardCreate",
 +
  "hasprivilege": true
 +
  }
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green"><<< '''getmyuserprivileges'''</span>
 +
 +
Запрос из CRM на возврат всех имеющихся у пользователя обще-ролевых привилегий.
 +
 +
<pre>
 +
[
 +
"getmyuserprivileges",
 +
{
 +
  "qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''getmyuserprivilegesresult'''</span>
 +
 +
Ответ на ''getmyuserprivileges''.
 +
 +
<pre>
 +
[
 +
"getmyuserprivilegesresult",
 +
{
 +
  "qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "privileges":[
 +
    "ExtWP",
 +
    "ViewOffice",
 +
    ...
 +
  ]
 +
  }
 +
}
 +
]
 +
</pre>
 +
 +
 +
 +
 +
====Текстовый чат v.1 (версии до 2.8.130909)====
  
  
====Текстовый чат====
+
Обмен текстовыми сообщениями в первоначальном варианте, где подразумевается только диалоговое общение между двумя пользователями.
 +
Начиная с версии 2.8.130909 этот способ считается устаревшим.
 
    
 
    
 
-------------------------------------------------
 
-------------------------------------------------
Строка 455: Строка 1124:
 
<span style="color:green"><<< '''sendusertextmessage'''</span>
 
<span style="color:green"><<< '''sendusertextmessage'''</span>
  
Запрос из CRM в Oktell на отправку текстового сообщения в рамках чата другому пользователю.
+
Запрос из CRM в Oktell на отправку текстового сообщения в рамках чата другому пользователю.
 +
Вложения и сообщения в конференциях - опция, используемая веб-клиентом Oktell.
  
 
<pre>
 
<pre>
Строка 468: Строка 1138:
 
   "recvuserid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
 
   "recvuserid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
 
   "messagetext": "раз два три четыре пять вышел зайчик погулять",
 
   "messagetext": "раз два три четыре пять вышел зайчик погулять",
 +
  "isconferencechat": true,
 +
  "files": [
 +
  "Temp\1.jpg",
 +
  "Temp\2.jpg"
 +
  ]
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''sendusertextmessageresult'''</span>
 +
 +
Ответ из Oktell на команду отправки сообщения.
 +
 +
<pre>
 +
[
 +
"sendusertextmessageresult",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "messageid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
 +
  "dtformat": "yyyy-MM-dd HH:mm:ss",
 +
  "sentdate": "2012-03-18 13:06:28"
 
  }
 
  }
 
]
 
]
Строка 475: Строка 1169:
 
<span style="color:green"><<< '''setusermessageviewed'''</span>
 
<span style="color:green"><<< '''setusermessageviewed'''</span>
  
Запрос из CRM в Oktell на выставление признака прочитанности текстового сообщения пользователем. В ответ возвращается количество реально отмеченных сообщений. Может быть больше или меньше указанного. Событие о прочитанности отправляется пользователю, указанному в поле senderuserid.
+
Запрос из CRM в Oktell на выставление признака прочитанности текстового сообщения пользователем. В ответ возвращается количество реально отмеченных сообщений. Может быть больше или меньше указанного. Событие о прочитанности отправляется пользователю, указанному в поле senderuserid (параметр может не указываться).
  
 
<pre>
 
<pre>
Строка 489: Строка 1183:
 
     "4748964E-9ADC-4999-9ACB-12B8B46660CF"  
 
     "4748964E-9ADC-4999-9ACB-12B8B46660CF"  
 
   ]
 
   ]
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''setusermessageviewedresult'''</span>
 +
 +
Ответ из Oktell на команду установки признака прочитанности ''setusermessageviewed''.
 +
 +
<pre>
 +
[
 +
"setusermessageviewedresult",
 +
{
 +
  "qid": "AA29AE60-50C3-48EE-A32E-3D98265D7412",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "updatedcount": 12
 +
}
 +
]
 +
</pre>
 +
 +
 +
 +
 +
====Текстовый чат v.2 (версии начиная с 2.8.130909)====
 +
 +
 +
Обмен текстовыми сообщениями протекает в рамках чатов - индивидуальных, массовых, прикрепленных. Вводится понятие чата с соответствующими свойствами - названием, списком участников, возможностью их редактирования. Требует подписки на совокупность событий ''chat''.
 +
Интерфейс доступен и считается основным начиная с версии 2.8.130909.
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green"><<< '''chatcreate'''</span>
 +
 +
Запрос из CRM в Oktell на создание нового чата. Чаты создаются одним из участников, все остальные уведомляются о создании. Чаты могут существовать сколь угодно длительное время и использоваться многократно.
 +
Идентификатор может не указываться, тогда он генерируется и возвращается в ответе.
 +
Типы: 1 - приватный диалог двух участников, 2 - чат с нерегламентированным количеством участников, 3 - привязанный к конференции.
 +
По результатам создания генерируется и отправляется событие ''[[chatcreated]]'' всем заявленным участникам чата.
 +
 +
 +
<pre>
 +
[
 +
"chatcreate",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
 +
  "name": "название чата",
 +
  "type": 2,
 +
  "linkedobjectid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240"
 +
  "members": [
 +
    "D9E54EB7-D3D9-43D6-B70C-019ABC6FC457",
 +
    "A530C87E-6A07-471C-B70C-E7C1C31AD9A7"
 +
  ]
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''chatcreateresult'''</span>
 +
 +
Ответ из Oktell на команду создания нового чата.
 +
 +
<pre>
 +
[
 +
"chatcreateresult",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240"
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green"><<< '''chatsetname'''</span>
 +
 +
Запрос из CRM в Oktell на изменение названия существующему чату.
 +
По результатам изменения генерируется и отправляется событие ''[[chatnamechanged]]'' всем авторизованным участникам чата.
 +
 +
 +
<pre>
 +
[
 +
"chatsetname",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
 +
  "name": "новое название чата"
 +
  ]
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''chatsetnameresult'''</span>
 +
 +
Ответ из Oktell на команду изменения названия чата.
 +
 +
<pre>
 +
[
 +
"chatsetnameresult",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green"><<< '''chataddmembers'''</span>
 +
 +
Запрос из CRM в Oktell на добавление участников к существующему чату.
 +
Операция доступна только для участников чата.
 +
В качестве ключей участников ожидаются идентификаторы или логины (более затратная операция в части поиска).
 +
По результатам изменения генерируется и отправляется событие ''[[chatmemberadded]]'' всем авторизованным участникам чата, включая новых.
 +
 +
 +
<pre>
 +
[
 +
"chataddmembers",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
 +
  "members": [
 +
    "D9E54EB7-D3D9-43D6-B70C-019ABC6FC457",
 +
    "A530C87E-6A07-471C-B70C-E7C1C31AD9A7"
 +
  ]
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''chataddmembersresult'''</span>
 +
 +
Ответ из Oktell на команду добавления участников к существующему чату.
 +
 +
<pre>
 +
[
 +
"chataddmembersresult",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green"><<< '''chatremovemembers'''</span>
 +
 +
Запрос из CRM в Oktell на удаление участников из существующего чата.
 +
Операция доступна только для создателя чата.
 +
В качестве ключей участников ожидаются идентификаторы или логины (более затратная операция в части поиска).
 +
По результатам изменения генерируется и отправляется событие ''[[chatmemberremoved]]'' всем авторизованным участникам чата, включая удаленных.
 +
 +
 +
<pre>
 +
[
 +
"chatremovemembers",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
 +
  "members": [
 +
    "D9E54EB7-D3D9-43D6-B70C-019ABC6FC457",
 +
    "A530C87E-6A07-471C-B70C-E7C1C31AD9A7"
 +
  ]
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''chatremovemembersresult'''</span>
 +
 +
Ответ из Oktell на команду удаления участников из существующего чата.
 +
 +
<pre>
 +
[
 +
"chatremovemembersresult",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green"><<< '''chatgetmembers'''</span>
 +
 +
Запрос из CRM в Oktell на получение информации о текущих участниках указанного чата.
 +
 +
 +
<pre>
 +
[
 +
"chatgetmembers",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''chatgetmembersresult'''</span>
 +
 +
Ответ из Oktell на запрос информации о текущих участниках указанного чата.
 +
 +
<pre>
 +
[
 +
"chatgetmembersresult",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
 +
  "members": [
 +
    {
 +
      "id":"D9E54EB7-D3D9-43D6-B70C-019ABC6FC457"
 +
    },
 +
    ...
 +
  ]
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green"><<< '''chatsendmessage'''</span>
 +
 +
Запрос из CRM в Oktell на отправку сообщения в указанный чат.
 +
Идентификатор messageid может не указываться, тогда генерируется и возвращается в ответе. Сообщение может содержать вложенные файлы ('''files''') и указание на скрытое их хранение на диске ('''hidefiles''').
 +
 +
 +
<pre>
 +
[
 +
"chatsendmessage",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240"
 +
  "messageid": "2CD5BB8F-CC88-4D01-8A1F-5CEB2CD72AAE",
 +
  "messagetext": "раз два три четыре пять вышел зайчик погулять"
 +
  "hidefiles": false,
 +
  "files": [
 +
    "Temp\1.jpg",
 +
    "Temp\2.txt"
 +
  ]
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''chatsendmessageresult'''</span>
 +
 +
Ответ из Oktell на отправку сообщения в указанный чат.
 +
 +
<pre>
 +
[
 +
"chatsendmessageresult",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "messageid": "2CD5BB8F-CC88-4D01-8A1F-5CEB2CD72AAE"
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green"><<< '''chatsetmessageviewed'''</span>
 +
 +
Запрос из CRM в Oktell на установку флага прочитанности указанного сообщения. Вместе с указанным сообщением маркируются прочитанными также все предшествующие сообщения этого же чата.
 +
 +
 +
<pre>
 +
[
 +
"chatsetmessageviewed",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
 +
  "messageid": "D9E54EB7-D3D9-43D6-B70C-019ABC6FC457"
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''chatsetmessageviewedresult'''</span>
 +
 +
Ответ из Oktell на установку флага прочитанности сообщения.
 +
 +
<pre>
 +
[
 +
"chatsetmessageviewedresult",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green"><<< '''chatgetprivateid'''</span>
 +
 +
Запрос из CRM в Oktell на получение идентификатора существующего приватного диалога между двумя пользователями, один из которых - авторизованный пользователь. Приватные диалоги соответствуют чатам с типом "1".
 +
В системе возможно существование нескольких приватных диалогов между пользователями, в этом случае возвращается любой из них. В случае отсутствия приватных диалогов в качестве идентификатора возвращается null.
 +
 +
 +
<pre>
 +
[
 +
"chatgetprivateid",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "opponentid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240"
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''chatgetprivateidresult'''</span>
 +
 +
Ответ из Oktell на запрос идентификатора приватного диалога. Если приватный диалог между пользователями не найден, возвращается null.
 +
 +
<pre>
 +
[
 +
"chatgetprivateidresult",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "chatid": "D9E54EB7-D3D9-43D6-B70C-019ABC6FC457"
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green"><<< '''chatgetbyid'''</span>
 +
 +
Запрос из CRM в Oktell на получение информации о чате, указанному с помощью идентификатора. Среди информационных полей возвращаются название, количество участников, последнее сообщение в чате с признаком ''прочитано/не прочитано'', а также идентификатор оппонента, если это приватный диалог.
 +
 +
 +
<pre>
 +
[
 +
"chatgetbyid",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''chatgetbyidresult'''</span>
 +
 +
Ответ из Oktell на запрос информации о чате. Если чат не найден по указанному идентификатору, возвращается null.
 +
 +
<pre>
 +
[
 +
"chatgetbyidresult",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "dtformat": "yyyy-MM-dd HH:mm:ss",
 +
  "chat": {
 +
    "id":"01483664-9D99-4B1B-8131-C46386A6FC68",
 +
    "name":"приватный чат",
 +
    "type":"1",
 +
    "creatorid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",
 +
    "membercount":"4",
 +
    "privateopponentid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",
 +
    "linkedobjectid":"",
 +
    "lastdtutc":"2013-09-05 14:08:02",
 +
    "lastmessage":{
 +
      "id":"4067F854-E88A-40C1-82C5-7F125A77A25F",
 +
      "amiauthor":false,
 +
      "authorid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",
 +
      "authorlogin":"sergeev",
 +
      "authorname":"Сергеев Вахтанг Абрикосович",
 +
      "dtutc":"2013-09-05 14:08:02",
 +
      "text":"Зайди как освободишься",
 +
      "isnew":"true"
 +
    }
 +
  }
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green"><<< '''chatgethotlist'''</span>
 +
 +
Запрос из CRM в Oktell на получение информации о горячих чатах, в рамках которых последние сообщения были сравнительно недавно.
 +
Запрос информации осуществляется с указанием нужной страницы (в сортированном по убыванию даты последней активности списке ''count'' элементов, начиная с ''startidx'').
 +
Можно также наложить дополнительные фильтры, применяемые к названию чата и к имени оппонента приватного диалога (''search1'' и ''search2'').
 +
Возвращаемая информация аналогична методу ''chatgetbyid''.
 +
 +
 +
<pre>
 +
[
 +
"chatgethotlist",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "startidx": 0,
 +
  "count": 10,
 +
  "search1": "мой чат",
 +
  "search2": "vjq xfn",
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''chatgethotlistresult'''</span>
 +
 +
Ответ из Oktell на запрос информации о горячих чатах.
 +
 +
<pre>
 +
[
 +
"chatgethotlistresult",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "dtformat": "yyyy-MM-dd HH:mm:ss",
 +
  "chatlist": [
 +
  {
 +
    "id":"01483664-9D99-4B1B-8131-C46386A6FC68",
 +
    "name":"приватный чат",
 +
    "type":"1",
 +
    "creatorid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",
 +
    "membercount":"4",
 +
    "privateopponentid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",
 +
    "linkedobjectid":"",
 +
    "lastdtutc":"2013-09-05 14:08:02",
 +
    "lastmessage":{
 +
      "id":"4067F854-E88A-40C1-82C5-7F125A77A25F",
 +
      "amiauthor":false,
 +
      "authorid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",
 +
      "authorlogin":"sergeev",
 +
      "authorname":"Сергеев Вахтанг Абрикосович",
 +
      "dtutc":"2013-09-05 14:08:02",
 +
      "text":"Зайди как освободишься",
 +
      "isnew":"true"
 +
  },
 +
  ...
 +
  ]
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green"><<< '''chatgettotalnewmessagecount'''</span>
 +
 +
Запрос из CRM в Oktell на получение количества непрочитанных сообщений всего по всем чатам с участием пользователя.
 +
 +
 +
<pre>
 +
[
 +
"chatgettotalnewmessagecount",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''chatgettotalnewmessagecountresult'''</span>
 +
 +
Ответ из Oktell на запрос количества непрочитанных сообщений всего.
 +
 +
<pre>
 +
[
 +
"chatgettotalnewmessagecountresult",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "count": 31
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green"><<< '''chatgetmessagehistory'''</span>
 +
 +
Запрос из CRM в Oktell на получение истории сообщений по чату.
 +
Может быть наложен дополнительный фильтр на текст сообщения (''search1'' и ''search2''), ограничения на период выдачи истории (''dtstartutc'', ''dtstoputc''). По умолчанию весь период истории без фильтрации по тексту сообщений.
 +
Данные выдаются из сортированного по убыванию даты отправки списка сообщений с указанной страницы (''startidx'', ''count''). По умолчанию первые 10 сообщений.
 +
 +
 +
<pre>
 +
[
 +
"chatgetmessagehistory",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "chatid": "14D6DBB7-D5CB-471B-888A-9AACC8CD737B",
 +
  "startidx": 0,
 +
  "count": 50,
 +
  "dtstartutc": "2013-07-12 13:00:00",
 +
  "dtstoputc": "2013-07-12 15:00:00",
 +
  "search1": "abkmnh",
 +
  "search2": "фильтр"
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''chatgetmessagehistoryresult'''</span>
 +
 +
Ответ из Oktell на запрос истории сообщений в чате.
 +
 +
<pre>
 +
[
 +
"chatgetmessagehistoryresult",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "dtformat": "yyyy-MM-dd HH:mm:ss",
 +
  "messagelist": [
 +
    {
 +
    "id":"4067F854-E88A-40C1-82C5-7F125A77A25F",
 +
    "amiauthor":false,
 +
    "authorid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",
 +
    "authorlogin":"sergeev",
 +
    "authorname":"Сергеев Вахтанг Абрикосович",
 +
    "dtutc":"2013-09-05 14:08:02",
 +
    "text":"Зайди как освободишься",
 +
    "isnew":"true"
 +
    "files":[
 +
      {
 +
        "path":"Temp\1.jpg",
 +
        "size":329002
 +
      },
 +
      ...
 +
    ]
 +
    },
 +
    ...
 +
  ]
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green">>>> '''chatcreated'''</span>
 +
 +
Сообщение из Oktell в CRM о факте создания нового текстового чата с участием авторизованного пользователя.
 +
Отправляется всем участникам созданного чата.
 +
 +
 +
<pre>
 +
[
 +
"chatcreated",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "dtformat": "yyyy-MM-dd HH:mm:ss",
 +
  "chat": {
 +
    "id":"01483664-9D99-4B1B-8131-C46386A6FC68",
 +
    "name":"приватный чат",
 +
    "type":"1",
 +
    "creatorid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",
 +
    "membercount":"4",
 +
    "privateopponentid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",
 +
    "linkedobjectid":"",
 +
    "lastdtutc":"2013-09-05 14:08:02",
 +
    "members":[
 +
      {
 +
        "id": "",
 +
        "name": ""
 +
      },
 +
      ...
 +
    ]
 +
  }
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green">>>> '''chatnamechanged'''</span>
 +
 +
Сообщение из Oktell в CRM о факте изменения названия существующего текстового чата.
 +
Отправляется всем участникам этого чата.
 +
 +
 +
<pre>
 +
[
 +
"chatnamechanged",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "chatid": "41EE8C8F-A7DE-4F78-8F57-7F299CE2767B",
 +
  "name": "новое имя"
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green">>>> '''chatmemberadded'''</span>
 +
 +
Сообщение из Oktell в CRM о факте добавления новых участников к существующему текстовому чату.
 +
Отправляется всем участникам этого чата.
 +
 +
 +
<pre>
 +
[
 +
"chatmemberadded",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "chatid": "41EE8C8F-A7DE-4F78-8F57-7F299CE2767B",
 +
  "members":[
 +
    {
 +
      "id": "",
 +
      "name": ""
 +
    },
 +
    ...
 +
  ]
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green">>>> '''chatmemberremoved'''</span>
 +
 +
Сообщение из Oktell в CRM о факте удаления некоторых участников из существующего текстового чата.
 +
Отправляется всем участникам этого чата.
 +
 +
 +
<pre>
 +
[
 +
"chatmemberremoved",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "chatid": "41EE8C8F-A7DE-4F78-8F57-7F299CE2767B",
 +
  "members":[
 +
    {
 +
      "id": ""
 +
    },
 +
    ...
 +
  ]
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green">>>> '''chatmessage'''</span>
 +
 +
Сообщение из Oktell в CRM о факте поступления сообщения из текстового чата.
 +
Отправляется всем участникам этого чата, включая отправителя (в этом случае поля authorname и authorlogin отсутствуют).
 +
 +
 +
<pre>
 +
[
 +
"chatmessage",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "dtformat": "yyyy-MM-dd HH:mm:ss",
 +
  "chatid": "41EE8C8F-A7DE-4F78-8F57-7F299CE2767B",
 +
  "messageid": "14D6DBB7-D5CB-471B-888A-9AACC8CD737B",
 +
  "amiauthor": false,
 +
  "authorid": "B1D4DCA9-2246-4EA1-B71E-68FF29AC92E4",
 +
  "authorname": "",
 +
  "authorlogin": "",
 +
  "dtutc": "2013-09-05 16:10:04",
 +
  "text": "тело сообщения",
 +
  "isnew": true
 +
  "files":[
 +
    {
 +
    "path":"Temp\1.jpg",
 +
    "size":329002
 +
    },
 +
    ...
 +
  ]
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green">>>> '''chatmessageviewed'''</span>
 +
 +
Сообщение из Oktell в CRM о факте прочтения сообщения кем либо из участников текстового чата.
 +
Генерируется для отправителя сообщения, а также для пользователя, который прочитал сообщение.
 +
 +
 +
<pre>
 +
[
 +
"chatmessageviewed",
 +
{
 +
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "chatid": "41EE8C8F-A7DE-4F78-8F57-7F299CE2767B",
 +
  "messageid": "14D6DBB7-D5CB-471B-888A-9AACC8CD737B",
 
  }
 
  }
 
]
 
]
Строка 558: Строка 1991:
 
<span style="color:green"><<< '''setnotifyshown'''</span>
 
<span style="color:green"><<< '''setnotifyshown'''</span>
  
Запрос из CRM в Oktell об установке признака прочтенности уведомления.
+
Запрос из CRM в Oktell об установке признака прочтенности уведомления. Это актуально для уведомлений, сохраняемых в БД.
  
 
<pre>
 
<pre>
Строка 569: Строка 2002:
 
   "id": "A33027E1-096F-38B8-1198-BB4D7C15823A",
 
   "id": "A33027E1-096F-38B8-1198-BB4D7C15823A",
 
   "wasshown": false
 
   "wasshown": false
}
 
 
  }
 
  }
 
]
 
]
Строка 577: Строка 2009:
 
             одного уведомления с таким кодом (либо закрывать автоматически предыдущее, либо не отображать это)
 
             одного уведомления с таким кодом (либо закрывать автоматически предыдущее, либо не отображать это)
 
//* ids - список идентификаторов отображенных уведомлений.  
 
//* ids - список идентификаторов отображенных уведомлений.  
//* backcolor - hex AARRGGBB
 
//* type - тип сообщения из флагового списка кратных двойке кодов
 
 
</pre>
 
</pre>
  
Строка 605: Строка 2035:
 
   "callername": "ОАО Металлург",
 
   "callername": "ОАО Металлург",
 
   "callerdescription": "Металлоконструкции, изделия из черных и цветных металлов",
 
   "callerdescription": "Металлоконструкции, изделия из черных и цветных металлов",
   "callerinfo": "Абонент: 315, Задача 'Входящие в коллцентр'",
+
   "callerinfo": "Абонент: 315, Задача 'Входящие в call-центр'",
 
   "callercomment": "Еще что-то об абоненте",
 
   "callercomment": "Еще что-то об абоненте",
 
   "calleruserlogin": "",
 
   "calleruserlogin": "",
Строка 621: Строка 2051:
 
   "istask": true,
 
   "istask": true,
 
   "taskid": "F94BD1FE-B628-4CC3-B215-F3F84B275EDD",
 
   "taskid": "F94BD1FE-B628-4CC3-B215-F3F84B275EDD",
   "taskname": "Входящие в коллцентр"
+
   "taskname": "Входящие в call-центр"
 
  }
 
  }
 
]
 
]
Строка 670: Строка 2100:
 
   "callername": "ОАО Металлург",
 
   "callername": "ОАО Металлург",
 
   "callerdescription": "Металлоконструкции, изделия из черных и цветных металлов",
 
   "callerdescription": "Металлоконструкции, изделия из черных и цветных металлов",
   "callerinfosimple": "Абонент: 315, Задача 'Входящие в коллцентр'",
+
   "callerinfosimple": "Абонент: 315, Задача 'Входящие в call-центр'",
 
   "callercomment": "Еще что-то об абоненте",
 
   "callercomment": "Еще что-то об абоненте",
 
   "calleruserlogin": "",
 
   "calleruserlogin": "",
Строка 686: Строка 2116:
 
   "istask": true,
 
   "istask": true,
 
   "taskid": "F94BD1FE-B628-4CC3-B215-F3F84B275EDD",
 
   "taskid": "F94BD1FE-B628-4CC3-B215-F3F84B275EDD",
   "taskname": "Входящие в коллцентр",
+
   "taskname": "Входящие в call-центр",
 
   "tasktalklimitsec": 180,
 
   "tasktalklimitsec": 180,
 
   "taskfromhandlesec": 24
 
   "taskfromhandlesec": 24
Строка 871: Строка 2301:
  
  
 +
-------------------------------------------------
 +
<span style="color:green">>>> '''flashstatechanged'''</span>
  
 +
Cообщение из Oktell о смене состояния линии, находящейся на удержании.
 +
 +
<pre>
 +
[
 +
"flashstatechanged",
 +
{
 +
  "qid": "99CC8C57-1793-486A-AFB1-6E5CA3E6855E",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "flashtypeid": 1,
 +
  "flashtypestr": "Put",
 +
  "oppositeid": "91FD3E18-B3A7-4662-8E06-C95C7D245DC3"
 +
}
 +
]
 +
</pre>
 +
<pre>
 +
//* Список возможных состояний:
 +
Put = 1  — постановка на удержание
 +
Return = 2  — возврат с удержания
 +
Abort = 3  — прерывание удержания при положении трубки или другими действиями. Абонент на удержании получит сигнал занято.
 +
Lost = 4  — абонент прервал ожидание, либо ошибка при попытке переключения на него
 +
Switch = 5  — перевод ожидающего на кого-то другого
 +
Invite = 6  — переключение с абонентом в конференцию
 +
Between = 7  — переключение между двумя абонентами на удержании(без обрыва)
 +
Next = 8  — отбой текущего абонента и переход сразу на набор номера без возврата к абоненту на удержании
 +
Flashed = 11 — пользовать сам был поставлен кем-то на удержание
 +
Restored = 12 — пользователь возвращён из удержания
 +
Aborted = 13 — удержание пользователя прервано
 +
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green">>>> '''linestatechanged'''</span>
 +
 +
Cообщение из Oktell о смене состояния внутренней линии
 +
 +
<pre>
 +
[
 +
"linestatechanged",
 +
{
 +
  "qid": "99CC8C57-1793-486A-AFB1-6E5CA3E6855E",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "linestateid": 4,
 +
  "linestatestr": "lsReady"
 +
}
 +
]
 +
</pre>
 +
<pre>
 +
//* Список возможных состояний внутренней линии:
 +
lsDisconnected = 1 — не подключена
 +
lsOff = 2 — выключена
 +
lsReady = 4 — готова
 +
lsHookUp = 8 — поднята трубка
 +
lsIncomingCall = 16 — входящий звонок
 +
lsCommutated = 32 — скоммутирована
 +
lsWait = 64 — ожидание дозвона\коммутации
 +
lsFlash = 128 — флеш\удержание
 +
lsWaitDown = 256 — ожидание с положенной трубкой(отдельный статус резервирования линии при использовании сервиса автодозвона)
 +
lsListenBusy = 512 — сигнал "Занято" в линии(коммутация разорвана по инициативе противоположной стороны)
 +
lsUndefined = 1024 — неопределено
 +
lsReserved = 2048 — зарезервирована
 +
</pre>
  
 
====Команды к АТС====
 
====Команды к АТС====
Строка 1028: Строка 2523:
  
 
-------------------------------------------------
 
-------------------------------------------------
 +
<div id="pbxmakeflash"></div>
 
<span style="color:green"><<< '''pbxmakeflash'''</span>
 
<span style="color:green"><<< '''pbxmakeflash'''</span>
  
Строка 1048: Строка 2544:
 
switch - возврат к тому, кто на удержании, с размещением текущего на удержании
 
switch - возврат к тому, кто на удержании, с размещением текущего на удержании
 
next - обрыв текущему и переход сразу в набор номера
 
next - обрыв текущему и переход сразу в набор номера
 +
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green"><<< '''pbxmaketransfer'''</span>
 +
 +
Запрос из CRM в Oktell на перевод текущего звонка.<br>
 +
Если A соединен с B, и от А приходит команда трансфер(C), то абонента B переключает на C, а A в отбой.<br>
 +
Если A соединен с B, а в это время во флеше/холде находится D, то абонента B переключает на C, а A соединяется с D.<br>
 +
Если A ни с кем не соединен, то просто отбой в A.
 +
 +
<pre>
 +
[
 +
"pbxmaketransfer",
 +
{
 +
  "qid": "DD836C5D-4F3E-4FD2-9B60-24E330B03FC6",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "transferto": "475"
 +
}
 +
]
 +
</pre>
 +
<pre>
 +
//* transferto - номер, на который осуществить перевод.
 
</pre>
 
</pre>
  
Строка 1064: Строка 2584:
 
   "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 
   "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 
  }
 
  }
]
 
 
]
 
]
 
</pre>
 
</pre>
Строка 1112: Строка 2631:
  
 
-------------------------------------------------
 
-------------------------------------------------
<span style="color:green"><<< '''pbxmakeflash'''</span>
+
<span style="color:green"><<< '''pbxdtmf'''</span>
  
Запрос из CRM в Oktell на программную эмуляцию флэш.
+
Запрос из CRM в Oktell на генерацию софт-DTMF.
  
 
<pre>
 
<pre>
 
[
 
[
  "pbxmakeflash",
+
  "pbxdtmf",
 
  {
 
  {
 
   "qid": "DD836C5D-4F3E-4FD2-9B60-24E330B03FC6",
 
   "qid": "DD836C5D-4F3E-4FD2-9B60-24E330B03FC6",
 
   "userlogin": "Иванов",
 
   "userlogin": "Иванов",
 
   "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 
   "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
   "mode": "default"
+
   "dtmf": "#"
 
  }
 
  }
 
]
 
]
 
</pre>
 
</pre>
 
<pre>
 
<pre>
//* mode - abort, switch, next - устанавливает поведение, если на удержании уже находится абонент.
+
//* dtmf: цифры, *, #
abort - обрыв текущему и переключение на того кто на удержании
+
switch - возврат к тому, кто на удержании, с размещением текущего на удержании
+
next - обрыв текущему и переход сразу в набор номера
+
 
</pre>
 
</pre>
  
  
 
 
 
====Запуск служебного сценария====
 
 
 
-------------------------------------------------
 
-------------------------------------------------
<span style="color:green"><<< '''startsvcscript'''</span>,
+
<span style="color:green"><<< '''pbxanswercall'''</span>
<span style="color:green">'''execsvcscript'''</span>
+
  
Запрос из CRM в Oktell на запуск служебного сценария. ''startsvcscript'' - от имени пользователя, ''execsvcscript'' - без указания пользователя от имени сервера.
+
Запрос из CRM в Oktell на снятие трубки при входящем звонке (с помощью изменения SIP-вызова на интерком).
  
 
<pre>
 
<pre>
 
[
 
[
  "startsvcscript",
+
  "pbxanswercall",
 
  {
 
  {
   "qid": "244E3867-470E-4A56-904D-D435D57CFBFE",
+
   "qid": "DD836C5D-4F3E-4FD2-9B60-24E330B03FC6",
 
   "userlogin": "Иванов",
 
   "userlogin": "Иванов",
   "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
+
   "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"
  "scriptname": "Служебный сценарий получения почты",
+
  "startparam1": "значение параметра 1",
+
  "startparam2": "значение параметра 2",
+
  "startparam3": "значение параметра 3",
+
  "startparam4": "значение параметра 4",
+
  "startparam5": "значение параметра 5",
+
  "waitresponse": true,
+
  "waittimeoutsec": 10
+
 
  }
 
  }
 
]
 
]
 
</pre>
 
</pre>
 +
 +
 +
-------------------------------------------------
 +
<span style="color:green"><<< '''pbxinterceptcall'''</span>
 +
 +
Запрос из CRM в Oktell на перехват вызова
 
<pre>
 
<pre>
 
[
 
[
  "execsvcscript",
+
  "pbxinterceptcall",
 
  {
 
  {
   "qid": "244E3867-470E-4A56-904D-D435D57CFBFE",
+
   "qid": "DD836C5D-4F3E-4FD2-9B60-24E330B03FC6",
   "scriptname": "Служебный сценарий получения почты",
+
   "userlogin": "Иванов",
   "startparam1": "значение параметра 1",
+
   "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
   "startparam2": "значение параметра 2",
+
   "number": "400"
  "startparam3": "значение параметра 3",
+
  "startparam4": "значение параметра 4",
+
  "startparam5": "значение параметра 5",
+
  "waitresponse": true,
+
  "waittimeoutsec": 10
+
 
  }
 
  }
 
]
 
]
 
</pre>
 
</pre>
 
<pre>
 
<pre>
//* scriptname - название сценария в общем разделе.
+
//* number - внутренний номер, вызов на который необходимо перехватить. Если не задан, то перехват первого доступного из групповых.
//* startparamN - строковое значение соответствующего параметра.
+
При необходимости передать больше параметров следует объединять параметры в одну строку
+
с использованием символа-разделителя, а в самом сценарии производить обратную операцию.
+
//* waitresponse - ожидать ли ответа.
+
//* waittimeoutsec - таймаут ожидания ответа в секундах. 0 - вечно.
+
 
</pre>
 
</pre>
  
 +
====Запросы к АТС общего характера====
 +
 +
-------------------------------------------------------------------
 +
<span style="color:green"><<< '''exectmcall'''</span>
  
<span style="color:green">>>> '''startsvcscriptresult'''</span>,
+
Запрос из CRM в Oktell. Осуществляет размещение короткого задания на дозвон и соединение с указанным оператором (пользователем).
<span style="color:green">'''execsvcscriptresult'''</span>
+
Дозвониться до одного из указанных абонентов-номеров группы A, соединить с одним из указанных абонентов-номеров группы B.
 +
Результатом выполнения является одна коммутация.
  
Ответ Oktell на запрос запуска служебного сценария.
+
Не требует указания пользователя.
 +
Считается серверным методом, хотя может вызываться и по индивидуальному клиентскому каналу.
  
 
<pre>
 
<pre>
 
[
 
[
  "startsvcscriptresult",
+
  "exectmcall",
 
  {
 
  {
   "qid": "244E3867-470E-4A56-904D-D435D57CFBFE",
+
   "qid": "BE06A1E4-759A-4BFA-8D15-5FCF756EEE53",
   "userlogin": "Иванов",
+
   "taskid": "qud82039lsdfmnasd",
   "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
+
   "a_abonents": [
  "scriptname": "Служебный сценарий получения почты",
+
  "7931289",
   "result": 0,
+
  "83959279394",
  "returnvalue": "присвоенный в сценарии результат",
+
  "425",
   "error": 10
+
  "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
 
  }
 
  }
 
]
 
]
Строка 1211: Строка 2730:
 
<pre>
 
<pre>
 
[
 
[
  "execsvcscriptresult",
+
  "exectmcall",
 
  {
 
  {
   "qid": "244E3867-470E-4A56-904D-D435D57CFBFE",
+
   "qid": "BE06A1E4-759A-4BFA-8D15-5FCF756EEE53",
   "scriptname": "Служебный сценарий получения почты",
+
   "taskid": "qud82039lsdfmnasd",
   "result": 0,
+
   "taskcode": "xxxxx",
   "returnvalue": "присвоенный в сценарии результат",
+
  "a_abonents": ["4952172020"],
   "error": 10
+
  "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,
 
  }
 
  }
 
]
 
]
 
</pre>
 
</pre>
 
<pre>
 
<pre>
//* error: 10 - файл не найден, 11 - исключение, 12 - таймаут
+
Обязательными параметрами являются только a_abonents и b_abonents. Остальные имеют значения по умолчанию.
//* returnvalue - возвращаемый результат сценария (если сценарий исполнился, и его завершения удалось дождаться)
+
 +
//* 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: таймаут в секундах для вызова абонентов соответствующей группы.
 +
Режим использования таймаута задается в разделе [[Настройки менеджера очередей|настроек менеджера очередей]].
 
</pre>
 
</pre>
  
  
 +
<span style="color:green">>>> '''exectmcallresult'''</span>
  
 
+
Ответ из Oktell в CRM. Возвращает результат исполнения хранимой процедуры в БД Oktell. Перечисляет все выходные наборы данных.
<div id="DynamicMethods"></div>
+
 
+
====Методы динамического взаимодействия====
+
 
+
Информация от CRM о поддерживаемых методах, доступных Oktell для инициации исполнения.
+
 
+
Серия методов forms - частный случай методов, позволяющий выделить в отдельную категорию работу с карточками. Смысл и способ работы тот же самый. Тем не менее карточки могут быть представлены как методы.
+
 
+
----------------------------------------------
+
 
+
Методы:
+
# <span style="color:green">>>> getavailablemethods<br>
+
# <span style="color:green"><<< availablemethods<br>
+
# <span style="color:green">>>> executemethod<br>
+
# <span style="color:green">>>> cancelmethod<br>
+
# <span style="color:green"><<< methodresult<br>
+
 
+
Формы:
+
# <span style="color:green">>>> getavailableforms<br>
+
# <span style="color:green"><<< availableforms<br>
+
# <span style="color:green">>>> showform<br>
+
# <span style="color:green">>>> closeform<br>
+
# <span style="color:green"><<< formresult<br>
+
 
+
 
+
------------------------------------------------------------------------------
+
<span style="color:green">>>> '''getavailablemethods'''</span>
+
 
+
Отправляет из Oktell в CRM сообщение-запрос на возврат доступных динамических методов CRM.
+
  
 
<pre>
 
<pre>
 
[
 
[
  "getavailablemethods",
+
  "exectmcallresult",
 
  {
 
  {
   "qid": "76EF6E46-23DA-47B6-B3BD-A7076FEDE170"
+
   "qid": "BE06A1E4-759A-4BFA-8D15-5FCF756EEE53",
 +
  "taskid": "qud82039lsdfmnasd"
 
  }
 
  }
 
]
 
]
 
</pre>
 
</pre>
 
 
<span style="color:green"><<< '''availablemethods'''</span>
 
 
Сообщение-ответ из CRM в Oktell со списком доступных динамических методов CRM.
 
 
 
<pre>
 
<pre>
[
+
//* taskid - возвращает идентификатор запущенного задания.
"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"
+
    },
+
    {...},
+
    {...}
+
    ]
+
  },
+
  {...},
+
  {...}
+
  ]
+
}
+
]
+
 
</pre>
 
</pre>
  
  
------------------------------------------------------------------------------
+
<span style="color:green">>>> '''exectmcallreport'''</span>
<span style="color:green">>>> '''executemethod'''</span>
+
  
Сообщение-команда из Oktell в CRM на выполнение динамического метода (возможно у конкретного пользователя).
+
Отчет о выполнении задания. Указывает код задания, и причину ошибки в случае неудачи.
  
 
<pre>
 
<pre>
 
[
 
[
  "executemethod",
+
  "exectmcallreport",
 
  {
 
  {
   "qid": "4A8E20A1-57F9-4CA6-B4EE-221E2EB00364",
+
   "qid": "DDA55585-F598-4F8C-B605-E6E186E6D859",
   "userlogin": "Иванов",
+
   "taskid": "qud82039lsdfmnasd",
   "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
+
   "success": false,
   "methodkey": "createrecord",
+
   "errorid": 21,
   "executionid": "25FC81FC-C5D0-40FB-B4E0-882352E12D86",
+
   "errorstr": "CallAbonentFailure"
  "inputparameters": {
+
  "sessionid": "2A2C48FE-D8B6-4B51-951A-09D31543D000"
+
  }
+
 
  }
 
  }
 
]
 
]
Строка 1403: Строка 2838:
  
  
<span style="color:green"><<< '''methodresult'''</span>
+
-------------------------------------------------------------------
 +
<span style="color:green"><<< '''stoptmcall'''</span>
  
Сообщение-результат выполнения динамического метода из CRM в Oktell с возвратом выходных значений. Не отправляется, если исполнение прерывается командой CancelMethod.
+
Запрос из CRM в Oktell. Отменяет ранее запущенное методом ''exectmcall'' задание, если оно еще не завершило исполнение.
 +
 
 +
Не требует указания пользователя.
  
 
<pre>
 
<pre>
 
[
 
[
  "methodresult",
+
  "stoptmcall",
 
  {
 
  {
   "qid": "A238110C-6B74-4980-AA23-41402B1E9B0E",
+
   "qid": "DDA55585-F598-4F8C-B605-E6E186E6D859",
   "methodkey": "createrecord",
+
   "taskid": "qud82039lsdfmnasd"
  "executionid": "25FC81FC-C5D0-40FB-B4E0-882352E12D86",
+
  "outputparameters": {
+
  "recordid": "ADCB1376-BA66-496C-A56E-AB7A7D5A9193"
+
  }
+
 
  }
 
  }
 
]
 
]
</pre>
+
</pre>
  
  
------------------------------------------------------------------------------
+
<span style="color:green">>>> '''stoptmcallresult'''</span>
<span style="color:green">>>> '''cancelmethod'''</span>
+
  
Сообщение-команда из Oktell на прекращение выполнения ранее запущенного динамического метода.
+
Ответ от Oktell в CRM. Возвращает результат отмены задания.
  
 
<pre>
 
<pre>
 
[
 
[
  "cancelmethod",
+
  "stoptmcallresult",
 
  {
 
  {
   "qid": "6ADC3F1E-B1DD-4768-BAF8-3EEB477B2F17",
+
   "qid": "DDA55585-F598-4F8C-B605-E6E186E6D859",
   "userlogin": "Иванов",
+
   "taskid": "qud82039lsdfmnasd",
   "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
+
   "success": false,
   "methodkey": "card_records",
+
   "errortext": "task not found"
  "executionid": "25FC81FC-C5D0-40FB-B4E0-882352E12D86",
+
  "forcecancel": 0
+
 
  }
 
  }
 
]
 
]
Строка 1442: Строка 2873:
  
  
------------------------------------------------------------------------------
+
-------------------------------------------------------------------
<span style="color:green">>>> '''getavailableforms'''</span>
+
<span style="color:green"><<< '''gettotalqueue'''</span>
  
Отправляет из Oktell в CRM сообщение-запрос на возврат доступных карточек CRM.
+
Запрос из CRM в Oktell на возврат информации обо всех очередях.
 +
Может использоваться без указания пользователя.
 +
Не рекомендуется к частому использованию, так как требует значительных вычислительных ресурсов.
  
 
<pre>
 
<pre>
 
[
 
[
  "getavailableforms",
+
  "gettotalqueue",
 
  {
 
  {
   "qid": "7A1FF57A-ED91-4033-A42F-1D2AE630450E"
+
   "qid": "DDDB5BCA-A200-448C-93C7-EFEAE5AFE48D",
 +
  "skipempty": true
 
  }
 
  }
 
]
 
]
Строка 1457: Строка 2891:
  
  
<span style="color:green"><<< '''availableforms'''</span>
+
<span style="color:green">>>> '''gettotalqueueresultresult'''</span>
  
Cообщение-ответ из CRM в Oktell со списком доступных карточек CRM.
+
Ответ из Oktell в CRM. Возвращает список всех очередей и их абонентов
  
 
<pre>
 
<pre>
 
[
 
[
  "availableforms",
+
  "gettotalqueueresult",
 
  {
 
  {
   "qid": "7A1FF57A-ED91-4033-A42F-1D2AE630450E",
+
   "qid": "DDDB5BCA-A200-448C-93C7-EFEAE5AFE48D",
   "forms": [
+
   "result": [
 
   {
 
   {
     "key": "B840825C-95BB-49B8-9B30-74D3225701BF",  
+
     "numid": "507db30b-f8f7-46cf-b3c7-6b8ba7b696a8",
     "name": "Данные о компании",
+
     "numprefix": "12",
     "description": "Отображает контактные данные об абоненте (комании или человеке) при входящем/исходящем звонке",
+
     "ruleid": "6ffab1ac-7b9b-4ba2-8547-233175368b6d",
     "inputparams": [
+
     "rulename": "Денис"
 +
    "queue": [
 
     {
 
     {
       "key": "accountid",
+
       "objectid": "928efda2-a3b3-423b-9d49-d2e76879c718",
       "name": "Код компании",
+
       "chainid": "d1c2b337-6293-4ea0-a355-f59caaeff54b",
       "description": "Код компании, который CRM возвращает в поле [accountid] в ответ на запрос данных о компании по номеру телефона",
+
       "srcelementid": "38d8b6ad-a68b-4075-a1a3-038510f20a54",
       "type": "string"
+
      "objecttype": 0,
    },
+
       "objecttypestr": "qotQueueLogic",
    {
+
      "queuesource": 1,
       "key": "page",
+
       "queuesourcestr": "qsLineLogic",
       "name": "Активная страница",
+
       "callerid": "14",
       "description": "Открываемая страница формы по умолчанию при открытии карточки",
+
       "calledid": "12",
       "type": "list",
+
       "isuser": true,
       "items": [
+
      "userid": "da803f01-ea77-40fa-bc9d-e2efb36fd5a8",
      {
+
       "userlogin": "Peter",
        id: "page1",
+
      "username": "Петр Александрович",
        name: "Контактные данные"
+
      "department": "Программисты",
      },
+
      "managedlineid": "38d8b6ad-a68b-4075-a1a3-038510f20a54",
      {
+
      "managedlinenumber": "16001",
        id: "page2",
+
      "srclineid": "38d8b6ad-a68b-4075-a1a3-038510f20a54",
        name: "История взаимодействия"
+
      "srclinenumber": "16001"
      },
+
      "queuepriority": 9,
      {
+
       "startqueuetime": "2012-06-07 12:58:44",
        id: "page3",
+
      "lenqueue": 1.4375,
        name: "Комментарии"
+
      "istask": false
      }
+
      }
       ]
+
    {...},
+
    {...}
+
 
     ]
 
     ]
 
   },
 
   },
   {...},
+
   ...
   {...}
+
   {}
 
   ]
 
   ]
 
  }
 
  }
 
]
 
]
 +
</pre>
 +
<pre>
 +
//* result - содержит список всех очередей. Очередь при этом содержится в словаре.
 +
//*  result:numid - идентификатор стандартного внутреннего номера, при котором данная очередь.
 +
//*  result:numprefix - стандартный внутреннего номер, при котором данная очередь.
 +
//*  result:ruleid - идентификатор номерного правила, при котором данная очередь.
 +
//*  result:rulename - название номерного правила, при котором данная очередь.
 +
//*  result:queue - список абонентов очереди в порядке убывания. Каждый абонент содержится в словаре.
 
</pre>
 
</pre>
  
 +
====Запуск служебного сценария====
 +
 +
-------------------------------------------------
 +
<span style="color:green"><<< '''startsvcscript'''</span>,
 +
<span style="color:green">'''execsvcscript'''</span>
  
------------------------------------------------------------------------------
+
Запрос из CRM в Oktell на запуск служебного сценария. ''startsvcscript'' - от имени пользователя, ''execsvcscript'' - без указания пользователя от имени сервера.
<span style="color:green">>>> '''showform'''</span>
+
 
+
Сообщение-команда из Oktell в CRM на открытие карточки у конкретного пользователя.
+
  
 
<pre>
 
<pre>
 
[
 
[
  "showform",
+
  "startsvcscript",
 
  {
 
  {
   "qid": "5CF770AE-E308-41DA-B89E-7BBCE75BE36F",
+
   "qid": "244E3867-470E-4A56-904D-D435D57CFBFE",
 
   "userlogin": "Иванов",
 
   "userlogin": "Иванов",
 
   "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 
   "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
   "formkey": "B840825C-95BB-49B8-9B30-74D3225701BF",
+
   "scriptname": "Служебный сценарий получения почты",
   "windowid": "9F5D8B1A-8818-41EA-A240-04DA07498C40",
+
   "startparam1": "значение параметра 1",
   "inputparameters": {
+
   "startparam2": "значение параметра 2",
  "accountid": "05379F49-AB22-4872-B2C2-0D4BA019EA0B",
+
  "startparam3": "значение параметра 3",
  "page": "page2"
+
  "startparam4": "значение параметра 4",
   }
+
   "startparam5": "значение параметра 5",
 +
  "waitresponse": true,
 +
  "waittimeoutsec": 10
 
  }
 
  }
 
]
 
]
 
</pre>
 
</pre>
 
 
<span style="color:green"><<< '''formresult'''</span>
 
 
Сообщение-результат из CRM в Oktell при закрытии карточки пользователем с возвратом выходных значений. Не отправляется, если отображение прерывается командой CloseForm
 
 
<pre>
 
<pre>
 
[
 
[
  "formresult",
+
  "execsvcscript",
 
  {
 
  {
   "qid": "EC9E1619-AC1B-4071-98B9-30808B9ED0EC",
+
   "qid": "244E3867-470E-4A56-904D-D435D57CFBFE",
   "userlogin": "Иванов",
+
   "scriptname": "Служебный сценарий получения почты",
   "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
+
   "startparam1": "значение параметра 1",
   "formkey": "EC9E1619-AC1B-4071-98B9-30808B9ED0EC",
+
   "startparam2": "значение параметра 2",
   "windowid": "25FC81FC-C5D0-40FB-B4E0-882352E12D86",
+
   "startparam3": "значение параметра 3",
   "outputparameters": {
+
   "startparam4": "значение параметра 4",
  "comment": "блаблабла"
+
  "startparam5": "значение параметра 5",
   }
+
   "waitresponse": true,
 +
  "waittimeoutsec": 10
 
  }
 
  }
 
]
 
]
 +
</pre>
 +
<pre>
 +
//* scriptname - название сценария в общем разделе.
 +
//* startparamN - строковое значение соответствующего параметра.
 +
При необходимости передать больше параметров следует объединять параметры в одну строку
 +
с использованием символа-разделителя, а в самом сценарии производить обратную операцию.
 +
//* waitresponse - ожидать ли ответа.
 +
//* waittimeoutsec - таймаут ожидания ответа в секундах. 0 - вечно.
 
</pre>
 
</pre>
  
 
------------------------------------------------------------------------------
 
<span style="color:green">>>> '''closeform'''</span>
 
  
Сообщение-команда из Oktell на закрытие карточки у конкретного пользователя.
+
<span style="color:green">>>> '''startsvcscriptresult'''</span>,
 +
<span style="color:green">'''execsvcscriptresult'''</span>
 +
 
 +
Ответ Oktell на запрос запуска служебного сценария.
  
 
<pre>
 
<pre>
 
[
 
[
  "closeform",
+
  "startsvcscriptresult",
 
  {
 
  {
   "qid": "FAA1A503-FEC6-4D23-ADA9-2E4FD63F2C96",
+
   "qid": "244E3867-470E-4A56-904D-D435D57CFBFE",
 
   "userlogin": "Иванов",
 
   "userlogin": "Иванов",
 
   "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 
   "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
   "formkey": "B840825C-95BB-49B8-9B30-74D3225701BF",
+
   "scriptname": "Служебный сценарий получения почты",
   "windowid": "9F5D8B1A-8818-41EA-A240-04DA07498C40",
+
   "result": 0,
   "forceclose": 0
+
  "returnvalue": "присвоенный в сценарии результат",
 +
   "error": 10
 
  }
 
  }
 
]
 
]
 +
</pre>
 +
<pre>
 +
[
 +
"execsvcscriptresult",
 +
{
 +
  "qid": "244E3867-470E-4A56-904D-D435D57CFBFE",
 +
  "scriptname": "Служебный сценарий получения почты",
 +
  "result": 0,
 +
  "returnvalue": "присвоенный в сценарии результат",
 +
  "error": 10
 +
}
 +
]
 +
</pre>
 +
<pre>
 +
//*  error: 10 - файл не найден, 11 - исключение, 12 - таймаут
 +
//*  returnvalue - возвращаемый результат сценария (если сценарий исполнился, и его завершения удалось дождаться)
 
</pre>
 
</pre>
  
Строка 2564: Строка 4029:
 
</pre>
 
</pre>
 
<pre>
 
<pre>
 +
//* conflistchanged,
 
//* confparamschanged,  
 
//* confparamschanged,  
 
//* confcompositionchanged,  
 
//* confcompositionchanged,  
Строка 2594: Строка 4060:
 
   "onredirect": true,
 
   "onredirect": true,
 
   "onlunch": false,
 
   "onlunch": false,
   "oncallcenter": false
+
   "oncallcenter": false,
 +
  "onccmanual": false
 
  }
 
  }
 
]
 
]
Строка 2604: Строка 4071:
  
 
Запрос из CRM к Oktell на смену состояния пользователя от его имени. При проведении изменений в ответ отправляется сообщение userstatechanged.
 
Запрос из CRM к Oktell на смену состояния пользователя от его имени. При проведении изменений в ответ отправляется сообщение userstatechanged.
 +
 +
Для изменения только одного из параметров состояния можно остальные не указывать (например оставлять только oncallcenter).
  
 
<pre>
 
<pre>
Строка 2614: Строка 4083:
 
   "userstateid": 2,
 
   "userstateid": 2,
 
   "onredirect": false,
 
   "onredirect": false,
 +
  "onlunch": false,
 +
  "oncallcenter": false,
 +
  "onccmanual": false,
 
   "lunchreasonid": 120,
 
   "lunchreasonid": 120,
 
   "lunchreasonmsg": ""
 
   "lunchreasonmsg": ""
Строка 2622: Строка 4094:
 
//* lunchreasonid и lunchreasonmsg - расширение для будущей статистики, устанавливают причину перерыва.  
 
//* lunchreasonid и lunchreasonmsg - расширение для будущей статистики, устанавливают причину перерыва.  
 
id - если причина одна из стандартных. msg - если что-то уникальное юзер ввел.
 
id - если причина одна из стандартных. msg - если что-то уникальное юзер ввел.
 +
userstateid:
 +
1 - Готов
 +
2 - Перерыв
 +
3 - Отсутствует
 +
5 - Занят
 
</pre>
 
</pre>
  
Строка 2657: Строка 4134:
 
   "onredirect": true,
 
   "onredirect": true,
 
   "onlunch": false,
 
   "onlunch": false,
   "oncallcenter": false
+
   "oncallcenter": false,
 +
  "onccmanual": false
 
  }
 
  }
 
]
 
]
Строка 2666: Строка 4144:
 
<span style="color:green"><<< '''checkuserintask'''</span>
 
<span style="color:green"><<< '''checkuserintask'''</span>
  
Запрос из CRM в Oktell о присутствии указанного пользователя в задачах коллцентра.
+
Запрос из CRM в Oktell о присутствии указанного пользователя в задачах call-центра.
  
 
<pre>
 
<pre>
Строка 2682: Строка 4160:
 
<span style="color:green">>>> '''checkuserintaskresult'''</span>
 
<span style="color:green">>>> '''checkuserintaskresult'''</span>
  
Ответ из Oktell в CRM с ответом на запрос присутствия указанного в запросе пользователя в задачах коллчентра. Описание задачи в случае положительного ответа.
+
Ответ из Oktell в CRM с ответом на запрос присутствия указанного в запросе пользователя в задачах колл-центра. Описание задачи в случае положительного ответа.
  
 
<pre>
 
<pre>
Строка 2715: Строка 4193:
 
  "getmyuserinfo",  
 
  "getmyuserinfo",  
 
  {  
 
  {  
   "qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",</pre>
+
   "qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",
 
   "userlogin": "Иванов",
 
   "userlogin": "Иванов",
 
   "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 
   "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
Строка 2739: Строка 4217:
 
   "lineid": "267F8F36-4713-4B66-81BD-019512E56E7E",
 
   "lineid": "267F8F36-4713-4B66-81BD-019512E56E7E",
 
   "linenumber": "17374",
 
   "linenumber": "17374",
   }
+
   "isoperator": true
 
  }
 
  }
 
]
 
]
Строка 2748: Строка 4226:
 
<span style="color:green"><<< '''getuserphoto'''</span>
 
<span style="color:green"><<< '''getuserphoto'''</span>
  
Запрос из CRM в Oktell о текущем изображении (аватарке) указанного пользователя.
+
Запрос из CRM в Oktell о текущем изображении (аватарке) указанного пользователя. Можно указывать только логин (''photoownerlogin'') или только идентификатор (''photoownerid'') интересующего пользователя.
  
 
<pre>
 
<pre>
Строка 2867: Строка 4345:
  
 
<pre>
 
<pre>
[
+
[
"setmyuserphoto",
+
"setmyuserphoto",
{
+
{
  "qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",
+
  "qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",
  "userlogin": "Иванов",
+
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
+
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "filepath": "",
+
  "filepath": "",
  "imagedatab64": "",
+
  "imagedatab64": "",
  "filename": ""
+
  "filename": ""
}
+
}
]
+
]
 
</pre>
 
</pre>
 
<pre>
 
<pre>
Строка 2916: Строка 4394:
 
<span style="color:green"><<< '''changepassword'''</span>
 
<span style="color:green"><<< '''changepassword'''</span>
  
Запрос из CRM в Oktell на изменение пароля текущего авторизованного пользователя
+
Запрос из CRM в Oktell на изменение пароля текущего авторизованного пользователя.
 +
В версиях 2.7 пароль в нижнем регистре, в версиях 2.8 пароль без изменения регистра.
  
 
<pre>
 
<pre>
Строка 3120: Строка 4599:
  
 
 
<span style="color:green">>>> '''getcallingoutabonentinforesult'''</span>
+
<span style="color:green">>>> '''getflashedabonentinforesult'''</span>
  
 
Ответ из Oktell в CRM. Возвращает информацию об абоненте, находящемся на удержании
 
Ответ из Oktell в CRM. Возвращает информацию об абоненте, находящемся на удержании
Строка 3172: Строка 4651:
  
 
 
<span style="color:green">>>> '''getextendedlineinfo'''</span>
+
<span style="color:green">>>> '''getextendedlineinforesult'''</span>
  
Ответ из Oktell в CRM. Возвращает информацию об абоненте, которому осуществляется исходящий вызов от имени указанного в запросе пользователя.
+
Ответ из Oktell в CRM. Возвращает информацию о текущей линии и ее оппозитных абонентах
  
 
<pre>
 
<pre>
Строка 3215: Строка 4694:
 
     "isivr": false,
 
     "isivr": false,
 
"ivrname": "",
 
"ivrname": "",
 +
"isroutingivr": false,
 +
"ismediaivr": false,
 +
"isrestartivr": false,
 
     "isautocall": false,
 
     "isautocall": false,
 
"number": "",
 
"number": "",
Строка 3269: Строка 4751:
 
//      информацию об абоненте, осуществляющем вызов текущего канала.
 
//      информацию об абоненте, осуществляющем вызов текущего канала.
 
</pre>
 
</pre>
 
 
 
  
 
====Управление переадресацией====
 
====Управление переадресацией====
Строка 3649: Строка 5128:
  
 
-------------------------------------------------------------------
 
-------------------------------------------------------------------
<span style="color:green"><<< '''setchaincontentcustomfield'''</span>
+
<span style="color:green"><<< '''getchaincontentcustomfield'''</span>
  
 
Запрос из CRM в Oktell на возврат комментария из контента текущей сессии, в которой участвует канал указанного пользователя.
 
Запрос из CRM в Oktell на возврат комментария из контента текущей сессии, в которой участвует канал указанного пользователя.
Строка 3732: Строка 5211:
 
timestart - время начала интересующего внутридневного интервала.  
 
timestart - время начала интересующего внутридневного интервала.  
 
timestop - время окончания интересующего внутридневного интервала.  
 
timestop - время окончания интересующего внутридневного интервала.  
connectiontype - тип соединения (all, incoming, outcoming, internal, conference).
+
connectiontype - тип соединения (all, incoming, outgoing, internal, conference).
 
intnumber - интересующий внутренний номер.
 
intnumber - интересующий внутренний номер.
 
outnumber - интересующий внешний номер.
 
outnumber - интересующий внешний номер.
Строка 3740: Строка 5219:
 
comment - строка включения в комментарии.
 
comment - строка включения в комментарии.
 
showcallcenter: true|false. Отображать ли коммутации call-центра.
 
showcallcenter: true|false. Отображать ли коммутации call-центра.
taskid - идентификатор задачи в рамках коллцентра, чьи звонки интересны.
+
taskid - идентификатор задачи в рамках call-центра, чьи звонки интересны.
 
</pre>
 
</pre>
  
Строка 4145: Строка 5624:
  
  
 +
-------------------------------------------------------------------
 +
<span style="color:green"><<< '''getvoiceperc'''</span>
  
 +
Запрос из CRM в Oktell. Возвращает информацию о [[Управление_базами_данных#ComputeVoices|распределении владения разговором участниками коммутации]].
 +
 +
<pre>
 +
[
 +
"getvoiceperc",
 +
{
 +
  "qid": "DF061C5B-1B3B-41AA-94FF-A7A2F8FA6AE7",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "commutationid": "73567FD4-EFB9-46BF-9346-35B8638FE644"
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green"><<< '''getvoicepercresult'''</span>
 +
 +
Ответ от Oktell в CRM. Возвращает результат.
 +
 +
<pre>
 +
[
 +
"getvoicepercresult",
 +
{
 +
  "qid": "DF061C5B-1B3B-41AA-94FF-A7A2F8FA6AE7",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "result": 1,
 +
  "aperc": 12,
 +
  "bperc": 29,
 +
  "alinenum": "17e003",
 +
  "blinenum": "16e215"
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------------------------
 +
<span style="color:green"><<< '''getvoicemap'''</span>
 +
 +
Запрос из CRM в Oktell. Возвращает [[Управление_базами_данных#VoiceMap|детальную карту владения разговором участниками коммутации]].
 +
 +
<pre>
 +
[
 +
"getvoicemap",
 +
{
 +
  "qid": "DF061C5B-1B3B-41AA-94FF-A7A2F8FA6AE7",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "commutationid": "73567FD4-EFB9-46BF-9346-35B8638FE644"
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green"><<< '''getvoicepercresult'''</span>
 +
 +
Ответ от Oktell в CRM. Возвращает результат.
 +
 +
<pre>
 +
[
 +
"getvoicemapresult",
 +
{
 +
  "qid": "DF061C5B-1B3B-41AA-94FF-A7A2F8FA6AE7",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "result": 1,
 +
  "errormsg": "",
 +
  "abinbase64": [base64 от бинарки ("0100101101011110"-> byte[]-> base64)],
 +
  "bbinbase64": [base64 от бинарки ("0100101101011110"-> byte[]-> base64)],
 +
  "abinlen": 15,
 +
  "bbinlen": 15,
 +
  "alinenum": "17e003",
 +
  "blinenum": "16e215"
 +
}
 +
]
 +
</pre>
  
 
====Номерной план====
 
====Номерной план====
Строка 4505: Строка 6062:
 
   "qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",
 
   "qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",
 
   "userlogin": "Иванов",
 
   "userlogin": "Иванов",
   "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"
+
   "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "fillsubordinates": true
 
  }
 
  }
 
]
 
]
 +
</pre>
 +
<pre>
 +
//* fillsubordinates: true|false. По умолчанию false.
 +
Включать ли информацию о подчиненных (добавляет каждому пользователю поле "sub":true|false)
 
</pre>
 
</pre>
  
Строка 4525: Строка 6087:
 
   {"id": "47A8B3A0-0B33-41BB-9D08-1D9EB0D6F09B",
 
   {"id": "47A8B3A0-0B33-41BB-9D08-1D9EB0D6F09B",
 
     "name: "Петров",
 
     "name: "Петров",
 +
    "sub": true,
 
     "main: "14",
 
     "main: "14",
 
     "nums": "14, 625, 773"
 
     "nums": "14, 625, 773"
 
   },
 
   },
 
   {"id": "5A84368D-5ED3-434B-8EB2-41AE86E1566A",
 
   {"id": "5A84368D-5ED3-434B-8EB2-41AE86E1566A",
     "name: "Иванов"
+
     "name: "Иванов",
 +
    "sub": false
 
   },
 
   },
 
   ...
 
   ...
Строка 4540: Строка 6104:
 
/*  users:nums - перечень номеров, в которых участвует пользователь или его текущая линия.  
 
/*  users:nums - перечень номеров, в которых участвует пользователь или его текущая линия.  
 
Порядок следования от главного к групповым, затем от главного к групповым с участием линии.
 
Порядок следования от главного к групповым, затем от главного к групповым с участием линии.
 +
/*  users:sub - является ли подчиненным пользователем (в соответствии с правами авторизованного пользователя)
 +
Включается только если в запросе установлен флаг fillsubordinates.
 +
</pre>
 +
 +
 +
 +
 +
==== Управление задачами call-центра ====
 +
 +
-------------------------------------------------------------------
 +
<div id="attachcalltotask"></div>
 +
<span style="color:green"><<< '''cc_attachcalltotask'''</span>
 +
 +
Запрос из CRM в Oktell на привязку текущего звонка пользователя к задаче.
 +
Позволяет указать задачу ключом - идентификатор, название, код.
 +
При необходимости звонок может быть привязан к конкретному абоненту из таблицы абонентов, прикрепленной к задаче (по его числовому идентификатору). В противном случае в таблицу добавляется новая строчка, даже если набираемый номер уже присутствовал в ней. Подробнее о прикреплении звонка к задаче в разделе [[Голосовые задачи#ManualCall|«Call-центр. Голосовые задачи»]].
 +
 +
 +
<pre>
 +
[
 +
"cc_attachcalltotask",
 +
{
 +
  "qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "taskkey": "EDFE9A1F-E27E-4693-A427-A392C919F8B0",
 +
  "idinlist": 183
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''cc_attachcalltotaskresult'''</span>
 +
 +
Ответ от Oktell в CRM. Возвращает результат привязки звонка к задаче, дополнительно сообщая номер абонента в списке. В случае неудачи содержит причину.
 +
 +
<pre>
 +
[
 +
"cc_attachcalltotaskresult",
 +
{
 +
  "qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "result": 1,
 +
  "idinlist": 183,
 +
  "errormsg": ""
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------------------------
 +
<div id="settaskactive"></div>
 +
<span style="color:green"><<< '''cc_settaskactive'''</span>
 +
 +
Запрос из CRM в Oktell на активацию/деактивацию задачи.
 +
Позволяет указать задачу ключом - идентификатор, название или код. Тип задачи - ''call'' (по умолчанию) или ''text''.
 +
Метод доступен с версии 2.8.130909.
 +
 +
 +
<pre>
 +
[
 +
"cc_settaskactive",
 +
{
 +
  "qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "tasktype": "call",
 +
  "taskkey": "EDFE9A1F-E27E-4693-A427-A392C919F8B0",
 +
  "active": true
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''cc_settaskactiveresult'''</span>
 +
 +
Ответ от Oktell в CRM. Возвращает результат активации/деактивации задачи.
 +
 +
<pre>
 +
[
 +
"cc_settaskactiveresult",
 +
{
 +
  "qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "result": 1
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------------------------
 +
<div id="addoperatortotask"></div>
 +
<span style="color:green"><<< '''cc_addoperatortotask'''</span>
 +
 +
Запрос из CRM в Oktell на добавление оператора к задаче.
 +
Операция доступна супервизорам задачи, а также самому оператору. Более глубокие фильтры необходимо организовывать на клиентской стороне.
 +
Позволяет указать задачу ключом - идентификатор, название или код. Позволяет указать оператора ключом - идентификатор, логин, имя.
 +
Метод доступен с версии 2.8.130909.
 +
 +
 +
<pre>
 +
[
 +
"cc_addoperatortotask",
 +
{
 +
  "qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "taskkey": "EDFE9A1F-E27E-4693-A427-A392C919F8B0",
 +
  "operatorkey": "BD252256-08DE-4693-9A31-FC02B600E609"
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''cc_addoperatortotaskresult'''</span>
 +
 +
Ответ от Oktell в CRM. Возвращает результат процедуры добавления оператора в задачу. Неудача возможна при невозможности обнаружить указанного оператора или указанную задачу, а также при отсутствии прав управления задачей.
 +
 +
<pre>
 +
[
 +
"cc_addoperatortotaskresult",
 +
{
 +
  "qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "result": 1
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------------------------
 +
<div id="removeoperatorfromtask"></div>
 +
<span style="color:green"><<< '''cc_removeoperatorfromtask'''</span>
 +
 +
Запрос из CRM в Oktell на удаление оператора из задачи.
 +
Операция доступна супервизорам задачи, а также самому оператору. Более глубокие фильтры необходимо организовывать на клиентской стороне.
 +
Позволяет указать задачу ключом - идентификатор, название или код. Позволяет указать оператора ключом - идентификатор, логин, имя.
 +
Метод доступен с версии 2.8.130909.
 +
 +
<pre>
 +
[
 +
"cc_removeoperatorfromtask",
 +
{
 +
  "qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "taskkey": "EDFE9A1F-E27E-4693-A427-A392C919F8B0",
 +
  "operatorkey": "BD252256-08DE-4693-9A31-FC02B600E609"
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''cc_removeoperatorfromtaskresult'''</span>
 +
 +
Ответ от Oktell в CRM. Возвращает результат процедуры удаления оператора из задачи. Неудача возможна при невозможности обнаружить указанного оператора или указанную задачу, а также при отсутствии прав управления задачей.
 +
 +
<pre>
 +
[
 +
"cc_removeoperatorfromtaskresult",
 +
{
 +
  "qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",
 +
  "userlogin": "Иванов",
 +
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
  "result": 1
 +
}
 +
]
 
</pre>
 
</pre>
  
Строка 4640: Строка 6374:
  
 
-------------------------------------------------------------------
 
-------------------------------------------------------------------
<span style="color:green"><<< '''getversionresult'''</span>
+
<span style="color:green"><<< '''getversion'''</span>
  
 
Запрос из CRM в Oktell на возврат информации о версии сервера Oktell.
 
Запрос из CRM в Oktell на возврат информации о версии сервера Oktell.
Строка 4677: Строка 6411:
 
   "datedhal": "110808",
 
   "datedhal": "110808",
 
   "buildhal": "2.15.3.2871",
 
   "buildhal": "2.15.3.2871",
   "webserverport": 4067
+
   "webserverport": 80,
 +
  "webservertls": false
 
   }
 
   }
 
   "alloweddbstoredprocs": {
 
   "alloweddbstoredprocs": {
Строка 4692: Строка 6427:
 
//* version - информация о версии сервера логики и HAL.
 
//* version - информация о версии сервера логики и HAL.
 
//* version:webserverport - номер порта [[Серверный_HTTP_интерфейс|HTTP веб-сервера oktell]].
 
//* version:webserverport - номер порта [[Серверный_HTTP_интерфейс|HTTP веб-сервера oktell]].
 +
//* version:webservertls - true|false - защищенный ли канал на указанном порте (http или https).
 
//* alloweddbstoredprocs - перечень хранимых процедур, доступных для исполнения в БД Oktell  
 
//* alloweddbstoredprocs - перечень хранимых процедур, доступных для исполнения в БД Oktell  
 
посредством метода <span style="color:green">''execpredefineddbstoredproc''</span>
 
посредством метода <span style="color:green">''execpredefineddbstoredproc''</span>
Строка 4705: Строка 6441:
 
После этого вне зависимости от способа авторизации, установленного для HTTP веб-сервера Oktell, однократный вызов любого [[Серверный_HTTP_интерфейс|метода серверного веб-интерфейса]] возможен без авторизации с указанием среди параметров дополнительного служебного параметра ''temppass=A'', где A - выданный временный пароль.
 
После этого вне зависимости от способа авторизации, установленного для HTTP веб-сервера Oktell, однократный вызов любого [[Серверный_HTTP_интерфейс|метода серверного веб-интерфейса]] возможен без авторизации с указанием среди параметров дополнительного служебного параметра ''temppass=A'', где A - выданный временный пароль.
  
Доступно для [[#Arch2|схемы интеграции 2]].
+
Доступно для [[#Arch2|схемы интеграции 2]] и [[#Arch3|схемы интеграции 3]] в рамках индивидуальных подключений.
  
 
<pre>
 
<pre>
Строка 4747: Строка 6483:
  
 
Запрос из CRM в Oktell на генерацию пользовательского произвольного события всем или только указанным пользователям.
 
Запрос из CRM в Oktell на генерацию пользовательского произвольного события всем или только указанным пользователям.
Может быть использовано в [[#Arch2|схеме интеграции 2]].
+
Может быть использовано в [[#Arch2|схеме интеграции 2]] и [[#Arch3|схеме интеграции 3]] в рамках индивидуальных подключений.
 
Производит массовую рассылку указанного события. Точно также как и все остальные события требует подписки.
 
Производит массовую рассылку указанного события. Точно также как и все остальные события требует подписки.
  
Строка 4834: Строка 6570:
  
 
-------------------------------------------------------------------
 
-------------------------------------------------------------------
<span style="color:green"><<< '''gettotalqueue'''</span>
+
<span id="execpredefineddbstoredproc" style="color:green"><<< '''execpredefineddbstoredproc'''</span>
 
+
Запрос из CRM в Oktell на возврат информации обо всех очередях.
+
Может использоваться без указания пользователя.
+
Не рекомендуется к частому использованию, так как требует значительных вычислительных ресурсов.
+
 
+
<pre>
+
[
+
"gettotalqueue",
+
{
+
  "qid": "DDDB5BCA-A200-448C-93C7-EFEAE5AFE48D",
+
  "skipempty": true
+
}
+
]
+
</pre>
+
 
+
 
+
<span style="color:green">>>> '''gettotalqueueresultresult'''</span>
+
 
+
Ответ из Oktell в CRM. Возвращает список всех очередей и их абонентов
+
 
+
<pre>
+
[
+
"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
+
      }
+
    ]
+
  },
+
  ...
+
  {}
+
  ]
+
}
+
]
+
</pre>
+
<pre>
+
//* result - содержит список всех очередей. Очередь при этом содержится в словаре.
+
//*  result:numid - идентификатор стандартного внутреннего номера, при котором данная очередь.
+
//*  result:numprefix - стандартный внутреннего номер, при котором данная очередь.
+
//*  result:ruleid - идентификатор номерного правила, при котором данная очередь.
+
//*  result:rulename - название номерного правила, при котором данная очередь.
+
//*  result:queue - список абонентов очереди в порядке убывания. Каждый абонент содержится в словаре.
+
</pre>
+
 
+
 
+
-------------------------------------------------------------------
+
<span style="color:green">'''whoareyou'''</span>
+
 
+
Двунаправленный запрос на возврат информации об удаленной стороне. Служит для выстраивания взаимоотношений на основе типа подключения, а также дает возможность получить имя системы для указания администратору.
+
Ответом является сообщение ''iam''.
+
 
+
Применяется в [[#Arch2|схеме интеграции 1]].
+
 
+
<pre>
+
[
+
"whoareyou",
+
{
+
  "qid": "4FEEB8EF-DF4B-47AE-8EFE-4BDA577A6FF8",
+
  "type": "ws-server",
+
  "name": "Iris CRM",
+
  "version": 10.5
+
}
+
]
+
</pre>
+
<pre>
+
//* type - собственный тип сервера, осуществляющего запрос.
+
Oktell при запросе указывает значение ''commserver''.
+
WebCRM может указывать что либо отличное, например ''ws-server'' или ''crm-server''.
+
//* name - собственное название службы.
+
//* version - собственная версия службы.
+
</pre>
+
 
+
 
+
<span style="color:green">'''iam'''</span>
+
 
+
Двунаправленный ответ на запрос ''whoareyou''. Возвращает информацию об удаленной стороне.
+
 
+
<pre>
+
[
+
"iam",
+
{
+
  "qid": "080C0DF2-442B-410E-9204-4ADB3399FCC0",
+
  "type": "commserver",
+
  "name": "Oktell",
+
  "version": 100425,
+
  "build": "2.5.3928.8022"
+
}
+
]
+
</pre>
+
<pre>
+
//* type - тип удаленного сервера.
+
Oktell при запросе указывает значение ''commserver''.
+
WebCRM может указывать что либо отличное, например ''ws-server'' или ''crm-server''.
+
//* name - название службы на удаленнм сервере.
+
//* version - версия службы на удаленном сервере.
+
</pre>
+
 
+
 
+
-------------------------------------------------------------------
+
<span style="color:green"><<< '''execpredefineddbstoredproc'''</span>
+
  
 
Запрос из CRM в Oktell. Исполняет указанную хранимую процедуру в БД Oktell и возвращает данные всех сформированных в ходе выполнения наборов.
 
Запрос из CRM в Oktell. Исполняет указанную хранимую процедуру в БД Oktell и возвращает данные всех сформированных в ходе выполнения наборов.
 
Доступные для исполнения процедуры содержатся в конфигурационном файле ''websocket.config'', а также могут быть возвращены методом ''getversion''.
 
Доступные для исполнения процедуры содержатся в конфигурационном файле ''websocket.config'', а также могут быть возвращены методом ''getversion''.
 +
 +
Существует специальный параметр @authorizeduserid, значение которого перед исполнением заменяется на идентификатор авторизованного пользователя. Такие процедуры нельзя исполнять от имени CRM.
  
 
Не требует указания пользователя.
 
Не требует указания пользователя.
 
Доступно для [[#Arch2|схемы интеграции 2]].
 
  
 
<pre>
 
<pre>
Строка 5034: Строка 6641:
  
 
-------------------------------------------------------------------
 
-------------------------------------------------------------------
<span style="color:green"><<< '''exectmcall'''</span>
+
<span id="execpluginmethod" style="color:green"><<< '''execpluginmethod'''</span>
  
Запрос из CRM в Oktell. Осуществляет размещение короткого задания на дозвон и соединение с указанным оператором (пользователем).
+
Запрос из CRM в Oktell. Исполняет указанный метод в [[Встраиваемые_plugin-модули|серверном плагине]], передавая в него параметры и возвращая результат с выходными параметрами.
Дозвониться до одного из указанных абонентов-номеров группы A, соединить с одним из указанных абонентов-номеров группы B.
+
Результатом выполнения является одна коммутация.
+
  
Не требует указания пользователя.
+
Не требует обязательного указания пользователя. Однако если вызов осуществляется в рамках подключения из браузера к серверу Oktell, то пользователь проставляется автоматически перед исполнением метода.
  
 
<pre>
 
<pre>
 
[
 
[
  "exectmcall",
+
  "execpluginmethod",
 
  {
 
  {
   "qid": "BE06A1E4-759A-4BFA-8D15-5FCF756EEE53",
+
   "qid": "7198D943-7BA9-443D-B283-55812BC82AFB",
   "taskid": "qud82039lsdfmnasd",
+
   "pluginid": "44710EF2-9C5E-489E-B6CC-FD4ED34C13FE",
  "a_abonents": [
+
   "formid": "44710EF2-9C5E-489E-B6CC-FD4ED34C13FE",
  "7931289",
+
  "inputparams": {
  "83959279394",
+
     "param1": "...",
  "425",
+
     "param2": "...",
  "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
+
 
  }
 
  }
 
]
 
]
 
</pre>
 
</pre>
 
<pre>
 
<pre>
[
+
//* pluginid - идентификатор плагина.  
"exectmcall",
+
//* formid - идентификатор одной из заявленных форм (методов) плагина.
{
+
//* inputparams - список значений для заявленных плагином входных параметров выбранной формы (метода).  
  "qid": "BE06A1E4-759A-4BFA-8D15-5FCF756EEE53",
+
                В качестве значений параметров могут быть json структуры
  "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,
+
}
+
]
+
</pre>
+
<pre>
+
Обязательными параметрами являются только 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: таймаут в секундах для вызова абонентов соответствующей группы.
+
Режим использования таймаута задается в разделе [[Настройки менеджера очередей|настроек менеджера очередей]].
+
 
</pre>
 
</pre>
  
  
<span style="color:green">>>> '''exectmcallresult'''</span>
+
<span style="color:green">>>> '''execpluginmethodresult'''</span>
  
Ответ из Oktell в CRM. Возвращает результат исполнения хранимой процедуры в БД Oktell. Перечисляет все выходные наборы данных.
+
Ответ из Oktell в CRM. Возвращает результат исполнения метода в серверном плагине.
  
 
<pre>
 
<pre>
 
[
 
[
  "exectmcallresult",
+
  "execpluginmethodresult",
 
  {
 
  {
   "qid": "BE06A1E4-759A-4BFA-8D15-5FCF756EEE53",
+
   "qid": "7198D943-7BA9-443D-B283-55812BC82AFB",
   "taskid": "qud82039lsdfmnasd"
+
   "result": 1,
 +
  "error": 0,
 +
  "errormsg": "",
 +
  "outputparams": {
 +
    "outputdata": "...",
 +
    ...
 +
  }
 
  }
 
  }
 
]
 
]
 
</pre>
 
</pre>
 
<pre>
 
<pre>
//* taskid - возвращает идентификатор запущенного задания.
+
//* outputparams - список значений заявленных плагином выходных переменных выбранной формы (метода).
В дальнейшем с помощью него можно будет отменить задание (если оно еще не будет к тому времени исполнено)
+
                  В качестве значений параметров могут быть json структуры.
</pre>
+
 
+
 
+
-------------------------------------------------------------------
+
<span style="color:green"><<< '''stoptmcall'''</span>
+
 
+
Запрос из CRM в Oktell. Отменяет ранее запущенное методом ''exectmcall'' задание, если оно еще не завершило исполнение.
+
 
+
Не требует указания пользователя.
+
 
+
<pre>
+
[
+
"stoptmcall",
+
{
+
  "qid": "DDA55585-F598-4F8C-B605-E6E186E6D859",
+
  "taskid": "qud82039lsdfmnasd"
+
}
+
]
+
</pre>
+
 
+
 
+
<span style="color:green">>>> '''stoptmcallresult'''</span>
+
 
+
Ответ от Oktell в CRM. Возвращает результат отмены задания.
+
 
+
<pre>
+
[
+
"stoptmcallresult",
+
{
+
  "qid": "DDA55585-F598-4F8C-B605-E6E186E6D859",
+
  "taskid": "qud82039lsdfmnasd",
+
  "success": false,
+
  "errortext": "task not found"
+
}
+
]
+
 
</pre>
 
</pre>
  
Строка 5201: Строка 6699:
 
<span style="color:green"><<< '''ping'''</span>
 
<span style="color:green"><<< '''ping'''</span>
  
Запрос из CRM в Oktell. Периодически пробивает канал связи, напоминая о жизнеспособности подключения. Необязательно
+
Запрос из CRM в Oktell. Периодически пробивает канал связи, напоминая о жизнеспособности подключения. Требуется для [[#Arch2|Схемы интеграции 2]] и [[#Arch3|Схемы интеграции 3]] в рамках индивидуальных подключений. Для [[#Arch1|Схемы интеграции 1]] необязательно.
  
 
Не требует указания пользователя.
 
Не требует указания пользователя.
Строка 5233: Строка 6731:
 
<span style="color:green">'''unsubscribeevent'''</span>
 
<span style="color:green">'''unsubscribeevent'''</span>
  
Запрос из CRM в Oktell. Производит соответсвенно подписку и отписку на указанные события.
+
Запрос из CRM в Oktell. Производит соответственно подписку и отписку на указанные события.
  
Доступно и требуется только для [[#Arch2|схемы интеграции 2]].  
+
Доступно и требуется только для [[#Arch2|схемы интеграции 2]] и [[#Arch3|схемы интеграции 3]] в рамках индивидуальных подключений.
В [[#Arch2|схеме интеграции 1]] события поступают в полном объеме, часть из них объединяются и отправляются на сервер WebCRM без привязки к пользователю; ожидается, что сервер WebCRM самостоятельно размножит их. К таким событиям относятся, например ''pbxnumberstatechanged'', ''conflistchanged'' и им подобные.
+
 
 +
В [[#Arch1|схеме интеграции 1]] события поступают в полном объеме, часть из них объединяются и отправляются на сервер WebCRM без привязки к пользователю; ожидается, что сервер WebCRM самостоятельно размножит их. К таким событиям относятся, например ''pbxnumberstatechanged'', ''conflistchanged'' и им подобные. Остальные же направляются с привязкой к пользователю и только в случае, когда пользователь авторизован из-под CRM.
  
 
<pre>
 
<pre>
Строка 5273: Строка 6772:
 
:* pbxnumberlistmodified
 
:* pbxnumberlistmodified
 
:* shownotifymessage
 
:* shownotifymessage
 +
:* voicemailreceived
 
:* usertextmessagereceived
 
:* usertextmessagereceived
 
:* usertextmessageviewed
 
:* usertextmessageviewed
:* voicemailreceived
+
:* chatcreated
 +
:* chatnamechanged
 +
:* chatmemberadded
 +
:* chatmemberremoved
 +
:* chatmessage
 +
:* chatmessageviewed
 +
:* chat (совокупность всех методов ''chat*'')
 
:* userstatechanged
 
:* userstatechanged
 +
:* linestatechanged
 +
:* chainstatechanged
 +
:* flashstatechanged
 
:* phoneevent_acmcallstarted
 
:* phoneevent_acmcallstarted
 
:* phoneevent_acmcallstopped
 
:* phoneevent_acmcallstopped
Строка 5288: Строка 6797:
 
:* phoneevent_faxstopped
 
:* phoneevent_faxstopped
 
:* phoneevent_faxreceived
 
:* phoneevent_faxreceived
:* linestatechanged
+
:* phoneevent (совокупность всех методов ''phoneevent_*'')
:* chainstatechanged
+
:* flashstatechanged
+
 
:* conferenceevent
 
:* conferenceevent
 
:* conflistchanged
 
:* conflistchanged
Строка 5301: Строка 6808:
 
:* confnotifyinvite
 
:* confnotifyinvite
 
:* confpossiblecompetitorstatechanged
 
:* confpossiblecompetitorstatechanged
 +
:* conference (совокупность всех методов ''conf*'')
 +
:* dynamic (совокупность методов executemethod, cancelmethod, showform, closeform)
 +
:* dynamicwaitabort (совокупность методов executemethodwaitaborted, showformwaitaborted)
 +
:* dlgcard_showreserve
 +
:* dlgcard_showconfirm
 +
:* dlgcard_showformstop
 +
:* dlgcard_showformdialog
 +
:* dlgcard_closeall
 +
:* dlgcard_closereserve
 +
:* dlgcard_closeformreturnvalues
 +
:* dlgcard_closeformreturncomment
 +
:* dlgcard (совокупность методов dlgcard_*)
 
:* customevent
 
:* customevent
:* executemethod ''(список доступных динамических методов содержится в файле websock.config)''
 
:* cancelmethod
 
:* showform ''(список доступных динамических форм содержится в файле websock.config)''
 
:* closeform
 
  
  
 
<span style="color:green">>>> '''subscribeeventresult'''</span>,  
 
<span style="color:green">>>> '''subscribeeventresult'''</span>,  
<span style="color:green">'''unsubscribeeventresult'''</span>
+
<span style="color:green"> '''unsubscribeeventresult'''</span>
  
 
Ответ от Oktell в CRM на запросы ''subscribeeventresult'' и ''unsubscribeeventresult'' соответственно.
 
Ответ от Oktell в CRM на запросы ''subscribeeventresult'' и ''unsubscribeeventresult'' соответственно.
Строка 5322: Строка 6837:
 
]
 
]
 
</pre>
 
</pre>
 +
 +
 +
-------------------------------------------------------------------
 +
<span style="color:green"><<< '''wp_setuserstate'''</span>
 +
 +
Запрос на установку состояния указанному пользователю. Исполняется от имени сервера, даже если пользователь подключен с помощью другого подключения или из толстого клиента. Ответ не возвращается, в случае удачи отправляется событие ''userstatechanged''. Пользователь задается с помощью одного из ключей (wp - рабочее место, line - линия, user - пользователь).
 +
 +
<pre>
 +
[
 +
"wp_setuserstate",
 +
{
 +
  "qid": "2A45010A-8EEA-4876-90CB-F062459D4BE2",
 +
  "wp": "...",
 +
  "line": "...",
 +
  "user": "...",
 +
  "userstateid": 2,
 +
  "onredirect": false,
 +
  "lunchreasonid": 120,
 +
  "lunchreasonmsg": ""
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------------------------
 +
<span style="color:green"><<< '''wp_getuserstate'''</span>
 +
 +
Запрос от сервера CRM на возврат состояния указанного пользователя. Исполняется от имени сервера, даже если пользователь подключен с помощью другого подключения или из толстого клиента. Пользователь задается с помощью одного из ключей (wp - рабочее место, line - линия, user - пользователь).
 +
 +
<pre>
 +
[
 +
"wp_getuserstate",
 +
{
 +
  "qid": "2A45010A-8EEA-4876-90CB-F062459D4BE2",
 +
  "wp": "...",
 +
  "line": "...",
 +
  "user": "..."
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''wp_getuserstateresult'''</span>
 +
 +
Ответ на запрос ''wp_getuserstateresult''.
 +
 +
<pre>
 +
[
 +
"wp_getuserstateresult",
 +
{
 +
  "qid": "2A45010A-8EEA-4876-90CB-F062459D4BE2",
 +
  "wp": "...",
 +
  "line": "...",
 +
  "user": "...",
 +
  "found": true,
 +
  "userid": "BDB8519F-AE77-4E33-81DB-41EE8E7D4E33",
 +
  "stateid": 5,
 +
  "statestr": "usFullBusy",
 +
  "onredirect": false,
 +
  "onlunch": true,
 +
  "oncc": true,
 +
  "onccmanual": false
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------------------------
 +
<span style="color:green"><<< '''getuserstates'''</span>
 +
 +
Запрос от сервера CRM на получение состояний всех пользователей в системе вне зависимости от того, где они авторизованы и авторизованы ли вообще.
 +
 +
<pre>
 +
[
 +
"getuserstates",
 +
{
 +
  "qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F"
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''getalluserstatesresult'''</span>
 +
 +
Ответ на запрос ''getuserstates''.
 +
 +
<pre>
 +
[
 +
"getalluserstatesresult",
 +
{
 +
  "qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",
 +
  "users":[
 +
  {
 +
    "userlogin": "Иванов",
 +
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 +
    "userstate": 5,
 +
    "userstateid": 5,
 +
    "userstatestr": "usFullbusy",
 +
    "onredirect": true,
 +
    "onlunch": false,
 +
    "oncallcenter": false,
 +
    "onccmanual": false
 +
  },
 +
  ...
 +
  ]
 +
}
 +
]
 +
</pre>
 +
 +
 +
-------------------------------------------------------------------
 +
<span style="color:green"><<< '''closecallbychain'''</span>
 +
 +
Запрос от сервера CRM на завершение коммутаций, принадлежащих указанной сессии (цепочке коммутаций). Исполняется от имени сервера, даже если пользователь подключен с помощью другого подключения или из толстого клиента
 +
 +
<pre>
 +
[
 +
"closecallbychain",
 +
{
 +
  "qid": "2A45010A-8EEA-4876-90CB-F062459D4BE2",
 +
  "idchain": "A7623B51-41F5-42E6-A2AE-1063C52D010A"
 +
}
 +
]
 +
</pre>
 +
 +
 +
<span style="color:green">>>> '''closecallbychainresult'''</span>
 +
 +
Ответ на запрос ''closecallbychain''.
 +
 +
<pre>
 +
[
 +
"closecallbychainresult",
 +
{
 +
  "qid": "2A45010A-8EEA-4876-90CB-F062459D4BE2",
 +
  "found": true
 +
}
 +
]
 +
</pre>
 +
 +
====Прочие====
 +
 +
Существует также [[Media:Others.zip|'''набор методов и событий''']] для рабочего места оператора и отображения диалоговых форм.
 +
Их реализация осуществлена в web-клиенте Oktell и нетривиальна, поскольку требует от клиентского модуля четкого исполнения требований по логическому взаимодействию с менеджером задач сервера Oktell. В частности именно на клиентскую часть возлагается работа по решению вопроса о множественном отображении диалоговой формы и о предоставлении серверу данных по ее заполнению, кэширование метаданных диалоговых форм, подтверждения получения и исполнения запросов и т.д.
 +
 +
 +
Запросы, команды и события от CRM к Oktell:
 +
* cc_getcallstates (ответ cc_getcallstatesresult)
 +
* cc_getuserresults (ответ cc_getuserresultsresult)
 +
* cc_getlunchtypes (ответ cc_getlunchtypesresult)
 +
* dlgcard_setsupported (ответ dlgcard_setsupportedresult)
 +
* dlgcard_confirmgot
 +
* dlgcard_confirmresult
 +
* dlgcard_showformdone
 +
* dlgcard_getmetadata (ответ dlgcard_getmetadataresult)
 +
* dlgcard_getcachedvalues (ответ dlgcard_getcachedvaluesresult)
 +
* dlgcard_setvaluesonclose
 +
* dlgcard_setcontrolvalue
 +
* dlgcard_setresultonnext
 +
* dlgcard_setresultonstop
 +
* dlgcard_setstopformresult
 +
 +
События из Oktell в CRM:
 +
* dlgcard_showreserve
 +
* dlgcard_showconfirm
 +
* dlgcard_showformstop
 +
* dlgcard_showformdialog
 +
* dlgcard_closeall
 +
* dlgcard_closereserve
 +
* dlgcard_closeformreturnvalues
 +
* dlgcard_closeformreturncomment

Текущая версия на 10:13, 21 сентября 2023

Наверх


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


Содержание


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

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

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

и т.д.


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

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


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

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

  • поступление внешнего звонка.
  • завершение звонка.
  • переключение абонента на пользователя, группу пользователей, задачу call-центра.
  • любое из интересующих явлений в ходе обработки звонка (от преобразования номера абонента в нужный формат и сверки времени поступления звонка до обработки контента звонка после завершения и выявления там факта состоявшейся конференции).
  • наступление определенного времени.
  • периодический запуск по таймеру.
  • поступление/отправка 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-сервер, а в сообщениях login должен быть указан пароль пользователя (MD5).

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

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

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

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



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

Arch 3.jpg


Является комбинацией схемы 1 и схемы 2. То есть клиенты имеют возможность подключаться непосредственно к серверу Oktell, минуя websocket-сервер CRM, а связь с сервером происходит по специальному каналу, который может быть обеспечиваться как websocket-подключением, так и периодическими http подключениями.

В этом случае при разработке решений можно пользоваться javascript-библиотекой Oktell.js, не требующей ни полного погружения в настоящий интеграционный протокол, ни в настройку websocket. Также в этом случае для CRM не обязательно иметь собственный websocket-сервер для обслуживания клиентов. Более того, можно вообще обойтись лишь настройкой HTTP для обмена сервисными сообщениями вроде взаимных представлений и запроса динамических методов и форм. Исполнение динамических методов и форм будет возможно как на сервере, так и на клиентах. На сервере - по межсерверному каналу (http, https, websocket, websocket secure), на клиенте - по индивидуальным websocket-подключениям (защищенным или нет). Все остальные запросы и события имеют персональную подоплеку и отправляются по индивидуальным клиент-серверным подключениям.

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



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

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

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

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

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

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


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

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

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

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

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


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

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

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


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

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


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



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

В этом разделе описывается межсерверный канал websocket, а канал HTTP подразумевается ограниченным аналогом.

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


Socket 3.jpgSocket 3b.jpg


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

Примеры WebSocket Handshake.

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

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

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

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

В случае HTTP подключения к CRM работа ограничивается запросами из Oktell и ответами на них из CRM.

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

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

В случае HTTP подключения к CRM запросы из октелл отправляются методом POST с передачей параметра data, значением которого является упакованная в base64 строка JSON или XML.

Формат самих сообщений определяется непосредственно протоколом интеграции 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 динамических методов (как было сказано выше, это происходит в рамках схемы интеграции 1 и схемы интеграции 3). В ответ WebCRM перечисляет список действий, инициативу исполнения которых она готова отдать наружу в Oktell. При описании метода в представлении указываются:

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

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



Представление систем друг другу


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 - версия службы на удаленном сервере. 



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

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

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


Методы:

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


Формы:

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



>>> getavailablemethods

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

[
 "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",
    "url": "http://192.168.0.100:4000/pbxapi/method1.php",
    "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": "websocket",
    "defineuser": true,
    "allowcancel": false,
    "inputparams": [
     {
      "key": "sessionid",
      "name": "Идентификатор сессии звонка",
      "description": "Для связи с номером дела",
      "type": "string"
     }
    ],
    "outputparams": [
     {
      "key": "recordid",
      "name": "Идентификатор созданного дела",
      "description": "Для дальнейшей передачи на отображение карточки",
      "type": "string"
     }
     {...},
     {...}
    ]
   },
   {
    "key": "card_records", 
    "name": "Показать карточку «ДЕЛА»",
    "description": "Отображает контактные данные об абоненте (комании или человеке) при входящем/исходящем звонке",
    "connectiontype": "default",
    "defineuser": true,
    "allowcancel": true,
    "inputparams": [
     {
      "key": "recordid",
      "name": "Номер дела",
      "description": "Номер дела, который ранее был создан при вызове метода «Создать запись дела»",
      "type": "string"
     },
     {
      "key": "accountid",
      "name": "Идентификатор клиента",
      "description": "Идентификатор клиента в базе данных CRM",
      "type": "string"
     },
     {...},
     {...}
    ]
   },
   {...},
   {...}
  ]
 }
]
//* method:key, param:key - произвольные строковые идентификаторы, упоминаемые при вызове форм из октелла
//* method:name, param:name - краткие человеческие названия, отображаются в списках при настройке сценария.
//* method:description, param:description - описания, если смысл формы/параметра нетривиален, и админу может потребоваться объясняение
//* method:inputparams - список входных параметров, значения которых требуется передавать в командном сообщении на исполнение соответствующего метода.
//* method:outputparams - список выходных параметров, значения которых можно ожидать в сообщении о выполнении метода.
//* param:type - тип параметра: string, int|int64, bool, decimal|float|double, datetime, list. Если не указан - строка. Дает администратору представление.
//* param:items - в случае если тип параметра=list, здесь идет перечисление вариантов списка
//* method:connectiontype - websocket|http|https|default - куда ломиться, через веб-сокет (дефолтный канал), или запросом к http-серверу. Дефолтный канал - если к CRM подключение по HTTP, то запрос по тому же адресу будет.
//* method:defineuser - true|false - определять пользователя, или запрос к веб-серверу вообще.
//* method:allowcancel - true|false - поддерживается ли отмена исполнения (например закрытие открывшейся карточки).



>>> executemethod

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

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

[
 "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"
  },
  "waitresponsems": 0
 }
]


<<< 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 на прекращение выполнения ранее запущенного динамического метода. Отправляется туда же, куда предварительно было отправлено сообщение executemethod.

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



>>> executemethodwaitaborted

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

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



>>> getavailableforms

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

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


<<< availableforms

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

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

[
 "availableforms",
 {
  "qid": "7A1FF57A-ED91-4033-A42F-1D2AE630450E",
  "forms": [
   {
    "key": "formB840825C", 
    "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": "formB840825C",
  "windowid": "9F5D8B1A-8818-41EA-A240-04DA07498C40",
  "inputparameters": {
   "accountid": "05379F49-AB22-4872-B2C2-0D4BA019EA0B",
   "page": "page2"
  },
  "waitresponsems": 0
 }
]


<<< formresult

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

[
 "formresult",
 {
  "qid": "EC9E1619-AC1B-4071-98B9-30808B9ED0EC",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "formkey": "formB840825C",
  "windowid": "9F5D8B1A-8818-41EA-A240-04DA07498C40",
  "outputparameters": {
   "comment": "блаблабла"
  }
 }
]



>>> closeform

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

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



>>> showformwaitaborted

Сообщение-событие из Oktell, уведомляющее сервер/клиента CRM о прекращении ожидания ответа на отображение формы. Отправляется туда же, куда предварительно было отправлено сообщение showform. Отправляется только в том случае, если Oktell производил ожидание ответа (параметр waitresponsems не был равен нулю).

[
 "showformwaitaborted",
 {
  "qid": "6ADC3F1E-B1DD-4768-BAF8-3EEB477B2F17",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "formkey": "formB840825C",
  "windowid": "9F5D8B1A-8818-41EA-A240-04DA07498C40"
 }
]



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


>>> getactiveusers

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

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


<<< activeusers

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

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



<<< login

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

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

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

В случае индивидуальных подключений схемы интеграции 2 и схемы интеграции 3 требуется указание как логина, так и пароля для проведения полной проверки, причем пароль необходимо указывать в виде MD5 хеша. При этом возможно использование сессий (параметры sessionid и expires). Клиент указывает время жизни сессии в секундах, сервер возвращает идентификатор сессии; в дальнейшем при повторном подключении в указанный интервал времени клиент может указывать сессию и новое время жизни для продления, но не указывать пароль. Если сессия существует (время не вышло, сервер не перезагружался), то авторизация будет подтверждена.

ВНИМАНИЕ! В версии 2.8 пароли case-sensitive, в версии 2.7 пароли case-insensitive. При переходе между версиями до полного обновления всех паролей рекомендуется указывать пароль в дублированном виде: параметр password - MD5(lowercase), Password - MD5(normalcase).

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

[
 "login",
 {
  "qid": "9D484E0E-BE08-47B5-ABBD-490936881056",
  "userlogin": "ivanov",
  "userid": "29834234234",
  "password": "D41D8CD98F00B204E9800998ECF8427E",
  "expires": 86400,
  "usewebrtc": 1
 }
]
[
 "login",
 {
  "qid": "9D484E0E-BE08-47B5-ABBD-490936881056",
  "userlogin": "ivanov",
  "userid": "29834234234"
 }
]
[
 "login",
 {
  "qid": "9D484E0E-BE08-47B5-ABBD-490936881056",
  "userlogin": "ivanov",
  "userid": "29834234234",
  "workplace": "wp001",
  "sessionid": "838AC713-9D4D-43E2-A57D-D4F2D7545FB5",
  "expires": 86400
 }
]
[
 "login",
 {
  "qid": "9D484E0E-BE08-47B5-ABBD-490936881056",
  "userlogin": "ivanov",
  "userid": "29834234234",
  "workplace": [
   "wp001",
   "192.168.0.204",
   "81.22.217.33"
  ]
 }
]


>>> loginresult

Сообщение из Oktell в CRM о результате авторизации или кросс-авторизации пользователя. Отправляется в ответ на запрос авторизации в Oktell методом login, а в рамках схемы интеграции 1 может быть отправлено самостоятельно по результатам обработки сообщения activeusers после установки связи с CRM. В случае запроса использования клиентом WebRTC, в ответе направляется информация по учетной записи телефона, ожидающей подключения по SIP.

[
 "loginresult",
 {
  "qid": "939AA33E-011F-4FEC-B60A-8BC1B4888B5A",
  "userlogin": "ivanov",
  "userid": "29834234234",
  "result": 0,
  "error": 50093,
  "errormsg": "Пользователь уже зарегистрирован"
 }
]
[
 "loginresult",
 {
  "qid": "939AA33E-011F-4FEC-B60A-8BC1B4888B5A",
  "userlogin": "ivanov",
  "userid": "29834234234",
  "result": 1,
  "sessionid": "838AC713-9D4D-43E2-A57D-D4F2D7545FB5",
  "expires": 10000,
  "sipuser": "phone81",
  "siplogin": "phone81",
  "sippass": "3kd94FnI",
  "sipport": 5060
 }
]



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



<<< updatesession

Команда из CRM в Oktell о продлении сессии пользователя (для сохранения возможности производить вход без пароля).

[
 "updatesession",
 {
  "qid": "9D484E0E-BE08-47B5-ABBD-490936881056",
  "userlogin": "ivanov",
  "userid": "29834234234",
  "sessionid": "9238749273982734023",
  "expires": 86400
 }
]



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


<<< entercallcenter

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

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


<<< exitcallcenter

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

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



<<< checkmyuserprivilege

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

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


>>> checkmyuserprivilegeresult

Ответ на checkmyuserprivilege.

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



<<< getmyuserprivileges

Запрос из CRM на возврат всех имеющихся у пользователя обще-ролевых привилегий.

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


>>> getmyuserprivilegesresult

Ответ на getmyuserprivileges.

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



Текстовый чат v.1 (версии до 2.8.130909)

Обмен текстовыми сообщениями в первоначальном варианте, где подразумевается только диалоговое общение между двумя пользователями. Начиная с версии 2.8.130909 этот способ считается устаревшим.


>>> 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 на отправку текстового сообщения в рамках чата другому пользователю. Вложения и сообщения в конференциях - опция, используемая веб-клиентом 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": "раз два три четыре пять вышел зайчик погулять",
  "isconferencechat": true,
  "files": [
   "Temp\1.jpg",
   "Temp\2.jpg"
  ]
 }
]


>>> sendusertextmessageresult

Ответ из Oktell на команду отправки сообщения.

[
 "sendusertextmessageresult",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "messageid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
  "dtformat": "yyyy-MM-dd HH:mm:ss",
  "sentdate": "2012-03-18 13:06:28"
 }
]


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


>>> setusermessageviewedresult

Ответ из Oktell на команду установки признака прочитанности setusermessageviewed.

[
 "setusermessageviewedresult",
 {
  "qid": "AA29AE60-50C3-48EE-A32E-3D98265D7412",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "updatedcount": 12
 }
]



Текстовый чат v.2 (версии начиная с 2.8.130909)

Обмен текстовыми сообщениями протекает в рамках чатов - индивидуальных, массовых, прикрепленных. Вводится понятие чата с соответствующими свойствами - названием, списком участников, возможностью их редактирования. Требует подписки на совокупность событий chat. Интерфейс доступен и считается основным начиная с версии 2.8.130909.



<<< chatcreate

Запрос из CRM в Oktell на создание нового чата. Чаты создаются одним из участников, все остальные уведомляются о создании. Чаты могут существовать сколь угодно длительное время и использоваться многократно. Идентификатор может не указываться, тогда он генерируется и возвращается в ответе. Типы: 1 - приватный диалог двух участников, 2 - чат с нерегламентированным количеством участников, 3 - привязанный к конференции. По результатам создания генерируется и отправляется событие chatcreated всем заявленным участникам чата.


[
 "chatcreate",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
  "name": "название чата",
  "type": 2,
  "linkedobjectid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240"
  "members": [
    "D9E54EB7-D3D9-43D6-B70C-019ABC6FC457",
    "A530C87E-6A07-471C-B70C-E7C1C31AD9A7"
  ]
 }
]


>>> chatcreateresult

Ответ из Oktell на команду создания нового чата.

[
 "chatcreateresult",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240"
 }
]



<<< chatsetname

Запрос из CRM в Oktell на изменение названия существующему чату. По результатам изменения генерируется и отправляется событие chatnamechanged всем авторизованным участникам чата.


[
 "chatsetname",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
  "name": "новое название чата"
  ]
 }
]


>>> chatsetnameresult

Ответ из Oktell на команду изменения названия чата.

[
 "chatsetnameresult",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 }
]



<<< chataddmembers

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


[
 "chataddmembers",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
  "members": [
    "D9E54EB7-D3D9-43D6-B70C-019ABC6FC457",
    "A530C87E-6A07-471C-B70C-E7C1C31AD9A7"
  ]
 }
]


>>> chataddmembersresult

Ответ из Oktell на команду добавления участников к существующему чату.

[
 "chataddmembersresult",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 }
]



<<< chatremovemembers

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


[
 "chatremovemembers",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
  "members": [
    "D9E54EB7-D3D9-43D6-B70C-019ABC6FC457",
    "A530C87E-6A07-471C-B70C-E7C1C31AD9A7"
  ]
 }
]


>>> chatremovemembersresult

Ответ из Oktell на команду удаления участников из существующего чата.

[
 "chatremovemembersresult",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 }
]



<<< chatgetmembers

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


[
 "chatgetmembers",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
 }
]


>>> chatgetmembersresult

Ответ из Oktell на запрос информации о текущих участниках указанного чата.

[
 "chatgetmembersresult",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
  "members": [
    {
      "id":"D9E54EB7-D3D9-43D6-B70C-019ABC6FC457"
    },
    ...
  ]
 }
]



<<< chatsendmessage

Запрос из CRM в Oktell на отправку сообщения в указанный чат. Идентификатор messageid может не указываться, тогда генерируется и возвращается в ответе. Сообщение может содержать вложенные файлы (files) и указание на скрытое их хранение на диске (hidefiles).


[
 "chatsendmessage",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240"
  "messageid": "2CD5BB8F-CC88-4D01-8A1F-5CEB2CD72AAE",
  "messagetext": "раз два три четыре пять вышел зайчик погулять"
  "hidefiles": false,
  "files": [
    "Temp\1.jpg",
    "Temp\2.txt"
  ]
 }
]


>>> chatsendmessageresult

Ответ из Oktell на отправку сообщения в указанный чат.

[
 "chatsendmessageresult",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "messageid": "2CD5BB8F-CC88-4D01-8A1F-5CEB2CD72AAE"
 }
]



<<< chatsetmessageviewed

Запрос из CRM в Oktell на установку флага прочитанности указанного сообщения. Вместе с указанным сообщением маркируются прочитанными также все предшествующие сообщения этого же чата.


[
 "chatsetmessageviewed",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
  "messageid": "D9E54EB7-D3D9-43D6-B70C-019ABC6FC457"
 }
]


>>> chatsetmessageviewedresult

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

[
 "chatsetmessageviewedresult",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"
 }
]



<<< chatgetprivateid

Запрос из CRM в Oktell на получение идентификатора существующего приватного диалога между двумя пользователями, один из которых - авторизованный пользователь. Приватные диалоги соответствуют чатам с типом "1". В системе возможно существование нескольких приватных диалогов между пользователями, в этом случае возвращается любой из них. В случае отсутствия приватных диалогов в качестве идентификатора возвращается null.


[
 "chatgetprivateid",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "opponentid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240"
 }
]


>>> chatgetprivateidresult

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

[
 "chatgetprivateidresult",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "chatid": "D9E54EB7-D3D9-43D6-B70C-019ABC6FC457"
 }
]



<<< chatgetbyid

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


[
 "chatgetbyid",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",
 }
]


>>> chatgetbyidresult

Ответ из Oktell на запрос информации о чате. Если чат не найден по указанному идентификатору, возвращается null.

[
 "chatgetbyidresult",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "dtformat": "yyyy-MM-dd HH:mm:ss",
  "chat": {
    "id":"01483664-9D99-4B1B-8131-C46386A6FC68",
    "name":"приватный чат",
    "type":"1",
    "creatorid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",
    "membercount":"4",
    "privateopponentid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",
    "linkedobjectid":"",
    "lastdtutc":"2013-09-05 14:08:02",
    "lastmessage":{
      "id":"4067F854-E88A-40C1-82C5-7F125A77A25F",
      "amiauthor":false,
      "authorid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",
      "authorlogin":"sergeev",
      "authorname":"Сергеев Вахтанг Абрикосович",
      "dtutc":"2013-09-05 14:08:02",
      "text":"Зайди как освободишься",
      "isnew":"true"
    }
  }
 }
]



<<< chatgethotlist

Запрос из CRM в Oktell на получение информации о горячих чатах, в рамках которых последние сообщения были сравнительно недавно. Запрос информации осуществляется с указанием нужной страницы (в сортированном по убыванию даты последней активности списке count элементов, начиная с startidx). Можно также наложить дополнительные фильтры, применяемые к названию чата и к имени оппонента приватного диалога (search1 и search2). Возвращаемая информация аналогична методу chatgetbyid.


[
 "chatgethotlist",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "startidx": 0,
  "count": 10,
  "search1": "мой чат",
  "search2": "vjq xfn",
 }
]


>>> chatgethotlistresult

Ответ из Oktell на запрос информации о горячих чатах.

[
 "chatgethotlistresult",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "dtformat": "yyyy-MM-dd HH:mm:ss",
  "chatlist": [
   {
    "id":"01483664-9D99-4B1B-8131-C46386A6FC68",
    "name":"приватный чат",
    "type":"1",
    "creatorid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",
    "membercount":"4",
    "privateopponentid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",
    "linkedobjectid":"",
    "lastdtutc":"2013-09-05 14:08:02",
    "lastmessage":{
      "id":"4067F854-E88A-40C1-82C5-7F125A77A25F",
      "amiauthor":false,
      "authorid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",
      "authorlogin":"sergeev",
      "authorname":"Сергеев Вахтанг Абрикосович",
      "dtutc":"2013-09-05 14:08:02",
      "text":"Зайди как освободишься",
      "isnew":"true"
   },
   ...
  ]
 }
]



<<< chatgettotalnewmessagecount

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


[
 "chatgettotalnewmessagecount",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
 }
]


>>> chatgettotalnewmessagecountresult

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

[
 "chatgettotalnewmessagecountresult",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "count": 31
 }
]



<<< chatgetmessagehistory

Запрос из CRM в Oktell на получение истории сообщений по чату. Может быть наложен дополнительный фильтр на текст сообщения (search1 и search2), ограничения на период выдачи истории (dtstartutc, dtstoputc). По умолчанию весь период истории без фильтрации по тексту сообщений. Данные выдаются из сортированного по убыванию даты отправки списка сообщений с указанной страницы (startidx, count). По умолчанию первые 10 сообщений.


[
 "chatgetmessagehistory",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "chatid": "14D6DBB7-D5CB-471B-888A-9AACC8CD737B",
  "startidx": 0,
  "count": 50,
  "dtstartutc": "2013-07-12 13:00:00",
  "dtstoputc": "2013-07-12 15:00:00",
  "search1": "abkmnh",
  "search2": "фильтр"
 }
]


>>> chatgetmessagehistoryresult

Ответ из Oktell на запрос истории сообщений в чате.

[
 "chatgetmessagehistoryresult",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "dtformat": "yyyy-MM-dd HH:mm:ss",
  "messagelist": [
    {
     "id":"4067F854-E88A-40C1-82C5-7F125A77A25F",
     "amiauthor":false,
     "authorid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",
     "authorlogin":"sergeev",
     "authorname":"Сергеев Вахтанг Абрикосович",
     "dtutc":"2013-09-05 14:08:02",
     "text":"Зайди как освободишься",
     "isnew":"true"
     "files":[
       {
        "path":"Temp\1.jpg",
        "size":329002
       },
       ...
     ]
    },
    ...
  ]
 }
]



>>> chatcreated

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


[
 "chatcreated",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "dtformat": "yyyy-MM-dd HH:mm:ss",
  "chat": {
    "id":"01483664-9D99-4B1B-8131-C46386A6FC68",
    "name":"приватный чат",
    "type":"1",
    "creatorid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",
    "membercount":"4",
    "privateopponentid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",
    "linkedobjectid":"",
    "lastdtutc":"2013-09-05 14:08:02",
    "members":[
      {
        "id": "",
        "name": ""
      },
      ...
    ]
   }
 }
]



>>> chatnamechanged

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


[
 "chatnamechanged",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "chatid": "41EE8C8F-A7DE-4F78-8F57-7F299CE2767B",
  "name": "новое имя"
]



>>> chatmemberadded

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


[
 "chatmemberadded",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "chatid": "41EE8C8F-A7DE-4F78-8F57-7F299CE2767B",
  "members":[
    {
      "id": "",
      "name": ""
    },
    ...
  ]
 }
]



>>> chatmemberremoved

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


[
 "chatmemberremoved",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "chatid": "41EE8C8F-A7DE-4F78-8F57-7F299CE2767B",
  "members":[
    {
      "id": ""
    },
    ...
  ]
 }
]



>>> chatmessage

Сообщение из Oktell в CRM о факте поступления сообщения из текстового чата. Отправляется всем участникам этого чата, включая отправителя (в этом случае поля authorname и authorlogin отсутствуют).


[
 "chatmessage",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "dtformat": "yyyy-MM-dd HH:mm:ss",
  "chatid": "41EE8C8F-A7DE-4F78-8F57-7F299CE2767B",
  "messageid": "14D6DBB7-D5CB-471B-888A-9AACC8CD737B",
  "amiauthor": false,
  "authorid": "B1D4DCA9-2246-4EA1-B71E-68FF29AC92E4",
  "authorname": "",
  "authorlogin": "",
  "dtutc": "2013-09-05 16:10:04",
  "text": "тело сообщения",
  "isnew": true
  "files":[
    {
     "path":"Temp\1.jpg",
     "size":329002
    },
    ...
  ]
 }
]



>>> chatmessageviewed

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


[
 "chatmessageviewed",
 {
  "qid": "F14F31B7-F203-4462-975F-3A37DD16240B",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "chatid": "41EE8C8F-A7DE-4F78-8F57-7F299CE2767B",
  "messageid": "14D6DBB7-D5CB-471B-888A-9AACC8CD737B",
 }
]



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


>>> 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 - список идентификаторов отображенных уведомлений.			 



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


>>> 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, Задача 'Входящие в call-центр'",
  "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": "Входящие в call-центр"
 }
]
//* Частично могут отсутстовать параметры, описывающие абонента. 
//    Если 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, Задача 'Входящие в call-центр'",
  "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": "Входящие в call-центр",
  "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, могут быть частично полученные файлы.



>>> flashstatechanged

Cообщение из Oktell о смене состояния линии, находящейся на удержании.

[
 "flashstatechanged",
 {
  "qid": "99CC8C57-1793-486A-AFB1-6E5CA3E6855E",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "flashtypeid": 1,
  "flashtypestr": "Put",
  "oppositeid": "91FD3E18-B3A7-4662-8E06-C95C7D245DC3"
 }
]
//* Список возможных состояний:
	Put		= 1  — постановка на удержание
	Return		= 2  — возврат с удержания
	Abort		= 3  — прерывание удержания при положении трубки или другими действиями. Абонент на удержании получит сигнал занято.
	Lost		= 4  — абонент прервал ожидание, либо ошибка при попытке переключения на него
	Switch		= 5  — перевод ожидающего на кого-то другого
	Invite		= 6  — переключение с абонентом в конференцию
	Between		= 7  — переключение между двумя абонентами на удержании(без обрыва)
	Next		= 8  — отбой текущего абонента и переход сразу на набор номера без возврата к абоненту на удержании
	Flashed		= 11 — пользовать сам был поставлен кем-то на удержание
	Restored	= 12 — пользователь возвращён из удержания
	Aborted		= 13 — удержание пользователя прервано



>>> linestatechanged

Cообщение из Oktell о смене состояния внутренней линии

[
 "linestatechanged",
 {
  "qid": "99CC8C57-1793-486A-AFB1-6E5CA3E6855E",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "linestateid": 4,
  "linestatestr": "lsReady"
 }
]
//* Список возможных состояний внутренней линии:
	lsDisconnected	= 1	— не подключена
	lsOff		= 2	— выключена
	lsReady		= 4	— готова
	lsHookUp	= 8	— поднята трубка
	lsIncomingCall	= 16	— входящий звонок
	lsCommutated	= 32	— скоммутирована
	lsWait		= 64	— ожидание дозвона\коммутации
	lsFlash		= 128	— флеш\удержание
	lsWaitDown	= 256	— ожидание с положенной трубкой(отдельный статус резервирования линии при использовании сервиса автодозвона)
	lsListenBusy	= 512	— сигнал "Занято" в линии(коммутация разорвана по инициативе противоположной стороны)
	lsUndefined	= 1024	— неопределено
	lsReserved	= 2048	— зарезервирована

Команды к АТС


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



<<< pbxdtmf

Запрос из CRM в Oktell на генерацию софт-DTMF.

[
 "pbxdtmf",
 {
  "qid": "DD836C5D-4F3E-4FD2-9B60-24E330B03FC6",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "dtmf": "#"
 }
]
//* dtmf: цифры, *, #



<<< pbxanswercall

Запрос из CRM в Oktell на снятие трубки при входящем звонке (с помощью изменения SIP-вызова на интерком).

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



<<< pbxinterceptcall

Запрос из CRM в Oktell на перехват вызова

[
 "pbxinterceptcall",
 {
  "qid": "DD836C5D-4F3E-4FD2-9B60-24E330B03FC6",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "number": "400"
 }
]
//* number - внутренний номер, вызов на который необходимо перехватить. Если не задан, то перехват первого доступного из групповых.

Запросы к АТС общего характера


<<< 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 - возвращает идентификатор запущенного задания.
		В дальнейшем с помощью него можно будет отменить задание (если оно еще не будет к тому времени исполнено)


>>> exectmcallreport

Отчет о выполнении задания. Указывает код задания, и причину ошибки в случае неудачи.

[
 "exectmcallreport",
 {
  "qid": "DDA55585-F598-4F8C-B605-E6E186E6D859",
  "taskid": "qud82039lsdfmnasd",
  "success": false,
  "errorid": 21,
  "errorstr": "CallAbonentFailure"
 }
]



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



<<< 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 - список абонентов очереди в порядке убывания. Каждый абонент содержится в словаре.

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


<<< 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, события из 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": {
     ***
  }
 }
]
//* conflistchanged,
//* 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,
  "onccmanual": false
 }
]



<<< setuserstate

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

Для изменения только одного из параметров состояния можно остальные не указывать (например оставлять только oncallcenter).

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



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



<<< checkuserintask

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

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


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



<<< getuserphoto

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

[
 "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 на изменение пароля текущего авторизованного пользователя. В версиях 2.7 пароль в нижнем регистре, в версиях 2.8 пароль без изменения регистра.

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


>>> getflashedabonentinforesult

Ответ из 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"
 }
]


>>> getextendedlineinforesult

Ответ из 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": "",
	"isroutingivr": false, 
	"ismediaivr": false, 
	"isrestartivr": false,
    "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
 }
]



<<< getchaincontentcustomfield

Запрос из 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, outgoing, internal, conference).
		intnumber - интересующий внутренний номер.
		outnumber - интересующий внешний номер.
		minduration - минимальная длительность коммутации в секундах, может быть действительным значением.
		userid - идентификатор интересующего пользователя.
		userlogin - логин интересующего пользователя.
		comment - строка включения в комментарии.
		showcallcenter: true|false. Отображать ли коммутации call-центра.
		taskid - идентификатор задачи в рамках call-центра, чьи звонки интересны.


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



<<< getvoiceperc

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

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


<<< getvoicepercresult

Ответ от Oktell в CRM. Возвращает результат.

[
 "getvoicepercresult",
 {
  "qid": "DF061C5B-1B3B-41AA-94FF-A7A2F8FA6AE7",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "result": 1,
  "aperc": 12,
  "bperc": 29,
  "alinenum": "17e003",
  "blinenum": "16e215"
 }
]



<<< getvoicemap

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

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


<<< getvoicepercresult

Ответ от Oktell в CRM. Возвращает результат.

[
 "getvoicemapresult",
 {
  "qid": "DF061C5B-1B3B-41AA-94FF-A7A2F8FA6AE7",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "result": 1,
  "errormsg": "",
  "abinbase64": [base64 от бинарки ("0100101101011110"-> byte[]-> base64)],
  "bbinbase64": [base64 от бинарки ("0100101101011110"-> byte[]-> base64)],
  "abinlen": 15,
  "bbinlen": 15,
  "alinenum": "17e003",
  "blinenum": "16e215"
 }
]

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


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



Управление задачами call-центра


<<< cc_attachcalltotask

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


[
 "cc_attachcalltotask",
 {
  "qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "taskkey": "EDFE9A1F-E27E-4693-A427-A392C919F8B0",
  "idinlist": 183
 }
]


>>> cc_attachcalltotaskresult

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

[
 "cc_attachcalltotaskresult",
 {
  "qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "result": 1,
  "idinlist": 183,
  "errormsg": ""
 }
]



<<< cc_settaskactive

Запрос из CRM в Oktell на активацию/деактивацию задачи. Позволяет указать задачу ключом - идентификатор, название или код. Тип задачи - call (по умолчанию) или text. Метод доступен с версии 2.8.130909.


[
 "cc_settaskactive",
 {
  "qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "tasktype": "call",
  "taskkey": "EDFE9A1F-E27E-4693-A427-A392C919F8B0",
  "active": true
 }
]


>>> cc_settaskactiveresult

Ответ от Oktell в CRM. Возвращает результат активации/деактивации задачи.

[
 "cc_settaskactiveresult",
 {
  "qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "result": 1
 }
]



<<< cc_addoperatortotask

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


[
 "cc_addoperatortotask",
 {
  "qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "taskkey": "EDFE9A1F-E27E-4693-A427-A392C919F8B0",
  "operatorkey": "BD252256-08DE-4693-9A31-FC02B600E609"
 }
]


>>> cc_addoperatortotaskresult

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

[
 "cc_addoperatortotaskresult",
 {
  "qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "result": 1
 }
]



<<< cc_removeoperatorfromtask

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

[
 "cc_removeoperatorfromtask",
 {
  "qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "taskkey": "EDFE9A1F-E27E-4693-A427-A392C919F8B0",
  "operatorkey": "BD252256-08DE-4693-9A31-FC02B600E609"
 }
]


>>> cc_removeoperatorfromtaskresult

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

[
 "cc_removeoperatorfromtaskresult",
 {
  "qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",
  "userlogin": "Иванов",
  "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
  "result": 1
 }
]



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


<<< 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.
		''Пользователь по умолчанию'' считается авторизованным.



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


<<< getversion

Запрос из 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": 80,
   "webservertls": false
  }
  "alloweddbstoredprocs": {
   "w_favoritegetbyuser": 1,
   "w_favoritesavebyuser": 1,
   "w_favoritedeletebyuser": 1,
   "w_clientsget": 1,
   "w_clientgroupsget": 1
  }
 }
]
//* version - информация о версии сервера логики и HAL.
//* version:webserverport - номер порта [[Серверный_HTTP_интерфейс|HTTP веб-сервера oktell]].
//* version:webservertls - true|false - защищенный ли канал на указанном порте (http или https).
//* alloweddbstoredprocs - перечень хранимых процедур, доступных для исполнения в БД Oktell 
				посредством метода <span style="color:green">''execpredefineddbstoredproc''</span>	



<<< gettemphttppass

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

Доступно для схемы интеграции 2 и схемы интеграции 3 в рамках индивидуальных подключений.

[
 "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 и схеме интеграции 3 в рамках индивидуальных подключений. Производит массовую рассылку указанного события. Точно также как и все остальные события требует подписки.

[
 "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 - логин пользователя-рассыльщика.



<<< execpredefineddbstoredproc

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

Существует специальный параметр @authorizeduserid, значение которого перед исполнением заменяется на идентификатор авторизованного пользователя. Такие процедуры нельзя исполнять от имени CRM.

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

[
 "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 - наборы данных по порядку выдачи в ходе исполнения хранимой процедуры.
		Набор - это список строк, каждая из которых - список значений по ячейкам.
		Первая строка в наборе - всегда содержит названия столбцов набора.



<<< execpluginmethod

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

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

[
 "execpluginmethod",
 {
  "qid": "7198D943-7BA9-443D-B283-55812BC82AFB",
  "pluginid": "44710EF2-9C5E-489E-B6CC-FD4ED34C13FE",
  "formid": "44710EF2-9C5E-489E-B6CC-FD4ED34C13FE",
  "inputparams": {
    "param1": "...",
    "param2": "...",
    ...
  }
 }
]
//* pluginid - идентификатор плагина. 
//* formid - идентификатор одной из заявленных форм (методов) плагина.
//* inputparams - список значений для заявленных плагином входных параметров выбранной формы (метода). 
                В качестве значений параметров могут быть json структуры 
                (октелл осуществляет преобразование в строку самостоятельно).


>>> execpluginmethodresult

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

[
 "execpluginmethodresult",
 {
  "qid": "7198D943-7BA9-443D-B283-55812BC82AFB",
  "result": 1,
  "error": 0,
  "errormsg": "",
  "outputparams": {
    "outputdata": "...",
    ...
  }
 }
]
//* outputparams - список значений заявленных плагином выходных переменных выбранной формы (метода).
                  В качестве значений параметров могут быть json структуры.



<<< ping

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

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

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


>>> pong

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

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



<<< subscribeevent, unsubscribeevent

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

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

В схеме интеграции 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
  • voicemailreceived
  • usertextmessagereceived
  • usertextmessageviewed
  • chatcreated
  • chatnamechanged
  • chatmemberadded
  • chatmemberremoved
  • chatmessage
  • chatmessageviewed
  • chat (совокупность всех методов chat*)
  • userstatechanged
  • linestatechanged
  • chainstatechanged
  • flashstatechanged
  • phoneevent_acmcallstarted
  • phoneevent_acmcallstopped
  • phoneevent_ringstarted
  • phoneevent_ringstopped
  • phoneevent_ivrstarted
  • phoneevent_ivrstopped
  • phoneevent_commstarted
  • phoneevent_commstopped
  • phoneevent_faxstarted
  • phoneevent_faxstopped
  • phoneevent_faxreceived
  • phoneevent (совокупность всех методов phoneevent_*)
  • conferenceevent
  • conflistchanged
  • confparamschanged
  • confcompositionchanged
  • confcompetitorstatechanged
  • confentrancedenied
  • confentrancepermitted
  • confentrancerequest
  • confnotifyinvite
  • confpossiblecompetitorstatechanged
  • conference (совокупность всех методов conf*)
  • dynamic (совокупность методов executemethod, cancelmethod, showform, closeform)
  • dynamicwaitabort (совокупность методов executemethodwaitaborted, showformwaitaborted)
  • dlgcard_showreserve
  • dlgcard_showconfirm
  • dlgcard_showformstop
  • dlgcard_showformdialog
  • dlgcard_closeall
  • dlgcard_closereserve
  • dlgcard_closeformreturnvalues
  • dlgcard_closeformreturncomment
  • dlgcard (совокупность методов dlgcard_*)
  • customevent


>>> subscribeeventresult, unsubscribeeventresult

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

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



<<< wp_setuserstate

Запрос на установку состояния указанному пользователю. Исполняется от имени сервера, даже если пользователь подключен с помощью другого подключения или из толстого клиента. Ответ не возвращается, в случае удачи отправляется событие userstatechanged. Пользователь задается с помощью одного из ключей (wp - рабочее место, line - линия, user - пользователь).

[
 "wp_setuserstate",
 {
  "qid": "2A45010A-8EEA-4876-90CB-F062459D4BE2",
  "wp": "...",
  "line": "...",
  "user": "...",
  "userstateid": 2,
  "onredirect": false,
  "lunchreasonid": 120,
  "lunchreasonmsg": ""
 }
]



<<< wp_getuserstate

Запрос от сервера CRM на возврат состояния указанного пользователя. Исполняется от имени сервера, даже если пользователь подключен с помощью другого подключения или из толстого клиента. Пользователь задается с помощью одного из ключей (wp - рабочее место, line - линия, user - пользователь).

[
 "wp_getuserstate",
 {
  "qid": "2A45010A-8EEA-4876-90CB-F062459D4BE2",
  "wp": "...",
  "line": "...",
  "user": "..."
 }
]


>>> wp_getuserstateresult

Ответ на запрос wp_getuserstateresult.

[
 "wp_getuserstateresult",
 {
  "qid": "2A45010A-8EEA-4876-90CB-F062459D4BE2",
  "wp": "...",
  "line": "...",
  "user": "...",
  "found": true,
  "userid": "BDB8519F-AE77-4E33-81DB-41EE8E7D4E33",
  "stateid": 5,
  "statestr": "usFullBusy",
  "onredirect": false,
  "onlunch": true,
  "oncc": true,
  "onccmanual": false
 }
]



<<< getuserstates

Запрос от сервера CRM на получение состояний всех пользователей в системе вне зависимости от того, где они авторизованы и авторизованы ли вообще.

[
 "getuserstates",
 {
  "qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F"
 }
]


>>> getalluserstatesresult

Ответ на запрос getuserstates.

[
 "getalluserstatesresult",
 {
  "qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",
  "users":[
   {
    "userlogin": "Иванов",
    "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",
    "userstate": 5,
    "userstateid": 5,
    "userstatestr": "usFullbusy",
    "onredirect": true,
    "onlunch": false,
    "oncallcenter": false,
    "onccmanual": false
   },
   ...
  ]
 }
]



<<< closecallbychain

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

[
 "closecallbychain",
 {
  "qid": "2A45010A-8EEA-4876-90CB-F062459D4BE2",
  "idchain": "A7623B51-41F5-42E6-A2AE-1063C52D010A"
 }
]


>>> closecallbychainresult

Ответ на запрос closecallbychain.

[
 "closecallbychainresult",
 {
  "qid": "2A45010A-8EEA-4876-90CB-F062459D4BE2",
  "found": true
 }
]

Прочие

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


Запросы, команды и события от CRM к Oktell:

  • cc_getcallstates (ответ cc_getcallstatesresult)
  • cc_getuserresults (ответ cc_getuserresultsresult)
  • cc_getlunchtypes (ответ cc_getlunchtypesresult)
  • dlgcard_setsupported (ответ dlgcard_setsupportedresult)
  • dlgcard_confirmgot
  • dlgcard_confirmresult
  • dlgcard_showformdone
  • dlgcard_getmetadata (ответ dlgcard_getmetadataresult)
  • dlgcard_getcachedvalues (ответ dlgcard_getcachedvaluesresult)
  • dlgcard_setvaluesonclose
  • dlgcard_setcontrolvalue
  • dlgcard_setresultonnext
  • dlgcard_setresultonstop
  • dlgcard_setstopformresult

События из Oktell в CRM:

  • dlgcard_showreserve
  • dlgcard_showconfirm
  • dlgcard_showformstop
  • dlgcard_showformdialog
  • dlgcard_closeall
  • dlgcard_closereserve
  • dlgcard_closeformreturnvalues
  • dlgcard_closeformreturncomment