Oktell Web-Socket Protocol — различия между версиями
Peter (обсуждение | вклад) |
м (→Прочие) |
||
(не показано 58 промежуточных версии 2 участников) | |||
Строка 26: | Строка 26: | ||
− | В рамках настройки сценариев Oktell, имеется возможность отправлять синхронные и асинхронные запросы в WebCRM (фактически исполнять методы по событиям в Oktell)и получать ответы и применять их в рамках проведения маршрутизации или любых других действий, реализуемых в сценариях. Например: | + | В рамках настройки сценариев Oktell, имеется возможность отправлять синхронные и асинхронные запросы в WebCRM (фактически исполнять методы по событиям в Oktell) и получать ответы и применять их в рамках проведения маршрутизации или любых других действий, реализуемых в сценариях. Например: |
:* Выяснить, какому клиенту/контакту принадлежит определившийся номер телефона или введенный им вручную с помощью DTMF-набора номер договора, отфильтровать по черному списку, переключить вызов на ответственного за работу с этим контактом пользователя, если пользователя нет в системе - переключить на секретаря, а если контакт новый - соединить с отделом продаж. Если ответственный пользователь занят, предложить оставить голосовое сообщение для VIP клиентов. | :* Выяснить, какому клиенту/контакту принадлежит определившийся номер телефона или введенный им вручную с помощью DTMF-набора номер договора, отфильтровать по черному списку, переключить вызов на ответственного за работу с этим контактом пользователя, если пользователя нет в системе - переключить на секретаря, а если контакт новый - соединить с отделом продаж. Если ответственный пользователь занят, предложить оставить голосовое сообщение для VIP клиентов. | ||
:* В момент поступления звонка открыть карточку у пользователя, которому направляется звонок. Закрыть ее автоматически, если пользователь так и не снял трубку (а снял кто-то другой, или звонок потерялся). | :* В момент поступления звонка открыть карточку у пользователя, которому направляется звонок. Закрыть ее автоматически, если пользователь так и не снял трубку (а снял кто-то другой, или звонок потерялся). | ||
Строка 38: | Строка 38: | ||
:* поступление внешнего звонка. | :* поступление внешнего звонка. | ||
:* завершение звонка. | :* завершение звонка. | ||
− | :* переключение абонента на пользователя, группу пользователей, задачу | + | :* переключение абонента на пользователя, группу пользователей, задачу call-центра. |
:* любое из интересующих явлений в ходе обработки звонка (от преобразования номера абонента в нужный формат и сверки времени поступления звонка до обработки контента звонка после завершения и выявления там факта состоявшейся конференции). | :* любое из интересующих явлений в ходе обработки звонка (от преобразования номера абонента в нужный формат и сверки времени поступления звонка до обработки контента звонка после завершения и выявления там факта состоявшейся конференции). | ||
:* наступление определенного времени. | :* наступление определенного времени. | ||
Строка 50: | Строка 50: | ||
:* появление где-то в базе данных интересующего события (например появление новой записи в таблице абонентов) | :* появление где-то в базе данных интересующего события (например появление новой записи в таблице абонентов) | ||
:* появление где-то на веб-ресурсе интересующего события (например температура на улице опустилась ниже нуля) | :* появление где-то на веб-ресурсе интересующего события (например температура на улице опустилась ниже нуля) | ||
− | + | ||
<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|Динамическое взаимодействие]]. | ||
+ | |||
<div id="Arch2"></div> | <div id="Arch2"></div> | ||
− | ===Схема интеграции 2 (клиент-серверное | + | ===Схема интеграции 2 (клиент-серверное соединение)=== |
+ | |||
Строка 100: | Строка 103: | ||
Между Oktell и каждым клиентом существует один или несколько [[#Exchange|каналов для двустороннего обмена сообщениями]] (поддерживается работа в нескольких вкладках браузера). | Между Oktell и каждым клиентом существует один или несколько [[#Exchange|каналов для двустороннего обмена сообщениями]] (поддерживается работа в нескольких вкладках браузера). | ||
− | В данном случае клиенты (браузеры) производят | + | В данном случае клиенты (браузеры) производят подключения к серверу 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]], но не являются там необходимыми, так как часть данных и работ проводится на веб-сервере WebCRM. | Применительно к этому способу интеграции существует ряд дополнительных методов интерфейса. Большинство таких методов доступно и при [[#Arch1|схеме интеграции 1]], но не являются там необходимыми, так как часть данных и работ проводится на веб-сервере WebCRM. | ||
− | + | ||
+ | В отличие от [[#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 нужен для приведения состояния пользователя в готовность. Без этого звонки на пользователя не поступают, а обрабатываются как и в случае, когда он недоступен. Логофф - обратная операция. В ходе взаимодействия пользователю доступны команды управления своим состоянием. Он может отлучиться, выставить перерыв, переадресацию, занятость и т.д. Все это нужно для того, чтобы изменить направление маршрутизации звонков и режим работы | + | Логин в 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 и браузером) идет по общему каналу путем двустороннего обмена сообщениями между сторонами. | ||
− | |||
+ | <center>[[Файл:Socket 3.jpg|500px]][[Файл:Socket 3b.jpg|500px]]</center> | ||
− | |||
<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: | ||
+ | |||
+ | [[Файл:Json.jpg]] | ||
Сообщения длиной более 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]), то способ отправки длинных сообщений в нескольких фреймах определен в самом протоколе. Однако это имеет ограничение: при передаче одного длинного сообщения в нескольких фреймах, оно не может быть прервано передачей других сообщений. | Сообщения длиной более 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">''qid''</span> с любым текстовым уникальным значением). В случае, когда сообщение производится от имени пользователя, присутствуют его идентификаторы (<span style="color:green">''userid''</span> и/или <span style="color:green">''userlogin''</span>). |
− | + | ||
Среди параметров находятся и индивидуальные параметры сообщения. Поддерживается произвольная вложенность объектов: строк, чисел, дат, словарей, списков. | Среди параметров находятся и индивидуальные параметры сообщения. Поддерживается произвольная вложенность объектов: строк, чисел, дат, словарей, списков. | ||
− | |||
− | |||
<div id="Dynamic"></div> | <div id="Dynamic"></div> | ||
+ | |||
===Динамическое взаимодействие=== | ===Динамическое взаимодействие=== | ||
Строка 212: | Строка 242: | ||
Взаимодействие представляет собой вызов определенного метода WebCRM с передачей в него входных параметров, и возможно ожидание его исполнения с возвратом (нескольких) выходных значений. | Взаимодействие представляет собой вызов определенного метода WebCRM с передачей в него входных параметров, и возможно ожидание его исполнения с возвратом (нескольких) выходных значений. | ||
− | Сразу после организации подключения к серверу WebCRM Oktell производит запрос доступных в WebCRM динамических методов (как было сказано выше, в рамках [[# | + | Сразу после организации подключения к серверу WebCRM Oktell производит запрос доступных в WebCRM динамических методов (как было сказано выше, это происходит в рамках [[#Arch1|схемы интеграции 1]] и [[#Arch3|схемы интеграции 3]]). |
− | В ответ WebCRM перечисляет список действий, инициативу исполнения которых она готова отдать наружу в Oktell. При описании метода | + | В ответ WebCRM перечисляет список действий, инициативу исполнения которых она готова отдать наружу в Oktell. При описании метода в представлении указываются: |
− | :* человеческое название | + | :* человеческое название; |
− | :* краткий код метода | + | :* краткий код метода; |
− | :* описание для администратора, настраивающего Oktell | + | :* описание для администратора, настраивающего Oktell; |
− | :* список входных параметров с упоминанием типов (и возможных значений для перечислений) | + | :* список входных параметров с упоминанием типов (и возможных значений для перечислений); |
− | :* список выходных параметров, если метод возвращает данные и призван влиять на алгоритм сценария в Oktell | + | :* список выходных параметров, если метод возвращает данные и призван влиять на алгоритм сценария в Oktell; |
− | :* признак того, нужно ли исполнять метод с привязкой к конкретному пользователю, или это обращение к серверу вообще | + | :* признак того, нужно ли исполнять метод с привязкой к конкретному пользователю и в направлении индивидуального пользовательского подключения, или это обращение к серверу вообще; |
− | :* разрешено ли отменять исполнение (например для метода «открыть карточку такую-то» возможна отмена, означающая «закрыть карточку такую-то») | + | :* разрешено ли отменять исполнение (например для метода «открыть карточку такую-то» возможна отмена, означающая «закрыть карточку такую-то»); |
− | :* куда Oktell направлять запрос - через | + | :* куда 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 в 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> | ||
Строка 368: | Строка 938: | ||
------------------------------------------------- | ------------------------------------------------- | ||
− | <span style="color:green"> | + | <span style="color:green"><<< '''updatesession'''</span> |
− | + | Команда из CRM в Oktell о продлении сессии пользователя (для сохранения возможности производить вход без пароля). | |
<pre> | <pre> | ||
[ | [ | ||
− | " | + | "updatesession", |
{ | { | ||
− | "qid": " | + | "qid": "9D484E0E-BE08-47B5-ABBD-490936881056", |
− | " | + | "userlogin": "ivanov", |
− | + | "userid": "29834234234", | |
− | + | "sessionid": "9238749273982734023", | |
− | + | "expires": 86400 | |
− | + | ||
} | } | ||
] | ] | ||
Строка 395: | Строка 964: | ||
<span style="color:green"><<< '''entercallcenter'''</span> | <span style="color:green"><<< '''entercallcenter'''</span> | ||
− | Запрос из CRM на вход в режим | + | Запрос из CRM на вход в режим call-центра. При проведении изменений в ответ отправляется сообщение userstatechanged. |
<pre> | <pre> | ||
Строка 411: | Строка 980: | ||
<span style="color:green"><<< '''exitcallcenter'''</span> | <span style="color:green"><<< '''exitcallcenter'''</span> | ||
− | Запрос из CRM на выход из режима | + | Запрос из CRM на выход из режима call-центра. При проведении изменений в ответ отправляется сообщение userstatechanged. |
<pre> | <pre> | ||
Строка 425: | Строка 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 этот способ считается устаревшим. | ||
------------------------------------------------- | ------------------------------------------------- | ||
Строка 475: | Строка 1124: | ||
<span style="color:green"><<< '''sendusertextmessage'''</span> | <span style="color:green"><<< '''sendusertextmessage'''</span> | ||
− | Запрос из CRM в Oktell на отправку текстового сообщения в рамках чата другому пользователю. | + | Запрос из CRM в Oktell на отправку текстового сообщения в рамках чата другому пользователю. |
+ | Вложения и сообщения в конференциях - опция, используемая веб-клиентом Oktell. | ||
<pre> | <pre> | ||
Строка 488: | Строка 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" | ||
} | } | ||
] | ] | ||
Строка 495: | Строка 1169: | ||
<span style="color:green"><<< '''setusermessageviewed'''</span> | <span style="color:green"><<< '''setusermessageviewed'''</span> | ||
− | Запрос из CRM в Oktell на выставление признака прочитанности текстового сообщения пользователем. В ответ возвращается количество реально отмеченных сообщений. Может быть больше или меньше указанного. Событие о прочитанности отправляется пользователю, указанному в поле senderuserid. | + | Запрос из CRM в Oktell на выставление признака прочитанности текстового сообщения пользователем. В ответ возвращается количество реально отмеченных сообщений. Может быть больше или меньше указанного. Событие о прочитанности отправляется пользователю, указанному в поле senderuserid (параметр может не указываться). |
<pre> | <pre> | ||
Строка 509: | Строка 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", | ||
} | } | ||
] | ] | ||
Строка 578: | Строка 1991: | ||
<span style="color:green"><<< '''setnotifyshown'''</span> | <span style="color:green"><<< '''setnotifyshown'''</span> | ||
− | Запрос из CRM в Oktell об установке признака прочтенности уведомления. | + | Запрос из CRM в Oktell об установке признака прочтенности уведомления. Это актуально для уведомлений, сохраняемых в БД. |
<pre> | <pre> | ||
Строка 589: | Строка 2002: | ||
"id": "A33027E1-096F-38B8-1198-BB4D7C15823A", | "id": "A33027E1-096F-38B8-1198-BB4D7C15823A", | ||
"wasshown": false | "wasshown": false | ||
− | |||
} | } | ||
] | ] | ||
Строка 597: | Строка 2009: | ||
одного уведомления с таким кодом (либо закрывать автоматически предыдущее, либо не отображать это) | одного уведомления с таким кодом (либо закрывать автоматически предыдущее, либо не отображать это) | ||
//* ids - список идентификаторов отображенных уведомлений. | //* ids - список идентификаторов отображенных уведомлений. | ||
− | |||
− | |||
</pre> | </pre> | ||
Строка 625: | Строка 2035: | ||
"callername": "ОАО Металлург", | "callername": "ОАО Металлург", | ||
"callerdescription": "Металлоконструкции, изделия из черных и цветных металлов", | "callerdescription": "Металлоконструкции, изделия из черных и цветных металлов", | ||
− | "callerinfo": "Абонент: 315, Задача 'Входящие в | + | "callerinfo": "Абонент: 315, Задача 'Входящие в call-центр'", |
"callercomment": "Еще что-то об абоненте", | "callercomment": "Еще что-то об абоненте", | ||
"calleruserlogin": "", | "calleruserlogin": "", | ||
Строка 641: | Строка 2051: | ||
"istask": true, | "istask": true, | ||
"taskid": "F94BD1FE-B628-4CC3-B215-F3F84B275EDD", | "taskid": "F94BD1FE-B628-4CC3-B215-F3F84B275EDD", | ||
− | "taskname": "Входящие в | + | "taskname": "Входящие в call-центр" |
} | } | ||
] | ] | ||
Строка 690: | Строка 2100: | ||
"callername": "ОАО Металлург", | "callername": "ОАО Металлург", | ||
"callerdescription": "Металлоконструкции, изделия из черных и цветных металлов", | "callerdescription": "Металлоконструкции, изделия из черных и цветных металлов", | ||
− | "callerinfosimple": "Абонент: 315, Задача 'Входящие в | + | "callerinfosimple": "Абонент: 315, Задача 'Входящие в call-центр'", |
"callercomment": "Еще что-то об абоненте", | "callercomment": "Еще что-то об абоненте", | ||
"calleruserlogin": "", | "calleruserlogin": "", | ||
Строка 706: | Строка 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 | ||
Строка 891: | Строка 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> | ||
====Команды к АТС==== | ====Команды к АТС==== | ||
Строка 1048: | Строка 2523: | ||
------------------------------------------------- | ------------------------------------------------- | ||
+ | <div id="pbxmakeflash"></div> | ||
<span style="color:green"><<< '''pbxmakeflash'''</span> | <span style="color:green"><<< '''pbxmakeflash'''</span> | ||
Строка 1068: | Строка 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> | ||
Строка 1084: | Строка 2584: | ||
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B", | "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B", | ||
} | } | ||
− | |||
] | ] | ||
</pre> | </pre> | ||
Строка 1132: | Строка 2631: | ||
------------------------------------------------- | ------------------------------------------------- | ||
− | <span style="color:green"><<< ''' | + | <span style="color:green"><<< '''pbxdtmf'''</span> |
− | Запрос из CRM в Oktell на | + | Запрос из CRM в Oktell на генерацию софт-DTMF. |
<pre> | <pre> | ||
[ | [ | ||
− | " | + | "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", | ||
− | " | + | "dtmf": "#" |
} | } | ||
] | ] | ||
</pre> | </pre> | ||
<pre> | <pre> | ||
− | //* | + | //* dtmf: цифры, *, # |
− | + | ||
− | + | ||
− | + | ||
</pre> | </pre> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
------------------------------------------------- | ------------------------------------------------- | ||
− | <span style="color:green"><<< ''' | + | <span style="color:green"><<< '''pbxanswercall'''</span> |
− | + | ||
− | Запрос из CRM в Oktell на | + | Запрос из CRM в Oktell на снятие трубки при входящем звонке (с помощью изменения SIP-вызова на интерком). |
<pre> | <pre> | ||
[ | [ | ||
− | " | + | "pbxanswercall", |
{ | { | ||
− | "qid": " | + | "qid": "DD836C5D-4F3E-4FD2-9B60-24E330B03FC6", |
"userlogin": "Иванов", | "userlogin": "Иванов", | ||
− | "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B" | + | "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B" |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
} | } | ||
] | ] | ||
</pre> | </pre> | ||
+ | |||
+ | |||
+ | ------------------------------------------------- | ||
+ | <span style="color:green"><<< '''pbxinterceptcall'''</span> | ||
+ | |||
+ | Запрос из CRM в Oktell на перехват вызова | ||
<pre> | <pre> | ||
[ | [ | ||
− | " | + | "pbxinterceptcall", |
{ | { | ||
− | "qid": " | + | "qid": "DD836C5D-4F3E-4FD2-9B60-24E330B03FC6", |
− | " | + | "userlogin": "Иванов", |
− | " | + | "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B", |
− | " | + | "number": "400" |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
} | } | ||
] | ] | ||
</pre> | </pre> | ||
<pre> | <pre> | ||
− | //* | + | //* number - внутренний номер, вызов на который необходимо перехватить. Если не задан, то перехват первого доступного из групповых. |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
</pre> | </pre> | ||
+ | ====Запросы к АТС общего характера==== | ||
+ | |||
+ | ------------------------------------------------------------------- | ||
+ | <span style="color:green"><<< '''exectmcall'''</span> | ||
− | + | Запрос из CRM в Oktell. Осуществляет размещение короткого задания на дозвон и соединение с указанным оператором (пользователем). | |
+ | Дозвониться до одного из указанных абонентов-номеров группы A, соединить с одним из указанных абонентов-номеров группы B. | ||
+ | Результатом выполнения является одна коммутация. | ||
− | + | Не требует указания пользователя. | |
+ | Считается серверным методом, хотя может вызываться и по индивидуальному клиентскому каналу. | ||
<pre> | <pre> | ||
[ | [ | ||
− | " | + | "exectmcall", |
{ | { | ||
− | "qid": " | + | "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 | ||
} | } | ||
] | ] | ||
Строка 1230: | Строка 2730: | ||
<pre> | <pre> | ||
[ | [ | ||
− | " | + | "exectmcall", |
{ | { | ||
− | "qid": " | + | "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, | ||
} | } | ||
] | ] | ||
</pre> | </pre> | ||
<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> | ||
− | + | Ответ из Oktell в CRM. Возвращает результат исполнения хранимой процедуры в БД Oktell. Перечисляет все выходные наборы данных. | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
<pre> | <pre> | ||
[ | [ | ||
− | " | + | "exectmcallresult", |
{ | { | ||
− | "qid": " | + | "qid": "BE06A1E4-759A-4BFA-8D15-5FCF756EEE53", |
+ | "taskid": "qud82039lsdfmnasd" | ||
} | } | ||
] | ] | ||
</pre> | </pre> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<pre> | <pre> | ||
− | + | //* taskid - возвращает идентификатор запущенного задания. | |
− | + | В дальнейшем с помощью него можно будет отменить задание (если оно еще не будет к тому времени исполнено) | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
</pre> | </pre> | ||
− | + | <span style="color:green">>>> '''exectmcallreport'''</span> | |
− | <span style="color:green">>>> ''' | + | |
− | + | Отчет о выполнении задания. Указывает код задания, и причину ошибки в случае неудачи. | |
<pre> | <pre> | ||
[ | [ | ||
− | " | + | "exectmcallreport", |
{ | { | ||
− | "qid": " | + | "qid": "DDA55585-F598-4F8C-B605-E6E186E6D859", |
− | " | + | "taskid": "qud82039lsdfmnasd", |
− | " | + | "success": false, |
− | " | + | "errorid": 21, |
− | " | + | "errorstr": "CallAbonentFailure" |
− | + | ||
− | + | ||
− | + | ||
} | } | ||
] | ] | ||
Строка 1421: | Строка 2838: | ||
− | <span style="color:green"><<< ''' | + | ------------------------------------------------------------------- |
+ | <span style="color:green"><<< '''stoptmcall'''</span> | ||
− | + | Запрос из CRM в Oktell. Отменяет ранее запущенное методом ''exectmcall'' задание, если оно еще не завершило исполнение. | |
+ | |||
+ | Не требует указания пользователя. | ||
<pre> | <pre> | ||
[ | [ | ||
− | " | + | "stoptmcall", |
{ | { | ||
− | "qid": " | + | "qid": "DDA55585-F598-4F8C-B605-E6E186E6D859", |
− | " | + | "taskid": "qud82039lsdfmnasd" |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
} | } | ||
] | ] | ||
− | </pre> | + | </pre> |
− | + | <span style="color:green">>>> '''stoptmcallresult'''</span> | |
− | <span style="color:green">>>> ''' | + | |
− | + | Ответ от Oktell в CRM. Возвращает результат отмены задания. | |
<pre> | <pre> | ||
[ | [ | ||
− | " | + | "stoptmcallresult", |
{ | { | ||
− | "qid": " | + | "qid": "DDA55585-F598-4F8C-B605-E6E186E6D859", |
− | " | + | "taskid": "qud82039lsdfmnasd", |
− | " | + | "success": false, |
− | " | + | "errortext": "task not found" |
− | + | ||
− | + | ||
} | } | ||
] | ] | ||
Строка 1460: | Строка 2873: | ||
− | + | ------------------------------------------------------------------- | |
− | <span style="color:green"> | + | <span style="color:green"><<< '''gettotalqueue'''</span> |
− | + | Запрос из CRM в Oktell на возврат информации обо всех очередях. | |
+ | Может использоваться без указания пользователя. | ||
+ | Не рекомендуется к частому использованию, так как требует значительных вычислительных ресурсов. | ||
<pre> | <pre> | ||
[ | [ | ||
− | " | + | "gettotalqueue", |
{ | { | ||
− | "qid": " | + | "qid": "DDDB5BCA-A200-448C-93C7-EFEAE5AFE48D", |
+ | "skipempty": true | ||
} | } | ||
] | ] | ||
Строка 1475: | Строка 2891: | ||
− | <span style="color:green"> | + | <span style="color:green">>>> '''gettotalqueueresultresult'''</span> |
− | + | Ответ из Oktell в CRM. Возвращает список всех очередей и их абонентов | |
<pre> | <pre> | ||
[ | [ | ||
− | " | + | "gettotalqueueresult", |
{ | { | ||
− | "qid": " | + | "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> | </pre> | ||
+ | ====Запуск служебного сценария==== | ||
+ | |||
+ | ------------------------------------------------- | ||
+ | <span style="color:green"><<< '''startsvcscript'''</span>, | ||
+ | <span style="color:green">'''execsvcscript'''</span> | ||
− | + | Запрос из CRM в Oktell на запуск служебного сценария. ''startsvcscript'' - от имени пользователя, ''execsvcscript'' - без указания пользователя от имени сервера. | |
− | + | ||
− | + | ||
− | + | ||
<pre> | <pre> | ||
[ | [ | ||
− | " | + | "startsvcscript", |
{ | { | ||
− | "qid": " | + | "qid": "244E3867-470E-4A56-904D-D435D57CFBFE", |
"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> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
<pre> | <pre> | ||
[ | [ | ||
− | " | + | "execsvcscript", |
{ | { | ||
− | "qid": " | + | "qid": "244E3867-470E-4A56-904D-D435D57CFBFE", |
− | " | + | "scriptname": "Служебный сценарий получения почты", |
− | " | + | "startparam1": "значение параметра 1", |
− | " | + | "startparam2": "значение параметра 2", |
− | " | + | "startparam3": "значение параметра 3", |
− | " | + | "startparam4": "значение параметра 4", |
− | + | "startparam5": "значение параметра 5", | |
− | + | "waitresponse": true, | |
+ | "waittimeoutsec": 10 | ||
} | } | ||
] | ] | ||
+ | </pre> | ||
+ | <pre> | ||
+ | //* scriptname - название сценария в общем разделе. | ||
+ | //* startparamN - строковое значение соответствующего параметра. | ||
+ | При необходимости передать больше параметров следует объединять параметры в одну строку | ||
+ | с использованием символа-разделителя, а в самом сценарии производить обратную операцию. | ||
+ | //* waitresponse - ожидать ли ответа. | ||
+ | //* waittimeoutsec - таймаут ожидания ответа в секундах. 0 - вечно. | ||
</pre> | </pre> | ||
− | |||
− | |||
− | |||
− | + | <span style="color:green">>>> '''startsvcscriptresult'''</span>, | |
+ | <span style="color:green">'''execsvcscriptresult'''</span> | ||
+ | |||
+ | Ответ Oktell на запрос запуска служебного сценария. | ||
<pre> | <pre> | ||
[ | [ | ||
− | " | + | "startsvcscriptresult", |
{ | { | ||
− | "qid": " | + | "qid": "244E3867-470E-4A56-904D-D435D57CFBFE", |
"userlogin": "Иванов", | "userlogin": "Иванов", | ||
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B", | "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B", | ||
− | " | + | "scriptname": "Служебный сценарий получения почты", |
− | " | + | "result": 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> | ||
Строка 2582: | Строка 4029: | ||
</pre> | </pre> | ||
<pre> | <pre> | ||
+ | //* conflistchanged, | ||
//* confparamschanged, | //* confparamschanged, | ||
//* confcompositionchanged, | //* confcompositionchanged, | ||
Строка 2612: | Строка 4060: | ||
"onredirect": true, | "onredirect": true, | ||
"onlunch": false, | "onlunch": false, | ||
− | "oncallcenter": false | + | "oncallcenter": false, |
+ | "onccmanual": false | ||
} | } | ||
] | ] | ||
Строка 2622: | Строка 4071: | ||
Запрос из CRM к Oktell на смену состояния пользователя от его имени. При проведении изменений в ответ отправляется сообщение userstatechanged. | Запрос из CRM к Oktell на смену состояния пользователя от его имени. При проведении изменений в ответ отправляется сообщение userstatechanged. | ||
+ | |||
+ | Для изменения только одного из параметров состояния можно остальные не указывать (например оставлять только oncallcenter). | ||
<pre> | <pre> | ||
Строка 2632: | Строка 4083: | ||
"userstateid": 2, | "userstateid": 2, | ||
"onredirect": false, | "onredirect": false, | ||
+ | "onlunch": false, | ||
+ | "oncallcenter": false, | ||
+ | "onccmanual": false, | ||
"lunchreasonid": 120, | "lunchreasonid": 120, | ||
"lunchreasonmsg": "" | "lunchreasonmsg": "" | ||
Строка 2640: | Строка 4094: | ||
//* lunchreasonid и lunchreasonmsg - расширение для будущей статистики, устанавливают причину перерыва. | //* lunchreasonid и lunchreasonmsg - расширение для будущей статистики, устанавливают причину перерыва. | ||
id - если причина одна из стандартных. msg - если что-то уникальное юзер ввел. | id - если причина одна из стандартных. msg - если что-то уникальное юзер ввел. | ||
+ | userstateid: | ||
+ | 1 - Готов | ||
+ | 2 - Перерыв | ||
+ | 3 - Отсутствует | ||
+ | 5 - Занят | ||
</pre> | </pre> | ||
Строка 2675: | Строка 4134: | ||
"onredirect": true, | "onredirect": true, | ||
"onlunch": false, | "onlunch": false, | ||
− | "oncallcenter": false | + | "oncallcenter": false, |
+ | "onccmanual": false | ||
} | } | ||
] | ] | ||
Строка 2684: | Строка 4144: | ||
<span style="color:green"><<< '''checkuserintask'''</span> | <span style="color:green"><<< '''checkuserintask'''</span> | ||
− | Запрос из CRM в Oktell о присутствии указанного пользователя в задачах | + | Запрос из CRM в Oktell о присутствии указанного пользователя в задачах call-центра. |
<pre> | <pre> | ||
Строка 2700: | Строка 4160: | ||
<span style="color:green">>>> '''checkuserintaskresult'''</span> | <span style="color:green">>>> '''checkuserintaskresult'''</span> | ||
− | Ответ из Oktell в CRM с ответом на запрос присутствия указанного в запросе пользователя в задачах | + | Ответ из Oktell в CRM с ответом на запрос присутствия указанного в запросе пользователя в задачах колл-центра. Описание задачи в случае положительного ответа. |
<pre> | <pre> | ||
Строка 2733: | Строка 4193: | ||
"getmyuserinfo", | "getmyuserinfo", | ||
{ | { | ||
− | "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", | ||
Строка 2757: | Строка 4217: | ||
"lineid": "267F8F36-4713-4B66-81BD-019512E56E7E", | "lineid": "267F8F36-4713-4B66-81BD-019512E56E7E", | ||
"linenumber": "17374", | "linenumber": "17374", | ||
− | + | "isoperator": true | |
} | } | ||
] | ] | ||
Строка 2766: | Строка 4226: | ||
<span style="color:green"><<< '''getuserphoto'''</span> | <span style="color:green"><<< '''getuserphoto'''</span> | ||
− | Запрос из CRM в Oktell о текущем изображении (аватарке) указанного пользователя. | + | Запрос из CRM в Oktell о текущем изображении (аватарке) указанного пользователя. Можно указывать только логин (''photoownerlogin'') или только идентификатор (''photoownerid'') интересующего пользователя. |
<pre> | <pre> | ||
Строка 2885: | Строка 4345: | ||
<pre> | <pre> | ||
− | + | [ | |
− | + | "setmyuserphoto", | |
− | + | { | |
− | + | "qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F", | |
− | + | "userlogin": "Иванов", | |
− | + | "userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B", | |
− | + | "filepath": "", | |
− | + | "imagedatab64": "", | |
− | + | "filename": "" | |
− | + | } | |
− | + | ] | |
</pre> | </pre> | ||
<pre> | <pre> | ||
Строка 2934: | Строка 4394: | ||
<span style="color:green"><<< '''changepassword'''</span> | <span style="color:green"><<< '''changepassword'''</span> | ||
− | Запрос из CRM в Oktell на изменение пароля текущего авторизованного пользователя | + | Запрос из CRM в Oktell на изменение пароля текущего авторизованного пользователя. |
+ | В версиях 2.7 пароль в нижнем регистре, в версиях 2.8 пароль без изменения регистра. | ||
<pre> | <pre> | ||
Строка 3138: | Строка 4599: | ||
− | <span style="color:green">>>> ''' | + | <span style="color:green">>>> '''getflashedabonentinforesult'''</span> |
Ответ из Oktell в CRM. Возвращает информацию об абоненте, находящемся на удержании | Ответ из Oktell в CRM. Возвращает информацию об абоненте, находящемся на удержании | ||
Строка 3190: | Строка 4651: | ||
− | <span style="color:green">>>> ''' | + | <span style="color:green">>>> '''getextendedlineinforesult'''</span> |
− | Ответ из Oktell в CRM. Возвращает информацию | + | Ответ из Oktell в CRM. Возвращает информацию о текущей линии и ее оппозитных абонентах |
<pre> | <pre> | ||
Строка 3233: | Строка 4694: | ||
"isivr": false, | "isivr": false, | ||
"ivrname": "", | "ivrname": "", | ||
+ | "isroutingivr": false, | ||
+ | "ismediaivr": false, | ||
+ | "isrestartivr": false, | ||
"isautocall": false, | "isautocall": false, | ||
"number": "", | "number": "", | ||
Строка 3287: | Строка 4751: | ||
// информацию об абоненте, осуществляющем вызов текущего канала. | // информацию об абоненте, осуществляющем вызов текущего канала. | ||
</pre> | </pre> | ||
− | |||
− | |||
− | |||
====Управление переадресацией==== | ====Управление переадресацией==== | ||
Строка 3667: | Строка 5128: | ||
------------------------------------------------------------------- | ------------------------------------------------------------------- | ||
− | <span style="color:green"><<< ''' | + | <span style="color:green"><<< '''getchaincontentcustomfield'''</span> |
Запрос из CRM в Oktell на возврат комментария из контента текущей сессии, в которой участвует канал указанного пользователя. | Запрос из CRM в Oktell на возврат комментария из контента текущей сессии, в которой участвует канал указанного пользователя. | ||
Строка 3750: | Строка 5211: | ||
timestart - время начала интересующего внутридневного интервала. | timestart - время начала интересующего внутридневного интервала. | ||
timestop - время окончания интересующего внутридневного интервала. | timestop - время окончания интересующего внутридневного интервала. | ||
− | connectiontype - тип соединения (all, incoming, | + | connectiontype - тип соединения (all, incoming, outgoing, internal, conference). |
intnumber - интересующий внутренний номер. | intnumber - интересующий внутренний номер. | ||
outnumber - интересующий внешний номер. | outnumber - интересующий внешний номер. | ||
Строка 3758: | Строка 5219: | ||
comment - строка включения в комментарии. | comment - строка включения в комментарии. | ||
showcallcenter: true|false. Отображать ли коммутации call-центра. | showcallcenter: true|false. Отображать ли коммутации call-центра. | ||
− | taskid - идентификатор задачи в рамках | + | taskid - идентификатор задачи в рамках call-центра, чьи звонки интересны. |
</pre> | </pre> | ||
Строка 4163: | Строка 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> | ||
====Номерной план==== | ====Номерной план==== | ||
+ | |||
+ | ------------------------------------------------- | ||
+ | <span style="color:green">>>> '''pbxnumberstatechanged'''</span> | ||
+ | |||
+ | Сообщение из Oktell о смене состояния внутреннего номера (или группы внутренних номеров) | ||
+ | |||
+ | <pre> | ||
+ | [ | ||
+ | "pbxnumberstatechanged", | ||
+ | { | ||
+ | "qid": "5B9508DF-565B-44E1-A122-6FEB70ADA0B9", | ||
+ | "numbers": [ | ||
+ | {"num": "425", "numstateid": 3}, | ||
+ | {"num": "427", "numstateid": 2}, | ||
+ | {"num": "#82", "numstateid": 3} | ||
+ | ] | ||
+ | } | ||
+ | ] | ||
+ | </pre> | ||
+ | |||
------------------------------------------------------------------- | ------------------------------------------------------------------- | ||
Строка 4503: | Строка 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> | ||
Строка 4523: | Строка 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 | ||
}, | }, | ||
... | ... | ||
Строка 4538: | Строка 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> | ||
Строка 4638: | Строка 6374: | ||
------------------------------------------------------------------- | ------------------------------------------------------------------- | ||
− | <span style="color:green"><<< ''' | + | <span style="color:green"><<< '''getversion'''</span> |
Запрос из CRM в Oktell на возврат информации о версии сервера Oktell. | Запрос из CRM в Oktell на возврат информации о версии сервера Oktell. | ||
Строка 4675: | Строка 6411: | ||
"datedhal": "110808", | "datedhal": "110808", | ||
"buildhal": "2.15.3.2871", | "buildhal": "2.15.3.2871", | ||
− | "webserverport": | + | "webserverport": 80, |
+ | "webservertls": false | ||
} | } | ||
"alloweddbstoredprocs": { | "alloweddbstoredprocs": { | ||
Строка 4690: | Строка 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> | ||
Строка 4703: | Строка 6441: | ||
После этого вне зависимости от способа авторизации, установленного для HTTP веб-сервера Oktell, однократный вызов любого [[Серверный_HTTP_интерфейс|метода серверного веб-интерфейса]] возможен без авторизации с указанием среди параметров дополнительного служебного параметра ''temppass=A'', где A - выданный временный пароль. | После этого вне зависимости от способа авторизации, установленного для HTTP веб-сервера Oktell, однократный вызов любого [[Серверный_HTTP_интерфейс|метода серверного веб-интерфейса]] возможен без авторизации с указанием среди параметров дополнительного служебного параметра ''temppass=A'', где A - выданный временный пароль. | ||
− | Доступно для [[#Arch2|схемы интеграции 2]]. | + | Доступно для [[#Arch2|схемы интеграции 2]] и [[#Arch3|схемы интеграции 3]] в рамках индивидуальных подключений. |
<pre> | <pre> | ||
Строка 4745: | Строка 6483: | ||
Запрос из CRM в Oktell на генерацию пользовательского произвольного события всем или только указанным пользователям. | Запрос из CRM в Oktell на генерацию пользовательского произвольного события всем или только указанным пользователям. | ||
− | Может быть использовано в [[#Arch2|схеме интеграции 2]]. | + | Может быть использовано в [[#Arch2|схеме интеграции 2]] и [[#Arch3|схеме интеграции 3]] в рамках индивидуальных подключений. |
Производит массовую рассылку указанного события. Точно также как и все остальные события требует подписки. | Производит массовую рассылку указанного события. Точно также как и все остальные события требует подписки. | ||
Строка 4832: | Строка 6570: | ||
------------------------------------------------------------------- | ------------------------------------------------------------------- | ||
− | <span | + | <span id="execpredefineddbstoredproc" style="color:green"><<< '''execpredefineddbstoredproc'''</span> |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
Запрос из CRM в Oktell. Исполняет указанную хранимую процедуру в БД Oktell и возвращает данные всех сформированных в ходе выполнения наборов. | Запрос из CRM в Oktell. Исполняет указанную хранимую процедуру в БД Oktell и возвращает данные всех сформированных в ходе выполнения наборов. | ||
Доступные для исполнения процедуры содержатся в конфигурационном файле ''websocket.config'', а также могут быть возвращены методом ''getversion''. | Доступные для исполнения процедуры содержатся в конфигурационном файле ''websocket.config'', а также могут быть возвращены методом ''getversion''. | ||
+ | |||
+ | Существует специальный параметр @authorizeduserid, значение которого перед исполнением заменяется на идентификатор авторизованного пользователя. Такие процедуры нельзя исполнять от имени CRM. | ||
Не требует указания пользователя. | Не требует указания пользователя. | ||
− | |||
− | |||
<pre> | <pre> | ||
Строка 5032: | Строка 6641: | ||
------------------------------------------------------------------- | ------------------------------------------------------------------- | ||
− | <span style="color:green"><<< ''' | + | <span id="execpluginmethod" style="color:green"><<< '''execpluginmethod'''</span> |
− | Запрос из CRM в Oktell. | + | Запрос из CRM в Oktell. Исполняет указанный метод в [[Встраиваемые_plugin-модули|серверном плагине]], передавая в него параметры и возвращая результат с выходными параметрами. |
− | + | ||
− | + | ||
− | Не требует указания пользователя. | + | Не требует обязательного указания пользователя. Однако если вызов осуществляется в рамках подключения из браузера к серверу Oktell, то пользователь проставляется автоматически перед исполнением метода. |
<pre> | <pre> | ||
[ | [ | ||
− | " | + | "execpluginmethod", |
{ | { | ||
− | "qid": " | + | "qid": "7198D943-7BA9-443D-B283-55812BC82AFB", |
− | " | + | "pluginid": "44710EF2-9C5E-489E-B6CC-FD4ED34C13FE", |
− | + | "formid": "44710EF2-9C5E-489E-B6CC-FD4ED34C13FE", | |
− | + | "inputparams": { | |
− | + | "param1": "...", | |
− | + | "param2": "...", | |
− | + | ... | |
− | + | } | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | " | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | " | + | |
− | " | + | |
− | + | ||
− | + | ||
− | + | ||
} | } | ||
] | ] | ||
</pre> | </pre> | ||
<pre> | <pre> | ||
− | + | //* pluginid - идентификатор плагина. | |
− | + | //* formid - идентификатор одной из заявленных форм (методов) плагина. | |
− | + | //* inputparams - список значений для заявленных плагином входных параметров выбранной формы (метода). | |
− | + | В качестве значений параметров могут быть json структуры | |
− | + | (октелл осуществляет преобразование в строку самостоятельно). | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | //* | + | |
− | + | ||
− | //* | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | //* | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
</pre> | </pre> | ||
− | <span style="color:green">>>> ''' | + | <span style="color:green">>>> '''execpluginmethodresult'''</span> |
− | Ответ из Oktell в CRM. Возвращает результат исполнения | + | Ответ из Oktell в CRM. Возвращает результат исполнения метода в серверном плагине. |
<pre> | <pre> | ||
[ | [ | ||
− | " | + | "execpluginmethodresult", |
{ | { | ||
− | "qid": " | + | "qid": "7198D943-7BA9-443D-B283-55812BC82AFB", |
− | " | + | "result": 1, |
+ | "error": 0, | ||
+ | "errormsg": "", | ||
+ | "outputparams": { | ||
+ | "outputdata": "...", | ||
+ | ... | ||
+ | } | ||
} | } | ||
] | ] | ||
</pre> | </pre> | ||
<pre> | <pre> | ||
− | //* | + | //* outputparams - список значений заявленных плагином выходных переменных выбранной формы (метода). |
− | + | В качестве значений параметров могут быть json структуры. | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
</pre> | </pre> | ||
Строка 5199: | Строка 6699: | ||
<span style="color:green"><<< '''ping'''</span> | <span style="color:green"><<< '''ping'''</span> | ||
− | Запрос из CRM в Oktell. Периодически пробивает канал связи, напоминая о жизнеспособности подключения. | + | Запрос из CRM в Oktell. Периодически пробивает канал связи, напоминая о жизнеспособности подключения. Требуется для [[#Arch2|Схемы интеграции 2]] и [[#Arch3|Схемы интеграции 3]] в рамках индивидуальных подключений. Для [[#Arch1|Схемы интеграции 1]] необязательно. |
Не требует указания пользователя. | Не требует указания пользователя. | ||
Строка 5231: | Строка 6731: | ||
<span style="color:green">'''unsubscribeevent'''</span> | <span style="color:green">'''unsubscribeevent'''</span> | ||
− | Запрос из CRM в Oktell. Производит | + | Запрос из CRM в Oktell. Производит соответственно подписку и отписку на указанные события. |
− | Доступно и требуется только для [[#Arch2|схемы интеграции 2]]. | + | Доступно и требуется только для [[#Arch2|схемы интеграции 2]] и [[#Arch3|схемы интеграции 3]] в рамках индивидуальных подключений. |
− | В [[# | + | |
+ | В [[#Arch1|схеме интеграции 1]] события поступают в полном объеме, часть из них объединяются и отправляются на сервер WebCRM без привязки к пользователю; ожидается, что сервер WebCRM самостоятельно размножит их. К таким событиям относятся, например ''pbxnumberstatechanged'', ''conflistchanged'' и им подобные. Остальные же направляются с привязкой к пользователю и только в случае, когда пользователь авторизован из-под CRM. | ||
<pre> | <pre> | ||
Строка 5271: | Строка 6772: | ||
:* pbxnumberlistmodified | :* pbxnumberlistmodified | ||
:* shownotifymessage | :* shownotifymessage | ||
+ | :* voicemailreceived | ||
:* usertextmessagereceived | :* usertextmessagereceived | ||
:* usertextmessageviewed | :* usertextmessageviewed | ||
− | :* | + | :* chatcreated |
+ | :* chatnamechanged | ||
+ | :* chatmemberadded | ||
+ | :* chatmemberremoved | ||
+ | :* chatmessage | ||
+ | :* chatmessageviewed | ||
+ | :* chat (совокупность всех методов ''chat*'') | ||
:* userstatechanged | :* userstatechanged | ||
+ | :* linestatechanged | ||
+ | :* chainstatechanged | ||
+ | :* flashstatechanged | ||
:* phoneevent_acmcallstarted | :* phoneevent_acmcallstarted | ||
:* phoneevent_acmcallstopped | :* phoneevent_acmcallstopped | ||
Строка 5286: | Строка 6797: | ||
:* phoneevent_faxstopped | :* phoneevent_faxstopped | ||
:* phoneevent_faxreceived | :* phoneevent_faxreceived | ||
− | :* | + | :* phoneevent (совокупность всех методов ''phoneevent_*'') |
− | + | ||
− | + | ||
:* conferenceevent | :* conferenceevent | ||
:* conflistchanged | :* conflistchanged | ||
Строка 5299: | Строка 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 | ||
− | |||
− | |||
− | |||
− | |||
<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'' соответственно. | ||
Строка 5320: | Строка 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.
Содержание
- 1 Краткое описание возможностей телефонии Oktell
- 2 Схема интеграции 1 (межсерверное соединение)
- 3 Схема интеграции 2 (клиент-серверное соединение)
- 4 Схема интеграции 3 (межсерверное и клиент-серверное соединение)
- 5 Привязка пользователя к телефону
- 6 Взаимодействие по каналу связи
- 7 Динамическое взаимодействие
- 8 Список методов общего интерфейса
- 8.1 Представление систем друг другу
- 8.2 Методы динамического взаимодействия
- 8.3 Обмен данными об активных пользователях
- 8.4 Обмен состояниями пользователей
- 8.5 Текстовый чат v.1 (версии до 2.8.130909)
- 8.6 Текстовый чат v.2 (версии начиная с 2.8.130909)
- 8.7 Голосовая почта
- 8.8 Всплывающие уведомления
- 8.9 Сообщения от АТС
- 8.10 Команды к АТС
- 8.11 Запросы к АТС общего характера
- 8.12 Запуск служебного сценария
- 8.13 Конференц-связь
- 8.14 События из Oktell, касающиеся конференций
- 8.15 Состояния пользователей и линий
- 8.16 Управление переадресацией
- 8.17 Контент звонка
- 8.18 Журнал звонков
- 8.19 Номерной план
- 8.20 Управление задачами call-центра
- 8.21 Преобразования
- 8.22 Служебные методы
- 8.23 Прочие
Краткое описание возможностей телефонии Oktell
Стандартный функционал Oktell предоставляет пользователям:
- доступ к управлению телефонами (позвонить, переключить, отклонить звонок, организовать конференцию, пригласить других участников в конференцию, подключиться к разговору в режиме прослушивания, помощи и т.д.).
- доступ к управлению состояниями пользователей (перерыв - чтобы поток входящих звонков не поступал, занят - чтобы отметить факт обработки звонка, переадресация - чтобы все звонки на пользователя перенаправлялись в соответствии с настроенными правилами, готов - чтобы вернуться к обычному режиму).
- информацию о текущем состоянии телефонов, внутренних номеров, пользователей с т.з. занятости в операциях телефонии.
- информацию о поступающем звонке, абоненте
- доступ к статистике разговоров (по правам).
- доступ к записям разговоров (по правам).
- доступ к информации об ожидающей очереди абонентов в реальном времени.
- доступ к контентам сессий и линий.
- доступ к управлению режимом переадресации.
- возможность запуска служебных сценариев.
и т.д.
В рамках настройки сценариев Oktell, имеется возможность отправлять синхронные и асинхронные запросы в WebCRM (фактически исполнять методы по событиям в Oktell) и получать ответы и применять их в рамках проведения маршрутизации или любых других действий, реализуемых в сценариях. Например:
- Выяснить, какому клиенту/контакту принадлежит определившийся номер телефона или введенный им вручную с помощью DTMF-набора номер договора, отфильтровать по черному списку, переключить вызов на ответственного за работу с этим контактом пользователя, если пользователя нет в системе - переключить на секретаря, а если контакт новый - соединить с отделом продаж. Если ответственный пользователь занят, предложить оставить голосовое сообщение для VIP клиентов.
- В момент поступления звонка открыть карточку у пользователя, которому направляется звонок. Закрыть ее автоматически, если пользователь так и не снял трубку (а снял кто-то другой, или звонок потерялся).
- Выполнить какое-то важное с т.з. WebCRM действие в случае, например, если пользователь оставил заказ на встречный звонок, занести его в список задач.
Именно сценарии придают жизнь Oktell и его сервисам.
Среди событий Oktell, отрабатываемых в сценариях:
- поступление внешнего звонка.
- завершение звонка.
- переключение абонента на пользователя, группу пользователей, задачу call-центра.
- любое из интересующих явлений в ходе обработки звонка (от преобразования номера абонента в нужный формат и сверки времени поступления звонка до обработки контента звонка после завершения и выявления там факта состоявшейся конференции).
- наступление определенного времени.
- периодический запуск по таймеру.
- поступление/отправка e-mail.
- поступление/отправка sms/icq/jabber.
- контрольные события call-центра (оператор первым положил трубку, оператор слишком долго находится в перерыве или поствызывной обработке, число операторов в задаче меньше минимально допустимого, число абонентов в очереди задачи больше допустимого и т.д.)
- ручной запуск сценария по инициативе пользователя или WebCRM.
- исходящий звонок от пользователя
- поступление голосовой почты
- появление где-то в базе данных интересующего события (например появление новой записи в таблице абонентов)
- появление где-то на веб-ресурсе интересующего события (например температура на улице опустилась ниже нуля)
Схема интеграции 1 (межсерверное соединение)
Сервер Oktell взаимодействует с телефонами и с веб-сервером WebCRM.
Веб-сервер WebCRM взаимодействует ответно с сервером Oktell и с браузерами (клиентами).
Между сервером Oktell и веб-сервером WebCRM существует только один канал для двустороннего обмена сообщениями.
Установка соединения может производиться как сервером Oktell, так и веб-сервером WebCRM. В случае разрыва соединения сторона-инициатор вновь организует подключение.
- При выборе соединения со стороны сервера WebCRM в настройках Web-Socket Oktell должен быть выбран один из режимов «CRM к Oktell» с указанием требуемого способа авторизации.
- При выборе соединения со стороны сервера 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 (клиент-серверное соединение)
Сервер 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 (межсерверное и клиент-серверное соединение)
Является комбинацией схемы 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 и браузером) идет по общему каналу путем двустороннего обмена сообщениями между сторонами.
Взаимодействие на транспортном уровне происходит по Web-Socket протоколу. Поддерживаются версии
В зависимости от выбранной схемы интеграции и выбранного в настройках направления и способа подключения одна из сторон производит подключение (Oktell к серверу WebCRM, сервер WebCRM к Oktell, клиенты WebCRM к Oktell). Рукопожатие (handshake) на установление Web-Socket соединения предлагается также стороной-инициатором. Подробнее. Рукопожатие является HTTP запросом и при необходимости поддерживает прохождение Basic или Digest-авторизации. В качестве логина и пароля выступают указанные в настройках Web-Socket значения. Описание процедуры рукопожатия описывается в документации к каждой версии протокола Web-Socket.
Все сообщения имеют идентификаторы для организации серий типа «запрос-ответ» (поле qid). Сообщения могут адресоваться конкретному пользователю или относиться к общим. В первом случае в сообщении должен присутствовать идентификатор, позволяющий различать одинаковые, но направляемые от разных пользователей команды из WebCRM в Oktell и наоборот соответственно.
Возможные направления и типы сообщений:
- Oktell генерирует события.
- Oktell производит запросы к веб-системе. WebCRM отправляет ответы на получаемые запросы.
- WebCRM производит запросы к Oktell. В том числе и команды. Oktell отправляет ответы на запросы.
В случае 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:
Сообщения длиной более 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 - частный случай методов, позволяющий выделить в отдельную категорию работу с карточками. Смысл и способ работы тот же самый. Тем не менее карточки могут быть представлены как методы.
Методы:
- >>> getavailablemethods
- <<< availablemethods
- >>> executemethod
- <<< methodresult
- >>> cancelmethod
- >>> executemethodwaitaborted
Формы:
- >>> getavailableforms
- <<< availableforms
- >>> showform
- >>> closeform
- <<< formresult
- >>> 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.
Логин используется в частности для привязки пользователя к конкретному телефонному аппарату. Возможны разные варианты привязки:
- Для конкретного телефона в карте сети Oktell задается конкретный пользователь WebCRM, при логине производится автоматическая привязка (если телефону назначен также пользователь по умолчанию, то он отключается). При выходе выходе пользователя из WebCRM происходит обратный процесс. При этом телефоном считается учетная запись (комбинация логин-пароль или IP-адрес устройства, в зависимости от типа регистрации), и фактически разные устройства могут в течение времени принимать эти значения.
- Во время логина 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