https://wiki.oktell.ru/api.php?action=feedcontributions&user=Peter&feedformat=atomOktell - Вклад участника [ru]2024-03-29T11:14:32ZВклад участникаMediaWiki 1.23.1%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%B0%D1%80%D1%82%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8Динамическое управление картой сети2014-08-29T10:15:03Z<p>Peter: </p>
<hr />
<div>Компонент [[Общие компоненты сценариев#UserState|Статус объекта]] позволяет управлять составом карты сети с помощью [http://ru.wikipedia.org/wiki/JSON JSON]-форматированных команд. Это может быть полезно для решения интеграционных задач, в многосерверных решениях с внешней логикой управления, а также в проектах с постоянно изменяющимися параметрами карты сети.<br />
<br />
<br />
__TOC__<br />
<br />
=== Описание ===<br />
<br />
Определенным образом формируемые параметры позволяют:<br />
* Добавлять шлюзы (операция ''gate-add'').<br />
* Добавлять потоки (операция ''stream-add'').<br />
* Добавлять телефоны (операция ''phone-add'').<br />
* Удалять шлюзы со всеми потоками (операция ''gate-del'').<br />
* Удалять отдельные потоки (операция ''stream-add'').<br />
* Удалять отдельные телефоны (операция ''phone-add'').<br />
* Изменять параметры шлюзов (операция ''gate-set'').<br />
* Изменять параметры потоков (операция ''stream-set'').<br />
* Изменять параметры телефонов (операция ''phone-set'').<br />
* Удалять единовременно все динамические объекты (команда ''clear'').<br />
* Изменять на постоянной основе свойства конфигурации аналогично модулю "Параметры аппаратуры" (команда ''hw-set'').<br />
<br />
Добавленные динамические объекты не появляются среди отображаемых объектов в [[Карта сети|карте сети]], но доступны в [[Мониторинг|мониторинге линий]], [[Настройки оборудования|параметрах аппаратуры]], и прочих модулях системы, связанных с исполнением в реальном времени.<br />
<br />
Жизненный цикл динамических объектов протекает от момента создания до момента удаления или перезапуска системы. Таким образом при необходимости формирования постоянных настроек карты сети с помощью динамических объектов, необходимо реализовывать однократное исполнение служебной задачи, загружающей требуемые динамические объекты всякий раз после перезапуска системы. Гарантировать однократность можно в том числе с помощью [[Переменные|глобальных переменных]] сценариев.<br />
<br />
После исполнения любой операции, связанной с динамическими объектами, автоматически происходит перезагрузка сервера состояний. Это затратная операция. В этой связи настоятельно рекомендуется комбинировать все операции в один запрос, и не исполнять их в цикле одну за другой.<br />
<br />
При создании динамических объектов, создаются динамические линии с идентификаторами, задаваемыми в запросе. Формирование этих уникальных идентификаторов возложено на администратора, создающего сценарий, поскольку привязка к ним может потребоваться в бизнес-логике реализуемого процесса для решения внешних задач.<br />
Ожидается, что идентификаторы будут уникальны.<br />
<br />
Создание динамических потоков в шлюзах может сопровождаться автоматическим созданием направления, состоящего из всех вновь-созданных линий потока.<br />
<br />
При создании объектов и изменении их параметров могут указываться как настройки из [[Карта сети|«Карты сети»]], так и настройки из [[Настройки оборудования|«Параметров аппаратуры»]].<br />
<br />
<br />
<br />
=== Лицензирование ===<br />
<br />
<br />
При добавлении динамических объектов расходуются свободные лицензии на соответствующие линии. При удалении объектов лицензии высвобождаются. Таким образом можно использовать конкурентный механизм в отличие от [[Карта сети|статической карты сети]]. <br />
<br />
В случае, если после добавления очередного объекта итоговое количество линий превосходит количество линий в лицензии, сервер произведет стандартную процедуру отключения части линий по своему усмотрению (преимущественно выключенные, неактивные).<br />
<br />
<br />
<br />
=== Формат команд ===<br />
<br />
<br />
Команды управления динамической картой сети передаются в строковом виде в формате [http://ru.wikipedia.org/wiki/JSON JSON].<br />
<br />
Структура команд, передаваемых серверу через компонент сценария в общем виде выглядит следующим образом:<br />
<br />
<pre><br />
{<br />
"method":"complex",<br />
"actions":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
<br />
Команда полной очистки динамических объектов <br />
<br />
<pre><br />
{<br />
"method":"clear"<br />
}<br />
</pre><br />
<br />
<br />
<br />
Каждая команда представляет собой одну или несколько операций, возможно различных. В простейшем случае в одной команде содержится одна операция.<br />
В каждой операции может присутствовать один или несколько объектов. Так, операция добавления шлюзов может содержать мета-данные нескольких шлюзов, операция добавления потоков - несколько потоков, операция добавления телефонов - несколько SIP-телефонов. То же самое с удалением и изменением параметров.<br />
<br />
<br />
<br />
=== Структура операций ===<br />
<br />
<br />
Структура одной операции добавления шлюза:<br />
<br />
<pre><br />
{<br />
"method":"gate-add",<br />
"gates":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''gates'' могут перечисляться несколько шлюзов. Каждый шлюз представляет собой совокупность настроек: обязательных и необязательных параметров. Администратор, производящий настройку, должен гарантировать уникальность идентификаторов, а также отличия в настройках шлюзов.<br />
<br />
При добавлении шлюзов можно сразу в той же операции определить потоки, соответствующие каждому шлюзу. Для этого среди свойств шлюза необходимо размещение свойства ''streams'' с информацией, эквивалентной операции создания потока. Управление отдельными потоками динамического шлюза может производиться и позже.<br />
<br />
Структура операции изменения шлюза отличается значением ключа ''method'' (''gate-set''), а также невозможностью одновременно изменять параметры потоков внутри шлюза и изменять тип регистрации (''regtype''). <br />
<br />
Операция удаления шлюза (''gate-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении шлюза удаляются все его потоки, линии и динамические направления, с ними связанные.<br />
<br />
<br />
<br />
Структура одной операции добавления потока:<br />
<br />
<pre><br />
{<br />
"method":"stream-add",<br />
"gates":[<br />
{<br />
"id":"_guid_шлюза_",<br />
"streams":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''gates'' могут перечисляться несколько шлюзов. Каждый шлюз должен содержать идентификатор и набор добавляемых потоков (''streams''), другие его свойства игнорируются. Создаваемые потоки привязываются к содержащим их шлюзам. Каждый поток в наборе представляет собой совокупность настроек: обязательных и необязательных параметров.<br />
<br />
Структура операции изменения потока отличается значением ключа ''method'' (''stream-set'').<br />
<br />
Операция удаления потока (''stream-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении потока удаляются динамическое направление и все линии, с ним связанные.<br />
<br />
<br />
<br />
<br />
Структура одной операции добавления SIP-телефона:<br />
<br />
<pre><br />
{<br />
"method":"phone-add",<br />
"phones":[<br />
{<br />
"id":"_guid_телефона_",<br />
...<br />
},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''phones'' могут перечисляться несколько телефонов. Каждый телефон представляет собой совокупность настроек: обязательных и необязательных параметров. Администратор, производящий настройку, должен гарантировать уникальность идентификаторов, а также уникальность и '''сложность''' авторизационных параметров телефонов.<br />
<br />
Структура операции изменения телефона отличается значением ключа ''method'' (''phone-set'').<br />
<br />
Операция удаления потока (''phone-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении потока удаляются динамическое направление и все линии, с ним связанные.<br />
<br />
<br />
=== Свойства объектов ===<br />
<br />
Ниже приводится список свойств различных объектов, используемый при создании. Свойства разделены на группы: обязательные свойства при создании объекта, необязательные свойства при создании объекта, у которых существуют значения по умолчанию, а также внутренние SIP-свойства объектов, доступные также в модуле [[Настройки оборудования|«Параметры аппаратуры»]].<br />
<br />
<br />
<br />
==== Шлюзы ====<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">01010101-0101-0101-0101-010101010101</span>" - Guid-идентификатор шлюза. <br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicGate</span>" - Название шлюза для отображения в модуле [[Настройки оборудования|«Параметры аппаратуры»]].<br />
* "<span style="color:red;">regtype</span>":<span style="color:gray;">2</span> - Тип регистрации (0 - без регистрации, 1 - регистрация на сервере, 2 - регистрация на шлюзе).<br />
<br />
Обязательные параметры (кроме шлюзов с регистрацией на сервере):<br />
<br />
* "<span style="color:red;">address</span>":"<span style="color:gray;">192.168.0.1</span>" - Доменное имя, подставляемое в запрос.<br />
* "<span style="color:red;">sipproxyaddress</span>":"<span style="color:gray;">192.168.0.1:5060</span>" - Адрес и порт удаленного узла, на который отправлять пакеты.<br />
<br />
<br />
Необязательные параметры:<br />
<br />
* "<span style="color:red;">expire</span>":<span style="color:gray;">3600</span> - Период регистрации в секундах для шлюзов с внешней регистрацией. По умолчанию ''3600''.<br />
* "<span style="color:red;">freegate</span>":<span style="color:gray;">false</span> - Для шлюза без регистрации признак разрешения обработки неизвестных входящих. В системе не должно быть более одного шлюза для приема неизвестных входящих. По умолчанию ''false''.<br />
* "<span style="color:red;">aliases</span>":["<span style="color:gray;">Domain1</span>", "<span style="color:gray;">Domain2</span>", "<span style="color:gray;">212.212.121.121</span>"] - Список дополнительных доменных имен, которые ассоциируются со шлюзом при поступлении входящих запросов. По умолчанию список пуст.<br />
<br />
<br />
Дополнительные параметры SIP:<br />
<br />
* "<span style="color:red;">interface-address</span>":"<span style="color:gray;">default</span>" - Сетевой интерфейс сервера (или ''default'' - автоопределение). По умолчанию ''default''.<br />
* "<span style="color:red;">search-in-from</span>":"<span style="color:gray;">0</span>" - Поиск соответствия между аккаунтом и входящим INVITE (0 - contact, 1 - contact+from). По умолчанию ''0''.<br />
* "<span style="color:red;">def-caller-id</span>":"<span style="color:gray;">1234567</span>" - Источник определения CallerId (0 - From:URI, 1 - From:DisplayName, 2 - Contact:URI, 3 - INVITE целиком). По умолчанию ''0''.<br />
* "<span style="color:red;">disabled-answer</span>":"<span style="color:gray;">503</span>" - SIP-ответ при вызове на отключенный поток.<br />
* "<span style="color:red;">declined-answer</span>":"<span style="color:gray;">486</span>" - SIP-ответ при отсутствии свободных транков.<br />
* "<span style="color:red;">error-answer</span>":"<span style="color:gray;">500</span>" - SIP-ответ при ошибке резервирования транка.<br />
* "<span style="color:red;">disconnect-answer</span>":"<span style="color:gray;">480</span>" - SIP-ответ при отказе сценария IVR.<br />
<br />
<br />
<br />
==== Потоки ====<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">12341234-1234-1234-1234-123412341234</span>" - Guid-идентификатор потока.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicStream</span>" - Название потока для отображения.<br />
* "<span style="color:red;">displayname</span>":"<span style="color:gray;">stream1</span>" - SIP DisplayName.<br />
* "<span style="color:red;">username</span>":"<span style="color:gray;">stream1</span>" - SIP UserName.<br />
* "<span style="color:red;">login</span>":"<span style="color:gray;">stream1</span>" - SIP Login.<br />
* "<span style="color:red;">password</span>":"<span style="color:gray;">u74S3iiB</span>" - SIP Password.<br />
* "<span style="color:red;">lines</span>":[{...}, ..., {...}] - список новых линий с параметрами, соответствующих потоку (рассмотрено ниже).<br />
<br />
<br />
Необязательные параметры<br />
<br />
* "<span style="color:red;">defaultcallerid</span>":"<span style="color:gray;">1234567</span>" - Подставляемый по умолчанию CallerId.<br />
* "<span style="color:red;">codecs</span>":[<span style="color:gray;">0</span>, <span style="color:gray;">1</span>] - Список используемых кодеков через запятую в порядке уменьшения приоритета (возможные значения: 0-711u, 1-711a, 2-gsm, 3-729). По умолчанию ''[0, 1]''.<br />
* "<span style="color:red;">numbers</span>":["<span style="color:gray;">account1</span>", "<span style="color:gray;">account2</span>"] - Список дополнительных номеров для ассоциации входящих звонков с потоком. По умолчанию список пуст.<br />
* "<span style="color:red;">dialmode</span>":<span style="color:gray;">0</span> - Способ набора номеров для шлюзов с регистрацией на сервере (0-сначала аккаунт потом номер, 1-сразу номер). По умолчанию ''0''.<br />
* "<span style="color:red;">route</span>":{...} - Свойства направления, которое будет создано и привязано к линиям (рассмотрено ниже).<br />
<br />
<br />
Свойства линий:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">79797979-7979-7979-7979-797979797979</span>" - Guid-идентификатор линии.<br />
* "<span style="color:red;">caption</span>":"<span style="color:gray;">LineCaption</span>" - Имя линии для отображения.<br />
* "<span style="color:red;">code</span>":"<span style="color:gray;">LineCode</span>" - Код линии.<br />
<br />
<br />
Свойства направления:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">68686868-6868-6868-6868-686868686868</span>" - Guid-идентификатор направления.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">RouteName</span>" - Название направления.<br />
* "<span style="color:red;">description</span>":"<span style="color:gray;">Route description</span>" - Описание направления.<br />
* "<span style="color:red;">code</span>":"<span style="color:gray;">routecode</span>" - Код направления (для указания в сценариях).<br />
* "<span style="color:red;">commandtype</span>":"<span style="color:gray;">0</span>" - Режим преобразования номера перед набором (0 - нет, 1 - выражение, 2 - служебный сценарий).<br />
* "<span style="color:red;">command</span>":"<span style="color:gray;"></span>" - Выражение или название служебного сценария для преобразования номера.<br />
<br />
<br />
<div id="sipstreamprops"></div><br />
Дополнительные параметры SIP:<br />
<br />
* "<span style="color:red;">enabled</span>":<span style="color:gray;">0</span> - Включен/выключен.<br />
* "<span style="color:red;">expires</span>":<span style="color:gray;">0</span> - Максимальный период регистрации в секундах для шлюзов с регистрацией на сервере, 0 - не ограничено. По умолчанию ''3600''.<br />
* "<span style="color:red;">replace-user-name</span>":<span style="color:gray;">0</span> - Место подстановки набранного номера при исходящем вызове (0 - To+RequestURI, 1 - To, 2 - RequestURI). По умолчанию ''0''. <br />
* "<span style="color:red;">dtmftype</span>":<span style="color:gray;">0</span> - Способ отправки DTMF (0 - rfc 2833, 1 - SIP INFO, 2 - InBand). По умолчанию ''0''.<br />
* "<span style="color:red;">enable-inband-dtmf</span>":<span style="color:gray;">0</span> - Включение детектора звукового DTMF во входящем rtp-потоке (0 -выключен, 1 - включен). По умолчанию ''0'', так как операция ресурсо-затратная.<br />
* "<span style="color:red;">wait-ack</span>":<span style="color:gray;">1</span> - Ожидать поступления сообщения ACK перед продолжением обработки входящего звонка (0 - нет, 1 - да). По умолчанию ''1''.<br />
* "<span style="color:red;">can-reinvite</span>":<span style="color:gray;">0</span> - Разрешить изменять параметры связи во время коммутации (0 - нет, использовать транскодинг; 1 - да). По умолчанию ''1''.<br />
* "<span style="color:red;">fax-enable</span>":<span style="color:gray;">0</span> - Разрешить прием/передачу факсов T.30 (0 - нет, 1-да). По умолчанию 0.<br />
* "<span style="color:red;">fax-outgoing-timeout</span>":<span style="color:gray;">60</span> - Время ожидания ответа факса в секундах при исходящем сеансе. По умолчанию ''60''.<br />
* "<span style="color:red;">fax-enable-ecm</span>":<span style="color:gray;">1</span> - Error Correction Mode (ECM) для факсов (0 - выключено, 1-включено). По умолчанию ''1''.<br />
* "<span style="color:red;">use-remote-address</span>":<span style="color:gray;">1</span> - Адрес назначения для RTP трафика (0 - адрес/порт из SDP, 1 - адрес/порт отправителя). По умолчанию ''1''.<br />
* "<span style="color:red;">g711-size</span>":<span style="color:gray;">0</span> - Размен звукового пакета при отправке RTP данных в кодеке 711a/711u (0 - 40мс, 1 - 20мс). По умолчанию ''1''.<br />
<br />
<br />
<br />
==== Телефоны ====<br />
<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">35353535-3535-3535-3535-353535353535</span>" - Guid-идентификатор телефона и связанной с ним линии.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicPhone</span>" - Название телефона для отображения.<br />
* "<span style="color:red;">address</span>":"<span style="color:gray;">192.168.0.231:5060</span>" - Адрес устройства для работы в режиме без регистрации.<br />
* "<span style="color:red;">username</span>":"<span style="color:gray;">user</span>" - SIP UserName.<br />
* "<span style="color:red;">login</span>":"<span style="color:gray;">phone</span>" - SIP Login (по умолчанию совпадает с SIP UserName).<br />
* "<span style="color:red;">password</span>":"<span style="color:gray;">7thNx2wf</span>" - SIP Password.<br />
<br />
<br />
Необязательные параметры: <br />
<br />
* "<span style="color:red;">codecs</span>":[<span style="color:gray;">0</span>, <span style="color:gray;">1</span>] - Список используемых кодеков через запятую в порядке уменьшения приоритета (возможные значения: 0-711u, 1-711a, 2-gsm, 3-729). По умолчанию ''[0, 1]''.<br />
* "<span style="color:red;">defaultuserid</span>":"<span style="color:gray;">84848484-8484-8484-8484-848484848484</span>" - Guid-идентификатор пользователя, привязанного к телефону как [[Свойства компонентов#SipPhone|«пользователь по умолчанию»]]. По умолчанию без привязки.<br />
* "<span style="color:red;">websocketuserid</span>":"<span style="color:gray;">84848484-8484-8484-8484-848484848484</span>" - Guid-идентификатор пользователя, привязанного к телефону как [[Свойства компонентов#SipPhone|«пользователь webcrm»]]. По умолчанию без привязки.<br />
* "<span style="color:red;">citystraight</span>":<span style="color:gray;">-1</span> - (-1 - по умолчанию БД, 0 - нет, 1 - да). По умолчанию ''-1''.<br />
* "<span style="color:red;">busymode</span>":<span style="color:gray;">-1</span> - Режим отбоя (-1 - по умолчанию БД, 0 - SIP-disconnect, 1 - генерировать короткие гудки). По умолчанию ''-1''.<br />
* "<span style="color:red;">translit</span>":<span style="color:gray;">-1</span> - Производить транслитерацию (-1 - согласно общим настройкам, 0 - нет, 1 - да). По умолчанию ''-1''.<br />
* "<span style="color:red;">linecode</span>":"<span style="color:gray;">DynamicPhoneCode</span>" - Код линии.<br />
* "<span style="color:red;">department</span>":"<span style="color:gray;">57575757-5757-5757-5757-575757575757</span>" - Идентификатор существующего подразделения для привязки и отображения в разделе «Сотрудники». <br />
<br />
<br />
Дополнительные параметры SIP аналогичны [[#sipstreamprops|параметрам потоков]].<br />
<br />
<br />
=== Изменение параметров аппаратуры на постоянной основе ===<br />
<br />
<br />
Изменение параметров аппаратуры может потребоваться, например, для изменения параметров внешнего адреса в разделе SIP-сервера при наладке автоматической схемы переключения на резервный интернет из-под NAT. Для изменения доступны все параметры всех разделов модуля "Параметры аппаратуры".<br />
<br />
Применение осуществляется только в случае, если новые значения отличаются от уже установленных и сохраненных в БД. При этом изменения корректируются и в БД, так что при следующей загрузке сервера будет произведена загрузка свойств конфигурации с измененными значениями.<br />
<br />
Структура команды изменения параметров конфигурации аппаратуры:<br />
<br />
<pre><br />
{<br />
"method":"hw-set",<br />
"items":[<br />
{<br />
"key":"newvalue",<br />
...<br />
},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
* ''key'' - название параметра, подлежащего замене<br />
* ''newvalue'' - новое значение<br />
<br />
Доступные для изменения параметры:<br />
<br />
* "<span style="color:red;">sip/p:interface</span>":"<span style="color:gray;">sip:*:5060</span>" - интерфейс и порт для подъема SIP-сервера (применяется только при перезагрузке сервера или HAL).<br />
* "<span style="color:red;">sip/p:domain-list</span>":"<span style="color:gray;">x.oktell.ru y.oktell.ru</span>" - дополнительные доменные имена, SIP запросы на которые сервер должен обрабатывать.<br />
* "<span style="color:red;">sip/p:if192.168.0.218</span>":"<span style="color:gray;"></span>" - Настройка для работы конкретного сетевого интерфейса сервера за NAT/ ''address:nat_addr port:nat_port [domain:nat_dns_name]''. Обратите внимание, что название ключа динамически зависит от адресов серверных интерфейсов.<br />
<br />
<br />
Чтобы выяснить key нужного параметра, следует в конфигурационном файле сервера добавить ключ (или изменить значение) ''<add key="TraceHWParams" value="1"/>'', после чего перезагрузить сервер и открыть модуль "Администрирование. Параметры аппаратуры". В каталоге сервера появится файл hw_out_*.xml с настройками параметров аппаратуры. Эта структура представляет собой исчерпывающий конфиг настройки, где все ключи уникальны и заданы атрибутом ''name'' в тегах. В качестве ''key'' необходимо указать значение атрибута ''name''.<br />
<br />
<br />
<br />
=== Пример сценария ===<br />
<br />
[[Special:FilePath/(Example) Dynamic SIP.oscr|(Example) Dynamic SIP.oscr]]</div>Peter%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%B0%D1%80%D1%82%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8Динамическое управление картой сети2014-07-30T15:18:17Z<p>Peter: </p>
<hr />
<div>Компонент [[Общие компоненты сценариев#UserState|Статус объекта]] позволяет управлять составом карты сети с помощью [http://ru.wikipedia.org/wiki/JSON JSON]-форматированных команд. Это может быть полезно для решения интеграционных задач, в многосерверных решениях с внешней логикой управления, а также в проектах с постоянно изменяющимися параметрами карты сети.<br />
<br />
<br />
__TOC__<br />
<br />
=== Описание ===<br />
<br />
Определенным образом формируемые параметры позволяют:<br />
* Добавлять шлюзы (операция ''gate-add'').<br />
* Добавлять потоки (операция ''stream-add'').<br />
* Добавлять телефоны (операция ''phone-add'').<br />
* Удалять шлюзы со всеми потоками (операция ''gate-del'').<br />
* Удалять отдельные потоки (операция ''stream-add'').<br />
* Удалять отдельные телефоны (операция ''phone-add'').<br />
* Изменять параметры шлюзов (операция ''gate-set'').<br />
* Изменять параметры потоков (операция ''stream-set'').<br />
* Изменять параметры телефонов (операция ''phone-set'').<br />
* Удалять единовременно все динамические объекты (команда ''clear'').<br />
* Изменять на постоянной основе свойства конфигурации аналогично модулю "Параметры аппаратуры" (команда ''hw-set'').<br />
<br />
Добавленные динамические объекты не появляются среди отображаемых объектов в [[Карта сети|карте сети]], но доступны в [[Мониторинг|мониторинге линий]], [[Настройки оборудования|параметрах аппаратуры]], и прочих модулях системы, связанных с исполнением в реальном времени.<br />
<br />
Жизненный цикл динамических объектов протекает от момента создания до момента удаления или перезапуска системы. Таким образом при необходимости формирования постоянных настроек карты сети с помощью динамических объектов, необходимо реализовывать однократное исполнение служебной задачи, загружающей требуемые динамические объекты всякий раз после перезапуска системы. Гарантировать однократность можно в том числе с помощью [[Переменные|глобальных переменных]] сценариев.<br />
<br />
После исполнения любой операции, связанной с динамическими объектами, автоматически происходит перезагрузка сервера состояний. Это затратная операция. В этой связи настоятельно рекомендуется комбинировать все операции в один запрос, и не исполнять их в цикле одну за другой.<br />
<br />
При создании динамических объектов, создаются динамические линии с идентификаторами, задаваемыми в запросе. Формирование этих уникальных идентификаторов возложено на администратора, создающего сценарий, поскольку привязка к ним может потребоваться в бизнес-логике реализуемого процесса для решения внешних задач.<br />
Ожидается, что идентификаторы будут уникальны.<br />
<br />
Создание динамических потоков в шлюзах может сопровождаться автоматическим созданием направления, состоящего из всех вновь-созданных линий потока.<br />
<br />
При создании объектов и изменении их параметров могут указываться как настройки из [[Карта сети|«Карты сети»]], так и настройки из [[Настройки оборудования|«Параметров аппаратуры»]].<br />
<br />
<br />
<br />
=== Лицензирование ===<br />
<br />
<br />
При добавлении динамических объектов расходуются свободные лицензии на соответствующие линии. При удалении объектов лицензии высвобождаются. Таким образом можно использовать конкурентный механизм в отличие от [[Карта сети|статической карты сети]]. <br />
<br />
В случае, если после добавления очередного объекта итоговое количество линий превосходит количество линий в лицензии, сервер произведет стандартную процедуру отключения части линий по своему усмотрению (преимущественно выключенные, неактивные).<br />
<br />
<br />
<br />
=== Формат команд ===<br />
<br />
<br />
Команды управления динамической картой сети передаются в строковом виде в формате [http://ru.wikipedia.org/wiki/JSON JSON].<br />
<br />
Структура команд, передаваемых серверу через компонент сценария в общем виде выглядит следующим образом:<br />
<br />
<pre><br />
{<br />
"actions":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
<br />
Команда полной очистки динамических объектов <br />
<br />
<pre><br />
{<br />
"method":"clear"<br />
}<br />
</pre><br />
<br />
<br />
<br />
Каждая команда представляет собой одну или несколько операций, возможно различных. В простейшем случае в одной команде содержится одна операция.<br />
В каждой операции может присутствовать один или несколько объектов. Так, операция добавления шлюзов может содержать мета-данные нескольких шлюзов, операция добавления потоков - несколько потоков, операция добавления телефонов - несколько SIP-телефонов. То же самое с удалением и изменением параметров.<br />
<br />
<br />
<br />
=== Структура операций ===<br />
<br />
<br />
Структура одной операции добавления шлюза:<br />
<br />
<pre><br />
{<br />
"method":"gate-add",<br />
"gates":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''gates'' могут перечисляться несколько шлюзов. Каждый шлюз представляет собой совокупность настроек: обязательных и необязательных параметров. Администратор, производящий настройку, должен гарантировать уникальность идентификаторов, а также отличия в настройках шлюзов.<br />
<br />
При добавлении шлюзов можно сразу в той же операции определить потоки, соответствующие каждому шлюзу. Для этого среди свойств шлюза необходимо размещение свойства ''streams'' с информацией, эквивалентной операции создания потока. Управление отдельными потоками динамического шлюза может производиться и позже.<br />
<br />
Структура операции изменения шлюза отличается значением ключа ''method'' (''gate-set''), а также невозможностью одновременно изменять параметры потоков внутри шлюза и изменять тип регистрации (''regtype''). <br />
<br />
Операция удаления шлюза (''gate-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении шлюза удаляются все его потоки, линии и динамические направления, с ними связанные.<br />
<br />
<br />
<br />
Структура одной операции добавления потока:<br />
<br />
<pre><br />
{<br />
"method":"stream-add",<br />
"gates":[<br />
{<br />
"id":"_guid_шлюза_",<br />
"streams":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''gates'' могут перечисляться несколько шлюзов. Каждый шлюз должен содержать идентификатор и набор добавляемых потоков (''streams''), другие его свойства игнорируются. Создаваемые потоки привязываются к содержащим их шлюзам. Каждый поток в наборе представляет собой совокупность настроек: обязательных и необязательных параметров.<br />
<br />
Структура операции изменения потока отличается значением ключа ''method'' (''stream-set'').<br />
<br />
Операция удаления потока (''stream-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении потока удаляются динамическое направление и все линии, с ним связанные.<br />
<br />
<br />
<br />
<br />
Структура одной операции добавления SIP-телефона:<br />
<br />
<pre><br />
{<br />
"method":"phone-add",<br />
"phones":[<br />
{<br />
"id":"_guid_телефона_",<br />
...<br />
},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''phones'' могут перечисляться несколько телефонов. Каждый телефон представляет собой совокупность настроек: обязательных и необязательных параметров. Администратор, производящий настройку, должен гарантировать уникальность идентификаторов, а также уникальность и '''сложность''' авторизационных параметров телефонов.<br />
<br />
Структура операции изменения телефона отличается значением ключа ''method'' (''phone-set'').<br />
<br />
Операция удаления потока (''phone-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении потока удаляются динамическое направление и все линии, с ним связанные.<br />
<br />
<br />
=== Свойства объектов ===<br />
<br />
Ниже приводится список свойств различных объектов, используемый при создании. Свойства разделены на группы: обязательные свойства при создании объекта, необязательные свойства при создании объекта, у которых существуют значения по умолчанию, а также внутренние SIP-свойства объектов, доступные также в модуле [[Настройки оборудования|«Параметры аппаратуры»]].<br />
<br />
<br />
<br />
==== Шлюзы ====<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">01010101-0101-0101-0101-010101010101</span>" - Guid-идентификатор шлюза. <br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicGate</span>" - Название шлюза для отображения в модуле [[Настройки оборудования|«Параметры аппаратуры»]].<br />
* "<span style="color:red;">regtype</span>":<span style="color:gray;">2</span> - Тип регистрации (0 - без регистрации, 1 - регистрация на сервере, 2 - регистрация на шлюзе).<br />
<br />
Обязательные параметры (кроме шлюзов с регистрацией на сервере):<br />
<br />
* "<span style="color:red;">address</span>":"<span style="color:gray;">192.168.0.1</span>" - Доменное имя, подставляемое в запрос.<br />
* "<span style="color:red;">sipproxyaddress</span>":"<span style="color:gray;">192.168.0.1:5060</span>" - Адрес и порт удаленного узла, на который отправлять пакеты.<br />
<br />
<br />
Необязательные параметры:<br />
<br />
* "<span style="color:red;">expire</span>":<span style="color:gray;">3600</span> - Период регистрации в секундах для шлюзов с внешней регистрацией. По умолчанию ''3600''.<br />
* "<span style="color:red;">freegate</span>":<span style="color:gray;">false</span> - Для шлюза без регистрации признак разрешения обработки неизвестных входящих. В системе не должно быть более одного шлюза для приема неизвестных входящих. По умолчанию ''false''.<br />
* "<span style="color:red;">aliases</span>":["<span style="color:gray;">Domain1</span>", "<span style="color:gray;">Domain2</span>", "<span style="color:gray;">212.212.121.121</span>"] - Список дополнительных доменных имен, которые ассоциируются со шлюзом при поступлении входящих запросов. По умолчанию список пуст.<br />
<br />
<br />
Дополнительные параметры SIP:<br />
<br />
* "<span style="color:red;">interface-address</span>":"<span style="color:gray;">default</span>" - Сетевой интерфейс сервера (или ''default'' - автоопределение). По умолчанию ''default''.<br />
* "<span style="color:red;">search-in-from</span>":"<span style="color:gray;">0</span>" - Поиск соответствия между аккаунтом и входящим INVITE (0 - contact, 1 - contact+from). По умолчанию ''0''.<br />
* "<span style="color:red;">def-caller-id</span>":"<span style="color:gray;">1234567</span>" - Источник определения CallerId (0 - From:URI, 1 - From:DisplayName, 2 - Contact:URI, 3 - INVITE целиком). По умолчанию ''0''.<br />
* "<span style="color:red;">disabled-answer</span>":"<span style="color:gray;">503</span>" - SIP-ответ при вызове на отключенный поток.<br />
* "<span style="color:red;">declined-answer</span>":"<span style="color:gray;">486</span>" - SIP-ответ при отсутствии свободных транков.<br />
* "<span style="color:red;">error-answer</span>":"<span style="color:gray;">500</span>" - SIP-ответ при ошибке резервирования транка.<br />
* "<span style="color:red;">disconnect-answer</span>":"<span style="color:gray;">480</span>" - SIP-ответ при отказе сценария IVR.<br />
<br />
<br />
<br />
==== Потоки ====<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">12341234-1234-1234-1234-123412341234</span>" - Guid-идентификатор потока.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicStream</span>" - Название потока для отображения.<br />
* "<span style="color:red;">displayname</span>":"<span style="color:gray;">stream1</span>" - SIP DisplayName.<br />
* "<span style="color:red;">username</span>":"<span style="color:gray;">stream1</span>" - SIP UserName.<br />
* "<span style="color:red;">login</span>":"<span style="color:gray;">stream1</span>" - SIP Login.<br />
* "<span style="color:red;">password</span>":"<span style="color:gray;">u74S3iiB</span>" - SIP Password.<br />
* "<span style="color:red;">lines</span>":[{...}, ..., {...}] - список новых линий с параметрами, соответствующих потоку (рассмотрено ниже).<br />
<br />
<br />
Необязательные параметры<br />
<br />
* "<span style="color:red;">defaultcallerid</span>":"<span style="color:gray;">1234567</span>" - Подставляемый по умолчанию CallerId.<br />
* "<span style="color:red;">codecs</span>":[<span style="color:gray;">0</span>, <span style="color:gray;">1</span>] - Список используемых кодеков через запятую в порядке уменьшения приоритета (возможные значения: 0-711u, 1-711a, 2-gsm, 3-729). По умолчанию ''[0, 1]''.<br />
* "<span style="color:red;">numbers</span>":["<span style="color:gray;">account1</span>", "<span style="color:gray;">account2</span>"] - Список дополнительных номеров для ассоциации входящих звонков с потоком. По умолчанию список пуст.<br />
* "<span style="color:red;">dialmode</span>":<span style="color:gray;">0</span> - Способ набора номеров для шлюзов с регистрацией на сервере (0-сначала аккаунт потом номер, 1-сразу номер). По умолчанию ''0''.<br />
* "<span style="color:red;">route</span>":{...} - Свойства направления, которое будет создано и привязано к линиям (рассмотрено ниже).<br />
<br />
<br />
Свойства линий:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">79797979-7979-7979-7979-797979797979</span>" - Guid-идентификатор линии.<br />
* "<span style="color:red;">caption</span>":"<span style="color:gray;">LineCaption</span>" - Имя линии для отображения.<br />
* "<span style="color:red;">code</span>":"<span style="color:gray;">LineCode</span>" - Код линии.<br />
<br />
<br />
Свойства направления:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">68686868-6868-6868-6868-686868686868</span>" - Guid-идентификатор направления.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">RouteName</span>" - Название направления.<br />
* "<span style="color:red;">description</span>":"<span style="color:gray;">Route description</span>" - Описание направления.<br />
* "<span style="color:red;">code</span>":"<span style="color:gray;">routecode</span>" - Код направления (для указания в сценариях).<br />
* "<span style="color:red;">commandtype</span>":"<span style="color:gray;">0</span>" - Режим преобразования номера перед набором (0 - нет, 1 - выражение, 2 - служебный сценарий).<br />
* "<span style="color:red;">command</span>":"<span style="color:gray;"></span>" - Выражение или название служебного сценария для преобразования номера.<br />
<br />
<br />
<div id="sipstreamprops"></div><br />
Дополнительные параметры SIP:<br />
<br />
* "<span style="color:red;">enabled</span>":<span style="color:gray;">0</span> - Включен/выключен.<br />
* "<span style="color:red;">expires</span>":<span style="color:gray;">0</span> - Максимальный период регистрации в секундах для шлюзов с регистрацией на сервере, 0 - не ограничено. По умолчанию ''3600''.<br />
* "<span style="color:red;">replace-user-name</span>":<span style="color:gray;">0</span> - Место подстановки набранного номера при исходящем вызове (0 - To+RequestURI, 1 - To, 2 - RequestURI). По умолчанию ''0''. <br />
* "<span style="color:red;">dtmftype</span>":<span style="color:gray;">0</span> - Способ отправки DTMF (0 - rfc 2833, 1 - SIP INFO, 2 - InBand). По умолчанию ''0''.<br />
* "<span style="color:red;">enable-inband-dtmf</span>":<span style="color:gray;">0</span> - Включение детектора звукового DTMF во входящем rtp-потоке (0 -выключен, 1 - включен). По умолчанию ''0'', так как операция ресурсо-затратная.<br />
* "<span style="color:red;">wait-ack</span>":<span style="color:gray;">1</span> - Ожидать поступления сообщения ACK перед продолжением обработки входящего звонка (0 - нет, 1 - да). По умолчанию ''1''.<br />
* "<span style="color:red;">can-reinvite</span>":<span style="color:gray;">0</span> - Разрешить изменять параметры связи во время коммутации (0 - нет, использовать транскодинг; 1 - да). По умолчанию ''1''.<br />
* "<span style="color:red;">fax-enable</span>":<span style="color:gray;">0</span> - Разрешить прием/передачу факсов T.30 (0 - нет, 1-да). По умолчанию 0.<br />
* "<span style="color:red;">fax-outgoing-timeout</span>":<span style="color:gray;">60</span> - Время ожидания ответа факса в секундах при исходящем сеансе. По умолчанию ''60''.<br />
* "<span style="color:red;">fax-enable-ecm</span>":<span style="color:gray;">1</span> - Error Correction Mode (ECM) для факсов (0 - выключено, 1-включено). По умолчанию ''1''.<br />
* "<span style="color:red;">use-remote-address</span>":<span style="color:gray;">1</span> - Адрес назначения для RTP трафика (0 - адрес/порт из SDP, 1 - адрес/порт отправителя). По умолчанию ''1''.<br />
* "<span style="color:red;">g711-size</span>":<span style="color:gray;">0</span> - Размен звукового пакета при отправке RTP данных в кодеке 711a/711u (0 - 40мс, 1 - 20мс). По умолчанию ''1''.<br />
<br />
<br />
<br />
==== Телефоны ====<br />
<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">35353535-3535-3535-3535-353535353535</span>" - Guid-идентификатор телефона и связанной с ним линии.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicPhone</span>" - Название телефона для отображения.<br />
* "<span style="color:red;">address</span>":"<span style="color:gray;">192.168.0.231:5060</span>" - Адрес устройства для работы в режиме без регистрации.<br />
* "<span style="color:red;">username</span>":"<span style="color:gray;">user</span>" - SIP UserName.<br />
* "<span style="color:red;">login</span>":"<span style="color:gray;">phone</span>" - SIP Login (по умолчанию совпадает с SIP UserName).<br />
* "<span style="color:red;">password</span>":"<span style="color:gray;">7thNx2wf</span>" - SIP Password.<br />
<br />
<br />
Необязательные параметры: <br />
<br />
* "<span style="color:red;">codecs</span>":[<span style="color:gray;">0</span>, <span style="color:gray;">1</span>] - Список используемых кодеков через запятую в порядке уменьшения приоритета (возможные значения: 0-711u, 1-711a, 2-gsm, 3-729). По умолчанию ''[0, 1]''.<br />
* "<span style="color:red;">defaultuserid</span>":"<span style="color:gray;">84848484-8484-8484-8484-848484848484</span>" - Guid-идентификатор пользователя, привязанного к телефону как [[Свойства компонентов#SipPhone|«пользователь по умолчанию»]]. По умолчанию без привязки.<br />
* "<span style="color:red;">websocketuserid</span>":"<span style="color:gray;">84848484-8484-8484-8484-848484848484</span>" - Guid-идентификатор пользователя, привязанного к телефону как [[Свойства компонентов#SipPhone|«пользователь webcrm»]]. По умолчанию без привязки.<br />
* "<span style="color:red;">citystraight</span>":<span style="color:gray;">-1</span> - (-1 - по умолчанию БД, 0 - нет, 1 - да). По умолчанию ''-1''.<br />
* "<span style="color:red;">busymode</span>":<span style="color:gray;">-1</span> - Режим отбоя (-1 - по умолчанию БД, 0 - SIP-disconnect, 1 - генерировать короткие гудки). По умолчанию ''-1''.<br />
* "<span style="color:red;">translit</span>":<span style="color:gray;">-1</span> - Производить транслитерацию (-1 - согласно общим настройкам, 0 - нет, 1 - да). По умолчанию ''-1''.<br />
* "<span style="color:red;">linecode</span>":"<span style="color:gray;">DynamicPhoneCode</span>" - Код линии.<br />
* "<span style="color:red;">department</span>":"<span style="color:gray;">57575757-5757-5757-5757-575757575757</span>" - Идентификатор существующего подразделения для привязки и отображения в разделе «Сотрудники». <br />
<br />
<br />
Дополнительные параметры SIP аналогичны [[#sipstreamprops|параметрам потоков]].<br />
<br />
<br />
=== Изменение параметров аппаратуры на постоянной основе ===<br />
<br />
<br />
Изменение параметров аппаратуры может потребоваться, например, для изменения параметров внешнего адреса в разделе SIP-сервера при наладке автоматической схемы переключения на резервный интернет из-под NAT. Для изменения доступны все параметры всех разделов модуля "Параметры аппаратуры".<br />
<br />
Применение осуществляется только в случае, если новые значения отличаются от уже установленных и сохраненных в БД. При этом изменения корректируются и в БД, так что при следующей загрузке сервера будет произведена загрузка свойств конфигурации с измененными значениями.<br />
<br />
Структура команды изменения параметров конфигурации аппаратуры:<br />
<br />
<pre><br />
{<br />
"method":"hw-set",<br />
"items":[<br />
{<br />
"key":"newvalue",<br />
...<br />
},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
* ''key'' - название параметра, подлежащего замене<br />
* ''newvalue'' - новое значение<br />
<br />
Доступные для изменения параметры:<br />
<br />
* "<span style="color:red;">sip/p:interface</span>":"<span style="color:gray;">sip:*:5060</span>" - интерфейс и порт для подъема SIP-сервера (применяется только при перезагрузке сервера или HAL).<br />
* "<span style="color:red;">sip/p:domain-list</span>":"<span style="color:gray;">x.oktell.ru y.oktell.ru</span>" - дополнительные доменные имена, SIP запросы на которые сервер должен обрабатывать.<br />
* "<span style="color:red;">sip/p:if192.168.0.218</span>":"<span style="color:gray;"></span>" - Настройка для работы конкретного сетевого интерфейса сервера за NAT/ ''address:nat_addr port:nat_port [domain:nat_dns_name]''. Обратите внимание, что название ключа динамически зависит от адресов серверных интерфейсов.<br />
<br />
<br />
Чтобы выяснить key нужного параметра, следует в конфигурационном файле сервера добавить ключ (или изменить значение) ''<add key="TraceHWParams" value="1"/>'', после чего перезагрузить сервер и открыть модуль "Администрирование. Параметры аппаратуры". В каталоге сервера появится файл hw_out_*.xml с настройками параметров аппаратуры. Эта структура представляет собой исчерпывающий конфиг настройки, где все ключи уникальны и заданы атрибутом ''name'' в тегах. В качестве ''key'' необходимо указать значение атрибута ''name''.<br />
<br />
<br />
<br />
=== Пример сценария ===<br />
<br />
[[Special:FilePath/(Example) Dynamic SIP.oscr|(Example) Dynamic SIP.oscr]]</div>Peter%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%B0%D1%80%D1%82%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8Динамическое управление картой сети2014-07-30T15:17:57Z<p>Peter: </p>
<hr />
<div>Компонент [[Общие компоненты сценариев#UserState|Статус объекта]] позволяет управлять составом карты сети с помощью [http://ru.wikipedia.org/wiki/JSON JSON]-форматированных команд. Это может быть полезно для решения интеграционных задач, в многосерверных решениях с внешней логикой управления, а также в проектах с постоянно изменяющимися параметрами карты сети.<br />
<br />
<br />
__TOC__<br />
<br />
=== Описание ===<br />
<br />
Определенным образом формируемые параметры позволяют:<br />
* Добавлять шлюзы (операция ''gate-add'').<br />
* Добавлять потоки (операция ''stream-add'').<br />
* Добавлять телефоны (операция ''phone-add'').<br />
* Удалять шлюзы со всеми потоками (операция ''gate-del'').<br />
* Удалять отдельные потоки (операция ''stream-add'').<br />
* Удалять отдельные телефоны (операция ''phone-add'').<br />
* Изменять параметры шлюзов (операция ''gate-set'').<br />
* Изменять параметры потоков (операция ''stream-set'').<br />
* Изменять параметры телефонов (операция ''phone-set'').<br />
* Удалять единовременно все динамические объекты (команда ''clear'').<br />
* Изменять на постоянной основе свойства конфигурации аналогично модулю "Параметры аппаратуры" (команда ''hw-set'').<br />
<br />
Добавленные динамические объекты не появляются среди отображаемых объектов в [[Карта сети|карте сети]], но доступны в [[Мониторинг|мониторинге линий]], [[Настройки оборудования|параметрах аппаратуры]], и прочих модулях системы, связанных с исполнением в реальном времени.<br />
<br />
Жизненный цикл динамических объектов протекает от момента создания до момента удаления или перезапуска системы. Таким образом при необходимости формирования постоянных настроек карты сети с помощью динамических объектов, необходимо реализовывать однократное исполнение служебной задачи, загружающей требуемые динамические объекты всякий раз после перезапуска системы. Гарантировать однократность можно в том числе с помощью [[Переменные|глобальных переменных]] сценариев.<br />
<br />
После исполнения любой операции, связанной с динамическими объектами, автоматически происходит перезагрузка сервера состояний. Это затратная операция. В этой связи настоятельно рекомендуется комбинировать все операции в один запрос, и не исполнять их в цикле одну за другой.<br />
<br />
При создании динамических объектов, создаются динамические линии с идентификаторами, задаваемыми в запросе. Формирование этих уникальных идентификаторов возложено на администратора, создающего сценарий, поскольку привязка к ним может потребоваться в бизнес-логике реализуемого процесса для решения внешних задач.<br />
Ожидается, что идентификаторы будут уникальны.<br />
<br />
Создание динамических потоков в шлюзах может сопровождаться автоматическим созданием направления, состоящего из всех вновь-созданных линий потока.<br />
<br />
При создании объектов и изменении их параметров могут указываться как настройки из [[Карта сети|«Карты сети»]], так и настройки из [[Настройки оборудования|«Параметров аппаратуры»]].<br />
<br />
<br />
<br />
=== Лицензирование ===<br />
<br />
<br />
При добавлении динамических объектов расходуются свободные лицензии на соответствующие линии. При удалении объектов лицензии высвобождаются. Таким образом можно использовать конкурентный механизм в отличие от [[Карта сети|статической карты сети]]. <br />
<br />
В случае, если после добавления очередного объекта итоговое количество линий превосходит количество линий в лицензии, сервер произведет стандартную процедуру отключения части линий по своему усмотрению (преимущественно выключенные, неактивные).<br />
<br />
<br />
<br />
=== Формат команд ===<br />
<br />
<br />
Команды управления динамической картой сети передаются в строковом виде в формате [http://ru.wikipedia.org/wiki/JSON JSON].<br />
<br />
Структура команд, передаваемых серверу через компонент сценария в общем виде выглядит следующим образом:<br />
<br />
<pre><br />
{<br />
"actions":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
<br />
Команда полной очистки динамических объектов <br />
<br />
<pre><br />
{<br />
"method":"clear"<br />
}<br />
</pre><br />
<br />
<br />
<br />
Каждая команда представляет собой одну или несколько операций, возможно различных. В простейшем случае в одной команде содержится одна операция.<br />
В каждой операции может присутствовать один или несколько объектов. Так, операция добавления шлюзов может содержать мета-данные нескольких шлюзов, операция добавления потоков - несколько потоков, операция добавления телефонов - несколько SIP-телефонов. То же самое с удалением и изменением параметров.<br />
<br />
<br />
<br />
=== Структура операций ===<br />
<br />
<br />
Структура одной операции добавления шлюза:<br />
<br />
<pre><br />
{<br />
"method":"gate-add",<br />
"gates":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''gates'' могут перечисляться несколько шлюзов. Каждый шлюз представляет собой совокупность настроек: обязательных и необязательных параметров. Администратор, производящий настройку, должен гарантировать уникальность идентификаторов, а также отличия в настройках шлюзов.<br />
<br />
При добавлении шлюзов можно сразу в той же операции определить потоки, соответствующие каждому шлюзу. Для этого среди свойств шлюза необходимо размещение свойства ''streams'' с информацией, эквивалентной операции создания потока. Управление отдельными потоками динамического шлюза может производиться и позже.<br />
<br />
Структура операции изменения шлюза отличается значением ключа ''method'' (''gate-set''), а также невозможностью одновременно изменять параметры потоков внутри шлюза и изменять тип регистрации (''regtype''). <br />
<br />
Операция удаления шлюза (''gate-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении шлюза удаляются все его потоки, линии и динамические направления, с ними связанные.<br />
<br />
<br />
<br />
Структура одной операции добавления потока:<br />
<br />
<pre><br />
{<br />
"method":"stream-add",<br />
"gates":[<br />
{<br />
"id":"_guid_шлюза_",<br />
"streams":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''gates'' могут перечисляться несколько шлюзов. Каждый шлюз должен содержать идентификатор и набор добавляемых потоков (''streams''), другие его свойства игнорируются. Создаваемые потоки привязываются к содержащим их шлюзам. Каждый поток в наборе представляет собой совокупность настроек: обязательных и необязательных параметров.<br />
<br />
Структура операции изменения потока отличается значением ключа ''method'' (''stream-set'').<br />
<br />
Операция удаления потока (''stream-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении потока удаляются динамическое направление и все линии, с ним связанные.<br />
<br />
<br />
<br />
<br />
Структура одной операции добавления SIP-телефона:<br />
<br />
<pre><br />
{<br />
"method":"phone-add",<br />
"phones":[<br />
{<br />
"id":"_guid_телефона_",<br />
...<br />
},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''phones'' могут перечисляться несколько телефонов. Каждый телефон представляет собой совокупность настроек: обязательных и необязательных параметров. Администратор, производящий настройку, должен гарантировать уникальность идентификаторов, а также уникальность и '''сложность''' авторизационных параметров телефонов.<br />
<br />
Структура операции изменения телефона отличается значением ключа ''method'' (''phone-set'').<br />
<br />
Операция удаления потока (''phone-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении потока удаляются динамическое направление и все линии, с ним связанные.<br />
<br />
<br />
=== Свойства объектов ===<br />
<br />
Ниже приводится список свойств различных объектов, используемый при создании. Свойства разделены на группы: обязательные свойства при создании объекта, необязательные свойства при создании объекта, у которых существуют значения по умолчанию, а также внутренние SIP-свойства объектов, доступные также в модуле [[Настройки оборудования|«Параметры аппаратуры»]].<br />
<br />
<br />
<br />
==== Шлюзы ====<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">01010101-0101-0101-0101-010101010101</span>" - Guid-идентификатор шлюза. <br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicGate</span>" - Название шлюза для отображения в модуле [[Настройки оборудования|«Параметры аппаратуры»]].<br />
* "<span style="color:red;">regtype</span>":<span style="color:gray;">2</span> - Тип регистрации (0 - без регистрации, 1 - регистрация на сервере, 2 - регистрация на шлюзе).<br />
<br />
Обязательные параметры (кроме шлюзов с регистрацией на сервере):<br />
<br />
* "<span style="color:red;">address</span>":"<span style="color:gray;">192.168.0.1</span>" - Доменное имя, подставляемое в запрос.<br />
* "<span style="color:red;">sipproxyaddress</span>":"<span style="color:gray;">192.168.0.1:5060</span>" - Адрес и порт удаленного узла, на который отправлять пакеты.<br />
<br />
<br />
Необязательные параметры:<br />
<br />
* "<span style="color:red;">expire</span>":<span style="color:gray;">3600</span> - Период регистрации в секундах для шлюзов с внешней регистрацией. По умолчанию ''3600''.<br />
* "<span style="color:red;">freegate</span>":<span style="color:gray;">false</span> - Для шлюза без регистрации признак разрешения обработки неизвестных входящих. В системе не должно быть более одного шлюза для приема неизвестных входящих. По умолчанию ''false''.<br />
* "<span style="color:red;">aliases</span>":["<span style="color:gray;">Domain1</span>", "<span style="color:gray;">Domain2</span>", "<span style="color:gray;">212.212.121.121</span>"] - Список дополнительных доменных имен, которые ассоциируются со шлюзом при поступлении входящих запросов. По умолчанию список пуст.<br />
<br />
<br />
Дополнительные параметры SIP:<br />
<br />
* "<span style="color:red;">interface-address</span>":"<span style="color:gray;">default</span>" - Сетевой интерфейс сервера (или ''default'' - автоопределение). По умолчанию ''default''.<br />
* "<span style="color:red;">search-in-from</span>":"<span style="color:gray;">0</span>" - Поиск соответствия между аккаунтом и входящим INVITE (0 - contact, 1 - contact+from). По умолчанию ''0''.<br />
* "<span style="color:red;">def-caller-id</span>":"<span style="color:gray;">1234567</span>" - Источник определения CallerId (0 - From:URI, 1 - From:DisplayName, 2 - Contact:URI, 3 - INVITE целиком). По умолчанию ''0''.<br />
* "<span style="color:red;">disabled-answer</span>":"<span style="color:gray;">503</span>" - SIP-ответ при вызове на отключенный поток.<br />
* "<span style="color:red;">declined-answer</span>":"<span style="color:gray;">486</span>" - SIP-ответ при отсутствии свободных транков.<br />
* "<span style="color:red;">error-answer</span>":"<span style="color:gray;">500</span>" - SIP-ответ при ошибке резервирования транка.<br />
* "<span style="color:red;">disconnect-answer</span>":"<span style="color:gray;">480</span>" - SIP-ответ при отказе сценария IVR.<br />
<br />
<br />
<br />
==== Потоки ====<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">12341234-1234-1234-1234-123412341234</span>" - Guid-идентификатор потока.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicStream</span>" - Название потока для отображения.<br />
* "<span style="color:red;">displayname</span>":"<span style="color:gray;">stream1</span>" - SIP DisplayName.<br />
* "<span style="color:red;">username</span>":"<span style="color:gray;">stream1</span>" - SIP UserName.<br />
* "<span style="color:red;">login</span>":"<span style="color:gray;">stream1</span>" - SIP Login.<br />
* "<span style="color:red;">password</span>":"<span style="color:gray;">u74S3iiB</span>" - SIP Password.<br />
* "<span style="color:red;">lines</span>":[{...}, ..., {...}] - список новых линий с параметрами, соответствующих потоку (рассмотрено ниже).<br />
<br />
<br />
Необязательные параметры<br />
<br />
* "<span style="color:red;">defaultcallerid</span>":"<span style="color:gray;">1234567</span>" - Подставляемый по умолчанию CallerId.<br />
* "<span style="color:red;">codecs</span>":[<span style="color:gray;">0</span>, <span style="color:gray;">1</span>] - Список используемых кодеков через запятую в порядке уменьшения приоритета (возможные значения: 0-711u, 1-711a, 2-gsm, 3-729). По умолчанию ''[0, 1]''.<br />
* "<span style="color:red;">numbers</span>":["<span style="color:gray;">account1</span>", "<span style="color:gray;">account2</span>"] - Список дополнительных номеров для ассоциации входящих звонков с потоком. По умолчанию список пуст.<br />
* "<span style="color:red;">dialmode</span>":<span style="color:gray;">0</span> - Способ набора номеров для шлюзов с регистрацией на сервере (0-сначала аккаунт потом номер, 1-сразу номер). По умолчанию ''0''.<br />
* "<span style="color:red;">route</span>":{...} - Свойства направления, которое будет создано и привязано к линиям (рассмотрено ниже).<br />
<br />
<br />
Свойства линий:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">79797979-7979-7979-7979-797979797979</span>" - Guid-идентификатор линии.<br />
* "<span style="color:red;">caption</span>":"<span style="color:gray;">LineCaption</span>" - Имя линии для отображения.<br />
* "<span style="color:red;">code</span>":"<span style="color:gray;">LineCode</span>" - Код линии.<br />
<br />
<br />
Свойства направления:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">68686868-6868-6868-6868-686868686868</span>" - Guid-идентификатор направления.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">RouteName</span>" - Название направления.<br />
* "<span style="color:red;">description</span>":"<span style="color:gray;">Route description</span>" - Описание направления.<br />
* "<span style="color:red;">code</span>":"<span style="color:gray;">routecode</span>" - Код направления (для указания в сценариях).<br />
* "<span style="color:red;">commandtype</span>":"<span style="color:gray;">0</span>" - Режим преобразования номера перед набором (0 - нет, 1 - выражение, 2 - служебный сценарий).<br />
* "<span style="color:red;">command</span>":"<span style="color:gray;"></span>" - Выражение или название служебного сценария для преобразования номера.<br />
<br />
<br />
<div id="sipstreamprops"></div><br />
Дополнительные параметры SIP:<br />
<br />
* "<span style="color:red;">enabled</span>":<span style="color:gray;">0</span> - Включен/выключен.<br />
* "<span style="color:red;">expires</span>":<span style="color:gray;">0</span> - Максимальный период регистрации в секундах для шлюзов с регистрацией на сервере, 0 - не ограничено. По умолчанию ''3600''.<br />
* "<span style="color:red;">replace-user-name</span>":<span style="color:gray;">0</span> - Место подстановки набранного номера при исходящем вызове (0 - To+RequestURI, 1 - To, 2 - RequestURI). По умолчанию ''0''. <br />
* "<span style="color:red;">dtmftype</span>":<span style="color:gray;">0</span> - Способ отправки DTMF (0 - rfc 2833, 1 - SIP INFO, 2 - InBand). По умолчанию ''0''.<br />
* "<span style="color:red;">enable-inband-dtmf</span>":<span style="color:gray;">0</span> - Включение детектора звукового DTMF во входящем rtp-потоке (0 -выключен, 1 - включен). По умолчанию ''0'', так как операция ресурсо-затратная.<br />
* "<span style="color:red;">wait-ack</span>":<span style="color:gray;">1</span> - Ожидать поступления сообщения ACK перед продолжением обработки входящего звонка (0 - нет, 1 - да). По умолчанию ''1''.<br />
* "<span style="color:red;">can-reinvite</span>":<span style="color:gray;">0</span> - Разрешить изменять параметры связи во время коммутации (0 - нет, использовать транскодинг; 1 - да). По умолчанию ''1''.<br />
* "<span style="color:red;">fax-enable</span>":<span style="color:gray;">0</span> - Разрешить прием/передачу факсов T.30 (0 - нет, 1-да). По умолчанию 0.<br />
* "<span style="color:red;">fax-outgoing-timeout</span>":<span style="color:gray;">60</span> - Время ожидания ответа факса в секундах при исходящем сеансе. По умолчанию ''60''.<br />
* "<span style="color:red;">fax-enable-ecm</span>":<span style="color:gray;">1</span> - Error Correction Mode (ECM) для факсов (0 - выключено, 1-включено). По умолчанию ''1''.<br />
* "<span style="color:red;">use-remote-address</span>":<span style="color:gray;">1</span> - Адрес назначения для RTP трафика (0 - адрес/порт из SDP, 1 - адрес/порт отправителя). По умолчанию ''1''.<br />
* "<span style="color:red;">g711-size</span>":<span style="color:gray;">0</span> - Размен звукового пакета при отправке RTP данных в кодеке 711a/711u (0 - 40мс, 1 - 20мс). По умолчанию ''1''.<br />
<br />
<br />
<br />
==== Телефоны ====<br />
<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">35353535-3535-3535-3535-353535353535</span>" - Guid-идентификатор телефона и связанной с ним линии.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicPhone</span>" - Название телефона для отображения.<br />
* "<span style="color:red;">address</span>":"<span style="color:gray;">192.168.0.231:5060</span>" - Адрес устройства для работы в режиме без регистрации.<br />
* "<span style="color:red;">username</span>":"<span style="color:gray;">user</span>" - SIP UserName.<br />
* "<span style="color:red;">login</span>":"<span style="color:gray;">phone</span>" - SIP Login (по умолчанию совпадает с SIP UserName).<br />
* "<span style="color:red;">password</span>":"<span style="color:gray;">7thNx2wf</span>" - SIP Password.<br />
<br />
<br />
Необязательные параметры: <br />
<br />
* "<span style="color:red;">codecs</span>":[<span style="color:gray;">0</span>, <span style="color:gray;">1</span>] - Список используемых кодеков через запятую в порядке уменьшения приоритета (возможные значения: 0-711u, 1-711a, 2-gsm, 3-729). По умолчанию ''[0, 1]''.<br />
* "<span style="color:red;">defaultuserid</span>":"<span style="color:gray;">84848484-8484-8484-8484-848484848484</span>" - Guid-идентификатор пользователя, привязанного к телефону как [[Свойства компонентов#SipPhone|«пользователь по умолчанию»]]. По умолчанию без привязки.<br />
* "<span style="color:red;">websocketuserid</span>":"<span style="color:gray;">84848484-8484-8484-8484-848484848484</span>" - Guid-идентификатор пользователя, привязанного к телефону как [[Свойства компонентов#SipPhone|«пользователь webcrm»]]. По умолчанию без привязки.<br />
* "<span style="color:red;">citystraight</span>":<span style="color:gray;">-1</span> - (-1 - по умолчанию БД, 0 - нет, 1 - да). По умолчанию ''-1''.<br />
* "<span style="color:red;">busymode</span>":<span style="color:gray;">-1</span> - Режим отбоя (-1 - по умолчанию БД, 0 - SIP-disconnect, 1 - генерировать короткие гудки). По умолчанию ''-1''.<br />
* "<span style="color:red;">translit</span>":<span style="color:gray;">-1</span> - Производить транслитерацию (-1 - согласно общим настройкам, 0 - нет, 1 - да). По умолчанию ''-1''.<br />
* "<span style="color:red;">linecode</span>":"<span style="color:gray;">DynamicPhoneCode</span>" - Код линии.<br />
* "<span style="color:red;">department</span>":"<span style="color:gray;">57575757-5757-5757-5757-575757575757</span>" - Идентификатор существующего подразделения для привязки и отображения в разделе «Сотрудники». <br />
<br />
<br />
Дополнительные параметры SIP аналогичны [[#sipstreamprops|параметрам потоков]].<br />
<br />
<br />
=== Изменение параметров аппаратуры на постоянной основе<br />
<br />
<br />
Изменение параметров аппаратуры может потребоваться, например, для изменения параметров внешнего адреса в разделе SIP-сервера при наладке автоматической схемы переключения на резервный интернет из-под NAT. Для изменения доступны все параметры всех разделов модуля "Параметры аппаратуры".<br />
<br />
Применение осуществляется только в случае, если новые значения отличаются от уже установленных и сохраненных в БД. При этом изменения корректируются и в БД, так что при следующей загрузке сервера будет произведена загрузка свойств конфигурации с измененными значениями.<br />
<br />
Структура команды изменения параметров конфигурации аппаратуры:<br />
<br />
<pre><br />
{<br />
"method":"hw-set",<br />
"items":[<br />
{<br />
"key":"newvalue",<br />
...<br />
},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
* ''key'' - название параметра, подлежащего замене<br />
* ''newvalue'' - новое значение<br />
<br />
Доступные для изменения параметры:<br />
<br />
* "<span style="color:red;">sip/p:interface</span>":"<span style="color:gray;">sip:*:5060</span>" - интерфейс и порт для подъема SIP-сервера (применяется только при перезагрузке сервера или HAL).<br />
* "<span style="color:red;">sip/p:domain-list</span>":"<span style="color:gray;">x.oktell.ru y.oktell.ru</span>" - дополнительные доменные имена, SIP запросы на которые сервер должен обрабатывать.<br />
* "<span style="color:red;">sip/p:if192.168.0.218</span>":"<span style="color:gray;"></span>" - Настройка для работы конкретного сетевого интерфейса сервера за NAT/ ''address:nat_addr port:nat_port [domain:nat_dns_name]''. Обратите внимание, что название ключа динамически зависит от адресов серверных интерфейсов.<br />
<br />
<br />
Чтобы выяснить key нужного параметра, следует в конфигурационном файле сервера добавить ключ (или изменить значение) ''<add key="TraceHWParams" value="1"/>'', после чего перезагрузить сервер и открыть модуль "Администрирование. Параметры аппаратуры". В каталоге сервера появится файл hw_out_*.xml с настройками параметров аппаратуры. Эта структура представляет собой исчерпывающий конфиг настройки, где все ключи уникальны и заданы атрибутом ''name'' в тегах. В качестве ''key'' необходимо указать значение атрибута ''name''.<br />
<br />
<br />
<br />
=== Пример сценария ===<br />
<br />
[[Special:FilePath/(Example) Dynamic SIP.oscr|(Example) Dynamic SIP.oscr]]</div>Peter%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9._%D0%9D%D0%BE%D0%B2%D1%8B%D0%B5_%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8История обновлений. Новые возможности2014-07-03T06:51:42Z<p>Peter: </p>
<hr />
<div>[[Дополнительно|Наверх]]<br />
<br />
<br />
__TOC__<br />
<br />
<br />
<br />
====Новые возможности 2.11 (1.07.2014)====<br />
<br />
<br />
* Реализован сервис расчета и сохранения [[Управление базами данных#VoiceMap|карты владения разговором]] его участниками. Включается в разделе управления БД модуля общих настроек. Достаточно затратный и требует дополнительных ресурсов.<br />
* Реализовано [[Голосовые задачи#skills|использование операторских «скиллов»]] в исходящих задачах без закрепления абонентов за операторами. Для каждого оператора с помощью тегов задается [[Операторы#skills|набор скиллов, которыми он обладает]]. В таблице абонентов для каждого абонента с помощью [[Таблицы абонентов#skills|тегов]] фиксируется набор одновременно требуемых скиллов. В итоге абоненты соединяются с теми операторами, которые обладают одновременно всеми требуемыми скиллами. В качестве примера можно рассмотреть случай требования для абонентов разных разговорных языков от операторов - для одних клиентов русский, для других национальный язык.<br />
* Реализована возможность обработки изменения учетных записей пользователей в служебном сценарии. [[Сценарии_АТС#SvcUserChanged|Подробнее]].<br />
* Реализована возможность обработки смены основных состояний пользователей в служебном сценарии (например вход и выход из системы). [[Сценарии_АТС#SvcUserStateChanged|Подробнее]].<br />
* Реализована возможность осуществления авторизации во внешних системах с помощью служебного сценария (возвращающего реальные учетные данные). [[Сценарии_АТС#SvcUserLogin|Подробнее]].<br />
* Реализован новый компонент сценариев [[Компоненты_сценариев_IVR#Recognize|Распознавание речи]], работающий с помощью сервиса ''Яндекс.SpeechKit''. Компонент существует в служебных сценариях для распознавания готового PCM-файла, и в IVR сценариях для записи и одновременного ускоренного распознавания с возможностью ввода DTMF-символов с клавиатуры. В раздел [[Настройки_распознавания|«Распознавание речи Яндекс»]] общих настроек должны быть введены ключи доступа к сервису.<br />
* В компонент сценариев ''[[Общие_компоненты_сценариев#UserState|Статус объекта]]'' добавлена возможность определения внутреннего номера для пользователя или линии.<br />
* В компонент сценариев ''[[Общие_компоненты_сценариев#UserState|Статус объекта]]'' добавлены функции определения состояния пользователя в КЦ, ручной режим, перерыв, переадресация, а также скилл-тэги.<br />
* В компонент сценариев ''[[Общие_компоненты_сценариев#UserState|Статус объекта]]'' добавлена отладочная функция полного подсчета всех объектов .NET с формированием файла статистики.<br />
* Реализовано размещение в БД информации о забаненных SIP-адресах с возможностью вывода из фильтра с помощью компонента сценариев ''[[Общие_компоненты_сценариев#UserState|Статус объекта]]''.<br />
* Компонент сценариев ''[[Общие_компоненты_сценариев#Parser|Парсер текста]]'' обучен вырезать данные из блока CDATA в XML.<br />
* В компоненте IVR сценариев ''[[Компоненты_сценариев_IVR#SwitchProject|Вход в проект]]'' добавлена возможность задавать проект через аргумент.<br />
* Компонент IVR сценариев ''[[Компоненты_сценариев_IVR#PlayNumber|Воспроизведение числа]]'' пополнился режимом воспроизведения времени без нулей в конце/в начале.<br />
* Реализована поддержка SSL при [[Общие_компоненты_сценариев#EmailReceive|получении почты]]'' по протоколам POP и IMAP.<br />
* Добавлена функция ''[[Выражения#Translit|Translit]]'' в выражения сценариев.<br />
* Добавлена возможность увеличения размерности номеров линий с 3 до 4 цифр. Может быть использовано в проектах с более чем 1000 линий одного типа. Включается конфигурационным ключом сервера ''[[Параметры_файлов_конфигурации#Use4xLineNumbers|Use4xLineNumbers]]''<br />
* [[Линии#Направления|Команды направления]] расширены с помощью служебного символа «^». Цифра, перед которой установлен символ, удаляется из набора. Может использоваться для формирования в статистике совершенно иного номера, отличного от набираемого, или изменять 8 на +7. ''Пример: +7{^89050213951} - в набор будет отправлено +79050213951, а в статистику попадет 89050213951''.<br />
* Добавлен новый тип [[Контрольные события|контрольного события]] для отслеживания неснятия трубки оператором в задаче.<br />
* Реализована возможность [[Настройки_Call-центра#SvcSupervisorHelp|запроса помощи супервизора через служебный сценарий]] (1 парам - ид оператора, 2-ид задачи, если сейчас в задаче обслуживает).<br />
* По многочисленным просьбам [[Голосовые задачи#QueueTimeout|ограничение времени нахождения в очередях]] входящих задач стало задаваться в секундах (ранее в минутах).<br />
* Добавлена настройка задачи [[Голосовые задачи#PostTimeout|«Максимальное время поствызывной обработки»]], позволяющее автоматически завершить задачу при превышении оператором времени заполнения диалоговых и стоп-форм после завершения разговора с абонентом.<br />
* Добавлена возможность использования [[Голосовые задачи#ScriptQuery|диалогового сценария запроса на дозвон]] для задач с закреплением абонента за оператором и задач с поиском абонента для оператора через сценарий.<br />
* В модуле [[Таблицы абонентов]] разрешено создание локальных таблиц абонентов на базе существующих в БД таблиц с данными.<br />
* Реализована функция перехвата звонка из модуля [[Сотрудники]] клиентского приложения с помощью команд контекстного меню.<br />
* Задействована проверка прав на воспроизведение, скачивание записей и установку комментариев в модуле [[Мои звонки]]. Применяются привилегии установленные для модуля [[Статистика АТС]].<br />
* В трей [[Сокращенное_рабочее_место|мини-окна]] клиентского приложения добавлена кнопка вызова супервизора.<br />
* Выявлены завалы при работе модуля [[Мое рабочее место]] в части осуществления сложных запросов на сервер по таймеру. Произведена оптимизация.<br />
* Повышена эффективность выставления приоритетов исходящим задачам в части задач с закреплением абонентов за операторами. Ранее несмотря на высокий приоритет задач этого типа эффективность работы по ним оставалась низкой в условиях конкурирующего использования операторов другими задачами.<br />
* Реализована возможность отправки SIP-заголовоков ''P-Asserted-Identity'' и ''Remote-Party-ID'' в ответ на входящие звонки от внутренних телефонов. Включается серверным конфигурационным ключом ''[[Параметры_файлов_конфигурации#UseAssertedIdentity|UseAssertedIdentity]]''.<br />
* Реализована возможность совершения [[Компоненты_сценариев_IVR#SwitchExt|внешних вызовов]] на шлюзы с регистрацией на сервере, используя буквенный юзернейм/номер через ''sip:username'' или ''sip:username@domain''.<br />
* Реализована возможность добавления дополнительных привилегий к [[Роли#BasicRoles|базовым ролям]].<br />
* Выключена поддержка устаревшей клиент-серверной связи через механизм .NET Remoting.<br />
* [[Встраиваемые_plugin-модули|Серверные плагины]] получили возможность использовать ряд новых методов через интерфейсный метод ''[[Сервисное_взаимодействие#Событие OnQuery|OnQuery]]'': ''[[Сервисное_взаимодействие#getpath|getpath]]'', ''[[Сервисное_взаимодействие#getconfigvalue|getconfigvalue]]'', ''[[Сервисное_взаимодействие#getversion|getversion]]'', ''[[Сервисное_взаимодействие#reloadpbxss|reloadpbxss]]'', ''[[Сервисное_взаимодействие#updatehttpsession|updatehttpsession]]'', ''[[Сервисное_взаимодействие#removehttpsession|removehttpsession]]'', ''[[Сервисное_взаимодействие#updateplugin|updateplugin]]'', ''[[Сервисное_взаимодействие#getcurrentlanguage|getcurrentlanguage]]'', ''[[Сервисное_взаимодействие#getlicense|getlicense]]'', ''[[Сервисное_взаимодействие#getkeyid|getkeyid]]''<br />
* Реализована возможность автоматической установки [[Встраиваемые_plugin-модули|плагинов]] сервером при запуске (архивы и/или сборки расположенные в каталоге ''PluginAutoUpdate'').<br />
* Поддержка архивов плагинов с манифестом в формате ''JSON''.<br />
* [[Oktell_Web-Socket_Protocol|Программный интерфейс web-socket]] пополнился методом ''[[Oktell_Web-Socket_Protocol#execmoduleproc|execmoduleproc]]'' для обращения к серверным плагинам.<br />
* [[Oktell_Web-Socket_Protocol|Программный интерфейс web-socket]] пополнился методами ''getvoiceperc'', ''getvoicemap'' для получения доступа к данным о статистике владения разговором.<br />
* В [[Oktell_Web-Socket_Protocol|программном интерфейсе web-socket]] исправлен метод ''checkmyuserprivilege'' - поле isoperator заменен на hasprivilege.<br />
* [[Серверный_HTTP_интерфейс|Интерфейс веб-сервера]] пополнился методом ''execpluginmethod'' для обращения к серверным плагинам.<br />
* [[Серверный_HTTP_интерфейс|Интерфейс веб-сервера]] пополнился методом ''download/vm/id'' для предоставления записей голосовой почты, где ''id'' - guid-идентификатор сообщения.<br />
* [[Интеграция_с_Web-Socket_CRM|Настройка связи с WEBCRM]] по web-socket теперь может производиться через указание URL (доменное имя, страница, http-параметры).<br />
* Добавлен клиентский конфигурационный ключ ''[[Параметры_файлов_конфигурации#TerminalMode|TerminalMode]]'', позволяющий установить режим привязки в терминальном подключении (использование адресов реальных терминальных клиентских машин, расширение из конфига или расширение с помощью имени пользователя Windows).<br />
* Добавлен клиентский конфигурационный ключ ''[[Параметры_файлов_конфигурации#ShowLoginAuthMode|ShowLoginAuthMode]]'', позволяющий отключить в окне авторизации отображение варианта использования учетной записи Windows.<br />
* Добавлены клиентские конфигурационные ключи ''[[Параметры_файлов_конфигурации#ExportCsvDelimiter|ExportCsvDelimiter]]'' и ''[[Параметры_файлов_конфигурации#ExportTextDelimiter|ExportTextDelimiter]]'', позволяющие установить разделители столбцов при выгрузке данных в файлы соответствующих форматов. Список возможных значений: ''comma'', ''space'', ''semicolon'', ''tab''.<br />
* Добавлен клиентский конфигурационный ключ ''[[Параметры_файлов_конфигурации#PhoneAllowHotline|PhoneAllowHotline]]'', позволяющий отключить режим HOTLINE при звонке на пустой номер в режиме использования локального устройства.<br />
* Реализована обработка клика на ссылках в полях обмена сообщениями - открытие в браузере.<br />
* В диалоговых web-формах реализована возможность производить действия ''ДАЛЕЕ'' и ''СТОП'' путем изменения веб-страницей заголовка на специальные значения (''oktellcommand_next'', ''oktellcommand_stop'', ''oktellcommand_nextforce'', ''oktellcommand_stopforce'').<br />
* Реализован импорт таблиц абонентов из файлов CSV.<br />
* Добавлен клиентский конфигурационный ключ ''[[Параметры_файлов_конфигурации#SipForceKeepAliveIntervalSec|SipForceKeepAliveIntervalSec]]'', позволяющий принудительно включить отправку keep-alive пакетов в SIP подключение локального устройства и установить определенный параметром интервал.<br />
* Добавлен клиентский конфигурационный ключ ''[[Параметры_файлов_конфигурации#SipDomainMode|SipDomainMode]]'', позволяющий устанавливать режим определения доменного имени сервера для подключения локального устройства. По умолчанию используется IP-адрес сервера, определенному для текущего подключения в конфигурационном файле. Могут также использоваться параметры, переопределяющие доменное имя и порт, соответствующие текущему подключению (''SipDomain'', ''SipPort'' с соответсвующим числовым суффиксом или без него), которые могут применяться для подключения к прокси-серверу или к серверу, находящемуся за NAT с переопределенным портом взамен стандартного.<br />
* Добавлены клиентские конфигурационные ключи ''[[Параметры_файлов_конфигурации#SipDomain|SipDomain]]'', ''[[Параметры_файлов_конфигурации#SipPort|SipPort]]'', позволяющие явно переопределить домен и порт SIP-сервера для конкретного подключения в случае использования нестандартных настроек NAT.<br />
* Исправлены некоторые ошибки клиентского SIP-модуля, обслуживающего подключение локального устройства к серверу.<br />
* Реализована поддержка ''[http://ru.wikipedia.org/wiki/DTLS DTLS-соединения]'' в модуле HAL-SIP, ответственном за ''[http://ru.wikipedia.org/wiki/WebRTC WebRTC]''.<br />
* Реализована поддержка ''[http://ru.wikipedia.org/wiki/WebRTC WebRTC]'' при работе с Mozilla Firefox.<br />
* Реализована поддержка сквозных видео-звонков между SIP-устройствами, подключенными к серверу.<br />
* Выявлена и устранена проблема в безопасности SIP-подключений.<br />
* Выявлен и устранен ряд частных проблем в HAL.SIP, связанных с блокировками, исключениями, ростом памяти, отправкой некорректных данных в SIP-запросах/ответах.<br />
* Исправлена ошибка в работе межсерверного взаимодействия, связанная с обнулением списка отделов после перезагрузки сервера состояний.<br />
* Исправлена ошибка менеджера задач, влекущая разрыв разговора оператора с третьим лицом в случае обрыва внешней линии, находящейся на удержании.<br />
* Исправлена проверка прав при приглашении участниками новых абонентов в закрытые конференции.<br />
* Исправлена ошибка АТС, в следствие которой неверно определялись персональные внутренние номера пользователей.<br />
* Исправлена ошибка в работе компонента «Файловая операция» в режиме определения размера файла.<br />
* Исправлена ошибка менеджера служебных задач. Симптом: суточная периодическая задача с узким временем работы после перезапуска сервера не срабатывает в первые сутки.<br />
* Исправлена ошибка в работе контрольного события о выходе оператора из КЦ.<br />
* Исправлена проблема кодирования имен файлов в формируемых ZIP-архивах.<br />
* Исправлена ошибка менеджера голосовых задач, связанная с отсутствием в статистике состояния поствызывной обработки у оператора, осуществившего переключение абонента на IVR с выходом из задачи.<br />
* Исправлена ошибка отображения и сохранения национальных символов в истории сообщений чата.<br />
* Исправлена ошибка авторизации, связанная с невозможностью входа пользователя после однократного попадания в ситуацию нехватки пользовательских лицензий.<br />
* Исправлена ошибка сохранения неудачного звонка в БД, в результате которой фиксировалась команда набора, а не сам номер.<br />
* Исправлена ошибка АТС при осуществлении звонков на шлюзы с внутренними линиями - не подставлялся Caller-name.<br />
* Исправлена ошибка модуля «Мои звонки», не дававшая перезвонить на неудачный номер.<br />
* Поправлено контрольное событие "Пропуск звонка" при отклонении звонка оператором в задаче - CallerId не сохранялся.<br />
* Исправлены несколько ошибок логирования и сетевого взаимодействия, способные при определенных условиях привести к росту памяти службой сервера.<br />
* Устранено удаление данных из базы oktell_cc_temp при очистке оперативной статистики по задачам с закреплением абонентов за операторами.<br />
* Устранена проблема длительного зацикливания менеджера голосовых задач при поиске оператора для абонента через хранимую процедуру в приоритетной исходящей задаче с запросом/уведомлением при отсутствии подходящих операторов.<br />
* Добавлена подстановка Caller-name при звонках на шлюзы с внутренними линиями.<br />
* Исправлена проблема менеджера голосовых задач, связанного с подвисанием линии в случае выхода оператора из КЦ во время запроса на дозвон.<br />
* Исправлена проверка прав на внешние линии/направления при подключении к разговору.<br />
* Устранена ошибочная привязка ограничения количества потоков в текстовых задачах к количеству внешних линий в системе.<br />
* Устранена ошибка менеджера голосовых задач, связанная с ложным повторным прозвоном завершенных абонентов, возникающая вследствие таймаута запроса к БД на синхронизацию таблицы абонентов.<br />
* Устранена проблема роста памяти вследствие использования динамических рабочих мест, возникающая при частой перезагрузке сервера состояний.<br />
* Исправлена работа контрольного события «Операторов меньше установленного».<br />
* Исправлена ошибка предиктивных задач. Симптом: при выходе последнего оператора из колл-центра задача продолжает набирать номера абонентов.<br />
* Исправлена ошибка PBX, в ходе которой возникала отвязка SIP-телефона от стационарного рабочего места после использования телефона в динамической связи.<br />
* Исправлена ошибка, приводящая к неотправке SIP сообщения NOTIFY с информацией о состоянии абонента сразу после подписки.<br />
* Исправлена ошибка сохранения в БД звонка на шлюзы, зарегистрированные на сервере с режимом набора «Аккаунт, затем номер», в результате которой фиксировалась команда набора, а не сам номер.<br />
<br />
<br />
<br />
<br />
====версия 2.10 (20.01.2014)====<br />
<br />
<br />
* Веб-клиент получил возможность отображать ''[[Компоненты сценариев диалога#WebForm|веб-формы]]'' диалоговых сценариев (без подстановки значений в поля).<br />
* Реализовано сохранение сессий веб-клиентов в БД в целях сохранения между производимыми перезагрузками сервера.<br />
* Реализована политика прав доступа пользователей к объектам Call-центра. Проекты, таблицы абонентов, задачи, индикаторы, отчеты и дашборды получили возможность определять индивидуальные права доступа. Соответствующие общие привилегии в ролях на изменение и удаление объектов ликвидированы.<br />
* ''[[Таблицы абонентов]]'' получили возможность назначать столбцам с типом данных ''uniqueidentifier'' смысловой тип ''Идентификатор оператора''. Применяется в задачах с закреплением абонентов за операторами.<br />
* В задачах ''[[Голосовые задачи#FixOperator|с закреплением абонента за оператором]]'' активирована периодическая синхронизация с таблицей абонентов для задач этого типа. Реализована возможность выбора - запрос на дозвон или уведомление оператору. Скорректирована процедура очистки кэша.<br />
* Произведена оптимизация и корректировка механизма поиска очередного абонента для звонка по [[Голосовые задачи|задаче]] при использовании ''[[Голосовые задачи#DBCache|кэша в БД]]''.<br />
* Реализован новый тип задач ''Поиск абонента для оператора''.<br />
* Реализовано состояние ''ручного режима в Call-центре'', фактически приостанавливающее использование оператора исходящими задачами. В пространственной таблице операторских состояний для этого выделено отдельное состояние (код 12). В запросы [[Oktell_Web-Socket_Protocol|WebSocket-интерфейса]] (''setuserstate'') и COM-интерфейса введено свойство для управления состоянием. В модулях ''[[Ресурсы]]'' и ''[[Операторы]]'' отображение состояния в виде пиктограммы ''«М»'' и доступ к управлению состоянием для супервизора.<br />
* Реализована первая версия задач с прогрессивно-предиктивным набором. В конфигурационный файл вынесены константы ''[[Параметры_файлов_конфигурации#PredictivePoolTimerIntervalMs|PredictivePoolTimerIntervalMs]]'', ''[[Параметры_файлов_конфигурации#PredictivePoolClearStatOnDeactivate|PredictivePoolClearStatOnDeactivate]]'', ''[[Параметры_файлов_конфигурации#PredictivePoolExtraShiftTimeoutMs|PredictivePoolExtraShiftTimeoutMs]]''.<br />
* Реализована возможность выдачи прав доступа к записям разговоров по внешним направлениям. Ранее была доступна установка права доступа для всех внешних линий сразу.<br />
* Добавлены новые фирменные мелодии ожидания. Применяются автоматически, если в системе используются мелодии по умолчанию. <br />
* Работа локальных устройств и гарнитур в клиентском приложении переведена на протокол SIP. Как результат незначительно изменилось управление модулем ''[[Телефон]]''.<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлен ряд новых функций. Присоединение звонка к задаче с возможностью указания ид абонента (задание параметра через json-хеш с ключами ''{task|user, idinlist}''). Определение расписания задачи (по текущему времени). Определение рабочего времени офиса с учетом настроенных праздников (по указанному времени). Перезагрузка общих настроек из БД. Изменение ограничения максимального количества внешних линий для задач (-1 - снятие лимита). Установить для пользователя: статус, занятость, переадресация, перерыв, кц, ручной режим кц.<br />
* В компонент IVR-сценариев ''[[Компоненты сценариев IVR#Switch|Переключение]]'' добавлена возможность сохранять код отказа SIP, а также при переключении на внутренние номера указывать сигнал вызова (значение SIP-заголовка ''Alert-Info'').<br />
* Компонент диалоговых сценариев ''[[Компоненты сценариев диалога#WebForm|Веб-форма]]'' получил возможность определять поведение при нажатии на кнопку ''ДАЛЕЕ''. Возможность заблокировать кнопку в принципе, продолжить, а также ''SUBMIT'' веб-документу.<br />
* Исправлена ошибка в работе компонента сценариев ''[[Общие компоненты сценариев#EmailReceive|Получение E-mail]]'' в режиме работы с IMAP сервером.<br />
* Исправлена ошибка компонента сценариев ''[[Общие компоненты сценариев#EmailSend|Отправка E-mail]]'', связанная с блокировкой выбранных файлов вложений на некоторое время после завершения работы компонента. <br />
* В компонентах сценариев ''[[Компоненты служебных сценариев#Call|Дозвон]]'', ''[[Компоненты сценариев IVR#SwitchExt|Переключение на внешние линии]]'' и ''[[Компоненты сценариев IVR#Switch|Переключение]]'' реализовано защитное преобразование выбранного режима перед началом работы в соответствии с модулем-инициатором запуска.<br />
* В компоненте сценариев ''[[Общие компоненты сценариев#WebRequest|WEB-запрос]]'' добавлена возможность осуществлять запросы ''PUT'', ''HEAD'', ''DELETE''. Исправлена работа с Cookies.<br />
* Ряд мелких исправлений в компонентах сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'', ''[[Общие компоненты сценариев#WebRequest|WEB-запрос]]''.<br />
* Оптимизирована передача данных из веб-сервиса 1C в сценарий с помощью компонента ''[[Общие компоненты сценариев#1CQuery|Запрос к 1С]]''.<br />
* Служебные сценарии получили возможность запускать процессы на клиенте с помощью нового компонента (через указание пользователя, который должен быть авторизован через толстое приложение или COM-ядро).<br />
* В модуле ''[[Сценарии АТС#SvcUserChanged|общих настроек]]'' добавлена возможность выбора служебного сценария уведомления об изменении учетной записи пользователя с передачей кода операции (1-создание, 2-изменение, 3-удаление), ид пользователя, логина, незашифрованного пароля, имени. Пароль передается только при создании или при изменении с модификацией пароля, иначе просто пустая строка. При удалении только идентификатор передается.<br />
* В модуле ''[[Сценарии АТС#SvcUserStateChanged|общих настроек]]'' добавлена возможность выбора сценария уведомления о входе/выходе пользователя в систему.<br />
* В модуле ''[[Настройки_Call-центра#SvcSupervisorHelp|общих настроек]]'' добавлена возможность выбора служебного сценария обработки запроса помощи супервизора.<br />
* [[Oktell_Web-Socket_Protocol|WebSocket-интерфейс]] дополнен пользовательскими методами: ''checkmyuserprivilege'', ''getmyuserprivileges'', ''pbxanswercall'', ''updatesession''. Серверными методами: ''wp_setuserstate'', ''wp_getuserstate'', ''closecallbychain'', ''getalluserstates'', ''subscribeevent'', ''unsubscribeevent'' и серверным событием ''srv_userstate''.<br />
* В [[Oktell_Web-Socket_Protocol|WebSocket-интерфейсе]] реализована возможность хранения файлов, прикрепленных к сообщениям чата, под уникальными именами (свойство ''hidefiles'' метода ''chatsendmessage'').<br />
* В COM интерфейс добавлены методы ''Conf_AttachToGhost(string ghostid)'', ''string Conf_SetGhostMode(string xml)'', позволяющие организовать прослушивание в реальном времени. Исправлены некоторые ошибки.<br />
* Расширена функциональность [[Серверный_HTTP_интерфейс|веб-сервера]]. Реализована возможность исполнять служебные сценарии без прохождения авторизации на сервере (с помощью запроса специальным образом настроенных веб-страниц в подпапке ''WWW''). Обработка запросов с ''transfer-encoding:chunked''. Запросы ''checklicenseactual'', ''closecallbychain''.<br />
* Добавлен ключ конфигурации ''[[Параметры_файлов_конфигурации#WebServerNoAuth_Loopback|WebServerNoAuth_Loopback]]'', позволяющий отключить требование авторизации при обращении к [[Серверный_HTTP_интерфейс|веб-серверу]] с собственного адреса сервера.<br />
* Исправлен ряд недочетов в менеджере голосовых задач. Таймеры и периоды активности задач. Пауза перед резервированием освободившегося оператора. Отбой внешней линии во время длительного исполнения запроса в БД перед входом в задачу приводил к зависанию линии оператора после попытки соединения. Корректное размещение в статистику информации о звонке при присоединение существующего звонка к задаче. Корректное полное удаление оператора из обработчика входящей задачи. При использовании сценария поиска абонента не применялось указание на завершение задачи, если идентификатор абонента не установлен сценарием в служебную переменную.<br />
* Косметические исправления в модуле ''[[Пользователи]]''.<br />
* Добавлена новая ролевая привилегия ''Возможность редактирования запросов SQL''. <br />
* Исправлены незначительные ошибки в модуле ''[[Настройки_SIP-модуля|Настройки аппаратуры]]''.<br />
* Исправлено отображение таблицы журнала звонков в модуле ''[[Мои контакты]]''.<br />
* Исправлены ошибки в модуле ''[[Статистика#Диаграммы и настройка|Статистика call-центра]]'', а также реализована возможность использовать предопределенную переменную ''@authorizeduserid'' (в отчетах из хранимых процедур - таблицу ''#authorizeduserid'') для привязки отчетов к конкретным пользователям.<br />
* Косметические исправления в модуле ''[[Ресурсы]]''. Ошибка скрытия неактивных пользователей. Ошибка при отрисовке списка задач при определенных условиях. Кэширование данных по запросу производилось без учета выбранного интервала расчета.<br />
* Косметические исправления в ''[[Редактор_web-форм|дизайнере диалоговых веб-форм]]''. Назначение переменных в качестве значений (слетало в константу). Удалена привязка выпадающих списков к начальным значениям.<br />
* Добавлено управление масштабом в диалоговых веб-формах и других модулях, использующих встроенный браузер.<br />
* Из ''[[Редактор_карты_сети|карты сети]]'' удалены USB-телефоны. Теперь учетной записью для работы локального устройства снабжаются компьютеры, не связанные с объектами SIP-телефонов и аналоговых телефонов, а также динамические рабочие места.<br />
* Устранен рост памяти в SIP-сервере при работе с динамическими транками.<br />
* Исправлены обнаруженные ошибки и недочеты в SIP-сервере. При forking-вызове не всегда отправлялся CANCEL. При одновременном поступлении SIP-ответов 180 и 183 не всегда была успешной последующая коммутация. Отключение таймеров при определенных условиях. <br />
* Исправлена ошибка в определении пути для сохранения резервных копий БД, если в конфигурационном файле установлено нестандартное значение базового каталога для резервных копий. Симптом: файл всегда перезаписывался и хранился в единственном экземпляре.<br />
* Исправлена ошибка сервера, приводившая к остановке периодических процессов, в том числе автоматического управления графиком перерывов операторов.<br />
* Исправлена ошибка, связанная с неотображением в статистике причины перерыва, выставленной оператором, после осуществления оператором звонка вручную.<br />
* Некоторые незначительные исправления в АТС. Сброс состояний, приводивших в некоторых случаях к отсутствию сигнала КПВ при исходящих звонках.<br />
* В модуле автодозвона реализован обратный вызов оператора с использованием интеркома.<br />
* Исправлена ошибка в автоматическом удалении записей разговоров по истечении времени хранения, приводившая к пропуску некоторых файлов.<br />
* Исправлено значение свойства ''TimeStop'' в [[Сценарии_АТС#SvcContent|контенте линии]], ранее всегда имел нулевое значение.<br />
* Введен отладочный конфигурационный параметр ''[[Параметры_файлов_конфигурации#DEBUG_LogActiveThreadStackTrace|DEBUG_LogActiveThreadStackTrace]]'' для периодического вывода в лог Debug информации о стеке всех активных потоков.<br />
<br />
<br />
<br />
<br />
====версия 2.9 (02.10.2013)====<br />
<br />
<br />
* Обнаружена и исправлена ошибка SIP-сервера, в ходе которой полученные повторные ответы 200 OK на сообщения REGISTER приводили к блокировке аккаунта вплоть до перезагрузки<br />
* Исправлен выбор расширения для файла в компоненте IVR сценариев ''[[Компоненты сценариев IVR#Record|Запись]]'' в соответствии с выбранным кодеком.<br />
* Исправлена ошибка элемента управления ''таблица'' клиентского приложения, приводившая в ходе удаления нескольких выделенных строк к некорректному определению индексов.<br />
* Реализовано определение номеров и доступ к функциям ''CallerId'' и ''CalledId'' из сценария для шлюзов с внутренними линиями.<br />
* Восстановлен разбор мультипартовых SIP-INVITE сообщений.<br />
* Обнаружена и исправлена проблема периодического отсутствия отчета об успешной работе факса, несмотря на удачное завершение приема/передачи.<br />
* Реализовано сохранение кода отказа SIP в статистике исходящих попыток звонков в колл-центре, а также их передача в сценарий обработки результата попытки звонка по задаче.<br />
* Реализовано перенаправление звонков на указанный адрес при получении SIP-ответа ''3xx Moved''. Для звонков по шлюзам без регистрации и шлюзам межсерверного взаимодействия, а также для звонков на внутренние номера, не использующие SIP-forking.<br />
* Обеспечена возможность генерации сигналов КПВ в SIP-линии, по которым был отправлен предварительный ответ ''183 Session Progress''.<br />
* Обнаружена и исправлена проблема неверного отображения свойств компонента ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' в режиме ''установить для линии''.<br />
* Реализована предварительная проверка параметров лицензии при добавлении [[Динамическое_управление_картой_сети|динамических транков]].<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлена возможность определения параметров лицензии, количества используемых линий, пользователей, а также команда принудительного обновления сертификата.<br />
* Исправлена привязка звонка к задаче с помощью компонента ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' через пользователя. <br />
* Исправлена ошибка SIP-сервера при работе за NAT. Симптом: в поле Contact подставлялся локальный адрес.<br />
* Реализовано обновление состояния входящих регистрационных сессий по динамическим потокам при перезагрузке сервера, если динамические потоки загружаются на старте).<br />
* Исправлена функция ''CallerId'' в сценариях IVR для внутренних линий SIP шлюзов. Симптом: возвращает пустоту.<br />
* Исправлена работа компонента сценариев ''[[Общие компоненты сценариев#WebRequest|WEB-запрос]]''. Симптом: после перехода на .NET v4.0 многократная работа компонента в различных сценариях после нескольких сот тысяч запросов прекращает отправку.<br />
* Реализован дополнительный вариант фильтрации по правам компонентов ''[[Компоненты сценариев IVR#SwitchExt|Переключение на внешние линии]]'' и ''[[Компоненты служебных сценариев#Call|Дозвон]]'' - по приоритетам линий.<br />
* Размещение информации по вручную прикрепленному к задаче звонку в пространственной таблице колл-центра ''EffortConnections''.<br />
* Исправлено отображение задач в модуле ''[[Ресурсы]]''. Симптом: при некоторых обстоятельствах выводятся не все задачи.<br />
* Исправлена ошибка SIP-forking: множественный звонок при исходящем же отбое не инициировал завершение одной из сессий.<br />
* Обнаружена и исправлена некорректная обработка одновременных встречных Cancel <-> Ok, приводившая к подвисанию звонка вплоть до разрыва вручную.<br />
* Исправлена генерация номеров динамических линий. Некорректное дублирование приводит к проблемам в коммутировании линий.<br />
* Исправлена загрузка сильно вложенного и взаимозамкнутого [[Внутренние номера#Rules|номерного плана]].<br />
* Исправлена ошибка WebRTC, возникающая при закрытии вкладки браузера с активной сессией разговора.<br />
* В интерфейс [[Oktell Web-Socket Protocol|WebSocket]] добавлены методы ''сс_addoperatortotask'', ''cc_removeoperatorfromtask'', ''cc_settaskactive''.<br />
* Реализован обмен сообщениями в веб-клиенте в виде диалогов. Интерфейс [[Oktell Web-Socket Protocol|WebSocket]] сервера пополнен рядом методов.<br />
* Добавлен режим запуска [[Служебные задачи|служебных задач]] - ''На старте сервера''.<br />
* Реализовано сохранение в БД информации о текущем состоянии регистрации всех SIP-потоков системы (таблица A_StreamRegistration).<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' внесены функции добавления/удаления оператора в задачу.<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлена возможность определения заголовков из входящего SIP INVITE или 200OK сообщения.<br />
* В выражения сценариев добавлена функция ''[[Выражения#Translit|translit]]''.<br />
* Исправлена [[Серверный HTTP интерфейс#upload|закачка файлов]] на веб-сервер Oktell при отсутствии заголовка Content-transfer-encoding.<br />
* Добавлена ролевая привилегия редактирования групп [[Мои контакты|контактов]].<br />
* Добавлена ролевая привилегия работы с [[Мои контакты|контактами]] из общих групп. Запрещает удалять и редактировать общие контакты, назначать личным контактам общие группы, а также создавать, редактировать и удалять общие группы.<br />
* Восстановлена работа функции ''Время отсутствия звука в линии'', возвращаемая компонентом ''[[Общие компоненты сценариев#UserState|Статус объекта]]''.<br />
* Оптимизирована с точки зрения объема используемой памяти обработка входящих SIP-сообщений.<br />
* Оптимизировано обновление [[Динамическое_управление_картой_сети|динамической карты сети]] в случае, когда изменений фактически не производится.<br />
* Обнаружена и исправлена ошибка сохранения имен контактов и пользователей с символом перевода строки, который отрицательно влияет на формирование SIP-сообщений.<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлена возможность определения локальных адресов сервера.<br />
* Исправлена работа компонента ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' в части установки свойств конференциям.<br />
* Исправлена функция ''UrlDecode'' в разделе [[Выражения|выражений сценариев]].<br />
* Обнаружена и обработана проблема фильтрации отправляемого SIP сообщения CANCEL при моментальной отмене до получения предварительного ответа.<br />
* В модулях клиентского приложения заменен браузер. Встроено ядро браузера CHROME.<br />
* В режиме дизайнера веб-форм добавлена возможность выбирать в качестве источника файлы MHT.<br />
* В компонент сценариев «Файловая операция» добавлена функции взятия хеша MD5 от содержимого.<br />
<br />
<br />
<br />
<br />
====версия 2.8 (26.07.2013)====<br />
<br />
<br />
* Реализована возможность [[Параметры_АТС#StrongPassword|запрета использования простых паролей]].<br />
* Реализована возможность [[Параметры_АТС#PaidNumbers|автоматического запрета всех исходящих звонков на несанкционированные номера]].<br />
* Реализована возможность использования динамических рабочих мест [[Параметры файлов конфигурации#EnableAutoMapSip|с автоматической привязкой к существующим в карте сети SIP-телефонам]].<br />
* Реализован альтернативный способ управления гарнитурой с клавиатуры, поддерживающий работу в x64 системах.<br />
* Обнаружена и устранена причина периодических зависаний клиентского приложения в совершенно различных модулях.<br />
* Реализовано рабочее место оператора в web-клиенте, поддерживающее отображение [[Компоненты сценариев диалога#Диалоговая форма|диалоговых форм стандартного типа]].<br />
* Добавлен ряд новых функций в компонент сценариев [[Общие_компоненты_сценариев#Статус объекта|«Статус объекта»]]: определить для линии время отсутствия входящего звука, определить вхождение линии в направление, определить идентификатор и номер скоммутированной линии/конференции, определить наличие привилегии у пользователя, принудительно перерегистрировать сип-аккаунт или все сип-аккаунты, определить внешний IP-адрес сервера через STUN-запрос, сохранить скриншот пользователя.<br />
* Реализована возможность использовать одновременно связь с CRM и web-клиентов на основе OktellJS.<br />
* Реализована возможность использовать защищенные каналы связи (TLS) для работы c web-сервером Oktell. Касается взаимодействия по [[Серверный_HTTP_интерфейс|HTTP-API]], а также для работы [[Oktell_Web-Socket_Protocol|web-socket]] каналов.<br />
* Реализована возможность подключаться к CRM по http/https в альтернативу [[Oktell_Web-Socket_Protocol#Arch1|websocket-соединениям]].<br />
* Обнаружена и исправлена проблема версии Oktell 2.8 по использованию плагинов внутри собственного процесса.<br />
* Добавлены ролевые привилегии: возможность исполнять методы Web-API, доступ к скачиванию записей разговоров.<br />
* Изменена настройка [[Настройки_веб-сервера|HTTP-веб-сервера]], WebSocket-сервера, [[Интеграция_с_Web-Socket_CRM|подключения к WebCRM]] и Web-клиента, настройка сертификатов X509 для работы TLS.<br />
* Исправлена проблема проверки и отключения лицензий в случае одновременного использования динамических рабочих мест и плат телефонии, а также превышения общего количества линий.<br />
* Исправлены некоторые обнаруженные ошибки отображения в клиентском приложении.<br />
* Исправлена проблема менеджера задач по работе с индивидуальными операторскими задачами в режиме запроса на звонок. Симптом: если оператор оставляет окно запроса на звонок на срок более получаса, абонент подвисает и задача не может быть завершена до перезагрузки сервера.<br />
* Исправлена выдача страниц [[Серверный_HTTP_интерфейс|HTTP-веб-сервером]]. Симптом: неверный content-type, вследствие чего ответы скачивались, а не отображались браузерами.<br />
* Добавлена автоматическая выдача веб-сервером файлов index.html из подпапок.<br />
* Добавлена возможность управления поведением компонента [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние]] в режиме ''прослушивания медиа-потока'' через [[Параметры_файлов_конфигурации#PBX_Use180SdpAs183|конфигурационный файл]]. Решается задача переключения между генерацией КПВ (длинных гудков) и медиа-соединением при получении последовательности различных ответов 180, 183.<br />
* В сценариях реализован новый [[Переменные#Types|тип переменных]] с глобальной серверной областью видимости без привязки к сессиям. Существующие глобальные переменные преобразованы в сессионные.<br />
* Реализована функция [[Управление базами данных#ComputeVoices|расчета времени владения разговором в коммутациях]].<br />
* Добавлена функция NowTick в [[Выражения|выражения сценариев]].<br />
* При удалении нелицензированных внутренних линий внедрена функция выбора преимущественно каналов, не находящихся в коммутации.<br />
* При отправке факс-сообщения установлено принятие за успешный результат отправки хотя бы одной страницы.<br />
* Реализована возможность [[Динамическое управление картой сети|динамического управления]] объектами в карте сети с помощью сценариев (json-структура в компоненте [[Общие компоненты сценариев#UserState|«Статус объекта»]]).<br />
* При обновлении клиентского приложения с сервера реализовано отображение процента завершения скачивания архива.<br />
* Добавлен разбор [http://ru.wikipedia.org/wiki/JSON JSON]-форматированных строк в сценариях с помощью компонента [[Общие компоненты сценариев#Parser|«Парсер»]].<br />
* Реализована [[Свойства компонентов#SipPhone|поддержка WebRTC]] в HAL.SIP.<br />
* Реализована функция [[Свойства компонентов#SipPhone|SIP.forking]] - множественная регистрация устройств под одной учетной записью.<br />
* В веб-операторе реализована поддержка WebRTC и регистрация телефона на сервере Oktell (нового или вторым подключением к существующему).<br />
* Добавлен ряд возможных событий-команд для работы плагинов: ''declinecall'', ''connectabonents'', ''makeflash''<span style="color:gray;">(mode=''abort''|''next''|''switch'')</span>.<br />
* Модернизировано сохранение пользовательских сообщений через очередь доступа к БД.<br />
* В компоненте сценариев [[Общие компоненты сценариев#UserState|«Статус объекта»]] реализованы дополнительные функции для взаимодействия с конференциями.<br />
* В компоненте сценариев [[Общие компоненты сценариев#UserState|«Статус объекта»]] реализованы дополнительные функции для взаимодействия с направлениями.<br />
* В АТС внедрена функция отказа от вызова без фиксации пропущенного вызова на телефоне, если отказ производится по причине снятия трубки другим абонентом вызываемого группового номера.<br />
* Реализована функция сквозной коммутации в состоянии early-media (SIP-сообщение ''183 Session Progress'') с обеих сторон.<br />
* Реализована функция подключения текущего звонка к задаче через клиентский модуль [[Мое рабочее место|«Мое рабочее место»]], через компонент [[Общие компоненты сценариев#UserState|«Статус объекта»]], а также через компонент сценариев [[Компоненты служебных сценариев#Connector|«Коммутатор»]] и командой [[Oktell_Web-Socket_Protocol#attachcalltotask|cc_attachcalltotask]] в интерфейсе websocket.<br />
* Добавлены задачи нового типа [[Голосовые задачи#ManualCall|«Дозвон вручную»]] для организации кампаний с полностью ручным определением абонентов и их вызовом.<br />
* Реализована поддержка gzip в [[Серверный_HTTP_интерфейс|веб-сервере]] при отправке скриптов и документов.<br />
* Реализована функция динамической регистрации учетной записи SIP-телефона и привязки ее к рабочему месту в браузере с использованием webrtc.<br />
* Оптимизировано сохранение [[Карта сети|карты сети]] путем частичного изменения.<br />
* Оптимизировано сохранение [[Настройки оборудования|настроек аппаратуры]].<br />
* В контекстное меню модуля [[Ресурсы|«Ресурсы»]] добавлены команды ''Позвонить'', ''Подключиться к разговору'', ''Отправить сообщение операторам задачи''.<br />
* В модуле «Ресурсы» по умолчанию удалены из отображения линии. Включить можно в разделе «Администрирование. Клиентское приложение».<br />
* В интерфейс websocket добавлена команда [[[[Oktell_Web-Socket_Protocol#pbxmakeflash|''pbxmakeflash'']]. В функцию [[Oktell_Web-Socket_Protocol#login|''login'']] добавлено свойство ''usewebrtc'', в ответе приводятся параметры для подключения SIP-софтфона или WebRTC-софтфона.<br />
* Изменено хранение пользовательских сообщений в БД, произведена нормализация с учетом массовых сообщений. <br />
* Реализована функция прослушивания канала, являющегося участником конференции. Теперь в момент прослушивания доступен звук со всех участников конференции.<br />
* В компонент сценариев IVR [[Компоненты сценариев IVR#PlayFile|«Воспроизведение»]] добавлен режим генерации DTMF.<br />
* Обновлены стандартные [[Статистика|отчеты коллцентра]].<br />
* Реализована нормальная обработка комбинации HOLD + Soft Flash в АТС.<br />
* Изменен порядок привязки SIP-сообщений к сессиям. Теперь одинаковые callid не являются проблемой, если используются в рамках разных учетных записей.<br />
* Реализовано сохранение в статистике и проброс в [[Голосовые задачи#EffortResultScript|сценарий обработки результата попытки]] в качестве 5-го неявного параметра кода ответа-отказа SIP при исходящих звонках.<br />
* В сценарии IVR добавлена возможность определять файл записи/воспроизведения с помощью выражения.<br />
* Добавлен новый тип отображения отчетов - [[Статистика#VertHysto|вертикальная гистограмма]].<br />
* Изменено отображение отчетов типа [[Статистика#Plane|«Плоскость»]]. Теперь в качестве значений допускаются ''NULL''.<br />
* Добавлено сохранение идентификаторов сессии и коммутации в [[Управление базами данных#DTMFflow|таблицу DTMF сигналов]].<br />
* Реализована возможность [[[[Конференц-связь#Управление конференцией с помощью DTMF|управления конференцией с телефона через DTMF]]. Преобразование коммутации в конференцию, приглашение участников, отключение участников, завершение конференции.<br />
* Реализовано хранение данных в БД о регистрациях клиентских SIP устройств, и применение их при перезапуске HAL и сервера.<br />
* Исправлено прослушивание записей конференций. Происходила ошибка при нахождении клиента и сервера в разных часовых поясах.<br />
* Исправлены некоторые проблемы в HAL.VoIP сервере, связанные с отключением устройств из-за потери связи.<br />
* Исправлена ошибка, связанная с невозможностью изменить базовый порт SIP (5060).<br />
* Исправлена ошибка предварительного преобразования многостраничных .tiff изображений в клиентском приложении при отправке факсов. При использовании клиентского модуля преобразований оставалась только первая страница.<br />
* Добавлено описание прослушиваемой конференции во встроенный плеер.<br />
* Исправлена проблема изредка наблюдаемого явления отсутствия звука в SIP-телефонах после изменения параметров сессии.<br />
* Обнаружены и устранены некоторые оставшиеся проблемы при работе шлюза без регистрации из-за NAT.<br />
* Обнаружена и исправлена ошибка в сохранении приоритета [[Запись разговоров|общих правил записи коммутаций]].<br />
* Обнаружена и устранена проблема загрузки ресурсов плагина в версии 2.8, работающей в среде .NET Framework v4.0. <br />
* Обнаружена и устранена проблема в триггере БД при сохранении пользовательских сообщений, приводящая при больших нагрузках к блокировкам и откату транзакций сохранения.<br />
* Обнаружена и устранена проблема общего торможения АТС при массовых задержках ответов на отправляемые сервером SIP-сообщения CANCEL.<br />
* При использования сценария набора номеров для приглашения новых участников конференции организована передача данных о пользователе-инициаторе вызова.<br />
* Обнаружена и исправлена ошибка АТС, приводящая при определенных условиях использования режима HOLD к подвисанию канала вплоть до ручного сброса в мониторинге.<br />
* Исправлена ошибка раздела [[Настройки оборудования|«Параметры аппаратуры»]] клиентского приложения, связанная с невозможностью сохранить измененные значения после повторного переключения в модуль.<br />
* Понижены минимальные возможные границы для некоторых настроек (мин время в очереди, макс время переключения на оператора, время Hunt-вызова)<br />
* Исправлена работа функции управления гарнитурой с клавиатуры в COM-ядре клиентского приложения.<br />
* Обнаружена и исправлена ошибка [[Серверный_HTTP_интерфейс|веб-сервера]], связанная с использованием одного порта в нескольких настройках. При переключениях порт может быть фантомно занят вплоть до перезагрузки службы.<br />
* Исправлена функция мягкого разрыва. Не производился разрыв существующей коммутации, что в случае использования [[Сценарии АТС#ScrInsteadBusy|«сценария вместо отбоя»]] могло приводить к неожиданным эффектам.<br />
* Исправлена ошибка обратного отзвона из удержания. При определенных обстоятельствах первым на дозвон мог разместиться абонент из общей очереди, и лишь затем удерживаемый ранее абонент.<br />
* Исправлена ошибка набора номеров при вызове шлюзов с регистрацией на сервере через аккаунт. Символы w, z, q воспринимались как служебные.<br />
* Понижен приоритет отложенных операций микширования, упаковки и расчета владения разговором.<br />
* Исправлена ошибка в автодозвоне при звонках на быстрые номера. При неудачном вызове и отказе от звонка возможно зависание линии до сброса вручную в мониторинге.<br />
* Исправлен ряд ошибок, добавлены новые функции в рабочее место оператора в вебе.<br />
* Реализовано нелимитированное сохранение резервных копий БД и сценариев с фильтрацией по временным интервалам.<br />
* Изменено поведение входящей задачи при неснятой оператором трубке и запрещенной к использованию очереди. Ранее вызов отправлялся всем операторам сразу. Теперь звонок возвращается в IVR.<br />
* Изменено значение [[Параметры файлов конфигурации#EnableAutoMap|конфигурационного ключа ''EnableAutoMap'']]. По умолчанию теперь включено для поддержки работы веб-софтфона из рабочего места оператора.<br />
* Исправлена ошибка перевода в перерыв в колл-центре, влекущая разрыв текущей коммутации.<br />
* Исправлена ошибка АТС, оставляющая пустыми значения callerid и calledid при звонках со шлюзов с внутренними линиями.<br />
* В конфигурационный файл клиентского приложения внесен параметр (''ShowLoadingBar = 0''), позволяющий отключить окно ожидания загрузки.<br />
* Исправлена ошибка в модуле [[Переадресация|«Переадресация»]]. Не происходило перетаскивание правил.<br />
* В модуле [[Кабинет#Заказы на встречные звонки|«Кабинет. Встречные звонки»]] восстановлено контекстное меню.<br />
* Выявлена проблема подключения плагинов из сторонних каталогов в версии 2.8. В конфигурационных файлах клиентского приложения и oktell.PluginStarter требуется указание <span style="color:green;">''<runtime><loadFromRemoteSources enabled="true"/></runtime>''</span>.<br />
* Исправлена функция переключения на сценарий IVR путем подмены. Состояние не выставлялось требуемое.<br />
* Исправлена проблема некорректного пересчета SeqNum в исходящем RTP потоке при смене SSRC. В некоторых случаях после смены звук пропадает.<br />
* Исправлена проблема загрузки гарнитуры с неопределенными устройствами ввода-вывода.<br />
* Исправлена ошибка SIP, заключавшаяся в неотправке дублирующих пакетов ACK на повторные сообщения 200OK.<br />
* Исправлен алгоритм менеджера задач в части работы с абонентским списком через кэш в памяти и с номерами для перезвона.<br />
* Снято ограничение [[Карта сети|карты сети]], блокирующее сохранение шлюзов с одинаковым адресом прокси-сервера.<br />
* Обнаружена и решена проблема утечки памяти при [[Управление записями разговоров|микшировании в формат MP3]].<br />
* Обнаружена и устранена причина ухудшения работы факсов в версии 2.8.<br />
<br />
<br />
<br />
====версия 2.8 (30.01.2013)====<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Версия 2.8.130130 работает в среде .NET Framework v4.0. Перед обновлением с версии 2.7 и более ранних версий настоятельно рекомендуется ознакомиться [[Версия 2.8 на базе .NET Framework v4.0|со статьей]].<br />
<br />
* Произведена миграция в среду .NET Framework v4.0.<br />
* Реализована возможность сохранения [[Управление_базами_данных#FailedCalls|неудачных исходящих звонков]]. Отображение происходит в разделе «Статистика АТС» при указании в фильтре нулевой длительности.<br />
* Исправлена работа сервера за NAT с телефонами за NAT.<br />
* Реализована возможность активировать автоматическую блокировку звонков на платные номера. Список платных номеров хранится в БД. Активация режима в разделе "Сервер АТС" модуля "Общие настройки".<br />
* Добавлена функция «Код направления» в служебные и диалоговые сценарии. Применима только в режимах, связанных с АТС.<br />
* Исправлена ошибка отображения количества отключенных внутренних линий.<br />
* Изменена функция ограничения задачи по количеству внешних линий. Учитывает резервированное состояние линии.<br />
* Исправлена ошибка в диаграмме количества звонков по номерам в модуле «Статистика АТС».<br />
* Восстановлен нечувствительный к регистру поиск в выпадающем списке при наборе текста.<br />
* Реализован веб-сервер, выдающий страницы из папки WWW, слушающий стандартный 80 порт. Сильно ограничен по функционалу. Может быть отключен в конфигурационном файле сервера ключом ''UseWebServer80''.<br />
* Исправлена проблема некорректного звука гудков на платах Ольха. Проявлялось после коммутации с SIP каналами.<br />
* Реализовано разбиение лог-файлов HAL согласно настройкам в конфигурационном файле по максимальному размеру части.<br />
* Реализована возможность частичного обновление клиентских конфигурационных файлов (всех, указанных клиентов или кроме указанных клиентов).<br />
* В компоненте сценариев «Статус объекта» реализована функция «Проверить наличие привилегии у пользователя» по коду.<br />
* Добавлена ролевая привилегия на скачивание файлов записей.<br />
* В рамках авторизации по websocket реализована возможность создавать сессии и указывать время их жизни (до 2х недель).<br />
* При отсутствии ролевой привилегии пользования пользования автодозвоном и использовании гарнитуры с отключенным автодозвоном реализован вызов в обратной последовательности. Ранее выдавало уведомление о невозможности совершения вызова.<br />
* Реализована автоматическая отправка запроса в техническую поддержку из меню в статусной строке (на основе сервисной лицензии).<br />
* Реализована возможность [[Клиентское_приложение#ActiveDirectory|авторизоваться с помощью ActiveDirectory]].<br />
* Исправлена проблема COM-API, связанная с возвратом различных идентификаторов сессии при автодозвоне до и после снятия трубки пользователем.<br />
* Исправлена проблема в АТС, связанная с переключением на сценарий IVR путем подмены. Симптом: вместо продолжения обработки сценария производится разрыв.<br />
<br />
<br />
<br />
====версия 2.7 (25.12.2012)====<br />
<br />
<br />
* Реализован переподъем слушателей сетевых интерфейсов после временной недоступности интерфейса.<br />
* В режиме обмена номерным планом между серверами поправлен случай, когда служба обмена размещена на одном из серверов.<br />
* Обнаружена и исправлена проблема отсутствия каталога для пользовательских фотографий.<br />
* Микширование и упаковка записей по умолчанию в mp3-16.<br />
* Исправлена проблема в HAL.SIP, связанная с работой за NAT при наличии нескольких интерфейсов.<br />
* Обнаружена и исправлена проблема вызова группового номера из нескольких линий, не привязанных к пользователям. Симптом: в случае использования одной из них DND, вызов обрывается всем сразу.<br />
* Исправлены некоторые интерфейсные проблемы.<br />
* Исправлена проблема некорректного обновления конфигурационного файла websock.config, влекущая невозможность работы в веб-клиенте.<br />
<br />
<br />
<br />
====версия 2.7 (12.12.2012)====<br />
<br />
''21.12.2012 состоялся вебинар посвященный обзору релиза 12.12.2012 [http://www.oktell.ru/company/press/view/224/ Посмотреть запись вебинара]''<br />
<br />
* Добавлена возможность автоматического преобразования селектора в конференцию при выходе и управляющего, и создателя. Ключ UpdateSelectorOnDirectorDisconnect серверного конфигурационного файла.<br />
* Для компонента "SQL-запрос" увеличен до 4000 максимальная длина передаваемых в БД строковых параметров.<br />
* Реализована возможность повторного размещения звонка по задаче в начале очереди в случае, если операторский телефон находился в режиме DND.<br />
* Исправлена ошибка отображения предыдущего номера при автозвонке через HTTP интерфейс сервера.<br />
* Исправлена ошибка в пуле прогрессивного набора. Симптом: при одновременном ответе нескольких линий, все кроме первой подвисают в состоянии с поднятой трубкой до ручного сброса.<br />
* В контенте звонка изменена процедура расчета стороны, инициировавшей завершение.<br />
* Исправлена проблема компонента "Дозвон" служебных сценариев. Симптом: если номер пустой, то завершается без освобождения линии, та остается в резервированном состоянии до сброса вручную.<br />
* Исправлена проблема микшера записей при настройке в стандартную папку после применения нестандартной. Возможны были перебои и микшированием, и с записью.<br />
* В клиентском приложении заменены все базовые элементы управления.<br />
* Исправлено отображение стрелок перехода, линий связи, а также перемещаемых объектов в редакторе сценариев и карты сети, наблюдавшиеся в режиме AERO Windows 7.<br />
* Исправлена работа приложения на нескольких экранах.<br />
* Реализован поиск в модуле администрирования внутренних номеров.<br />
* Добавлена возможность сохранять код отказа SIP в переменную в компоненте "Дозвон" служебного сценария.<br />
* Исправлены мелкие ошибки при сохранении параметров аппаратуры, приводящие к сбросу в дефолтные значения при перезагрузке службы, а также к выставлению неверных значений.<br />
* Реализована возможность автоматического бана SIP-пакетов по полю User-Agent. В список всегда блокируемых внесен friendly-scanner. Дополнительные задаются в конфигурационном файле сервера ключами BanUserAgent{0-99}<br />
* Оптимизирована процедура определения IP-адресов по доменным именам. Введена асинхронность и независимость. Ранее была возможна ситуация, при которой из-за недоступности одного внешних из шлюзов все входящие звонки стопорились в ожидании таймаута.<br />
* В HAL.SIP исправлены некоторые ошибки, связанные с работой сервера за NAT. <br />
* B HAL.SIP исправлена проблема при обновлении регистрации на сервере, из-за которой раньше времени истекал срок жизни сессии и шлюз переходил в несинхронизированное состояние.<br />
* Реализована поддержка работы внешних VoIP клиентов (usb-телефонов и гарнитур), если сервер работает за NAT.<br />
* Исправлена проблема режима помощи при онлайн-подслушивании в случае, когда канал-донор находится в конференции.<br />
* Исправлена ошибка, при которой после входящего INVITE с предложением T.38 на следующий INVITE сервер отвечает RequestPending.<br />
* Исправлены проблемы сохранения и работы с нестандартными портами у SIP-телефонов. <br />
* Исправлена ошибка, при которой Expires сбивается с 0 на 3600 без необходимости.<br />
* Существенно оптимизирована рассылка событий конференциями внутренним пользователям.<br />
* Исправлена проблема АТС при работе с вынесенным в отдельный процесс HAL. Симптом: при большом количестве линий и большой нагрузке возможно подвисание линий в несвободном состоянии и наблюдается это часто.<br />
* Экспорт в Excel заменен на экспорт в обменный формат CSV.<br />
* Исправлена ошибка, из-за которой при переходе пользователя из недоступного состояние в готовность не производился автоматический анализ очереди и вызов, и требовалось ручное участие.<br />
* Исправлена ошибка, при которой в записях разговоров с плат YEASTAR слышен шум и треск, хотя в разговоре не наблюдался.<br />
* Исправлена проблема отображения сокращенного рабочего места при показе модуля СОТРУДНИКИ.<br />
* Исправлено скачивание больших файлов с HTTP, отправленное из Web-Socket клиентов.<br />
* Восстановлено прохождение трафика в видео-конференциях.<br />
* Реализован автоматический перевод всех контактов в тип "неизвестные" при удалении типа контакта.<br />
* CLI. Проблема передачи даты из стоп-формы в менеджер задач при определенных языковых настройках.<br />
* Решена проблема отображения выпадающих списков за главным окном приложения.<br />
* Существенно оптимизирована работа компонента "Парсер" сценариев. Скорость ряда запросов увеличена на три порядка.<br />
* Добавлена подсказка адреса веб-клиента в строку состояния главного окна, а также регистрация доменных имен для доступа к веб-клиенту непосредственно в разделе общих настроек.<br />
* Существенно оптимизированы диалоговые формы по скорости загрузки и построения на клиенте, а также объему передаваемых данных. Для скрытых групп также введен параметр, позволяющий применить отложенный расчет и загрузку данных по требованию.<br />
* Подготовлена база для миграции на FrameWork v4.0.<br />
<br />
<br />
<br />
====версия 2.7 (28.09.2012)====<br />
<br />
* В компонент [[Общие_компоненты_сценариев#UserState|Статус объекта]] добавлены свойства задачи для чтения: ''количество линий в дозвоне'' и ''количество линий в ожидании оператора''; добавлены свойства линии для чтения: ''Контент цепочки (xml)'', ''Контент цепочки (json)'', ''Контент линии (xml)'', ''Поле контента цепочки (заголовок)'', ''Поле контента цепочки (коммутация)'', ''Поле контента линии''; добавлены свойства линии для записи ''Поле контента цепочки (заголовок)'', ''Поле контента цепочки (коммутация)'', ''Поле контента линии''.<br />
* В компонент сценариев IVR [[Компоненты_сценариев_IVR#SwitchTask|Вход в задачу]] добавлено свойство ''Идентификатор оператора в переменную''.<br />
* В компонент [[Общие_компоненты_сценариев#UserState|Статус объекта]] добавлено свойство линии для записи: ''Разрешать FLASH'', позволяющее активировать функционал переключений для внешних линий.<br />
* В компонент сценариев IVR [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние]] добавлено свойство ''Идентификатор выбранной линии в переменную''.<br />
* Добавлена возможность переключения на номер перехвата с указанием дополнительного номера с помощью компонента [[Компоненты_сценариев_IVR#Switch|Переключение]].<br />
* В компоненты [[Общие_компоненты_сценариев#ExecProcess|Запуск процесса]] и [[Компоненты_сценариев_диалога#Внешнее приложение|Внешнее приложение]] добавлена возможность вывода консольного результата в переменную.<br />
* Реализован новый компонент служебных сценариев [[Компоненты_служебных_сценариев#Коммутатор|Коммутатор]], позволяющих произвольным способом осуществлять дозвон и коммутацию двух абонентов.<br />
* В компонент [[Общие_компоненты_сценариев#webrequest|WEB-запрос]] добавлена поддержка Digest-авторизации.<br />
* В компонент [[Общие_компоненты_сценариев#webrequest|WEB-запрос]] добавлена возможность указания дополнительных заголовков и дополнительных cookies.<br />
* В компоненты сценариев IVR [[Компоненты_сценариев_IVR#Switch|Переключение]] и [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние]] добавлена возможность указания/переопределения CallerName.<br />
* В компонент [[Общие_компоненты_сценариев#EmailSend|Отправка e-mail]] добавлена возможность задания аргументом логина и пароля.<br />
* Исправлена ошибка сохранения текстовых вложений принятой электронной почты в случае использования кодировки 7-bit, а также невозможность перезаписи вложений поверх существующих файлов.<br />
* Добавлен конфигурационный параметр ''[[Параметры файлов конфигурации#UseSimpleLineState|UseSimpleLineState]]'', позволяющий корректировать способ привязки состояний номерного плана к состояниям объектов.<br />
* Добавлен конфигурационнй параметр серверного и клиентского приложения ''[[Параметры файлов конфигурации#ADLoginChecker|ADLoginChecker]]'', позволяющий совместно с дополнительным приложением активировать вход в систему от учетных записей ActiveDirectory.<br />
* Исправлено воспроизведение файлов в клиентском приложении.<br />
* Исправлена ошибка АТС, связанная с подвисанием внутренних линий в резервированном состоянии при определенном стечени обстоятельств в call-центре при использовании оператора одновременно в Call-центре и в групповых номерах.<br />
* Добавлена возможность в [[Карта сети|карте сети]] при настройке шлюза без регистрации указывать отдельно Domain и SIP Proxy.<br />
* Исправлена ошибка в статистике в случае, если звонок участвует в нескольких задачах.<br />
* Добавлено отображение IP-адресов подключенных устройств в разделе [[Мониторинг#Линии|мониторинга линий]].<br />
* Реализована возможность отправки SMS и Email сообщений из модуля [[Передача_e-mail_и_SMS-сообщений|Телефон]] во время коммутаций. Отправка производится централизованно через [[Сценарии_АТС#SvcSendEmail|специальные сценарии]], задаваемые в разделе [[Системные_настройки|общих настроек]].<br />
* Онлайн-прослушивание разговоров снабжено по умолчанию функцией скрытия слушателя (слушатели не видят друг друга), если иное не установлено конфигурационным параметром [[Параметры файлов конфигурации#HideGhostMonitor|HideGhostMonitor]].<br />
* Исправлена ошибка АТС, связанная с обработкой HOLD в режиме использования сценария исходящей маршрутизации, влекущая в некоторых случаях прогрессирующее подвисание внешних линий.<br />
* Добавлена возможность хранения записей в MP3-формате, а также выбор формата для микшера в разделе [[Управление записями разговоров]].<br />
* Добавлена возможность совершать исходящие звонки на произвольный URI, используя транки шлюзов без регистрации.<br />
* Реализована предварительная функция [[Взаимосвязанная работа серверов Oktell|взаимодействия серверов Oktell между собой]] путем использования общих транков, а также службы обмена сообщениями об абонентах звонков и номерных планах.<br />
* Реализовано отображение состояний групповых номеров в разделе [[Сотрудники]].<br />
* Оптимизирован расчет [[Ресурсы|ресурсов]] при отображении нескольким супервизорам.<br />
* Обнаружена и исправлена редко-возникающая ошибка обработчика задачи, подвешивающая оператора в занятом состоянии вплоть до перезагрузки сервера.<br />
* Обнаружена и исправлена редко-возникающая ошибка АТС, подвешивающая линии в занятом состоянии вплоть до перезагрузки сервера.<br />
* Реализована внешняя служба/приложение туннельного доступа клиентов к БД мимо службы АТС в целях уменьшения объема пика используемой виртуальной памяти процессом сервера. Подробнее в описании [[Параметры_файлов_конфигурации#DbRemote|конфигурационных настроек]].<br />
* Существенно оптимизирован способ закачивания и скачивания больших файлов через веб-сервер.<br />
* Реализовано автоматическое применение установленного времени ожидания ответа абонента в компоненте [[Компоненты_служебных_сценариев#Call|Дозвон]] при наборе внешних номеров через [[Сценарии_АТС#SvcDialExt|служебный сценарий набора номера]] из задач и стандартных номеров в соответствии с исходным значением.<br />
* Реализовано хранение изображений пользователей на диске и в разных разрешениях для нужд веб-клиента.<br />
* В конфигурационный файл сервера добавлен параметр [[Параметры_файлов_конфигурации#GCCollectorPeriodMin|GCCollectorPeriodMin]], позволяющий регулировать период принудительного запуска сборщика мусора .NET.<br />
* Найден способ наладки счетчиков производительности в случае сбоя, влекущего невозможность работы .NET с процессами.<br />
* В качестве дополнительного параметра для [[Контрольные события|контрольного события]] ''Оператор пропустил вызов'' добавлен номер звонившего абонента.<br />
* Исправлена ошибка АТС, отбивающая SIP телефон, на котором был нажат HOLD.<br />
* Добавлена возможность изменять CalledId наравне с CallerId в сценарии [[Сценарии_АТС#SvcCallerIdModify|Преобразования CallerId]].<br />
* Исправлена ошибка, в некоторых случаях мешающая прослушать файл записи конференции, связанная с неверным именованием файла или отсутствием упакованного файла.<br />
* Реализована передача на [[файловый сервер]] информации о всех каталогах с записями разговоров, делающая возможным хранение записей на разных дисках. [[Параметры_файлов_конфигурации#FileServerRecDir|Подробно о необходимой настройке]].<br />
* Добавлена функция автоматического перевода оператора в состояние перерыва со служебным кодом 1003 при блокировке системы в случае, если он свободен. Если иное не установлено параметром конфигурационного файла клиентского приложения [[Параметры_файлов_конфигурации#AutoUserStateChangeOnSystemLock|AutoUserStateChangeOnSystemLock]].<br />
* Оптимизировано взаимодействие пользователей с сервером при большом количестве подключений.<br />
* Введен ряд новых параметров в конфигурационный файл сервера, позволяющий модифицировать стандартное выделение асинхронных потоков для различных служб сервера. [[Параметры_файлов_конфигурации#ThreadManagement|Подробнее]].<br />
* Повышен приоритет использования параметра CallerName, задаваемого в компоненте сценария IVR [[Компоненты_сценариев_IVR#Switch|Переключение]]. Обратное поведение доступно конфигурационным ключом [[Параметры_файлов_конфигурации#UsePriorSwitchCallername|UsePriorSwitchCallername]].<br />
* Для IP-телефонов в карте сети добавлен параметр, позволяющий индивидуально выставлять настройки транслитерации CallerName. В общие настройки добавлен параметр, задающий поведение по умолчанию.<br />
* Оптимизирована процедура сохранения результатов звонка по задаче. Значительный эффект достигается в случае большой нагруженности сервера БД, и большого количества учетных записей пользователей в системе.<br />
* Выявлен и устранен ряд проблем, влекущих торможение сервера при больших нагрузках.<br />
* Устранена ошибка АТС, добавляющая нагрузку к серверу при звонке на групповой номер, одним из абонентов которого является SIP-телефон в режиме DND.<br />
* Исправлена ошибка менеджера задач при использовании сценария поиска абонента, влекущая после неудачной попытки звонка в некоторых обстоятельствах застревание абонента в списке вплоть до перезапуска службы сервера.<br />
* Исправлена ошибка менеджера задач, влекущая застревание абонента в обработчике задачи при одновременном использовании переключения абонента на IVR, настройке выхода из задачи при переключении на IVR, а также сценария IVR вместо отбоя.<br />
* Реализовано отображение новостей администраторам Oktell в статусной строке клиентского приложения. Может быть отключено в общих настройках для всех или индивидуально в конфигурационном файле клиентского приложения.<br />
* Обнаружена и исправлена ошибка, мешающая сохранению поля ICode в пространственной таблице oktell_cc_temp.dbo.A_Cube_CC_OperatorStates в случае, если оператор переходит в перерыв во время звонка.<br />
* Обнаружена и устранена проблема подключения VoIP каналов к системе в случае массового логина. Симптом: некоторые пользователи находятся в состоянии ''без телефона'' вплоть до повторного перезапуска клиентского приложения.<br />
* Изменено поведение [[Телефон|Телефона]] в части набора номера. Теперь набор осуществляется в поле для ввода с последующей разовой отправкой на сервер по нажатию на кнопку ''Набрать''. Подробное поведение, а также способы настройки и возврата прежнего поведения приведены в описании конфигурационного параметра [[Параметры_файлов_конфигурации#PhoneDirectDigit|PhoneDirectDigit]].<br />
* Исправлена ошибка менеджера задач, влекущая в редких случаях проставление в статистике статуса N/A в качестве результата звонка.<br />
* Добавлена функция мониторинга сервером таблицы пользовательских сообщений в БД (A_UserMessages) и рассылка сообщений пользователям при появлении новых. Подробнее в описании конфигурационного параметра [[Параметры_файлов_конфигурации#UserMessageCheckPeriodSec|UserMessageCheckPeriodSec]]<br />
* Реализована возможность автоматического отключения фильтра адресов для SIP-пакетов в соответствии со значением параметра конфигурационного файла [[Параметры_файлов_конфигурации#EnableSipTransportFilter|EnableSipTransportFilter]].<br />
* Реализована возможность подключения внешних [[Таблицы абонентов#ExtTables|таблиц абонентов]] непосредственно из других источников данных, минуя [[Подключение внешних БД|линковку]].<br />
* Изменено значение таймаута для исполнения SQL-запросов из плагинов с 30 секунд до 10 минут, а также добавлен параметр серверного конфигурационного файла DBPluginCommandTimeoutSec для управления этим значением.<br />
* Исправлена ошибка АТС, связанная с использованием стандартных номеров, включающих набор нескольких внешних номеров, влекущая при определенных обстоятельствах подвисание внешних линий в состоянии занятости до разрыва вручную.<br />
* Реализован учет выставленного, но еще не примененного состояния ''Перерыв'' при совершении звонков внутри АТС. Ранее учитывалось только при звонках из задач.<br />
* Исправлена ошибка автодозвона, подставляющая при звонке на внутренний номер в качестве CallerId всегда номера 101.<br />
* Модифицирована процедура периодического подтверждения активаций. Ранее была возможна ситуация, когда добавление нового дополнительного винчестера влекло изменение активационного кода привязки и требовалась переактивация вручную, связанная с выяснением пароля. При этом при прохождении подтверждения вручную в качестве кода активации используется прежний, а при прохождении переактивации вручную, код изменяется на текущий актуальный.<br />
* Управление настройками веб-сервера перенесено в раздел [[Настройки_веб-сервера|общих настроек]], включая порт, пароли доступа, а также способ авторизации. По умолчанию служба отключена.<br />
* Расширена функция ''[[Серверный HTTP интерфейс#upload|upload]]'' веб-сервера, позволяющая теперь указывать место размещения файла и способ обработки.<br />
* [[Серверный HTTP интерфейс]] пополнен функциями ''[[Серверный HTTP интерфейс#getavatar|getavatar]]'', ''[[Серверный HTTP интерфейс#getversion|getversion]]'', ''[[Серверный HTTP интерфейс#getsharedfile|getsharedfile]]'', ''[[Серверный HTTP интерфейс#download|download/files]]'', ''[[Серверный HTTP интерфейс#gettotalqueueinfo|gettotalqueueinfo]]''.<br />
* [[Клиентский HTTP интерфейс]] пополнен функцией ''[[Клиентский HTTP интерфейс#pbxstatplaybyidconn|pbxstatplaybyidconn]]''.<br />
* Расширен интерфейс [[Oktell_Web-Socket_Protocol|Web-Socket протокола]].<br />
* Реализован веб-плагин [http://js.oktell.ru oktell.js].<br />
* Реализована поддержка работы сервера за NAT с прямым пробросом портов по SIP-протоколу. Подробнее в разделе [[Настройки SIP-модуля]].<br />
* Выявлен и исправлен ряд проблем в аппаратной подсистеме обслуживания VoIP каналов, связанных с нестабильностью массового подключения и подвисания в занятом состоянии.<br />
* Существенно оптимизирован алгоритм микшера конференции.<br />
* Устранена незначительная утечка памяти в Subscribe-Notify модуле.<br />
* Выявлены и исправлены ошибки разного характера в SIP подсистеме, добавлены некоторые дополнительные параметры настройки. Подробнее в разделе [[Настройки SIP-модуля]].<br />
<br />
<br />
<br />
====версия 2.7 (28.03.2012)====<br />
<br />
* Добавлены функции управления конференциями в ядро клиентского приложения.<br />
* Произведена существенная оптимизация процесса перезагрузки сервера состояний. Обнаружены и устранены лишние устаревшие операции в БД.<br />
* Исправлена ошибка удаления пользователей после перезапуска сервера состояний при работе через веб-сокет.<br />
* Реализовано адекватное отсоединение веб-сокет пользователей по инициативе сервера.<br />
* Оптимизирована работа функции ping с клиентских приложений на сервер, имеющая целью стабилизировать поведение системы при нехватке ресурсов.<br />
* Оптимизировано сетевое взаимодействие между узлами системы в целях экономии асинхронных обработчиков.<br />
* Реализована запись лог-журналов на диск/в сеть через асинхронную очередь, не влияющую на приостановку работы системы из-за занятости дискового ресурса.<br />
* Исправлена ошибка в синхронизации абонентского списка с кэшем в памяти, возникшая после перевода процедуры сохранения результата звонка по задаче в асинхронный режим. Связана со звонком одному и тому же абоненту несколько раз при получении успешного результата.<br />
* Добавлена авторегулировка нагрузки менеджера задач по исходящим кампаниям в зависимости от загрузки системы и БД.<br />
* Оптимизирована функция сервера состояний поиска свободных внешних линий для менеджера задач.<br />
* Обнаружена и исправлена ошибка совместного доступа к конференции, влекущая невозможность завершить конференцию.<br />
* Рассылка событий из конференций выведена в асинхронную очередь рассылки в целях ускорения работы конференций с большим количеством участников.<br />
* В интерфейс веб-сокета добавлены методы getmyuserinfo, setusertextmessageviewed, событие usertextmessageviewed. Изменен метод sendusertextmessage.<br />
* В реализации веб-сокета обнаружена и исправлена ошибка с отправкой multiframe-сообщений.<br />
* При отмене вызова на гарнитуру клиентского приложения не сбрасывался таймер автоматического снятия трубки. Исправлено.<br />
* Исправлена ошибка входа в конференцию через сценарий. В случае, если разрыв линии происходит до окончания входа, конференция блокируется на 5 секунд. Массовый доступ в такую конференцию вызывает цепную реакцию и как следствие длительную блокировку всего сервера.<br />
* В компонент «Числовое воспроизведение» добавлено воспроизведение евроцентов.<br />
* Обнаружена и устранена фиксация пропущенных звонков при звонке через автодозвон.<br />
* Пароль пользователя с символами [, ], # заменялся пустым. Исправлено.<br />
* Изменен режим доступа к веб-камере. Добавлена возможность настройки разрешения и битрейта при работе с камерой.<br />
* В компонент «Статус объекта» добавлены функции, возвращающие количество занятых задачей линий, линий участвующих в разговоре по задаче. <br />
* В компонент «Статус объекта» добавлены функции очистки оперативной статистики задач, принудительной синхронизации таблицы абонентов. <br />
* Восстановлена сортировка в выпадающих списках клиентского приложения.<br />
* В компонент «Воспроизведение числа» добавлена возможность выбора языкового алгоритма (русский, английский, украинский, чешский).<br />
* Компонент «Воспроизведение числа» получил возможность воспроизведения англоязычных порядковых числительных.<br />
* Добавлена возможность указания дополнительных номеров, привязанных к sip-потокам (учетным записям), на которые осуществляется адресация INVITE пакетов от SIP-провайдера.<br />
<br />
<br />
<br />
====версия 2.7 (15.02.2012)====<br />
<br />
* Устранена утечка памяти в сессиях при отбое входящих звонков.<br />
* Исправлена невозможность отжатия кнопки «Хочу сказать» в селекторном совещании.<br />
* Добавлена возможность настраивать прерывание воспроизведения компонентом «Числовое воспроизведение».<br />
* Обнаружена и устранена невозможность сохранить дату окончания работы текстовой задачи.<br />
* Обнаружена и устранена ошибка, влекущая неполноценную очистку после работы компонента «Действие web-crm».<br />
* Реализован режим вызова «Интерком» на внешние и внутренние sip-каналы. Добавлены соответствующие настройки в компоненты «Переключение», «Переключение на внешние», «Дозвон».<br />
* Оптимизирована рассылка событий о смене состояний внутренних номеров по клиентским приложениям, а также менеджера задач в целях экономии асинхронных обработчиков.<br />
* Добавлена реализация протокола веб-сокет версии 13 согласно RFC6455.<br />
<br />
<br />
====версия 2.6 (31.12.2011)====<br />
<br />
* Реализовано сохранение сессии между сценариями набора номера и обработки результата звонка по задаче в случае, если звонок неудачен был.<br />
* В HAL.SIP отправлялось пустое значение поля realm в ответе 401.<br />
* Добавлены алиасы для шлюзов при настройке в карте сети для обработки случая входящих звонков с альтернативных серверов при регистрации на основном.<br />
* При поиске номера в АТС лексикографическая сортировка заменена на числовую.<br />
* Устранен разрыв соединения при вызове метода веб-сервера «setbusyinexternaltask» со значением «0».<br />
* При перезагрузке аппаратного модуля на сервере состояний не обновлялись коды для привязки вновь регистрирующихся VOIP устройств. Исправлено.<br />
* Из ответа веб-сервера удалены концевые символы \r\n, подмешивающиеся и мешающие организовывать второй запрос в рамках подключения.<br />
* Скорректирована работа таймеров в HAL.<br />
* Исправлена ошибка отображения в клиентском модуле «Администрирование.Права».<br />
* В веб-сервер добавлен метод upload для закачки файлов.<br />
* Исправлена ошибка менеджера БД при организации запросов к полям таблицы абонентов, если таблица со связями (constraint). Симптом: возвращается пустое значение.<br />
* Исправлена ошибка в HAL.SIP при завершении SUBSCRIBE-сессии. Ведет к исключению по неверному доступу к памяти и невозможности продолжения работы аппаратного модуля.<br />
* Исправлена ошибка в компоненте «Запуск процесса» в режиме ожидания выхода. Симптом: если процесс выполняется достаточно долго, компонент вешает сценарий до ручного разрыва.<br />
* Налажено обращение к строковым полям БД при исполнении запросов из сценариев через кодировку Unicode.<br />
* Веб-сокет получил возможность работать непосредственно с браузерами. Введен режим «Браузеры к октелл» для подключения web-crm без собственного web-socket сервера.<br />
* Добавлена поддержка версии 8 в веб-сокет.<br />
* В протокол веб-сокета добавлен метод execpredefineddbstoredproc для прямого исполнения разрешенных конфигом веб-сокета процедур в БД.<br />
* Добавлена настройка в клиентский конфигурационный файл HeadsetNonACMMode для выбора режима звонка без использования автодозвона.<br />
* Исправлено воспроизведение порядковых числительных. Симптом: вместо среднего и женского родов воспроизводился мужской.<br />
* В клиентский веб-интерфейс добавлены методы flashcall, getcurrentuserlogin, getcurrentserveraddress.<br />
* Исправлена ошибка автодозвона при звонке внутри АТС на несуществующий номер. Симптом: линия подвисает в состоянии reserved.<br />
* Реализовано автоматическое создание направления «Все линии».<br />
* Существенно оптимизирована работа с БД в нагруженных проектах за счет организации очередей по направлениям: статистика коммутаций, состояния пользователей, диалоговые сценарии, результаты звонков и попыток, уведомления пользователям.<br />
* Обнаружена и устранена ошибка АТС, ведущая к некорректному завершению исходящего звонка по SIP при моментальном обрыве после начала вызова. <br />
* Оптимизирован массовый запрос на получение статистики рабочего места оператора. Устранена проблема нехватки потоков на обработку клиентских запросов из-за длительного исполнения запроса в БД.<br />
* В интерфейс веб-сокета добавлены методы getflashedabonentinfo, getversion, pbxclearflash, getextendedlineinfo. В запрос login добавлено свойство showid.<br />
* Исправлена процедура авторизации на веб-сокет сервере при использовании русских букв в логине.<br />
* Исправлена процедура хендшейка к веб-сокет серверу. Симптом: при наличии в HTTP запросе дополнительных полей и дополнительных значений в стандартных полях, хендшейк не производился.<br />
* Изменена процедура рисования динамических линий при связи объектов в сценариях и карте сети для более быстрой работы в win7-aero.<br />
* Исправлена ошибка при открытии диалоговых сценариев, сохраненных в версиях до 10.08.2010, при использовании в них переменных с односимвольными именами.<br />
* Добавлен параметр серверного конфигурационного файла TaskListAbonentUseLikeNumber, позволяющий активировать поиск абонентской строчки в таблице с фильтром "number like '%x%'". По умолчанию «0» и поиск осуществляется только по идентификатору абонента.<br />
* Обнаружена и устранена проблема в АТС, влекущая идентичность сессий у двух разных звонков, осуществивших дозвон на одну внутреннюю линию.<br />
* Реализована возможность записи лог-журналов и файлов записей коммутаций и конференций на удаленный сервер в целях снижения нагрузки на локальный диск. Требуется указание в конфигурационном файле сервера ключей FileServer_Log и/или FileServer_Record со значениями в формате "address:port", а также активность на указанном сервере специальной службы октелл-файл-сервера.<br />
* В настройку компонента служебного сценария «Дозвон» добавлена возможность указывать callerid и callername для внутренних и внешних вызовов.<br />
* Проведена корректирующая работа над доступом к критической секции сервера состояний. Симптом: замечены случаи зависания системы на несколько минут или вообще с невозможностью продолжения всяческой деятельности: звонков, авторизаций, и т.д.<br />
* Реализован режим видео-конференций.<br />
<br />
<br />
====версия 2.6 (14.09.2011)====<br />
<br />
* Исправлена проблема несохранения принятых файлов факса в случае, если произошел разрыв связи.<br />
* Скорректирована адресация в пакетах sip NOTIFY для поддержки работы телефонов LinkSys.<br />
* Исправлена ошибка обработчика входящей задачи, связанная с удалением правила распределения звонка на операторов при деактивации и перезагрузке сервера состояний.<br />
* Исправлена ошибка менеджера задач в режиме персонального вывода абонента из очереди на оператора. Симптом: несколько звонков поступали на одного оператора, и только один успешный, остальные отбивались сразу.<br />
* Исправлено отображение модуля софт-телефон в режиме входящего вызова. Симптом: если в очереди несколько абонентов, информация не изменяется при смене вызывающего.<br />
* Исправлена проблема HAL.SIP при обработке встречных BYE и reINVITE. Симптом: изредка возникает исключение, требующее перезапуска аппаратного модуля.<br />
* Исправлена проблема HAL.VOIP, связанная с отвалом устройства в состоянии HookUp и требующая перезагрузки аппаратного модуля.<br />
* Исправлена проблема с отправкой Keep-Alive пакетов с сервера.<br />
* Добавлена сортировка IP-телефонов в параметрах аппаратуры по названиям.<br />
* Исправлена ошибка начальной инициализации. Симптом: при добавлении в карту сети новых устройств с регистрацией сразу принимают готовое состояние.<br />
* Исправлена иногда возникавшая ошибка HAL.SIP при разрыве sip-соединения, требующая перезагрузки аппаратного модуля.<br />
* Устранена постоянная перезагрузка клиентского устройства после перезапуска аппаратного модуля на сервере.<br />
* Исправлена ошибка HAL.SIP, связанная с регистрацией каналов на внешнем шлюзе до инициализации сетевого канала.<br />
* Исправлена ошибка при логине пользователя, возникающая в случае регистрации с той же под другим именем, когда предыдущий отвалился, но еще не обработан сервером.<br />
* При автодозвоне через сценарий набора номера отсутствует информация о вызывающем в уведомлении. Исправлено.<br />
* В карту сети добавлен режим генерации паролей для телефонов.<br />
* В компонент «Статус объекта» добавлена функция мягкого сброса, переводящая линию в «Сценарий вместо отбоя».<br />
* Если в компоненте «Действие web-crm» не назначена ветка «Переход, ошибка», а компонент неудачен, сценарий обрывался. Исправлено.<br />
* Реализовано преобразование отправляемых с клиента по факсу данных в единый tiff-документ с использованием Office.COM. Требуется .NET framework 3.0 и установленный Microsoft Office 2003 или выше, а также установленный XPS принтер. Для работы в этом режиме необходимо в конфигурационном файле клиентского приложения изменить значение ключа «FaxPreperformProcess» на «1».<br />
* В клиентский веб-сервер добавлена поддержка метода setbusyexternaltask.<br />
* Исправлена ошибка при удалении доминирующей роли в модуле «Администрирование.Пользователи».<br />
* Обнаружена и исправлена блокировка в HAL.SIP.<br />
* Исправлена ошибка отсутствующего звука после FLASH из сценария IVR с воспроизведением в конференцию.<br />
* Отключенная линия могла использоваться при исходящих звонках в некоторых режимах. Исправлено.<br />
* Исправлена ошибка затирания кода линии в хранилище сервера состояний после сохранения карты сети.<br />
* Исправлен ряд проблем HAL.SIP при анализе некорректных сообщений: длинных или кривых значений, отсутствующих полей.<br />
* Исправлен ряд проблем HAL.SIP при нестандартном поведении ответной стороны, связанной с тестами реакции на некорректное поведение.<br />
* Реализована более полная проверка на валидность входящего sip-пакета.<br />
* Добавлен метод веб-сервера execsvcscriptplain для исполнения сценариев и возврата HTML/XML-ответа в прямом необернутом виде.<br />
* HAL.SIP обучен отвечать 481 в ответ на кривые CANCEL вместо прежнего 405.<br />
* Sip ответ 487 заменен на 480.<br />
* Снижено минимальное значение периода перерегистрации с 60 до 30 секунд.<br />
* Исправлен поиск сценария IVR при запуске проектного фонового сценария из другого сценария.<br />
* Исправлена ошибка АТС, приводящая в некоторых случаях к некорректному сбросу таймера отбоя. Симптом: канал подвисает до разрыва вручную.<br />
* Обнаружена и исправлена ошибка при одновременном запуске и остановке канала.<br />
* Добавлено ограничение на количество одновременно работающих асинхронных потоков по направлениям работы.<br />
* Оптимизирована схема отправки событий с сервера на клиентов.<br />
* В веб-сервер добавлен метод wp_setuserstate.<br />
* Устранен некорректный сброс настройки keep-alive после сохранения карты сети.<br />
* В компонент «Статус объекта» добавлены определяющие действия для элемента «Пользователь»: ид, имя, логин, линия, для элемента «Линия»: ид, номер, код, пользователь, цепочка(сессия).<br />
<br />
<br />
====версия 2.6 (25.07.2011)====<br />
<br />
* В модуле [[Мои контакты|«Офис. Контакты»]] введен запрет на создание типов контактов с одинаковыми именами.<br />
* Изменен механизм рассылки сообщений из конференции по клиентским рабочим местам. <br />
* В ролевую политику добавлен ряд новых привилегий, разграничивающих права доступа к отдельным модулям в<br />
* Исправлена ошибка при работе компонента IVR [[Компоненты сценариев IVR#Переключение на номер|Переключение]]. Симптом: при запрете использования очереди в настройке компонента после завершения периода прямого начального вызова свободных абонентов вызов прекращается, но вызывающий абонент продолжает слышать КПВ.<br />
* Введен режим запрета редактирования параметров системы в разделе администрирования. Подробнее [[Настройка клиентского приложения#BlockAdmin|в описании]].<br />
* Обнаружена и устранена возможная проблема в операции сохранения [[Карта сети|карты сети]]. Симптом: при большом количестве сохраняемых SIP-объектов возможна потеря части настроек аппаратуры при последующем перезапуске.<br />
* Реализована поддержка протокола web-socket для взаимодействия с Web-CRM системами. Подробно об интеграционной архитектуре и протоколе в разделе [[Oktell Web-Socket Protocol||«Интеграции. Web-Socket протокол»]]. Подробно о настройках в разделе [[Интеграция с Web-Socket CRM|«Общие настройки. Интеграция с Web-Socket CRM»]]. Подробно о настройке динамических вызовов в описании компонента сценариев [[Общие компоненты сценариев#Действие/карточка в plugin или WebCRM|«Действие/карточка в plugin или WebCRM»]].<br />
* Добавлен компонент [[Общие компоненты сценариев#Действие/карточка в plugin или WebCRM|«Действие/карточка в plugin или WebCRM»]].<br />
* В HAL.SIP реализована отправка 481 на запрос BYE, если нет сессии и транзакции или ранее произведена встречная отправка BYE.<br />
* В список параметров аппаратуры вынесены настройки для режима ECM софт-факса.<br />
* В список [[Выражения|функций выражений]] сценариев добавлены urlencode, urldecode, b64encode, b64decode, urlencodeUtf8, urldecodeUtf8, b64encodeUtf8, b64decodeUtf8.<br />
* Исправлена ошибка, в связи с которой не сохранялся указанный в служебной задаче стартовый параметр для сценария.<br />
* Устранены визуальные глюки в окне пользовательских сообщений встроенного чата: смещение вкладок, признак просмотренности, проблемы со сворачиванием/разворачиванием в win7.<br />
* Реализована кольцевая схема выделения медиа-портов для RTP сессий. В целях борьбы с подвисающими на некоторое время внешними устройствами-шлюзами, атакующими порты сервера Oktell с неактуальными данными.<br />
* Добавлено ограничение на возврат 1000 строк в журналы звонков, где раньше ограничение отсутствовало.<br />
* Исправлена ошибка при отправке тестового e-mail из раздела [[Настройки E-mail|общих настроек]].<br />
* Оптимизирована операция загрузки списка операторов в модуле ''[[Операторы|«Call-центр. Операторы»]]''.<br />
* Добавлена возможность заносить информацию в лог-журнал Common из компонента ''[[Общие компоненты сценариев#Уведомление|«Уведомление»]]'' сценариев.<br />
* Исправлена проблема, делающая возможным отображение одинаковых веб-форм у разных операторов, обслуживающих разные вызовы, но открывающих формы в один момент времени.<br />
* Добавлена http-функция скачивания файлов записей с веб-сервера Oktell по ссылкам в журналах разговоров, отправляемых через web-socket подключение. Подробнее в разделе [[Серверный HTTP интерфейс|методов веб-сервера]].<br />
* В интерфейс веб-сервера службы добавлен ряд http-функций управления звонком из доверенного веб-сервера от имени авторизованных пользователей по указанию ключа рабочего места, пользователя или линии. Подробнее в разделе [[Серверный HTTP интерфейс|методов веб-сервера]].<br />
* Реализована поддержка авторизации пользователей через web-socket протокол с привязкой к рабочим местам.<br />
* Реализована настройка, позволяющая активировать соединение внешней линии с IVR сценарием вместо отбоя при разрыве связи по инициативе сервера. Подробнее [[Параметры АТС#ScrInsteadBusy|в описании]].<br />
* Проведена работа над обнаруженными ошибками в реализации клиент-серверного протокола oktcp. В частности устранена причина утечки памяти.<br />
* Добавлена возможность делить карту на слои, упрощая визуальное отображение.<br />
* Добавлена настройка в параметры аппаратуры, позволяющая указывать caller-id в поле From отправляемых INVITE-пакетов.<br />
* В интерфейс веб-сервера клиентского приложения добавлен ряд http-функций управления звонком и карточкой диалогового сценария. Подробнее в разделе [[Клиентский интерфейс|методов веб-сервера]].<br />
* Запущен сервер сбора статистических данных с обновленных систем в целях выявления проблем. Режим включается/отключается в [[Информация о лицензиях#AllowSendStat|общих настройках]].<br />
* Справка перенесена в онлайн.<br />
* Обнаружена и исправлена ошибка обработки серверных сообщений, связанная с перемешиванием их последовательности.<br />
* Добавлена функция getcurrentuserid в интерфейс метода OnQuery plugin-программ. Подробнее в руководстве по интеграции.<br />
* Добавлена возможность множественного выделения узлов в дереве [[Настройки оборудования|параметров аппаратуры]] стандартным образом кнопкой SHIFT.<br />
* Добавлен параметр серверного конфигурационного файла [[Параметры файлов конфигурации#FORCE_BRACKETS_FOR_URI|FORCE_BRACKETS_FOR_URI]] для расстановки в SIP пакеты треугольных скобок в заголовки To и From.<br />
* Обнаружены и исправлены визуальные проблемы в отображении формы отправки межпользовательских сообщений, стоп-формы, софт-телефона в некоторых режимах.<br />
* В интерфейс клиентского веб-сервера добавлены команды headsetanswercall, disconnectcall, declinecall по работе с текущим звонком. Подробнее в разделе [[Клиентский интерфейс|методов веб-сервера]].<br />
* Реализована возможность использовать плагины, запущенные в [[Внешние модули#LoadMode|отдельных процессах]].<br />
* Исправлена ошибка АТС в работе Flash-перключения в редкой ситуации при специфических условиях. Симптом: заблокировалась линия, пользователь не может переподключиться.<br />
* Добавлена возможность корректировать громкость сигнала софт-факса в каналах CTI (Alder, Synway) из модуля [[Настройки оборудования|параметров аппаратуры]].<br />
* Добавлена возможность фиксировать в лог журналах значения [[Управление сервером#PerformanceCounters|счетчиков производительности]].<br />
* Компонент сценариев [[Общие компоненты сценариев#Запуск процесса|«Запуск процесса»]] получил возможность дожидаться завершения запущенного процесса (с возможностью установки таймаута и принудительного завершения).<br />
* В компоненте сценариев IVR [[Компоненты сценариев IVR#Запись звукового файла|«Запись»]] реализован выбор формата и кодека, в который производить запись.<br />
* Настроена и протестирована работа сервиса распознавания речи, записанной в сценарии.<br />
* Обнаружена и устранена причина заметного торможения при сохранении объемных карт сети.<br />
* В компонент сценариев [[Общие компоненты сценариев#Статус объекта|«Статус объекта»]] добавлены функции линии: текущая позиция в очереди, расчетное оставшееся время ожидания в секундах.<br />
* В компонент сценариев [[Общие компоненты сценариев#Статус объекта|«Статус объекта»]] добавлена функция сервера: обновить список задач.<br />
* Для более корректного определения адреса удаленного SIP-устройства в [[Настройки оборудования|параметры аппаратуры]] вынесена явная настройка для SIP-потоков, устанавливающая в качестве адреса обратный адрес отправителя или адрес контакта из SIP-пакета. Ранее определение велось автоматически, но существовал целый спектр условий, при которых возникала путаница и отправляемые пакеты не доходили до адресата.<br />
* Реализована возможность flash-перевода на сценарий IVR без перезапуска последнего, а путем подменой линии. Введена [[Сценарии IVR#VarFlash|служебная переменная]], определяющая режим, а также новый тип системного IVR сценария [[Параметры АТС#ScrFlash|маршрутизации при переводе]], единственный, где режим перевода с подменой по умолчанию установлен.<br />
* Добавлена возможность строить глубокое дерево отделов в модуле «Сотрудники». Для этого отделы необходимо именовать с разделителем (символ «.»), а также в конфигурационных файлах клиентских приложений установить значение «1» для ключа [[Параметры файлов конфигурации#SplitDepartmentsTreeByDot|«SplitDepartmentsTreeByDot»]].<br />
* Реализована возможность добавления участников в конференцию непосредственно в модуле управления в [[Конференц-связь|софт-телефоне]].<br />
* Изменен принцип поведения АТС при переключении с IP-телефонов. Коснулось отмены консультационного звонка и возврата к абоненту. Ранее кнопка «Отмена» на IP-телефоне производила соединение двух абонентов, сейчас производится отбой второго и возврат к режиму HOLD с удержанием первого.<br />
* Исправлен ряд мелких недочетов в различных модулях системы.<br />
* В течение нескольких месяцев проводилась работа над обнаруженными редко возникающими ошибками в медиа-ядре, в алгоритме работы с джиттер-буфером, в работе клиентских телефонных устройств.<br />
<br />
<br />
<br />
====версия 2.5 (03.12.2010)====<br />
<br />
* Модифицирован алгоритм разбора электронной почты, полученной по протоколу POP3. Реализована поддержка multipart/alternative, вложенных сообщений message/rfc822, в компонент сценария добавлено [[Общие компоненты сценариев#Прием входящего сообщения электронной почты|свойство]], позволяющее устанавливливать предпочитаемый тип контента (text/plain, text/html, text/xml и другие). <br />
* Реализован альтернативный стандартному режим вывода абонентов из очереди входящей задачи при освобождении операторов. В настройках задачи можно выбрать между стандартным конкурентным режимом и режимом с однократным индивидуальным распределением. Подробнее в [[Голосовые задачи#Дополнительно|описании свойства задачи]]. <br />
* В веб-интерфейс клиентского приложения добавлен метод [[Клиентский интерфейс|getcurrentcallinfo]]. <br />
* При исходящих звонках через SIP-шлюз без регистрации при формировании поля From организовано применение адреса локальной машины взамен указываемого ранее адреса шлюза. <br />
* По аналогии с очисткой статистики звонков реализовано удаление статистики и записей конференций. <br />
* Произведена несущественная модификация в организации транзакций с MS SQL SERVER, позволяющая активировать пул подключений. И при этом использовать прилинкованные базы данные, не поддерживающие усиление транзакций. <br />
* Исправлена ошибка в алгоритме перезвона строго в назначенное время. <br />
* Исправлена ошибка в обработчике каналов Yeastar E1. Симптом: у разных подряд идущих звонков одинаковые идентификаторы сессий. <br />
* Исправлена ошибка, делающая невозможным установить свойство задачи с помощью компонента сценариев [[Общие компоненты сценариев#Статус объекта|Статус объекта]] с помощью указания задачи по ключу.</div>Peter%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2_%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8Параметры файлов конфигурации2014-06-30T12:35:10Z<p>Peter: </p>
<hr />
<div>[[Дополнительно|Наверх]]<br />
<br />
<br />
Ряд настроек комплекса хранится в файлах конфигурации соответствующих приложений. Файл конфигурации загружается однократно в момент запуска приложения, и хранящиеся в нем настройки не могут быть изменены в ходе работы. Любые изменения файлов конфигурации применяются только при следующем запуске соответствующего приложения. <br />
<br />
Настройки файла конфигурации клиентского приложения влияют на работу только конкретного клиента.<br />
<br />
<br />
Файлы конфигурации находятся в том же каталоге, в котором расположен запускаемый модуль.<br />
<br />
Файл конфигурации клиентского приложения: oktell.ClientStarter4.exe.config<br />
<br />
Файл конфигурации серверной службы: oktell.ServerService.exe.config (приложения - oktell.ServerForm.exe.config)<br />
<br />
Файлы конфигурации есть также у ряда сопутствующих сервисов: служба файл-сервера, служба обмена межсерверными сообщениями, служба туннелирования запросов в БД, служба сервера видео-конференций, и т.д.<br />
<br />
<br />
Изменять файлы необходимо в редакторах, не изменяющих кодировку (рекомендуется стандартный редактор «Блокнот»). Такие редакторы как «Microsoft Word» и «Wordpad» сбивают кодировку, в следствие чего запуск приложения системы становится невозможным. При попытке запуска с некорректным конфигурационном файлом возникает системное окно с описанием ошибки.<br />
<br />
Конфигурационные файлы содержат ряд служебных настроек, поэтому в целях сохранения целостности и работоспособности не рекомендуется изменять формат файла и параметры, у которых нет описания.<br />
<br />
Формат представляет собой стандартный XML-документ со специфическими элементами. Допустимые настройки находятся в разделе между тегами <span style="color:red;"><appSettings></span> и <span style="color:red;"></appSettings></span>. Каждый конкретный параметр представляет собой строку <br />
<br />
<pre> <add key="KEY_STRING" value="VALUE_STRING" /></pre><br />
<br />
где <span style="color:blue;">KEY_STRING</span>-название параметра,<span style="color:blue;">VALUE_STRING</span>-значение параметра.Комментарии располагаются между строками <span style="color:blue;"><nowiki><!--</nowiki></span> и <span style="color:blue;"><nowiki>--></nowiki></span>.<br />
<br />
<br />
<br />
__TOC__<br />
<br />
<br />
===Обновление клиентских конфигураций===<br />
<br />
<br />
При необходимости обновить настройки файлов конфигурации у всех или некоторых клиентов можно воспользоваться системой обновления (каталог LiveUpdate сервера). Размещение клиентского конфигурационного файла целиком возможно только в том случае, когда все настройки, включая адрес сервера, идентичны у всех клиентов. При различиях можно воспользоваться служебным механизмом частичного обновления: файлы update*.config, находящиеся в каталоге LiveUpdate, сортируются лексикографически и применяются к тем клиентам, которые определены в настройках каждого из этих файлов. При этом могут быть указаны конкретные клиентские места, или исключения. Клиентские места указываются с помощью идентификатора, определяющего его в карте сети (любой принадлежащий ему IP-адрес, имя хоста, либо хеш-идентификатор, определенный ключом [[#ManualHostAddress|ManualHostAddress]]).<br />
<br />
Например, нижеприведенный файл update1.config применится на всех клиентах, локальный адрес которых 192.168.0.12 или 192.168.0.13.<br />
При этом будут добавлены/обновлены ключи "xxx" и "yyy", а ключ "zzz" будет удален.<br />
<br />
<pre><br />
<?xml version="1.0"?><br />
<configuration><br />
<br />
<updateAddress><br />
<include address="192.168.0.12"/><br />
<include address="192.168.0.13"/><br />
</updateAddress><br />
<br />
<appSettings><br />
<br />
<add key="xxx" value="111" /><br />
<add key="yyy" value="555" /><br />
<add key="zzz" /><br />
<br />
</appSettings><br />
<br />
</configuration><br />
</pre><br />
<br />
<br />
По умолчанию при отсутствии раздела ''updateAddress'' изменение конфигурационного файла производится на всех клиентских рабочих местах, подключающихся к серверу.<br />
Могут быть обновлены конкретные (<include address="*"/>), или все кроме указанных (<exclude address="*"/>), где * - IP-адрес, имя хоста или хеш-идентификатор.<br />
<br />
Обновиться самостоятельно могут только те клиенты, которые в силу текущих настроек конфигурационного файла способны подключиться к серверу.<br />
<br />
<br />
<br />
===Параметры файла конфигурации серверного приложения===<br />
<br />
<br />
<br />
<span style="color:blue;">Language</span>. Определяет языковую схему, используемую комплексом. В основном каталоге приложения находятся файлы Lang*.xml, представляющие собой наборы текстов для отображения в клиентских интерфейсах и БД. Для выбора того или иного языка необходимо в качестве значения данного параметра выставить соответствующее расширение имени файла (*). Например для использования файла LangRus.xml необходимо прописать значение «rus».<br />
<br />
Язык по умолчанию – русский (применяется, если в конфигурационном файле не указан язык, или если не найден файл указанного языка).<br />
<br />
Русский также является базовым языком. То есть если какого-либо кода не найдено в файле языка, то в альтернативу будет применен русский текст, заданный в коде программы. Язык также определяется в конфигурационном файле клиентского приложения, но после подключения к серверу клиентское приложение синхронизирует язык с установленным на сервере. <br />
<br />
Локализация программы производится компаниями-партнерами, файлы с текстами могут распространяться в открытом и шифрованном виде. В последнем случае осуществляется привязка к лицензии.<br />
<br />
<span style="color:blue;">HALSeparate</span>. Режим запуска модуля поддержки оборудования. «0» - в текущем процессе, «1» - в отдельном процессе используя взаимодействие через NET.Remoting, «2» - в отдельном процессе используя собственный альтернативный канал связи по протоколу TCP. <br />
<br />
В случае, если оборудование в некоторых случаях вызывает критические ошибки, подгрузка модуля поддержки оборудования в отдельном процессе позволяет не терять основной работоспособности сервера. В моменты падения процесса основная служба перезапускает его, производит фоновую регистрацию и продолжает работу. <br />
<br />
В момент перерегистрации все линии переходят в состояние «Отключена», пользователи переходят в состояние «Без телефона», все коммутации разрываются, логика резервирований очищается. Менеджер задач реагирует способом, аналогичным тому случаю, когда абоненты на внешних линиях положили трубки. Возможно файлы записей оборвавшихся разговоров будут иметь некорректный заголовок, что сделает невозможным их прослушивание стандартными средствами. Полностью процесс автоматической переинициализации занимает 5-10 секунд.<br />
<br />
<span style="color:blue;">HALRemoteAddress</span>. Адрес расположения вынесенной в отдельной процесс службы HAL. По умолчанию localhost.<br />
<br />
<span style="color:blue;">HALRemotePort</span>. Порт доступа к вынесенной в отдельный процесс службе HAL. По умолчанию 4052.<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">Настройки серверов HAL</span>.'''<br />
<br />
<span style="color:blue;">START_SERVER</span>. Индексированные параметры, определяющие запускаемые серверы аппаратуры. Доступные серверы: Сервер CTI плат Ольха-9, Сервер CTI плат Ольха-14, сервер CTI плат Synway, сервер SIP, серверы VoIP телефонии. При установке системы параметры выставляются согласно выбранным в дистрибутиве значениям. Однако в сложных системах могут потребоваться модификации. Например, в случае если происходит замена типа платы на рабочей системе, использование нескольких разных типов плат, а также при запуске нескольких VoIP серверов, обслуживающих разные подсети. Загрузке подлежат серверы с индексами от 1 до 32 (в примере - часть строки XX).<br />
<br />
<br />
Сервер плат «Ольха 9», «Ольха 14»:<br />
<br />
<pre><add key="START_SERVER_XX" value="Alder9 Server;oktell.HALAlder9Srv.dll;Alder9;_Loaders\" /><br />
<br />
<add key="START_SERVER_XX" value="Alder14 Server;oktell.HALAlder9Srv.dll;Alder14;_Loaders\" /></pre><br />
<br />
Последний элемент строки после точки с запятой указывает путь к файлам-загрузчикам. По умолчанию это подкаталог серверной службы _Loaders.<br />
<br />
<br />
Сервер плат «Synway»:<br />
<br />
<pre><add key="START_SERVER_XX" value="Synway Server;oktell.HALSynwaySrv.dll;ShCti;" /></pre><br />
<br />
<br />
Сервер плат «Yeastar»:<br />
<br />
<pre><add key="START_SERVER_XX" value="E1 Yeastar Server;oktell.HALYeastarSrv.dll;YeaCTI" /><br />
<br />
<add key="START_SERVER_XX" value="TDM800 Yeastar Server;oktell.HALYeastarSrv.dll;TDM800" /></pre><br />
<br />
<br />
Сервер SIP:<br />
<br />
<pre><add key="START_SERVER_XX" value="SIP Server;oktell.HALSipSrv.dll;SIP;sip:*:5060" /></pre><br />
<br />
Последний элемент строки после точки с запятой устанавливает детальные настройки сетевого интерфейса и порта, на которых запускаемый SIP-сервер будет активен. По умолчанию «sip:*:5060», то есть сервер слушает все интерфейсы на порте 5060. При необходимости установить какой-либо конкретный интерфейс необходимо вместо «*» указать его адрес.<br />
<br />
<br />
Серверы VoIP:<br />
<br />
<pre><add key="START_SERVER_XX" value="Buildin VOIP Server;;Voip;localhost:4003" /></pre><br />
<br />
Последний элемент строки после точки с запятой указывает сетевой интерфейс и порт слушателя регистраций локальных устройств. При необходимости использования сервера для поддержки локальных устройств разных подсетей возможно запустить несколько VoIP-серверов - несколько однотипных строчек файла конфигурации с разными индексами и разными сетевыми интерфейсами.<br />
<br />
<br />
Сервер виртуальных каналов<br />
<br />
<pre><add key="START_SERVER_XX" value="Virtual Server;oktell.HALVirtualSrv.dll;VS;12/10" /></pre><br />
<br />
Последний элемент строки указывает количество используемых каналов - внешних/внутренних.<br />
<br />
<br />
<br />
<span style="color:blue;">RTP_PORT_START</span>. Начальный порт для обмена RTP-трафиком медиа-подсистемой (SIP, VoIP). По умолчанию 9000.<br />
<br />
<span style="color:blue;">RTP_PORT_COUNT</span>. Количество портов, начиная со стартового, доступные для медиа-подсистемы (SIP, VoIP). По умолчанию 10000.<br />
<br />
<span style="color:blue;">RTP_MAX_CHANNELS</span>. Количество сокетов получения RTP-трафика на один поток-слушатель. От 1 до 32. (SIP, VoIP). По умолчанию 8.<br />
<br />
<span style="color:blue;">USE_AFFINITY_MASK</span>. «1» - использовать разделение задач по процессорам. Половина процессоров для сервера логики, другая половина для сервера HAL. «0» - значение по умолчанию. В этом случае операционная система самостоятельно занимается распределением.<br />
<br />
<span style="color:blue;">JITTER_DEPTH</span>. Значение глубины джиттер-буфера на сервере. Минимальное значение - «4», по умолчанию - «4». При увеличении значения происходит рост задержки в голосовом обмене по направлению звука к серверу, эффективнее исключая влияние проблем сети.<br />
<br />
<span style="color:blue;">TIMER_TYPE</span>. Тип используемого таймера высокой разрешающей способности для тактирования звуковых пакетов. На разных операционных системах и компьютерах различные варианты таймеров могут иметь достаточно сильную погрешность, влияющую на итоговое качество звука. Основная задача при выборе таймера состоит в обеспечении корректного среднего промежутка времени между тиками. Замечены случаи, когда некоторые из вариантов таймеров ОС тактируют постоянно увеличенные интервалы времени (например постоянно 46 мс вместо 40 положенных). Если не происходит корректировок, то такой таймер следует заменить на другой тип. Для определения значений всех вариантов таймеров можно использовать специальное тестовое приложение.<br />
<br />
Возможные значения:<br />
<br />
:::0 - Системный таймер по умолчанию. Дает более точное тактирование по сравнению с таймером на ожидании. Выдает точное тактирование в Windows Vista и некоторую погрешность в предыдущих версиях Windows. Система буферизации звука в этом случае сглаживает разброс, однако существуют компьютеры, где погрешность таймера постоянна. Это влечет пропуск пакетов и заметное ухудшение итогового качества звука. На таких компьютерах необходимо использовать другие типы таймеров. Рекомендуется мультимедийный.<br />
<br />
:::1 - Системный таймер в собственном потоке приложения.<br />
<br />
:::2 - Имплементация таймера в потоке с использованием функции WaitForSingleObject(). <br />
<br />
:::3 - Мультимедийный таймер. Дает наиболее точное тактирование, однако имеет общее ограничение на количество одновременно существующих таймеров в системе (16 объектов). Сервер Oktell использует 3 объекта таймера высокой разрешающей способности.<br />
<br />
:::4 - Автоопределение. На старте системы осуществляется тестовый прогон всех вариантов таймеров и определяется средне наиболее точный. В случае, если все имеют одинаковую среднюю точность, предпочтение отдается таймеру с меньшим индексом (таймер по умолчанию, системный, таймер ожидания, мультимедийный). На прогон теста на старте системы выделяется лишняя секунда.По умолчанию «4».<br />
<br />
<br />
<span style="color:blue;">TIMER_HIGHRES</span>. Тип используемого счетчика интервалов времени. «0» - миллисекундный системный счетчик GetTickCount, «1» - Query Performance Counter. По умолчанию «1».<br />
<br />
<div id="FORCE_BRACKETS_FOR_URI"></div><br />
<span style="color:blue;">FORCE_BRACKETS_FOR_URI</span>. «1» - значения заголовков To и From отправляемых SIP-пакетов размещаются в треугольных скобках. По умолчанию «0».<br />
<br />
<br />
<div id="EnableSipTransportFilter"></div><br />
<span style="color:blue;">EnableSipTransportFilter</span>. «1» - активирует на сервере спам-фильтр, защищающий от атак на SIP-подсистему. При поступлении с одного IP-адреса за короткий отрезок времени чрезмерно большого количества регистрационных пакетов, завершающихся неудачей по причине неверной авторизационной информации, осуществляется блокирование адреса на период времени, указанный в параметре и исчислимый в минутах. На все попытки регистрации с заблокированного IP-адреса сервер не отвечает никаким образом. По умолчанию 1440 минут (= 1 сутки), 1 - не отключать фильтрацию адреса вплоть до перезагрузки сервера, остальные действительные значения являются непосредственными значениями интервала в минутах. 0 - режим отключен.<br />
<br />
<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">Настройки клиентских подключений</span>.'''<br />
<br />
<span style="color:blue;">PBXServerPort</span>. Порт для подключения собственных клиентских приложений через механизм NET.Remoting (устаревш.).<br />
<br />
<span style="color:blue;">InternalClientPort</span>. Порт для подключения собственных клиентских приложений и приложений на базе клиентского ядра через встроенную надстройку над протоколом TCP. По умолчанию 4054.<br />
<br />
<span style="color:blue;">ExternalClientPort</span>. Порт для подключения внешних приложений 4053.<br />
<br />
<span style="color:blue;">SIP_ENABLE_TCP</span>. Разрешает TCP-подключение по протоколу SIP. Конкретный порт зависит от настроек SIP-сервера (по умолчанию, 5060). «0» - не активно, «1» - активно. По умолчанию «0».<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">Настройки рабочего каталога</span>.'''<br />
<br />
<span style="color:blue;">WORK_ROOTDIR</span>. Устанавливает в явном виде путь к рабочей папке серверной службы. Временные файлы, сценарии, проекты, плагины, каталог по умолчанию для записи разговоров, резервные копии - все, кроме основных сборок службы, размещается именно там.<br />
<br />
<span style="color:blue;">WORK_ROOTDIR_TYPE</span>. Устанавливает один из нескольких возможных вариантов размещения рабочей папки. Используется, если не задана рабочая папка в явном виде. Возможные варианты: 0 – папка запустившего процесс выполняемого файла, 2 – Documents And Settings\All Users, 3 – Documents And Settings\CurrentUser.<br />
<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">Настройки доступа к БД</span>.'''<br />
<br />
<span style="color:blue;">DBServerName</span>. Адрес сервера, на котором находится база данных MSSQL. По умолчанию «(local)».<br />
<br />
<span style="color:blue;">DBName</span>. Имя основной оперативной базы данных, к которой производится подключение. По умолчанию «oktell».<br />
<br />
<span style="color:blue;">DBNameCC</span>. Имя базы данных статистики call-центра. По умолчанию «oktell_cc_temp».<br />
<br />
<span style="color:blue;">DBNameSettings</span>. Имя базы данных с настройками системы. По умолчанию «oktell_settings».<br />
<br />
<span style="color:blue;">DBLogin</span>. Имя пользователя, учетной записью которого пользуется система. По умолчанию «AutelService».<br />
<br />
<span style="color:blue;">DBInstanceName</span>. Имя экземпляра сервера MSSQL. По умолчанию «MSSQLSERVER». Для доступа к службе, обеспечивающей работу БД. В момент запуска службы Oktell осуществляется проверка доступности БД. Если SQLServer, обслуживающий БД коммуникационного сервера, находится на том же компьютере, что и служба Oktell, то при невозможности обращения к БД Oktellпроверяет и перезапускает локальную службу SQLServer (указанный instance). <br />
<br />
Если работа SQLServer осуществляется на другом компьютере, то во избежании запуска службы SQLServer на локальной машине в значение поля можно поставить «0». Октелл будет осуществлять бесконечное ожидание корректного подключения к БД перед началом загрузки, а сервер баз данных не будет загружать в ОЗУ свои данные, тем самым коммуникационный сервер будет гарантирован от кэширования данных на диск, и, как следствие, временных приостановок операционной системой работы всех служб и приложений в ожидании завершения операции, что достаточно критично при активных коммутациях.<br />
<br />
<span style="color:blue;">DBConnectionString</span>. Строка подключения, задаваемая явно. Используется при настройке подключения к службам SQL с индивидуальными параметрами, при которых не подходят параметры по умолчанию. При отсуствии этого свойства, или пустом его значении, подставляется строка: <br />
<br />
<pre>"server=(local);database=oktell;uid=AutelService;pwd=[pwd];pooling=true",</pre><br />
<br />
где значения параметров server, database и uid подставляются из вышеописанных свойств. При явном указании строки подключения пароль может быть указан явно, либо использована последовательность символов «[pwd]», указывающая системе на необходимость подстановки пароля для логина AutelService.<br />
<br />
<span style="color:blue;">DBTransactionLogSize_1, DBTransactionLogSize_2</span>. Размеры транзакционных лог-файлов баз данных - основной и пространственной. По умолчанию по 500 МБ.<br />
<br />
<span style="color:blue;">DBBackupDir</span>. Путь к каталогу на сервере баз данных, в котором осуществляется создание резервных копий баз данных. По умолчанию это Backup в рабочей папке сервера. Однако в случае, если сервер баз данных работает на отдельном компьютере, путь должен существовать именно на нём. <br />
<br />
<span style="color:blue;">DBAutoDailyBackup</span>. «1» - устанавливает режим автоматического ежедневного резервного копирования баз данных одновременно с оптимизацией используемых баз данных. Режим оптимизации сам по себе настраивается в разделе [[Управление базами данных|Администрирование. Общие настройки. Управление базами данных]]. Если режим ежедневной оптимизации отключен, то вне зависимости от значения описываемого параметра резервная копия создана не будет. Cоздание файлов резервных копий производится на компьютере, где установлен текущий используемый MSSQLServer. Файлы размещаются в каталоге, установленном параметром [[#Параметры файла конфигурации серверного приложения|DBBackupDir]], а при его отсутствии в каталоге, путь к которому совпадает с рабочей папкой службы сервера в подкаталоге \Backup. Файлы резервных копий баз имеют названия db_ok.bak, db_okcc.bak, db_okset.bak, при ежедневном автоматическом создании резервных копий предыдущие резервные копии автоматически заменяются новыми. При необходимости осуществлять хранение нескольких копий за некоторый промежуток времени необходимо налаживать схему бэкапа или копирования файлов самостоятельно.<br />
<br />
<span style="color:blue;">ScrBackupDir</span>. Путь к каталогу на сервере АТС, в котором осуществляется создание резервных архивов со сценариями. По умолчанию это каталог Backup в рабочей папке сервера.<br />
<br />
<span style="color:blue;">RepUpdateDir</span>. Каталог с обновлениями отчетов call-центра.<br />
<br />
<span style="color:blue;">DBUpdateDir</span>. Каталог с обновлениями для БД.<br />
<br />
<span style="color:blue;">DBUpdateDirExtern</span>. Каталог с внешними обновлениями для БД. Расположенные здесь файлы с текстом, представляющим собой один совокупность нескольких SQL-batch, исполняются в БД по очередности их имен в момент запуска сервера. После успешного исполнения файлы удаляются. В случае возникновения ошибок их описание можно обнаружить в лог-журнале Exception. <br />
<br />
<span style="color:blue;">PauseTMOnDbQueueLength</span>. Определяет количество сообщений в очереди на сохранение в БД, при котором менеджер задач приостанавливает совершение звонков по исходящим голосовым задачам. Система считает, что таким образом нагрузка уменьшается, и БД имеет больше шансов к уменьшению очереди запросов. По умолчанию 100. Бывают случаи временной загрузки БД, когда своп происходит редко и длится в течение минуты или более того, а в остальные случаи сервер БД не подвержен притормаживанию. В этом случае имеет смысл оценить производительность сервера и увеличить максимальный предел очереди вплоть до нескольких тысяч. Отсутствие предела может привести в особо критичных случаях к тому, что данных в очереди накопится чрезмерно много, что выльется либо в нехватку памяти процессу, либо в несохранение результатов звонков после их совершения в случае сбоя сервера или базы данных.<br />
<br />
<span style="color:blue;">PauseProgressiveOnDbQueueLength</span>. Аналогичный предыдущему параметр для прогрессивного пула задач. Может иметь обособленную настройку и сказывается на запуск прогрессивных исходящих звонков. По умолчанию 50;<br />
<br />
<br />
<div id="DbRemote"></div><br />
<span style="color:blue;">UseDbRemote</span>. Довольно большое количество обращений из клиентских приложений к серверу являются суть запросами к БД. 1 - использует отдельный процесс туннелирования (oktell.DbRemoteService.exe) для прямых обращений к БД из клиентских приложений. 0 - все обращения к БД через основную службу. По умолчанию 0. При подключении к службе туннелирования все клиенты проходят аутентификацию. Служба туннелирования получает параметры доступа к БД из конфигурационного файла основной службы Oktell. Собственный конфигурационный файл необходим лишь для определения способа старта (служба или приложение), порта слушателя TCP подключений, а также возможно некоторых настроек логирования. <br />
<br />
<span style="color:blue;">CheckStartDbRemote</span>. Применяется в случае использования отдельного процесса туннелирования доступа клиентских приложений к БД. 1 - указывает серверу на необходимость самостоятельного запуска процесса; процесс при этом запускается на том же физическом сервере, где и основная служба Oktell; при завершении службы при этом процесс выгружается. 0 - указывает на необходимость подключения к постоянно запущенной службе (при этом служба может находиться на другом физическом сервере). По умолчанию 1. В конфигурационном файле службы туннелирования устанавливается, какой способ запуска используется - как служба или как приложение (ключ IsService). Настройки доступа к процессу туннелирования и самого процесса должны соответствовать друг другу.<br />
<br />
<span style="color:blue;">DbRemoteServer</span>. Применяется в случае использования отдельного процесса туннелирования доступа клиентских приложений к БД. Определяет адрес и порт для TCP доступа к приложению («address:port»). Сервер с помощью них осуществляет самостоятельное подключение для управления, а также выдает этот адрес клиентам для организации их собственных каналов связи. В случае, если указан localhost (используется по умолчанию), сервер выдает клиентам свой публичный адрес. Порт указывается в конфигурационном файле приложения/службы oktell.DbRemoteService.exe, по умолчанию 4086. <br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">Настройки службы</span>.'''<br />
<br />
<span style="color:blue;">EnableEmptyAdmin</span>. «1» - активирует на сервере возможность пользования учетной записью системного администратора. По умолчанию запись доступна только на сервере, где неактивен сервер состояний или среди учетных записей пользователей которого не существует ни одной, обладающей базовой ролью администратора. Может понадобиться в случае, если пароль учетной записи администратора утерян. Для применения требуется перезапуск службы сервера. По умолчанию «0».<br />
<br />
<div id="EnableAutoMap"></div><br />
<span style="color:blue;">EnableAutoMap</span>. «1» - активирован режим, при котором авторизация с рабочего места, не имеющего в карте сети учетной записи, приводит к автоматической временной регистрации на сервере рабочего места, снабженного USB-телефоном. «0» - доступ с неизвестных рабочих станций заблокирован. В целях обеспечения работы веб-клиентов, значение по умолчанию «1».<br />
<br />
<div id="EnableAutoMapSip"></div><br />
<span style="color:blue;">EnableAutoMapSip</span>. «1» - активирован режим, при котором при динамической регистрации вместо создания динамической линии USB-телефона производится связка с существующим в карте сети SIP-телефоном. Связка осуществляется по совпадению логина телефона с логином пользователя, либо по совпадению назначенного «пользователя по умолчанию» с авторизующимся пользователем. Для работы требуется включение параметра [[#EnableAutoMap|EnableAutoMap]]. «0» - связка динамических рабочих мест с SIP-телефонами не используется.<br />
<br />
<span style="color:blue;">UseWlockForDynamicReg</span>. «1» - использовать блокировку писателя при добавлении/удалении динамических рабочих мест. По умолчанию «0» - использовать блокировку читателя.<br />
<br />
<div id="Use4xLineNumbers"></div><br />
<span style="color:blue;">Use4xLineNumbers</span>. «1» - использовать при создании линий четырехзначную числовую нумерацию (0000-9999). Может быть использовано в проектах с более чем 1000 линий одного типа. По умолчанию «0».<br />
<br />
<br />
<span style="color:blue;">ManualHostAddress</span>. Устанавливает уникальное имя сервера для идентификации в карте сети на старте службы. В случае, если в качестве адреса сервера в карте сети указано это значение - позволяет устранить зависимость от смены DNS-имени, а также смены и назначения динамических адресов сервера. <br />
<br />
Следует обратить внимание, что сервер может являться также и клиентской рабочей станцией. В этом случае необходимо в файл конфигурации клиентского приложения на сервере задать аналогичный параметр тем же значением, либо создать в карте сети отдельный компьютер с указанным реальным адресом или любой другой уникальной строкой (в случае использования на клиенте аналогичной схемы подмены адреса).<br />
<br />
<span style="color:blue;">ProcessPriority</span>. Приоритет серверного процесса. По умолчанию «0» - Нормальный. «1» - выше среднего, «2» - высокий, «3» - реального времени.<br />
<br />
<span style="color:blue;">HALRemoteProcessPriority</span>. Приоритет процесса HALRemote. «0» - нормальный, «1» - выше среднего (по умолчанию), «2» - высокий, «3» - реального времени.<br />
<br />
<span style="color:blue;">Default_DateTime_Format</span>. Индексированные параметры, определяющие нестандартныей варианты преобразования типа СТРОКА к типу ДАТАВРЕМЯ. Используются строки с индексами от 0 до 99, перебор в ходе работы осуществляется в порядке увеличения индексов.<br />
<br />
<span style="color:blue;">MixerDeleteSourceRecords</span>. «1» - удалять исходные файлы записей коммутаций после упаковки и/или микширования, «0» - оставлять на месте. По умолчанию «1».<br />
<br />
<span style="color:blue;">CheckRecordDriveEmptySpace</span>. «1» - осуществляет слежение за объемом свободного места на диске для записи разговоров. «0» - игнорирует проверку. Игнорирование может потребоваться при использовании сетевых дисков для записи, размер свободного пространства которых системой определяется нулевым, а также при использовании файлового сервера. По умолчанию «1».<br />
<br />
<span style="color:blue;">TaskListAbonentUseLikeNumber</span>. «1» - позволяет активировать поиск абонентской строчки в таблице абонентов с фильтром "number like '%x%'". По умолчанию «0» и поиск осуществляется только по идентификатору абонента.<br />
<br />
<span style="color:blue;">SkipCloseMutexCommand</span>. Режим автоматического закрытия сервера через мьютекс-команду необходим в целях исключения проблем с операциями обнаружения процессов. Встречаются системы, в которых отключены или недееспособны службы, необходимые для обнаружения внешнего процесса. В этом случае процесс копира не в состоянии при необходимости остановить серверный процесс перед обновлением и/или для перезапуска. «1» - пропускать команду закрытия, отданную через системные мьютексы процессом копира. «0» и другие значения - команда будет распознаваться и сервер будет реагировать на нее автоматическим закрытием.<br />
<br />
<div id="UseSimpleLineState"></div><br />
<span style="color:blue;">UseSimpleLineState</span>. Определяет способ привязки состояний внутренних номеров, ссылающихся на линии к состоянию самих линий. Если указать 0, то состояние номера, в случае свободности подчиненной ему линии, будет оцениваться по состоянию привязанного к ней пользователя. По умолчанию 1.<br />
<br />
<div id="HideGhostMonitor"></div><br />
<span style="color:blue;">HideGhostMonitor</span>. 1 - скрывает [[Прослушивание и помощь|слушателей разговора]] друг от друга, 0 - делает их доступными друг другу. По умолчанию 1.<br />
<br />
<div id="GCCollectorPeriodMin"></div><br />
<span style="color:blue;">GCCollectorPeriodMin</span>. Определяет периодичность принудительного запуска сборщика мусора .NET в минутах. По умолчанию 1 минута.<br />
<br />
<div id="UseNumStateChangedEventDelayer"></div><br />
<span style="color:blue;">UseNumStateChangedEventDelayer</span>. Интервал в мс, определяющий задержку перед рассылкой уведомлений о смене состояния номеров в номерном плане. 0 - выключено. По умолчанию 500. Применяется при большом количестве номеров и пользователей, следящих за их изменением. За время задержки происходит накопление данных и отправка одним пакетом. Позволяет экономить вычислительную мощность.<br />
<br />
<span style="color:blue;">DEBUG_incomingemail</span>. Логирование в common логе сервера принимаемых e-mail сообщений (pop3) "1" - включено. По умолчанию выключено.<br />
<br />
<div id="DEBUG_LogActiveThreadStackTrace"></div><br />
<span style="color:blue;">DEBUG_LogActiveThreadStackTrace</span>. При установке значения «1» производит вывод в лог ''DEBUG'' информации о стеке всех активных потоков основной службы сервера.<br />
<br />
<div id="UsePriorSwitchCallername"></div><br />
<span style="color:blue;">UsePriorSwitchCallername</span>. При осуществлении переключения из сценария на внутренний номер определяет, что будет отображаться в качестве имени абонента (callername) на sip-телефоне. 0 - автоопределение; если пусто, то callername из компонента «Переключение на номер» сценария IVR. 1 - наоборот, с приоритетом заданного в компоненте значения. По умолчанию 1.<br />
<br />
<span style="color:blue;">UserMessageCheckPeriodSec</span>. Позволяет активировать отслеживание появления новых сообщений между пользователями в базе данных и отправить их на отображение. Применяется в случае индивидуальной или внешней настройки и отправки сообщений путем размещения в таблицу A_UserMessages в БД. Указывается период отслеживания появления новых в секундах. 0 - выключено. По умолчанию 0.<br />
<br />
<div id="UserMessageCheckMakeViewed"></div><br />
<span style="color:blue;">UserMessageCheckMakeViewed</span>. В случае периодического отслеживания появления новых сообщений между пользователями в БД, указывает, отмечать ли их сразу как прочитанные с тем, чтобы при следующей итерации они не возникали вновь.<br />
<br />
<div id="DBPluginCommandTimeoutSec"></div><br />
<span style="color:blue;">DBPluginCommandTimeoutSec</span>. Позволяет задать таймаут в секундах на исполнение запросов от плагинов к БД. По умолчанию 600. Начиная с версии 120911.<br />
<br />
<div id="AllowDownloadFilesDirectlyOnlyFromTemp"></div><br />
<span style="color:blue;">AllowDownloadFilesDirectlyOnlyFromTemp</span>. 1 - блокирует скачивание файлов с сервера через HTTP интерфейс отовсюду, кроме как из временной папки Temp и [[Настройки веб-сервера#LocalStoragePath|локального хранилища]]. 0 - разрешает скачивать произвольные файлы с диска сервера по прямой ссылке. По умолчанию 1 (блокировать).<br />
<br />
<div id="BanUserAgent"></div><br />
<span style="color:blue;">BanUserAgentXX</span>, XX - порядковый номер от 00 до 99. Позволяет установить SIP-транспортный фильтр для определенных значений поля User-Agent. По умолчанию банится "Friendly-Scanner" в целях снижения нагрузки и уменьшения вероятности взлома.<br />
<br />
<div id="UpdateSelectorOnDirectorDisconnect"></div><br />
<span style="color:blue;">UpdateSelectorOnDirectorDisconnect</span>. 1 - при выходе/выпадении управляющего из селекторного совещания производит преобразование селектора к общей конференции. 0 - оставляет селектор с теми правами и в том виде, в котором он находился в последний момент присутствия управляющего. По умолчанию «1».<br />
<br />
<div id="PBX_Use180SdpAs183"></div><br />
<span style="color:blue;">PBX_Use180SdpAs183</span>. 1 - воспринимает команду ''180 Ringing'' с SDP содержимым как команду ''183 Progress'' и начинает сеанс медиасвязи. Используется в режиме ''прослушивание медиа-потока'' компонента [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние линии]]. 0 - генерирует стандартный сигнал КПВ (длинные гудки). По умолчанию 1.<br />
<br />
<div id="PBX_BackFrom183To180"></div><br />
<span style="color:blue;">PBX_BackFrom183To180</span>. 1 - воспринимает команду ''180 Ringing'' к обязательному исполнению - начинает генерацию сигнала КПВ (длинные гудки), даже если предварительно был получен ответ ''183 Progress'' и канал находится в медиа-коммутации. Используется в режиме ''прослушивание медиа-потока'' компонента [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние линии]]. 0 - пропускает такую команду. По умолчанию 0.<br />
<br />
<div id="UseAssertedIdentity"></div><br />
<span style="color:blue;">UseAssertedIdentity</span>. Включает отправку SIP-заголовоков ''P-Asserted-Identity'' и ''Remote-Party-ID'' в ответ на входящие вызовы с внутренних SIP-устройств на сервер с целью отправить на отображение в SIP-устройство ''Сaller-name'' вызываемого абонента. Применяется в случае осуществления вызова на внутренний номер.<br />
<br />
<div id="ScreenShotSize"></div><br />
<span style="color:blue;">AutoScreenshotWidth</span>, <span style="color:blue;">AutoScreenshotHeight</span>. Определяют максимальные размеры скриншотов экранов, снимаемых с помощью компонента сценариев [[Общие компоненты сценариев#UserState|Статус объекта]].<br />
<br />
<div id="PredictivePoolTimerIntervalMs"></div><br />
<span style="color:blue;">PredictivePoolTimerIntervalMs</span>. Устанавливает общий для всей системы интервал пересчета параметров предиктивных задач в мс, в ходе которого могут быть начаты новые дозвоны (по умолчанию 5000). <br />
<br />
<div id="PredictivePoolClearStatOnDeactivate"></div><br />
<span style="color:blue;">PredictivePoolClearStatOnDeactivate</span>. Устанавливает общий для всей системы режим очистки статистики в предиктивных задачах при деактивации (по умолчанию 0).<br />
<br />
<div id="PredictivePoolExtraShiftTimeoutMs"></div><br />
<span style="color:blue;">PredictivePoolExtraShiftTimeoutMs</span>. Устанавливает общий для всей системы дополнительный интервал в мс, применяемый безусловно к спрогнозированным параметрам. Может быть отрицательным и положительным. По умолчанию 0.<br />
<br />
<div id="WebServerNoAuth_Loopback"></div><br />
<span style="color:blue;">WebServerNoAuth_Loopback</span>. Позволяет отменить требование базовой авторизации при обращении к веб-серверу по loopback-интерфейсу (из приложений на самом сервере). По умолчанию 0.<br />
<br />
<br />
<div id="FileServer"></div><br />
<span style="color:blue;">FileServer_Log</span>, <span style="color:blue;">FileServer_Record</span>. Позволяет активировать сохранение соответственно лог-журналов и записей разговоров на удаленный файл-сервер. Значение задается в формате «address:port», например «192.168.0.199:4088». В качестве файлсервера может выступать любой компьютер с установленной и активированной службой oktell.FileService.exe из каталога серверной службы Oktell. О настройке и способах работы файл-сервера доступна [[http://r.oktell.ru/wiki/306/ статья]] в базе знаний.<br />
<br />
<div id="FileServerRecDir"></div><br />
Хранение записей может происходить в разных каталогах в соответствии с настройкой в Oktell. При использовании файл-сервера в качестве хранилища записей может потребоваться подключать дополнительные хранилища и изменять путь для сохранения записей и последующего доступа к ним. Чтобы это обеспечить, необходимо подвергать корректировке совместно настройку каталога для записи в Oktell и конфиг файлового-сервера. При этом в конфигурационном файле файлового сервера требуется указание соответствия переданного службой Oktell пути с локальным путем (ключ ''BaseDir_*'', где * - это subdir.ToLower(recordedfiles\dirname), а dirname - название последнего внутреннего каталога по выбранному службой Oktell пути; значение - локальный путь на файловом сервере. Например <add key="BaseDir_recordedfiles\path2" value="D:\_OktellWorkDir\Files\Base2\"/>. При настройке Oktell следует указывать пути, последний каталог которых имеет уникальное название и ранее не использовалось).<br />
<br />
<br />
<br />
<div id="FaceTime"></div><br />
'''Раздел <span style="color:green;">Настройки сервера видео-конференций</span>.'''<br />
<br />
<span style="color:blue;">FaceTimeLocalPort</span>. Определяет порт локального сервиса видео-конференций. По умолчанию 4090.<br />
<br />
<span style="color:blue;">FaceTimeServer</span>. Определяет доступные серверы видео-конференций. Перечисляются через запятую с помощью алиасов, которые затем определяются отдельными ключами конфигурации. По умолчанию доступен только локальный сервер, но могут быть вместо или дополнительно настроены один или несколько обособленных серверов. Локальный сервер определяется алиасом «local». Например <br />
<pre><add key="FaceTimeServer" value="local, futurama, videoserver"/></pre><br />
<br />
<span style="color:blue;">FaceTime_*</span>. Определяет адрес и порт обособленного сервера видео-конференций. Вместо символа * подлежит указанию алиас сервера. Эта настройка должна присутствовать для каждого упомянутого алиаса кроме «local». Например <br />
<pre><add key="FaceTime_futurama" value="192.168.0.10:4092"/></pre><br />
<br />
<br />
<br />
<div id="ThreadManagement"></div><br />
'''Раздел <span style="color:green;">Управление потоками</span>.'''<br />
<br />
Позволяет ограничивать максимальное количество потоков-обработчиков для отдельных видов работ.<br />
<br />
<br />
<span style="color:blue;">ThreadCountLowLimit</span>. Количество потоков в общем пуле системы, свободно доступных службе сервера. По умолчанию 500.<br />
<br />
<span style="color:blue;">ThreadCountHighLimit</span>. Максимально допустимое количество потоков в общем пуле системы, доступных службе сервера. Потоки, находящиеся в разнице между нижним и верхним ограничениями, выделяются системой с запаздыванием. По умолчанию 700.<br />
<br />
<br />
<br />
<span style="color:blue;">CachedThreadFreeMode</span>. Режим работы пула асинхронных потоков. «0» по умолчанию - использовать пул, никогда не уничтожать потоки, «1» - не использовать пул, уничтожать потоки сразу после использования, «2» - размещать в пул на 1 секунду, уничтожать по истечении в случае простоя.<br />
<br />
<br />
<span style="color:blue;">CheckReleaseRWOnAbort</span>. По умолчанию «1» - производить дополнительную проверку блокировки критической секции сервера состояний перед освобождением асинхронного потока и освобождать в случае обнаружения. «0» - не производить.<br />
<br />
<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimit</span>. 0 - отключает ограничение на количество потоков, обслуживающих клиентские запросы. <br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitHighest</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки высокоприоритетных клиентских запросов, таких как Ping. По умолчанию 10.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitData</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов, возвращающих большие объемы данных. По умолчанию 10. В момент длительной отправки данных по сети поток не считается использующимся.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitDownload</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов на скачивание и закачивание файлов. По умолчанию 10. В момент длительной отправки данных по сети поток не считается использующимся.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitSetup</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов из раздела администрирования. По умолчанию 5.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitLiveupdate</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов в части проверки обновлений, подготовки архива и его скачивания. По умолчанию совпадает с половиной общего количества ядер всех процессоров сервера, но не менее 2. В момент длительной отправки данных по сети поток не считается использующимся.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitNormal</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов в части проверки обновлений, подготовки архива и его скачивания. По умолчанию 100.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitEvent</span>. Устанавливает максимально допустимое количество потоков, доступных системе для рассылки событий клиентским приложениям. По умолчанию 10.<br />
<br />
<br />
Этот же набор параметров с другим префиксом действует для службы туннелирования клиентских запросов в БД. Их указание требуется в конфигурационном файле сервера, так как конфигурационные параметры передаются в службу туннелирования из основной службы.<br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimit</span>. <br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimitHighest</span>. <br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimitData</span>. <br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimitDownload</span>. <br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimitSetup</span>. <br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimitNormal</span>. <br />
<br />
<br />
<span style="color:blue;">OKTCP_HALL_ThreadCountLimit</span>. Устанавливает максимально допустимое количество потоков, доступных системе для взаимодействия с внешним процессом HAL. По умолчанию 0 - не ограничено.<br />
<br />
<span style="color:blue;">OKTCP_HALR_ThreadCountLimit</span>. Применяется в конфигурационном файле внешнего процесса HAL (oktell.HALRemoteApp.exe) или в собственном (если процесс настроен на работу с конфигурационным файлом основной службы). Устанавливает максимально допустимое количество потоков, доступных внешнему процессу HAL для взаимодействия с основным процессом службы. По умолчанию 0 - не ограничено.<br />
<br />
<span style="color:blue;">Line_ThreadCountLimit</span>. Устанавливает максимально допустимое количество потоков, обслуживающих каналы АТС. По умолчанию 20.<br />
<br />
<span style="color:blue;">Script_ThreadCountLimit</span>. Устанавливает максимально допустимое количество потоков, обслуживающих сценарии. По умолчанию 20.<br />
<br />
<span style="color:blue;">TML_ThreadCountLimit</span>. Устанавливает максимально допустимое количество потоков, обслуживающих звонки в голосовых задачах. По умолчанию 10.<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">LOG</span>.'''<br />
<br />
Хранит настройки лог-сервера комплекса. Среди неописываемых настроек - пути к папкам для сбора журналов.<br />
<br />
<span style="color:blue;">LOG_storedays</span>. Длительность хранения лог-журналов в днях. По умолчанию «7». По истечении указанного периода журналы удаляются системой. В некоторых случаях объем журналов может достигать нескольких гигабайтов за день.<br />
<br />
<span style="color:blue;">LOG_maxfilesize</span>. Максимальный размер одного файла лог-журнала в МБ. При достижении лог-журналом указанного размера логирование прекращается. Имеет воздействие на все лог-журналы, исключая HAL (Hardware). По умолчанию 3 ГБ.<br />
<br />
<span style="color:blue;">LOG_maxpartsize</span>. Позволяет настроить максимальный размер одного файла в МБ. По умолчанию 500 МБ. При достижении лог-журналом указанного размера формируется новый файл. Имеет воздействие на все лог-журналы, исключая HAL (Hardware).<br />
<br />
<span style="color:blue;">LOG_root</span>. Абсолютный или относительный путь к папке с лог-журналами. По умолчанию «Log», то есть относительный путь в каталоге серверной службы/приложения.<br />
<br />
<br />
<div id="DebugLogTcpBufferSizeKB"></div><br />
<span style="color:blue;">DebugLogTcpBufferSizeKB</span>. Позволяет включить логирование информации обо всех объемных пакетах, переданных или отправленных сервером. Указывается размер в KB, выше которого пакеты логируются в Debug лог. По умолчанию 0 - не логировать.<br />
<br />
<div id="DebugLogCPEventTypes"></div><br />
<span style="color:blue;">DebugLogCPEventTypes</span>. 1 - включает логирование информации обо всех событиях, отправляемых в клиентские приложения в Debug-лог. По умолчанию 0 - выключено.<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">DEBUGGING</span>.'''<br />
<br />
Хранит настройки, согласно которым ведется заполнение служебного сервисного лог-журнала. По умолчанию все параметры выставлены в «1», что влечет полное логирование служб сервера. Полное или частичное отключение уменьшает размер журнала, однако не даст информации в случае возникновения сбоев и общением с технической поддержкой.<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">KEYREMOTE</span>.'''<br />
<br />
Хранит настройки для подключения к внешнему серверу, управляющему ключом защиты. Необходимо в редких случаях, если USB-порт на сервере не функционирует должным образом.<br />
<br />
<br />
<br />
<br />
<br />
===Параметры файла конфигурации клиентского приложения===<br />
<br />
<br />
<br />
<span style="color:blue;">Language</span>. Определяет языковую схему, используемую клиентским приложением до момента подключения к соответствующему серверу. После подключения производится принудительная синхронизация языковой схемы. Фактически это происходит в момент отображения окна авторизации. Подробнее в [[#Параметры файла конфигурации серверного приложения|описании ключа]] в разделе серверного приложения.<br />
<br />
<span style="color:blue;">ServerSelectMode</span>. Определяет, каким образом происходит выбор сервера в случае, если указано несколько адресов (нижеперечисленные ключи конфигурации). «0» - в окне авторизации отображается список серверов в соответствии с перечислением в конфигурационном файле. При автоматическом переподключении всегда берется последний активный сервер. «1» - осуществляется автоматический перебор серверов начиная с самого первого. Подключение производится к тому, который дал положительный ответ. При автоматическом подключении без окна авторизации в учет берется не только подключение, но и ответ авторизации. Таким образом будет активирован сервер, успешно подключенный и разрешивший вход. В этом случае в окне авторизации список серверов для выбора не отображается. «2» - перебор серверов осуществляется автоматически, начиная с последнего активированного. «3» - случайный выбор сервера. «4» - основной сервер единственный, при потере связи с ним подключение осуществляется к одному из резервных на основании случайного выбора. По умолчанию - 0.<br />
<br />
<span style="color:blue;">ConnectBackReserve</span>. «1» - активирует режим мониторинга за появлением основного сервера в случае, если текущее подключение установлено с резервным сервером. Применяется при настройке резервных схем с преимущественной привязкой к одному серверу.<br />
<br />
<br />
'''Раздел <span style="color:green;">Подключения к серверу</span>.'''<br />
<br />
<span style="color:blue;">NetConnectionName</span>. Название подключения (сервера) для отображения в окне авторизации (при указании нескольких возможных подключений).<br />
<br />
<span style="color:blue;">LogicServerAddress</span>. Адрес для подключения к серверу логики.<br />
<br />
<span style="color:blue;">LogicServerPort</span>. Порт для подключения к серверу логики.<br />
<br />
<span style="color:blue;">ConnectProtocol</span>. Устанавливает протокол, по которому осуществляется подключение клиента к серверу. 0 - по умолчанию, 1 - Remoting, 2 - OkTCP.<br />
<br />
<span style="color:blue;">NETCLIENT_SERVER_ADDRESS</span>. Адрес для подключения к серверу аппаратуры.<br />
<br />
<span style="color:blue;">NETCLIENT_SERVER_PORT</span>. Порт на сервере для подключения к нему по сигнальному протоколу.<br />
<br />
<span style="color:blue;">NETCLIENT_LOCAL_PORT</span>. Локальный порт для обмена сигнальным трафиком по UDP.<br />
<br />
<span style="color:blue;">NETCLIENT_VOICE_PORT</span>. Локальный порт для обмена голосовым трафиком по UDP. <br />
<br />
<div id="SipDomain"></div><br />
<span style="color:blue;">SipDomain</span>. Переопределяет доменное имя SIP-сервера при отправке регистрационных пакетов с клиентского локального устройства. Явное указание может потребоваться в случае нестандартных настроек NAT сервера.<br />
<br />
<div id="SipPort"></div><br />
<span style="color:blue;">SipPort</span>. Переопределяет порт SIP-сервера при отправке SIP пакетов с клиентского локального устройства. Явное указание может потребоваться в случае нестандартных настроек NAT сервера. <br />
<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Вышеперечисленные параметры (NetConnectionName, ..., NETCLIENT_VOICE_PORT) определяют различные адреса и порты для организации сетевого канала подключения к серверу. Эти параметры могут присутствовать в конфигурационном файле несколько раз с добавлением к концу строки-ключа разных целочисленных индексов. Например NetConnectionName_1 и NetConnectionName_2. Индекс 0 не указывается, вместо него используется значение без индекса. В случае указания в конфигурационном файле нескольких подключений в окне авторизации будет отображен список их имен и доступен выбор одного из них. Это удобно использовать при работе с несколькими серверами с одних и тех же клиентских рабочих станций.</span><br />
<br />
<br />
<div id="SipDomainMode"></div><br />
<span style="color:blue;">SipDomainMode</span>. Режим формирования доменного имени при подключении локального устройства по SIP к серверу. По умолчанию используется IP-адрес указанного в конфигурационном файле [[#LogicServerAddress|доменного имени логического сервера]] (''=2''). Варианты: ''0'' - имя хоста серверной машины, ''1'' - указанное в конфигурационном файле [[#LogicServerAddress|доменное имя логического сервера]]. В любом случае доменное имя может быть явно переопределено параметром конфига [[#SipDomain]], если он установлен для текущего подключения. В большинстве случаев изменения значения этого параметра не требуется<br />
<br />
<div id="SipForceKeepAliveIntervalSec"></div><br />
<span style="color:blue;">SipForceKeepAliveIntervalSec</span>. Позволяет явно включить и задать интервал в секундах для отправки пакетов Keep-Alive в SIP-подключении к серверу. Может потребоваться при настройках NAT для удерживания порта.<br />
<br />
<br />
<span style="color:blue;">WORK_ROOTDIR</span>. Устанавливает в явном виде путь к рабочей папке клиентского приложения. Временные файлы, сценарии, проекты, плагины, каталог по умолчанию для записи разговоров - все кроме основных сборок службы размещается именно там.<br />
<br />
<span style="color:blue;">WORK_ROOTDIR_TYPE</span>. Устанавливает один из нескольких возможных вариантов размещения рабочей папки. Используется, если не задана рабочая папка в явном виде. Возможные варианты: 0 – папка запустившего процесс выполняемого файла, 1 – папка размещения основных сборок приложения, 2 – Documents And Settings\All Users, 3 – Documents And Settings\CurrentUser.<br />
<br />
<span style="color:blue;">AutoUpdate</span>. «1» - обновлять клиента автоматически. «0» - не обновлять автоматически при запуске, если обнаружено отличие версий. По умолчанию «1». Настоятельно не рекомендуется оставлять рабочую версию программы со значением «0» и использовать этот режим только для отладочных целей.<br />
<br />
<span style="color:blue;">AutoUpdateGateway</span>. «1» - обновлять шлюз автоматически. «0» - не трогать. По умолчанию «0». В список шлюзов требуется добавить адрес сервера, если подключение производится к серверу с несколькими сетевыми интерфейсами через интерфейс с индексом более 1. В большинстве случаев указания не требуется.<br />
<br />
<div id="ManualHostAddress"></div><br />
<span style="color:blue;">ManualHostAddress</span>. Альтернативный псевдо-адрес клиентского компьютера для идентификации на сервере в карте сети. Может быть использован для подключения к серверу при динамически выделяемом IP-адресе и сложностях с идентификацией по HostName. Каждый клиент должен иметь уникальное значение ключа, не совпадающее с реальными возможными адресами и именами других компьютеров сети.<br />
<br />
<div id="TerminalMode"></div><br />
<span style="color:blue;">TerminalMode</span>. Определяет режим подстановки адреса (для организации работы в терминальном режиме) - какой адрес берется, какое терминальное расширение для идентификации в карте сети используется (''address/terminalkey'').<br />
0 — адрес локальный, без терминального расширения: ''address''.<br />
1 — адрес локальный, терминальное расширение из текущего конфигурационного файла [[#TerminalAddress|TerminalAddress]]: ''address/terminalkey''.<br />
2 — адрес локальный, терминальное расширение с помощью текущего авторизованного Win-User: ''address/user''.<br />
3 — адрес клиентского терминала (ищется активная сессия авторизованная под совпадающим с текущим win-user), терминальное расширение из текущего конфигурационного файла [[#TerminalAddress|TerminalAddress]]: ''clientaddress/terminalkey''. Если удовлетворяющая условиям терминальная сессия не найдена, то используется локальный адрес. Если терминальное расширение не задано - не используется. <br />
По умолчанию 1.<br />
<br />
<div id="TerminalAddress"></div><br />
<span style="color:blue;">TerminalAddress</span>. Строка, определяющая уникальный адрес клиентского места. Приписывается ко всем адресам компьютера для определения клиентского места в карте офиса (например «FUTURAMA/terminal1»). Именно эту строку необходимо будет указать в карте офиса для идентификации. Решает проблему терминальных подключений, где все клиенты физически запускаются с одного компьютера. По умолчанию «».<br />
<br />
<div id="ShowLoginAuthMode"></div><br />
<span style="color:blue;">ShowLoginAuthMode</span>. ''1'' - отображать выбор способа авторизации (active dictionary/oktell), ''0'' - не отображать и использовать всегда стандартный режим. По умолчанию ''1''.<br />
<br />
<span style="color:blue;">TimeSynchronization</span>. «1» - синхронизировать время с сервером при запуске, «0» - не синхронизировать. По умолчанию «1».<br />
<br />
RestartApplicationWithProcess</span>. «1» - любой перезапуск клиента производится с выгрузкой процесса. «0» - выгрузка процесса производится только для применения обновлений, другие перезапуски осуществляются внутри процесса. По умолчанию «0». <br />
<br />
ProcessPriority</span>. Приоритет процесса клиентского приложения и процесса обслуживания внешних звуковых устройств. «0» - нормальный, «1» - выше среднего, «2» - высокий, «3» - реального времени. По умолчанию «1».<br />
<br />
<span style="color:blue;">HAL_skip_loading</span>. «1» - пропускать загрузку модуля обслуживания устройств работы со звуком. «0» - нормальный режим.<br />
<br />
<span style="color:blue;">Register_ocx</span>. «1» - регистрировать библиотеки обслуживаемых устройств перед запуском, «0» - не регистрировать. По умолчанию «1».<br />
<br />
<span style="color:blue;">ClientWebServerPort</span>. Устанавливает порт слушателя [[Клиентский интерфейс|HTTP-запросов]] к клиентскому приложению (например запрос http://localhost:4059/callto?number=184 - команда на звонок через Oktell). Доступ возможен только по локальному loopback интерфейсу.<br />
<br />
<span style="color:blue;">ComAsyncEventing</span>. Применяется для форсированной активации/отключения соответствующего режима COM-ядра без изменения кода приложения. Активирует/деактивирует режим раздачи событий COM-объекта в асинхронных служебных потоках. Применяется только в случае указания значений «1» или «0». По умолчанию применяется режим, установленный в коде внешнего интегрирующего приложения. Подробно в руководстве по интеграции (раздел «Октелл в других проектах», статья «Загрузка и выгрузка модуля»).<br />
<br />
<span style="color:blue;">ComXmlFullLogging</span>. Применяется для форсированной активации/отключения соответствующего режима COM-ядра без изменения кода приложения. Активирует/деактивирует режим полного логирования всех событий и вызовов управляющего объекта. Применяется только в случае указания значений «1» или «0». По умолчанию применяется режим, установленный в коде внешнего интегрирующего приложения. Подробно в руководстве по интеграции (раздел «Октелл в других проектах», статья «Загрузка и выгрузка модуля»).<br />
<br />
<span style="color:blue;">TRACE_HARDWARE</span>. Уровень трассировки аппаратного модуля. Битовая маска xxxx. C конца: 0 - TraceCall, 1-TraceEvents, 2-TraceVoice, 3-TraceNet. По умолчанию «1». Для полной трассировки значение «1111111111».<br />
<br />
<span style="color:blue;">SEPARATE_PROCESS</span>. «1» - запускать отдельный процесс для работы с устройствами. «0» - работать с устройствами в собственном процессе. По умолчанию «1».<br />
<br />
<span style="color:blue;">JITTER_DEPTH</span>. Значение глубины джиттер-буфера на клиенте, измеряемое в количестве пакетов по 20 мс. Минимальное значение - «0», по умолчанию - «6». При увеличении значения происходит рост задержки в голосовом обмене по направлению звука в локальное устройство, эффективнее устраняя влияние проблем сети. При указании «0» джиттер буфер не используется.<br />
<br />
Если наблюдается поступление пакетов вперемешку с незначительным разбросом, и/или периодические задержки с последующим одновременным поступлением серии пакетов, увеличение значения может способствовать выравниванию звука. Для диагностики этого явления можно активировать логирование голосового трафика (TRACE_HARDWARE) или использовать программы-перехватчики трафика (снифферы), например WireShark.<br />
<br />
<span style="color:blue;">WAVE_COUNT</span>. Значение, определяющее количество буферов для обмена звуком со звуковым устройством. Минимальное значение - «2», по умолчанию - «2». При увеличении значения происходит рост задержки в голосовом обмене по направлению звука в локальное устройство, эффективнее устраняя влияние проблем в медлительности звукового устройства.<br />
<br />
Если при ровно поступающем звуке из сети (диагностировать можно с помощью отладочной записи на входе - WAVE_COUNT, либо с помощью программ-перехватчиков трафика, например WireShark) наблюдается щелканье или пропадание кусков голосового потока, увеличение значения может способствовать выравниванию звука.<br />
<br />
<span style="color:blue;">WRITE_VOICE</span>. Отладочный параметр для оценки звукового потока на входе в клиентский HAL из сети до воспроизведения непосредственно в устройстве. «1» - отладочная запись в файл включена, файл с именем, соответствующим текущему времени размещается в корне клиентского приложения . «0» - отладочная запись отключена. По умолчанию «0».<br />
<br />
<span style="color:blue;">WAVEIN_AUTOCLOSE</span>. «1» - закрывать устройство ввода звука после завершения коммутации. «0» - оставлять открытым. По умолчанию «0». <br />
<br />
<span style="color:blue;">WAVEOUT_AUTOCLOSE</span>. «1» - закрывать устройство вывода звука после завершения коммутации. «0» - оставлять открытым. По умолчанию «0».<br />
<br />
<span style="color:blue;">USE_DIRECTSOUND</span>. Тип работы со звуком по умолчанию. Выбирается в клиентском интерфейсе. «1» - использовать для работы со звуком библиотеки DirectSound. «0» - обычный режим через системные функции Windows Multimedia (WMM). По умолчанию «0».<br />
<br />
<span style="color:blue;">NETCLIENT_PAYLOAD</span>. Кодек по умолчанию для обмена голосовым трафиком. Выбирается в клиентском интерфейсе. Здесь служит для задания начальной настройки. 0 - 711mulaw, 8 - 711alaw, 41 - gsm610. По умолчанию «8».<br />
<br />
<span style="color:blue;">PHONEDEVICE_WAVEOUT</span>. Устройство вывода звука (спикер) по умолчанию. Выбирается в клиентском интерфейсе. Здесь служит для задания начальной настройки.<br />
<br />
<span style="color:blue;">PHONEDEVICE_WAVEIN</span>. Устройство ввода звука (микрофон) по умолчанию. Выбирается в клиентском интерфейсе. Здесь служит для задания начальной настройки.<br />
<br />
<span style="color:blue;">PHONEDEVICE</span>. Имя устройства по умолчанию. Выбирается в клиентском интерфейсе. Здесь служит для задания начальной настройки.<br />
<br />
<span style="color:blue;">SIGNAL_VOLUME</span>. 0-100. Уровень громкости генерируемых в локальное устройство системных звуков и тонов. По умолчанию 50.<br />
<br />
<br />
<br />
<div id="UseKeyHook"></div><br />
<span style="color:blue;">UseKeyHook</span>. Параметр позволяет принудительно отключить режим перехвата действий клавиатуры для управления гарнитурой. Отключение может понадобиться при обнаружении проблем и конфликтов с операционной системой. «1» - режим перехвата активирован. «0» - режим перехвата деактивирован. По умолчанию «1». Выключение требуется на 64 разрядных ОС при работе версий до 2.8.130325.<br />
<br />
<span style="color:blue;">default_HeadSet_AutoHookUp</span>. Определяет используемый по умолчанию режим автоподнятия трубки на гарнитуре при поступлении входящего звонка. После фактического изменения настроек пользователем в параметрах локального устройства значение из конфигурационного файла теряет актуальность. По умолчанию «1».<br />
<br />
<span style="color:blue;">default_HeadSet_UseKeyBoard</span>. Определяет используемый по умолчанию режим перехвата нажатий на клавиатуре для управления гарнитурой. После фактического изменения настроек пользователем в параметрах локального устройства значение из конфигурационного файла теряет актуальность. По умолчанию «1».<br />
<br />
<span style="color:blue;">default_HeadSet_UseACM</span>. Определяет, активен ли по умолчанию режим автодозвона для гарнитуры. После фактического изменения настроек пользователем в параметрах локального устройства значение из конфигурационного файла теряет актуальность. По умолчанию «1».<br />
<br />
<span style="color:blue;">default_Phone_ShowRingPopup</span>. Определяет используемый по умолчанию способ отображения информации о вызывающем абоненте (всплывающее окно/всплывающее уведомление). После фактического изменения настроек пользователем в параметрах локального устройства значение из конфигурационного файла теряет актуальность. По умолчанию «1».<br />
<br />
<span style="color:blue;">WatcherResourceLogType</span>. Формат логирования ресурсов. С помощью параметра можно настроить вывод в клиентский лог-журнал WATCHER информации по использованию процессом ресурсов системы. Объем используемой памяти, количество открытых дескрипторов, количество потоков, пользовательские системные ресурсы, ориентировочное среднее процессорное время по всему процессу и отдельно по всем его потокам. 0 - не логировать, 1 - информация о процессе каждую секунду, 2 - информация о процессе и активным потокам каждую секунду, 3 - информация о процессе и всем его потокам каждую секунду, 4 - информация о процессе каждую минуту. По умолчанию 4.<br />
<br />
<span style="color:blue;">RestoreLastModules</span>. «1» - осуществляет при загрузке приложения загрузку и восстановление модулей, активных перед закрытием программы. «0» - запускает приложение с пустым фоном без дополнительной загрузки модулей; это экономит время на загрузке, так как некоторые модули требуют достаточно длительного времени для полной загрузки, однако пользователь при необходимости сам может активировать модуль по стандартной схеме из главного меню. По умолчанию «1».<br />
<br />
<span style="color:blue;">ShowVideoNoise</span>. «1» - в видео-окне модуля ТЕЛЕФОН при отсутствии видео-сигнала отображается черно-белый шум, «0» - черное окно. По умолчанию «1».<br />
<br />
<span style="color:blue;">CameraFrameFrequencyLimit</span>. Устанавливает ограничение на количество передаваемых кадров из клиентского приложения в сеть в ходе видео-сессии. Может использоваться при необходимости снизить исходящий трафик при видео-коммутациях с настраиваемой клиентской рабочей станцией.<br />
<br />
<span style="color:blue;">CameraJitterDepth</span>. Глубина джиттер-буфера фреймов с камеры. Позволяет нивелировать задержку в выдаче кадров в целях выравнивания отправляемого видео-потока. По умолчанию «3». «0» - не использовать джиттер. <br />
<br />
<span style="color:blue;">Phone_UseBlockedDelay</span>. «1» - использует асинхронный отложенный механизм по выставлению заблокированного состояния модулю [[Телефон]]. «0» - заблокированное состояние выставляется сразу (может потребоваться при работе на медленных машинах, где асинхронность сказывается отрицательно с приведением телефона в недееспособное состояние. Рекомендуется изменять только при соответствующем запросе службы технической поддержки). По умолчанию «1».<br />
<br />
<span style="color:blue;">Phone_ACMMode</span>. Определяет порядок действий при нажатии на кнопку «Позвонить» в модуле [[Телефон]]. «0» - стандартная последовательность действий: сначала производится вызов абонента, потом обратный вызов пользователя. «1» - обратная последовательность: сначала производится вызов самого пользователя, потом абонента. См. раздел [[Звонки и сервис автодозвона|Телефон. Звонки]].<br />
<br />
<div id="PhoneAllowHotline"></div><br />
<span style="color:blue;">PhoneAllowHotline</span>. ''1'' - разрешить ''HOTLINE'' вызовы из локального устройства на SIP-сервер (при звонке на пустой номер), ''0'' - запретить. По умолчанию ''1''.<br />
<br />
<span style="color:blue;">HeadsetNonACMMode</span>. Режим вызова с гарнитуры без использования автодозвона. «0» - сначала обратный вызов пользователя, потом набор абонента. «1» - поднятие трубки, таймаут, набор номера. По умолчанию «1».<br />
<br />
<span style="color:blue;">UseAutoReconnectOnFly</span>. При установке значения «1» в случае потери связи по каналу TCP между клиентом и сервером клиентское приложение будет пытаться переподключиться без перезагрузки. Неактуально при использовании протокола Remoting (по умолчанию порт 4050).<br />
<br />
<span style="color:blue;">ShowHelpInside</span>. Определяет, где отображать справку по системе. «0» - в отдельных процессах браузера по умолчанию, «1» - во встроенном браузере в окне клиентского приложения. По умолчанию «0».<br />
<br />
<div id="PlugRegLoadType"></div><br />
<span style="color:blue;">PlugRegLoadType</span>. Устанавливает режим загрузки при настройке plugin-программ. «1» - стандартный режим в отдельном домене с последующей выгрузкой. «2» - загрузка plugin-программ в отдельный процесс для настройки. Для загрузки plugin-библиотек используется запускающий модуль oktell.PluginStarter.exe, который может быть скопирован под другим названием. Используемая версия .NET Framework для работы плагина в отдельном процессе определяется в конфигурационном файле этого процесса (по умолчанию oktell.PluginStarter.exe.config). Сам же запускающий модуль (название файла в каталоге клиентского приложения) определяется в конфигурационном файле oktell (клиентском и возможно серверном) с ключом, зависящим от названия основной библиотеки plugin-программы. Например <add key="PluginTcp_libnamewithoutextension" value="oktell.PluginStarter2.exe"/>. Существующий модуль oktell.PluginStarter.exe может скопирован под другим именем и снабжен таким образом индивидуальным конфигурационным файлом. Это может понадобиться в частности для применения разных версий .NET Framework к разным plugin-программам.<br />
<br />
<span style="color:blue;">AutoSortGroups</span>. Устанавливает режим сортировки отделов для модуля [[Сотрудники]] по названиям. По умолчанию «1». В случае отключения ожидается, что сортировкой занимается хранимая процедура, результаты ее исполнения выводятся последовательно.<br />
<br />
<span style="color:blue;">PersonalHandleDepartments</span>. При установке значения «1» обновление состояний внутренних номеров в разделе [[Сотрудники|«Сотрудники. Отделы»]] производится только для номеров, входящих в выделенный отдел. Имеет смысл применять для сокращения трафика. <br />
<br />
<div id="SplitDepartmentsTreeByDot"></div><br />
<span style="color:blue;">SplitDepartmentsTreeByDot</span>. «1» - осуществлять построение глубокого дерева вложенных отделов в модуле «Сотрудники», разбивая указанные для сотрудников отделы на категории по символу «.». «0» - одноуровневое дерево отделов. По умолчанию «0».<br />
<br />
<div id="ExportCsvDelimiter"></div><br />
<span style="color:blue;">ExportCsvDelimiter</span>. Устанавливает символ-разделитель столбцов при формировании файлов экспорта CSV во всех модулях клиентского приложения. Список возможных значений: comma, space, semicolon, tab.<br />
<br />
<div id="ExportTextDelimiter"></div><br />
<span style="color:blue;">ExportTextDelimiter</span>. Устанавливает символ-разделитель столбцов при формировании текстовых файлов с отчетами во всех модулях клиентского приложения. Список возможных значений: comma, space, semicolon, tab.<br />
<br />
<span style="color:blue;">HandleSessionToChangeUserState</span>. «1» - при блокировании сессии авторизованного пользователя windows производится автоматический перевод состояния авторизованного пользователя oktell в «Нет на месте». При возврате в сессию производится автоматический перевод в «На месте». При этом перевод не осуществляется, если в момент блокировки пользователь не был свободен (находился в разговоре, в резерве или в состоянии перерыва), при этом не производится и обратного перевода при входе в сессию. «0» - действие по автоматической смене состояний не применяется. По умолчанию «1».<br />
<br />
<span style="color:blue;">RecordDownloadNameAddInfo</span>. «1» - устанавливает режим выгрузки записей разговоров статистики с включением в имена файлов имен участвующих абонентов.<br />
<br />
<span style="color:blue;">Memory_UseSameDialogForms</span>. «1» - активирует режим использования одних и тех же окон в режиме операторских диалоговых форм без уничтожения и создания при каждом показе. Используется на компьютерах с минимальным объемом оперативной памяти во избежание скачкообразного роста используемой памяти. «0» - деактивирует режим. По умолчанию «0».<br />
<br />
<span style="color:blue;">Debug_PingErrorRestart</span>. «0» - отключает автоматическую перезагрузку клиентского приложения при отсутствии откликов сервера на команды Ping. Используется для отладочных режимов, в основном при отладке plugin-программ. «1» - обычный режим. По умолчанию «1».<br />
<br />
<span style="color:blue;">PingTimeoutNotify</span>. Устанавливает период в миллисекундах, при превышении которого в момент вызова метода Ping возникает уведомление о плохой связи с сервером. <br />
<br />
<span style="color:blue;">ActivationServer</span>. Ссылка на сайт активаций для режима автоматической активации тестовой версии. По умолчанию «http://activate.telsystems.ru».<br />
<br />
<br />
<span style="color:blue;">ShowLoadingBar</span>. Отображает полосу загрузки при открытии модулей клиентского приложения. В некоторых случаях, улучшает работу отрисовки приложения. «0» - не отображает, «1» - отображает. По умолчанию «1».<br />
<br />
<span style="color:blue;">helplinks</span>. Тип используемой справки: «0» - встроенная справка в файле manual.chm, «1» - ссылка на вики. По умолчанию «1».<br />
<br />
<span style="color:blue;">FaxPreperformProcess</span>. Режим работы факса при отправке с клиентского приложения: «0» - обычный режим отправки изображений с преобразованием на сервере к необходимому виду. «1» - использование локального XPS-принтера для изготовления общего многостраничного файла TIFF из нескольких выбранных документов (для этого режима необходимы .NET Framework 3.0, установленный Microsoft Office версии 2003 или старше, установленный XPS принтер). По умолчанию «0».<br />
<br />
<div id="">AutoUserStateChangeOnSystemLock</div><br />
<span style="color:blue;">AutoUserStateChangeOnSystemLock</span>. 1 - активирует режим автоматического перевода состояния пользователя в ''Отключен'' или ''Перерыв'' (в зависимости от присутствия пользователя в режиме Call-центра) при блокировке ОС и автоматический перевод обратно при входе в систему снова. 0 - не использует режим. По умчоланию 1.<br />
<br />
<div id="">PhoneDirectDigit</div><br />
<span style="color:blue;">PhoneDirectDigit</span>. Определяет поведение софт-телефона. 1 - в активном состоянии набор символов осуществляется по одному, ввод в текстовое поле невозможен, кнопка «Набрать» недоступна. 0 - набор осуществляется в текстовое поле, после чего кнопкой «Набрать» отправляется на сервер. По умолчанию 0. Это касается состояний набора номера, коммутаций с абонентами, коммутаций с IVR, ожидания ответа, ожидания факс-сеанса.<br />
<br />
<span style="color:blue;">PhoneIvrDirectDigit</span>. Определяет поведение софт-телефона в состоянии коммутации с IVR при отключенном режиме прямого набора символов. 1 - позволяет активировать прямой набор только для случая коммутации с IVR. 0 - оставляет доступным только набор в текстовое поле с последующей отправкой по нажатию на «Набрать», при этом сценарий завершается и осуществляется набор номера по-новой. По умолчанию 0.<br />
<br />
<span style="color:blue;">PhoneLineDirectDigit</span>. Определяет поведение софт-телефона в состоянии коммутации с абонентом при отключенном режиме прямого набора символов. 1 - позволяет активировать прямой набор только для случая коммутации с абонентом. 0 - оставляет доступным только набор в текстовое поле с последующей отправкой по нажатию на «Набрать», при этом осуществляется переключение. По умолчанию 1.<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">LOG</span>.'''<br />
<br />
Хранит настройки лог-сервера комплекса. Среди неописываемых настроек - пути к папкам для сбора журналов.<br />
<br />
<span style="color:blue;">LOG_storedays</span>. Длительность хранения лог-журналов в днях. По умолчанию «7». По истечении указанного периода журналы удаляются системой. В некоторых случаях объем журналов может достигать нескольких гигабайтов за день.<br />
<br />
<span style="color:blue;">LOG_maxfilesize</span>. Максимальный размер одного файла лог-журнала в байтах. Имеет воздействие на все лог-журналы, исключая HAL (Hardware). По умолчанию 3 ГБ.<br />
<br />
<span style="color:blue;">LOG_root</span>. Абсолютный или относительный путь к папке с лог-журналами. По умолчанию «Log», то есть относительный путь в каталоге клиентского приложения.</div>Peter%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9._%D0%9D%D0%BE%D0%B2%D1%8B%D0%B5_%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8История обновлений. Новые возможности2014-06-30T12:34:18Z<p>Peter: </p>
<hr />
<div>[[Дополнительно|Наверх]]<br />
<br />
<br />
__TOC__<br />
<br />
<br />
<br />
====Новые возможности 2.11 (1.07.2014)====<br />
<br />
<br />
* Реализован сервис расчета и сохранения [[Управление базами данных#VoiceMap|карты владения разговором]] его участниками. Включается в разделе управления БД модуля общих настроек. Достаточно затратный и требует дополнительных ресурсов.<br />
* Реализовано [[Голосовые задачи#skills|использование операторских «скиллов»]] в исходящих задачах без закрепления абонентов за операторами. Для каждого оператора с помощью тегов задается [[Операторы#skills|набор скиллов, которыми он обладает]]. В таблице абонентов для каждого абонента с помощью [[Таблицы абонентов#skills|тегов]] фиксируется набор одновременно требуемых скиллов. В итоге абоненты соединяются с теми операторами, которые обладают одновременно всеми требуемыми скиллами. В качестве примера можно рассмотреть случай требования для абонентов разных разговорных языков от операторов - для одних клиентов русский, для других национальный язык.<br />
* Реализована возможность обработки изменения учетных записей пользователей в служебном сценарии. [[Сценарии_АТС#SvcUserChanged|Подробнее]].<br />
* Реализована возможность обработки смены основных состояний пользователей в служебном сценарии (например вход и выход из системы). [[Сценарии_АТС#SvcUserStateChanged|Подробнее]].<br />
* Реализована возможность осуществления авторизации во внешних системах с помощью служебного сценария (возвращающего реальные учетные данные). [[Сценарии_АТС#SvcUserLogin|Подробнее]].<br />
* Реализован новый компонент сценариев [[Компоненты_сценариев_IVR#Recognize|Распознавание речи]], работающий с помощью сервиса ''Яндекс.SpeechKit''. Компонент существует в служебных сценариях для распознавания готового PCM-файла, и в IVR сценариях для записи и одновременного ускоренного распознавания с возможностью ввода DTMF-символов с клавиатуры. В раздел [[Настройки_распознавания|«Распознавание речи Яндекс»]] общих настроек должны быть введены ключи доступа к сервису.<br />
* В компонент сценариев ''[[Общие_компоненты_сценариев#UserState|Статус объекта]]'' добавлена возможность определения внутреннего номера для пользователя или линии.<br />
* В компонент сценариев ''[[Общие_компоненты_сценариев#UserState|Статус объекта]]'' добавлены функции определения состояния пользователя в КЦ, ручной режим, перерыв, переадресация, а также скилл-тэги.<br />
* В компонент сценариев ''[[Общие_компоненты_сценариев#UserState|Статус объекта]]'' добавлена отладочная функция полного подсчета всех объектов .NET с формированием файла статистики.<br />
* Реализовано размещение в БД информации о забаненных SIP-адресах с возможностью вывода из фильтра с помощью компонента сценариев ''[[Общие_компоненты_сценариев#UserState|Статус объекта]]''.<br />
* Компонент сценариев ''[[Общие_компоненты_сценариев#Parser|Парсер текста]]'' обучен вырезать данные из блока CDATA в XML.<br />
* В компоненте IVR сценариев ''[[Компоненты_сценариев_IVR#SwitchProject|Вход в проект]]'' добавлена возможность задавать проект через аргумент.<br />
* Компонент IVR сценариев ''[[Компоненты_сценариев_IVR#PlayNumber|Воспроизведение числа]]'' пополнился режимом воспроизведения времени без нулей в конце/в начале.<br />
* Реализована поддержка SSL при [[Общие_компоненты_сценариев#EmailReceive|получении почты]]'' по протоколам POP и IMAP.<br />
* Добавлена функция ''[[Выражения#Translit|Translit]]'' в выражения сценариев.<br />
* Добавлена возможность увеличения размерности номеров линий с 3 до 4 цифр. Может быть использовано в проектах с более чем 1000 линий одного типа. Включается конфигурационным ключом сервера ''[[Параметры_файлов_конфигурации#Use4xLineNumbers|Use4xLineNumbers]]''<br />
* [[Линии#Направления|Команды направления]] расширены с помощью служебного символа «^». Цифра, перед которой установлен символ, удаляется из набора. Может использоваться для формирования в статистике совершенно иного номера, отличного от набираемого, или изменять 8 на +7. ''Пример: +7{^89050213951} - в набор будет отправлено +79050213951, а в статистику попадет 89050213951''.<br />
* Добавлен новый тип [[Контрольные события|контрольного события]] для отслеживания неснятия трубки оператором в задаче.<br />
* Реализована возможность [[Настройки_Call-центра#SvcSupervisorHelp|запроса помощи супервизора через служебный сценарий]] (1 парам - ид оператора, 2-ид задачи, если сейчас в задаче обслуживает).<br />
* По многочисленным просьбам [[Голосовые задачи#QueueTimeout|ограничение времени нахождения в очередях]] входящих задач стало задаваться в секундах (ранее в минутах).<br />
* Добавлена настройка задачи [[Голосовые задачи#PostTimeout|«Максимальное время поствызывной обработки»]], позволяющее автоматически завершить задачу при превышении оператором времени заполнения диалоговых и стоп-форм после завершения разговора с абонентом.<br />
* Добавлена возможность использования [[Голосовые задачи#ScriptQuery|диалогового сценария запроса на дозвон]] для задач с закреплением абонента за оператором и задач с поиском абонента для оператора через сценарий.<br />
* В модуле [[Таблицы абонентов]] разрешено создание локальных таблиц абонентов на базе существующих в БД таблиц с данными.<br />
* Реализована функция перехвата звонка из модуля [[Сотрудники]] клиентского приложения с помощью команд контекстного меню.<br />
* Задействована проверка прав на воспроизведение, скачивание записей и установку комментариев в модуле [[Мои звонки]]. Применяются привилегии установленные для модуля [[Статистика АТС]].<br />
* В трей [[Сокращенное_рабочее_место|мини-окна]] клиентского приложения добавлена кнопка вызова супервизора.<br />
* Выявлены завалы при работе модуля [[Мое рабочее место]] в части осуществления сложных запросов на сервер по таймеру. Произведена оптимизация.<br />
* Повышена эффективность выставления приоритетов исходящим задачам в части задач с закреплением абонентов за операторами. Ранее несмотря на высокий приоритет задач этого типа эффективность работы по ним оставалась низкой в условиях конкурирующего использования операторов другими задачами.<br />
* Реализована возможность отправки SIP-заголовоков ''P-Asserted-Identity'' и ''Remote-Party-ID'' в ответ на входящие звонки от внутренних телефонов. Включается серверным конфигурационным ключом ''[[Параметры_файлов_конфигурации#UseAssertedIdentity|UseAssertedIdentity]]''.<br />
* Реализована возможность совершения [[Компоненты_сценариев_IVR#SwitchExt|внешних вызовов]] на шлюзы с регистрацией на сервере, используя буквенный юзернейм/номер через ''sip:username'' или ''sip:username@domain''.<br />
* Реализована возможность добавления дополнительных привилегий к [[Роли#BasicRoles|базовым ролям]].<br />
* Выключена поддержка устаревшей клиент-серверной связи через механизм .NET Remoting.<br />
* [[Встраиваемые_plugin-модули|Серверные плагины]] получили возможность использовать ряд новых методов через интерфейсный метод ''[[Сервисное_взаимодействие#Событие OnQuery|OnQuery]]'': ''[[Сервисное_взаимодействие#getpath|getpath]]'', ''[[Сервисное_взаимодействие#getconfigvalue|getconfigvalue]]'', ''[[Сервисное_взаимодействие#getversion|getversion]]'', ''[[Сервисное_взаимодействие#reloadpbxss|reloadpbxss]]'', ''[[Сервисное_взаимодействие#updatehttpsession|updatehttpsession]]'', ''[[Сервисное_взаимодействие#removehttpsession|removehttpsession]]'', ''[[Сервисное_взаимодействие#updateplugin|updateplugin]]'', ''[[Сервисное_взаимодействие#getcurrentlanguage|getcurrentlanguage]]'', ''[[Сервисное_взаимодействие#getlicense|getlicense]]'', ''[[Сервисное_взаимодействие#getkeyid|getkeyid]]''<br />
* Реализована возможность автоматической установки [[Встраиваемые_plugin-модули|плагинов]] сервером при запуске (архивы и/или сборки расположенные в каталоге ''PluginAutoUpdate'').<br />
* Поддержка архивов плагинов с манифестом в формате ''JSON''.<br />
* [[Oktell_Web-Socket_Protocol|Программный интерфейс web-socket]] пополнился методом ''[[Oktell_Web-Socket_Protocol#execmoduleproc|execmoduleproc]]'' для обращения к серверным плагинам.<br />
* [[Oktell_Web-Socket_Protocol|Программный интерфейс web-socket]] пополнился методами ''getvoiceperc'', ''getvoicemap'' для получения доступа к данным о статистике владения разговором.<br />
* В [[Oktell_Web-Socket_Protocol|программном интерфейсе web-socket]] исправлен метод ''checkmyuserprivilege'' - поле isoperator заменен на hasprivilege.<br />
* [[Серверный_HTTP_интерфейс|Интерфейс веб-сервера]] пополнился методом ''execpluginmethod'' для обращения к серверным плагинам.<br />
* [[Серверный_HTTP_интерфейс|Интерфейс веб-сервера]] пополнился методом ''download/vm/id'' для предоставления записей голосовой почты, где ''id'' - guid-идентификатор сообщения.<br />
* [[Интеграция_с_Web-Socket_CRM|Настройка связи с WEBCRM]] по web-socket теперь может производиться через указание URL (доменное имя, страница, http-параметры).<br />
* Добавлен клиентский конфигурационный ключ ''[[Параметры_файлов_конфигурации#TerminalMode|TerminalMode]]'', позволяющий установить режим привязки в терминальном подключении (использование адресов реальных терминальных клиентских машин, расширение из конфига или расширение с помощью имени пользователя Windows).<br />
* Добавлен клиентский конфигурационный ключ ''[[Параметры_файлов_конфигурации#ShowLoginAuthMode|ShowLoginAuthMode]]'', позволяющий отключить в окне авторизации отображение варианта использования учетной записи Windows.<br />
* Добавлены клиентские конфигурационные ключи ''[[Параметры_файлов_конфигурации#ExportCsvDelimiter|ExportCsvDelimiter]]'' и ''[[Параметры_файлов_конфигурации#ExportTextDelimiter|ExportTextDelimiter]]'', позволяющие установить разделители столбцов при выгрузке данных в файлы соответствующих форматов. Список возможных значений: ''comma'', ''space'', ''semicolon'', ''tab''.<br />
* Добавлен клиентский конфигурационный ключ ''[[Параметры_файлов_конфигурации#PhoneAllowHotline|PhoneAllowHotline]]'', позволяющий отключить режим HOTLINE при звонке на пустой номер в режиме использования локального устройства.<br />
* Реализована обработка клика на ссылках в полях обмена сообщениями - открытие в браузере.<br />
* В диалоговых web-формах реализована возможность производить действия ''ДАЛЕЕ'' и ''СТОП'' путем изменения веб-страницей заголовка на специальные значения (''oktellcommand_next'', ''oktellcommand_stop'', ''oktellcommand_nextforce'', ''oktellcommand_stopforce'').<br />
* Реализован импорт таблиц абонентов из файлов CSV.<br />
* Добавлен клиентский конфигурационный ключ ''[[Параметры_файлов_конфигурации#SipForceKeepAliveIntervalSec|SipForceKeepAliveIntervalSec]]'', позволяющий принудительно включить отправку keep-alive пакетов в SIP подключение локального устройства и установить определенный параметром интервал.<br />
* Добавлен клиентский конфигурационный ключ ''[[Параметры_файлов_конфигурации#SipDomainMode|SipDomainMode]]'', позволяющий устанавливать режим определения доменного имени сервера для подключения локального устройства. По умолчанию используется IP-адрес сервера, определенному для текущего подключения в конфигурационном файле. Могут также использоваться параметры, переопределяющие доменное имя и порт, соответствующие текущему подключению (''SipDomain'', ''SipPort'' с соответсвующим числовым суффиксом или без него), которые могут применяться для подключения к прокси-серверу или к серверу, находящемуся за NAT с переопределенным портом взамен стандартного.<br />
* Добавлены клиентские конфигурационные ключи ''[[Параметры_файлов_конфигурации#SipDomain|SipDomain]]'', ''[[Параметры_файлов_конфигурации#SipPort|SipPort]]'', позволяющие явно переопределить домен и порт SIP-сервера для конкретного подключения в случае использования нестандартных настроек NAT.<br />
* Исправлены некоторые ошибки клиентского SIP-модуля, обслуживающего подключение локального устройства к серверу.<br />
* Реализована поддержка ''[http://ru.wikipedia.org/wiki/DTLS DTLS-соединения]'' в модуле HAL-SIP, ответственном за ''[http://ru.wikipedia.org/wiki/WebRTC WebRTC]''.<br />
* Реализована поддержка ''[http://ru.wikipedia.org/wiki/WebRTC WebRTC]'' при работе с Mozilla Firefox.<br />
* Реализована поддержка сквозных видео-звонков между SIP-устройствами, подключенными к серверу.<br />
* Выявлена и устранена проблема в безопасности SIP-подключений.<br />
* Выявлен и устранен ряд частных проблем в HAL.SIP, связанных с блокировками, исключениями, ростом памяти, отправкой некорректных данных в SIP-запросах/ответах.<br />
* Исправлена ошибка в работе межсерверного взаимодействия, связанная с обнулением списка отделов после перезагрузки сервера состояний.<br />
* Исправлена ошибка менеджера задач, влекущая разрыв разговора оператора с третьим лицом в случае обрыва внешней линии, находящейся на удержании.<br />
* Исправлена проверка прав при приглашении участниками новых абонентов в закрытые конференции.<br />
* Исправлена ошибка АТС, в следствие которой неверно определялись персональные внутренние номера пользователей.<br />
* Исправлена ошибка в работе компонента «Файловая операция» в режиме определения размера файла.<br />
* Исправлена ошибка менеджера служебных задач. Симптом: суточная периодическая задача с узким временем работы после перезапуска сервера не срабатывает в первые сутки.<br />
* Исправлена ошибка в работе контрольного события о выходе оператора из КЦ.<br />
* Исправлена проблема кодирования имен файлов в формируемых ZIP-архивах.<br />
* Исправлена ошибка менеджера голосовых задач, связанная с отсутствием в статистике состояния поствызывной обработки у оператора, осуществившего переключение абонента на IVR с выходом из задачи.<br />
* Исправлена ошибка отображения и сохранения национальных символов в истории сообщений чата.<br />
* Исправлена ошибка авторизации, связанная с невозможностью входа пользователя после однократного попадания в ситуацию нехватки пользовательских лицензий.<br />
* Исправлена ошибка сохранения неудачного звонка в БД, в результате которой фиксировалась команда набора, а не сам номер.<br />
* Исправлена ошибка АТС при осуществлении звонков на шлюзы с внутренними линиями - не подставлялся Caller-name.<br />
* Исправлена ошибка модуля «Мои звонки», не дававшая перезвонить на неудачный номер.<br />
* Поправлено контрольное событие "Пропуск звонка" при отклонении звонка оператором в задаче - CallerId не сохранялся.<br />
* Исправлены несколько ошибок логирования и сетевого взаимодействия, способные при определенных условиях привести к росту памяти службой сервера.<br />
* Устранено удаление данных из базы oktell_cc_temp при очистке оперативной статистики по задачам с закреплением абонентов за операторами.<br />
* Устранена проблема длительного зацикливания менеджера голосовых задач при поиске оператора для абонента через хранимую процедуру в приоритетной исходящей задаче с запросом/уведомлением при отсутствии подходящих операторов.<br />
* Добавлена подстановка Caller-name при звонках на шлюзы с внутренними линиями.<br />
* Исправлена проблема менеджера голосовых задач, связанного с подвисанием линии в случае выхода оператора из КЦ во время запроса на дозвон.<br />
* Исправлена проверка прав на внешние линии/направления при подключении к разговору.<br />
* Устранена ошибочная привязка ограничения количества потоков в текстовых задачах к количеству внешних линий в системе.<br />
* Устранена ошибка менеджера голосовых задач, связанная с ложным повторным прозвоном завершенных абонентов, возникающая вследствие таймаута запроса к БД на синхронизацию таблицы абонентов.<br />
* Устранена проблема роста памяти вследствие использования динамических рабочих мест, возникающая при частой перезагрузке сервера состояний.<br />
* Исправлена работа контрольного события «Операторов меньше установленного».<br />
* Исправлена ошибка предиктивных задач. Симптом: при выходе последнего оператора из колл-центра задача продолжает набирать номера абонентов.<br />
* Исправлена ошибка PBX, в ходе которой возникала отвязка SIP-телефона от стационарного рабочего места после использования телефона в динамической связи.<br />
* Исправлена ошибка, приводящая к неотправке SIP сообщения NOTIFY с информацией о состоянии абонента сразу после подписки.<br />
* Исправлена ошибка сохранения в БД звонка на шлюзы, зарегистрированные на сервере с режимом набора «Аккаунт, затем номер», в результате которой фиксировалась команда набора, а не сам номер.<br />
<br />
<br />
<br />
<br />
====версия 2.10 (20.01.2014)====<br />
<br />
<br />
* В веб-клиент включена первая версия раздела ''[[Oktell_Web_Оператор#Дашборды|Дашборды]]''.<br />
* Веб-клиент получил возможность отображать ''[[Компоненты сценариев диалога#WebForm|веб-формы]]'' диалоговых сценариев (без подстановки значений в поля).<br />
* Реализовано сохранение сессий веб-клиентов в БД в целях сохранения между производимыми перезагрузками сервера.<br />
* Реализована политика прав доступа пользователей к объектам Call-центра. Проекты, таблицы абонентов, задачи, индикаторы, отчеты и дашборды получили возможность определять индивидуальные права доступа. Соответствующие общие привилегии в ролях на изменение и удаление объектов ликвидированы.<br />
* ''[[Таблицы абонентов]]'' получили возможность назначать столбцам с типом данных ''uniqueidentifier'' смысловой тип ''Идентификатор оператора''. Применяется в задачах с закреплением абонентов за операторами.<br />
* В задачах ''[[Голосовые задачи#FixOperator|с закреплением абонента за оператором]]'' активирована периодическая синхронизация с таблицей абонентов для задач этого типа. Реализована возможность выбора - запрос на дозвон или уведомление оператору. Скорректирована процедура очистки кэша.<br />
* Произведена оптимизация и корректировка механизма поиска очередного абонента для звонка по [[Голосовые задачи|задаче]] при использовании ''[[Голосовые задачи#DBCache|кэша в БД]]''.<br />
* Реализован новый тип задач ''Поиск абонента для оператора''.<br />
* Реализовано состояние ''ручного режима в Call-центре'', фактически приостанавливающее использование оператора исходящими задачами. В пространственной таблице операторских состояний для этого выделено отдельное состояние (код 12). В запросы [[Oktell_Web-Socket_Protocol|WebSocket-интерфейса]] (''setuserstate'') и COM-интерфейса введено свойство для управления состоянием. В модулях ''[[Ресурсы]]'' и ''[[Операторы]]'' отображение состояния в виде пиктограммы ''«М»'' и доступ к управлению состоянием для супервизора.<br />
* Реализована первая версия задач с прогрессивно-предиктивным набором. В конфигурационный файл вынесены константы ''[[Параметры_файлов_конфигурации#PredictivePoolTimerIntervalMs|PredictivePoolTimerIntervalMs]]'', ''[[Параметры_файлов_конфигурации#PredictivePoolClearStatOnDeactivate|PredictivePoolClearStatOnDeactivate]]'', ''[[Параметры_файлов_конфигурации#PredictivePoolExtraShiftTimeoutMs|PredictivePoolExtraShiftTimeoutMs]]''.<br />
* Реализована возможность выдачи прав доступа к записям разговоров по внешним направлениям. Ранее была доступна установка права доступа для всех внешних линий сразу.<br />
* Добавлены новые фирменные мелодии ожидания. Применяются автоматически, если в системе используются мелодии по умолчанию. <br />
* Работа локальных устройств и гарнитур в клиентском приложении переведена на протокол SIP. Как результат незначительно изменилось управление модулем ''[[Телефон]]''.<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлен ряд новых функций. Присоединение звонка к задаче с возможностью указания ид абонента (задание параметра через json-хеш с ключами ''{task|user, idinlist}''). Определение расписания задачи (по текущему времени). Определение рабочего времени офиса с учетом настроенных праздников (по указанному времени). Перезагрузка общих настроек из БД. Изменение ограничения максимального количества внешних линий для задач (-1 - снятие лимита). Установить для пользователя: статус, занятость, переадресация, перерыв, кц, ручной режим кц.<br />
* В компонент IVR-сценариев ''[[Компоненты сценариев IVR#Switch|Переключение]]'' добавлена возможность сохранять код отказа SIP, а также при переключении на внутренние номера указывать сигнал вызова (значение SIP-заголовка ''Alert-Info'').<br />
* Компонент диалоговых сценариев ''[[Компоненты сценариев диалога#WebForm|Веб-форма]]'' получил возможность определять поведение при нажатии на кнопку ''ДАЛЕЕ''. Возможность заблокировать кнопку в принципе, продолжить, а также ''SUBMIT'' веб-документу.<br />
* Исправлена ошибка в работе компонента сценариев ''[[Общие компоненты сценариев#EmailReceive|Получение E-mail]]'' в режиме работы с IMAP сервером.<br />
* Исправлена ошибка компонента сценариев ''[[Общие компоненты сценариев#EmailSend|Отправка E-mail]]'', связанная с блокировкой выбранных файлов вложений на некоторое время после завершения работы компонента. <br />
* В компонентах сценариев ''[[Компоненты служебных сценариев#Call|Дозвон]]'', ''[[Компоненты сценариев IVR#SwitchExt|Переключение на внешние линии]]'' и ''[[Компоненты сценариев IVR#Switch|Переключение]]'' реализовано защитное преобразование выбранного режима перед началом работы в соответствии с модулем-инициатором запуска.<br />
* В компоненте сценариев ''[[Общие компоненты сценариев#WebRequest|WEB-запрос]]'' добавлена возможность осуществлять запросы ''PUT'', ''HEAD'', ''DELETE''. Исправлена работа с Cookies.<br />
* Ряд мелких исправлений в компонентах сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'', ''[[Общие компоненты сценариев#WebRequest|WEB-запрос]]''.<br />
* Оптимизирована передача данных из веб-сервиса 1C в сценарий с помощью компонента ''[[Общие компоненты сценариев#1CQuery|Запрос к 1С]]''.<br />
* Служебные сценарии получили возможность запускать процессы на клиенте с помощью нового компонента (через указание пользователя, который должен быть авторизован через толстое приложение или COM-ядро).<br />
* В модуле ''[[Сценарии АТС#SvcUserChanged|общих настроек]]'' добавлена возможность выбора служебного сценария уведомления об изменении учетной записи пользователя с передачей кода операции (1-создание, 2-изменение, 3-удаление), ид пользователя, логина, незашифрованного пароля, имени. Пароль передается только при создании или при изменении с модификацией пароля, иначе просто пустая строка. При удалении только идентификатор передается.<br />
* В модуле ''[[Сценарии АТС#SvcUserStateChanged|общих настроек]]'' добавлена возможность выбора сценария уведомления о входе/выходе пользователя в систему.<br />
* В модуле ''[[Настройки_Call-центра#SvcSupervisorHelp|общих настроек]]'' добавлена возможность выбора служебного сценария обработки запроса помощи супервизора.<br />
* [[Oktell_Web-Socket_Protocol|WebSocket-интерфейс]] дополнен пользовательскими методами: ''checkmyuserprivilege'', ''getmyuserprivileges'', ''pbxanswercall'', ''updatesession''. Серверными методами: ''wp_setuserstate'', ''wp_getuserstate'', ''closecallbychain'', ''getalluserstates'', ''subscribeevent'', ''unsubscribeevent'' и серверным событием ''srv_userstate''.<br />
* В [[Oktell_Web-Socket_Protocol|WebSocket-интерфейсе]] реализована возможность хранения файлов, прикрепленных к сообщениям чата, под уникальными именами (свойство ''hidefiles'' метода ''chatsendmessage'').<br />
* В COM интерфейс добавлены методы ''Conf_AttachToGhost(string ghostid)'', ''string Conf_SetGhostMode(string xml)'', позволяющие организовать прослушивание в реальном времени. Исправлены некоторые ошибки.<br />
* Расширена функциональность [[Серверный_HTTP_интерфейс|веб-сервера]]. Реализована возможность исполнять служебные сценарии без прохождения авторизации на сервере (с помощью запроса специальным образом настроенных веб-страниц в подпапке ''WWW''). Обработка запросов с ''transfer-encoding:chunked''. Запросы ''checklicenseactual'', ''closecallbychain''.<br />
* Добавлен ключ конфигурации ''[[Параметры_файлов_конфигурации#WebServerNoAuth_Loopback|WebServerNoAuth_Loopback]]'', позволяющий отключить требование авторизации при обращении к [[Серверный_HTTP_интерфейс|веб-серверу]] с собственного адреса сервера.<br />
* Исправлен ряд недочетов в менеджере голосовых задач. Таймеры и периоды активности задач. Пауза перед резервированием освободившегося оператора. Отбой внешней линии во время длительного исполнения запроса в БД перед входом в задачу приводил к зависанию линии оператора после попытки соединения. Корректное размещение в статистику информации о звонке при присоединение существующего звонка к задаче. Корректное полное удаление оператора из обработчика входящей задачи. При использовании сценария поиска абонента не применялось указание на завершение задачи, если идентификатор абонента не установлен сценарием в служебную переменную.<br />
* Косметические исправления в модуле ''[[Пользователи]]''.<br />
* Добавлена новая ролевая привилегия ''Возможность редактирования запросов SQL''. <br />
* Исправлены незначительные ошибки в модуле ''[[Настройки_SIP-модуля|Настройки аппаратуры]]''.<br />
* Исправлено отображение таблицы журнала звонков в модуле ''[[Мои контакты]]''.<br />
* Исправлены ошибки в модуле ''[[Статистика#Диаграммы и настройка|Статистика call-центра]]'', а также реализована возможность использовать предопределенную переменную ''@authorizeduserid'' (в отчетах из хранимых процедур - таблицу ''#authorizeduserid'') для привязки отчетов к конкретным пользователям.<br />
* Косметические исправления в модуле ''[[Ресурсы]]''. Ошибка скрытия неактивных пользователей. Ошибка при отрисовке списка задач при определенных условиях. Кэширование данных по запросу производилось без учета выбранного интервала расчета.<br />
* Косметические исправления в ''[[Редактор_web-форм|дизайнере диалоговых веб-форм]]''. Назначение переменных в качестве значений (слетало в константу). Удалена привязка выпадающих списков к начальным значениям.<br />
* Добавлено управление масштабом в диалоговых веб-формах и других модулях, использующих встроенный браузер.<br />
* Из ''[[Редактор_карты_сети|карты сети]]'' удалены USB-телефоны. Теперь учетной записью для работы локального устройства снабжаются компьютеры, не связанные с объектами SIP-телефонов и аналоговых телефонов, а также динамические рабочие места.<br />
* Устранен рост памяти в SIP-сервере при работе с динамическими транками.<br />
* Исправлены обнаруженные ошибки и недочеты в SIP-сервере. При forking-вызове не всегда отправлялся CANCEL. При одновременном поступлении SIP-ответов 180 и 183 не всегда была успешной последующая коммутация. Отключение таймеров при определенных условиях. <br />
* Исправлена ошибка в определении пути для сохранения резервных копий БД, если в конфигурационном файле установлено нестандартное значение базового каталога для резервных копий. Симптом: файл всегда перезаписывался и хранился в единственном экземпляре.<br />
* Исправлена ошибка сервера, приводившая к остановке периодических процессов, в том числе автоматического управления графиком перерывов операторов.<br />
* Исправлена ошибка, связанная с неотображением в статистике причины перерыва, выставленной оператором, после осуществления оператором звонка вручную.<br />
* Некоторые незначительные исправления в АТС. Сброс состояний, приводивших в некоторых случаях к отсутствию сигнала КПВ при исходящих звонках.<br />
* В модуле автодозвона реализован обратный вызов оператора с использованием интеркома.<br />
* Исправлена ошибка в автоматическом удалении записей разговоров по истечении времени хранения, приводившая к пропуску некоторых файлов.<br />
* Исправлено значение свойства ''TimeStop'' в [[Сценарии_АТС#SvcContent|контенте линии]], ранее всегда имел нулевое значение.<br />
* Введен отладочный конфигурационный параметр ''[[Параметры_файлов_конфигурации#DEBUG_LogActiveThreadStackTrace|DEBUG_LogActiveThreadStackTrace]]'' для периодического вывода в лог Debug информации о стеке всех активных потоков.<br />
<br />
<br />
<br />
<br />
====версия 2.9 (02.10.2013)====<br />
<br />
<br />
* Обнаружена и исправлена ошибка SIP-сервера, в ходе которой полученные повторные ответы 200 OK на сообщения REGISTER приводили к блокировке аккаунта вплоть до перезагрузки<br />
* Исправлен выбор расширения для файла в компоненте IVR сценариев ''[[Компоненты сценариев IVR#Record|Запись]]'' в соответствии с выбранным кодеком.<br />
* Исправлена ошибка элемента управления ''таблица'' клиентского приложения, приводившая в ходе удаления нескольких выделенных строк к некорректному определению индексов.<br />
* Реализовано определение номеров и доступ к функциям ''CallerId'' и ''CalledId'' из сценария для шлюзов с внутренними линиями.<br />
* Восстановлен разбор мультипартовых SIP-INVITE сообщений.<br />
* Обнаружена и исправлена проблема периодического отсутствия отчета об успешной работе факса, несмотря на удачное завершение приема/передачи.<br />
* Реализовано сохранение кода отказа SIP в статистике исходящих попыток звонков в колл-центре, а также их передача в сценарий обработки результата попытки звонка по задаче.<br />
* Реализовано перенаправление звонков на указанный адрес при получении SIP-ответа ''3xx Moved''. Для звонков по шлюзам без регистрации и шлюзам межсерверного взаимодействия, а также для звонков на внутренние номера, не использующие SIP-forking.<br />
* Обеспечена возможность генерации сигналов КПВ в SIP-линии, по которым был отправлен предварительный ответ ''183 Session Progress''.<br />
* Обнаружена и исправлена проблема неверного отображения свойств компонента ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' в режиме ''установить для линии''.<br />
* Реализована предварительная проверка параметров лицензии при добавлении [[Динамическое_управление_картой_сети|динамических транков]].<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлена возможность определения параметров лицензии, количества используемых линий, пользователей, а также команда принудительного обновления сертификата.<br />
* Исправлена привязка звонка к задаче с помощью компонента ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' через пользователя. <br />
* Исправлена ошибка SIP-сервера при работе за NAT. Симптом: в поле Contact подставлялся локальный адрес.<br />
* Реализовано обновление состояния входящих регистрационных сессий по динамическим потокам при перезагрузке сервера, если динамические потоки загружаются на старте).<br />
* Исправлена функция ''CallerId'' в сценариях IVR для внутренних линий SIP шлюзов. Симптом: возвращает пустоту.<br />
* Исправлена работа компонента сценариев ''[[Общие компоненты сценариев#WebRequest|WEB-запрос]]''. Симптом: после перехода на .NET v4.0 многократная работа компонента в различных сценариях после нескольких сот тысяч запросов прекращает отправку.<br />
* Реализован дополнительный вариант фильтрации по правам компонентов ''[[Компоненты сценариев IVR#SwitchExt|Переключение на внешние линии]]'' и ''[[Компоненты служебных сценариев#Call|Дозвон]]'' - по приоритетам линий.<br />
* Размещение информации по вручную прикрепленному к задаче звонку в пространственной таблице колл-центра ''EffortConnections''.<br />
* Исправлено отображение задач в модуле ''[[Ресурсы]]''. Симптом: при некоторых обстоятельствах выводятся не все задачи.<br />
* Исправлена ошибка SIP-forking: множественный звонок при исходящем же отбое не инициировал завершение одной из сессий.<br />
* Обнаружена и исправлена некорректная обработка одновременных встречных Cancel <-> Ok, приводившая к подвисанию звонка вплоть до разрыва вручную.<br />
* Исправлена генерация номеров динамических линий. Некорректное дублирование приводит к проблемам в коммутировании линий.<br />
* Исправлена загрузка сильно вложенного и взаимозамкнутого [[Внутренние номера#Rules|номерного плана]].<br />
* Исправлена ошибка WebRTC, возникающая при закрытии вкладки браузера с активной сессией разговора.<br />
* В интерфейс [[Oktell Web-Socket Protocol|WebSocket]] добавлены методы ''сс_addoperatortotask'', ''cc_removeoperatorfromtask'', ''cc_settaskactive''.<br />
* Реализован обмен сообщениями в веб-клиенте в виде диалогов. Интерфейс [[Oktell Web-Socket Protocol|WebSocket]] сервера пополнен рядом методов.<br />
* Добавлен режим запуска [[Служебные задачи|служебных задач]] - ''На старте сервера''.<br />
* Реализовано сохранение в БД информации о текущем состоянии регистрации всех SIP-потоков системы (таблица A_StreamRegistration).<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' внесены функции добавления/удаления оператора в задачу.<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлена возможность определения заголовков из входящего SIP INVITE или 200OK сообщения.<br />
* В выражения сценариев добавлена функция ''[[Выражения#Translit|translit]]''.<br />
* Исправлена [[Серверный HTTP интерфейс#upload|закачка файлов]] на веб-сервер Oktell при отсутствии заголовка Content-transfer-encoding.<br />
* Добавлена ролевая привилегия редактирования групп [[Мои контакты|контактов]].<br />
* Добавлена ролевая привилегия работы с [[Мои контакты|контактами]] из общих групп. Запрещает удалять и редактировать общие контакты, назначать личным контактам общие группы, а также создавать, редактировать и удалять общие группы.<br />
* Восстановлена работа функции ''Время отсутствия звука в линии'', возвращаемая компонентом ''[[Общие компоненты сценариев#UserState|Статус объекта]]''.<br />
* Оптимизирована с точки зрения объема используемой памяти обработка входящих SIP-сообщений.<br />
* Оптимизировано обновление [[Динамическое_управление_картой_сети|динамической карты сети]] в случае, когда изменений фактически не производится.<br />
* Обнаружена и исправлена ошибка сохранения имен контактов и пользователей с символом перевода строки, который отрицательно влияет на формирование SIP-сообщений.<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлена возможность определения локальных адресов сервера.<br />
* Исправлена работа компонента ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' в части установки свойств конференциям.<br />
* Исправлена функция ''UrlDecode'' в разделе [[Выражения|выражений сценариев]].<br />
* Обнаружена и обработана проблема фильтрации отправляемого SIP сообщения CANCEL при моментальной отмене до получения предварительного ответа.<br />
* В модулях клиентского приложения заменен браузер. Встроено ядро браузера CHROME.<br />
* В режиме дизайнера веб-форм добавлена возможность выбирать в качестве источника файлы MHT.<br />
* В компонент сценариев «Файловая операция» добавлена функции взятия хеша MD5 от содержимого.<br />
<br />
<br />
<br />
<br />
====версия 2.8 (26.07.2013)====<br />
<br />
<br />
* Реализована возможность [[Параметры_АТС#StrongPassword|запрета использования простых паролей]].<br />
* Реализована возможность [[Параметры_АТС#PaidNumbers|автоматического запрета всех исходящих звонков на несанкционированные номера]].<br />
* Реализована возможность использования динамических рабочих мест [[Параметры файлов конфигурации#EnableAutoMapSip|с автоматической привязкой к существующим в карте сети SIP-телефонам]].<br />
* Реализован альтернативный способ управления гарнитурой с клавиатуры, поддерживающий работу в x64 системах.<br />
* Обнаружена и устранена причина периодических зависаний клиентского приложения в совершенно различных модулях.<br />
* Реализовано рабочее место оператора в web-клиенте, поддерживающее отображение [[Компоненты сценариев диалога#Диалоговая форма|диалоговых форм стандартного типа]].<br />
* Добавлен ряд новых функций в компонент сценариев [[Общие_компоненты_сценариев#Статус объекта|«Статус объекта»]]: определить для линии время отсутствия входящего звука, определить вхождение линии в направление, определить идентификатор и номер скоммутированной линии/конференции, определить наличие привилегии у пользователя, принудительно перерегистрировать сип-аккаунт или все сип-аккаунты, определить внешний IP-адрес сервера через STUN-запрос, сохранить скриншот пользователя.<br />
* Реализована возможность использовать одновременно связь с CRM и web-клиентов на основе OktellJS.<br />
* Реализована возможность использовать защищенные каналы связи (TLS) для работы c web-сервером Oktell. Касается взаимодействия по [[Серверный_HTTP_интерфейс|HTTP-API]], а также для работы [[Oktell_Web-Socket_Protocol|web-socket]] каналов.<br />
* Реализована возможность подключаться к CRM по http/https в альтернативу [[Oktell_Web-Socket_Protocol#Arch1|websocket-соединениям]].<br />
* Обнаружена и исправлена проблема версии Oktell 2.8 по использованию плагинов внутри собственного процесса.<br />
* Добавлены ролевые привилегии: возможность исполнять методы Web-API, доступ к скачиванию записей разговоров.<br />
* Изменена настройка [[Настройки_веб-сервера|HTTP-веб-сервера]], WebSocket-сервера, [[Интеграция_с_Web-Socket_CRM|подключения к WebCRM]] и Web-клиента, настройка сертификатов X509 для работы TLS.<br />
* Исправлена проблема проверки и отключения лицензий в случае одновременного использования динамических рабочих мест и плат телефонии, а также превышения общего количества линий.<br />
* Исправлены некоторые обнаруженные ошибки отображения в клиентском приложении.<br />
* Исправлена проблема менеджера задач по работе с индивидуальными операторскими задачами в режиме запроса на звонок. Симптом: если оператор оставляет окно запроса на звонок на срок более получаса, абонент подвисает и задача не может быть завершена до перезагрузки сервера.<br />
* Исправлена выдача страниц [[Серверный_HTTP_интерфейс|HTTP-веб-сервером]]. Симптом: неверный content-type, вследствие чего ответы скачивались, а не отображались браузерами.<br />
* Добавлена автоматическая выдача веб-сервером файлов index.html из подпапок.<br />
* Добавлена возможность управления поведением компонента [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние]] в режиме ''прослушивания медиа-потока'' через [[Параметры_файлов_конфигурации#PBX_Use180SdpAs183|конфигурационный файл]]. Решается задача переключения между генерацией КПВ (длинных гудков) и медиа-соединением при получении последовательности различных ответов 180, 183.<br />
* В сценариях реализован новый [[Переменные#Types|тип переменных]] с глобальной серверной областью видимости без привязки к сессиям. Существующие глобальные переменные преобразованы в сессионные.<br />
* Реализована функция [[Управление базами данных#ComputeVoices|расчета времени владения разговором в коммутациях]].<br />
* Добавлена функция NowTick в [[Выражения|выражения сценариев]].<br />
* При удалении нелицензированных внутренних линий внедрена функция выбора преимущественно каналов, не находящихся в коммутации.<br />
* При отправке факс-сообщения установлено принятие за успешный результат отправки хотя бы одной страницы.<br />
* Реализована возможность [[Динамическое управление картой сети|динамического управления]] объектами в карте сети с помощью сценариев (json-структура в компоненте [[Общие компоненты сценариев#UserState|«Статус объекта»]]).<br />
* При обновлении клиентского приложения с сервера реализовано отображение процента завершения скачивания архива.<br />
* Добавлен разбор [http://ru.wikipedia.org/wiki/JSON JSON]-форматированных строк в сценариях с помощью компонента [[Общие компоненты сценариев#Parser|«Парсер»]].<br />
* Реализована [[Свойства компонентов#SipPhone|поддержка WebRTC]] в HAL.SIP.<br />
* Реализована функция [[Свойства компонентов#SipPhone|SIP.forking]] - множественная регистрация устройств под одной учетной записью.<br />
* В веб-операторе реализована поддержка WebRTC и регистрация телефона на сервере Oktell (нового или вторым подключением к существующему).<br />
* Добавлен ряд возможных событий-команд для работы плагинов: ''declinecall'', ''connectabonents'', ''makeflash''<span style="color:gray;">(mode=''abort''|''next''|''switch'')</span>.<br />
* Модернизировано сохранение пользовательских сообщений через очередь доступа к БД.<br />
* В компоненте сценариев [[Общие компоненты сценариев#UserState|«Статус объекта»]] реализованы дополнительные функции для взаимодействия с конференциями.<br />
* В компоненте сценариев [[Общие компоненты сценариев#UserState|«Статус объекта»]] реализованы дополнительные функции для взаимодействия с направлениями.<br />
* В АТС внедрена функция отказа от вызова без фиксации пропущенного вызова на телефоне, если отказ производится по причине снятия трубки другим абонентом вызываемого группового номера.<br />
* Реализована функция сквозной коммутации в состоянии early-media (SIP-сообщение ''183 Session Progress'') с обеих сторон.<br />
* Реализована функция подключения текущего звонка к задаче через клиентский модуль [[Мое рабочее место|«Мое рабочее место»]], через компонент [[Общие компоненты сценариев#UserState|«Статус объекта»]], а также через компонент сценариев [[Компоненты служебных сценариев#Connector|«Коммутатор»]] и командой [[Oktell_Web-Socket_Protocol#attachcalltotask|cc_attachcalltotask]] в интерфейсе websocket.<br />
* Добавлены задачи нового типа [[Голосовые задачи#ManualCall|«Дозвон вручную»]] для организации кампаний с полностью ручным определением абонентов и их вызовом.<br />
* Реализована поддержка gzip в [[Серверный_HTTP_интерфейс|веб-сервере]] при отправке скриптов и документов.<br />
* Реализована функция динамической регистрации учетной записи SIP-телефона и привязки ее к рабочему месту в браузере с использованием webrtc.<br />
* Оптимизировано сохранение [[Карта сети|карты сети]] путем частичного изменения.<br />
* Оптимизировано сохранение [[Настройки оборудования|настроек аппаратуры]].<br />
* В контекстное меню модуля [[Ресурсы|«Ресурсы»]] добавлены команды ''Позвонить'', ''Подключиться к разговору'', ''Отправить сообщение операторам задачи''.<br />
* В модуле «Ресурсы» по умолчанию удалены из отображения линии. Включить можно в разделе «Администрирование. Клиентское приложение».<br />
* В интерфейс websocket добавлена команда [[[[Oktell_Web-Socket_Protocol#pbxmakeflash|''pbxmakeflash'']]. В функцию [[Oktell_Web-Socket_Protocol#login|''login'']] добавлено свойство ''usewebrtc'', в ответе приводятся параметры для подключения SIP-софтфона или WebRTC-софтфона.<br />
* Изменено хранение пользовательских сообщений в БД, произведена нормализация с учетом массовых сообщений. <br />
* Реализована функция прослушивания канала, являющегося участником конференции. Теперь в момент прослушивания доступен звук со всех участников конференции.<br />
* В компонент сценариев IVR [[Компоненты сценариев IVR#PlayFile|«Воспроизведение»]] добавлен режим генерации DTMF.<br />
* Обновлены стандартные [[Статистика|отчеты коллцентра]].<br />
* Реализована нормальная обработка комбинации HOLD + Soft Flash в АТС.<br />
* Изменен порядок привязки SIP-сообщений к сессиям. Теперь одинаковые callid не являются проблемой, если используются в рамках разных учетных записей.<br />
* Реализовано сохранение в статистике и проброс в [[Голосовые задачи#EffortResultScript|сценарий обработки результата попытки]] в качестве 5-го неявного параметра кода ответа-отказа SIP при исходящих звонках.<br />
* В сценарии IVR добавлена возможность определять файл записи/воспроизведения с помощью выражения.<br />
* Добавлен новый тип отображения отчетов - [[Статистика#VertHysto|вертикальная гистограмма]].<br />
* Изменено отображение отчетов типа [[Статистика#Plane|«Плоскость»]]. Теперь в качестве значений допускаются ''NULL''.<br />
* Добавлено сохранение идентификаторов сессии и коммутации в [[Управление базами данных#DTMFflow|таблицу DTMF сигналов]].<br />
* Реализована возможность [[[[Конференц-связь#Управление конференцией с помощью DTMF|управления конференцией с телефона через DTMF]]. Преобразование коммутации в конференцию, приглашение участников, отключение участников, завершение конференции.<br />
* Реализовано хранение данных в БД о регистрациях клиентских SIP устройств, и применение их при перезапуске HAL и сервера.<br />
* Исправлено прослушивание записей конференций. Происходила ошибка при нахождении клиента и сервера в разных часовых поясах.<br />
* Исправлены некоторые проблемы в HAL.VoIP сервере, связанные с отключением устройств из-за потери связи.<br />
* Исправлена ошибка, связанная с невозможностью изменить базовый порт SIP (5060).<br />
* Исправлена ошибка предварительного преобразования многостраничных .tiff изображений в клиентском приложении при отправке факсов. При использовании клиентского модуля преобразований оставалась только первая страница.<br />
* Добавлено описание прослушиваемой конференции во встроенный плеер.<br />
* Исправлена проблема изредка наблюдаемого явления отсутствия звука в SIP-телефонах после изменения параметров сессии.<br />
* Обнаружены и устранены некоторые оставшиеся проблемы при работе шлюза без регистрации из-за NAT.<br />
* Обнаружена и исправлена ошибка в сохранении приоритета [[Запись разговоров|общих правил записи коммутаций]].<br />
* Обнаружена и устранена проблема загрузки ресурсов плагина в версии 2.8, работающей в среде .NET Framework v4.0. <br />
* Обнаружена и устранена проблема в триггере БД при сохранении пользовательских сообщений, приводящая при больших нагрузках к блокировкам и откату транзакций сохранения.<br />
* Обнаружена и устранена проблема общего торможения АТС при массовых задержках ответов на отправляемые сервером SIP-сообщения CANCEL.<br />
* При использования сценария набора номеров для приглашения новых участников конференции организована передача данных о пользователе-инициаторе вызова.<br />
* Обнаружена и исправлена ошибка АТС, приводящая при определенных условиях использования режима HOLD к подвисанию канала вплоть до ручного сброса в мониторинге.<br />
* Исправлена ошибка раздела [[Настройки оборудования|«Параметры аппаратуры»]] клиентского приложения, связанная с невозможностью сохранить измененные значения после повторного переключения в модуль.<br />
* Понижены минимальные возможные границы для некоторых настроек (мин время в очереди, макс время переключения на оператора, время Hunt-вызова)<br />
* Исправлена работа функции управления гарнитурой с клавиатуры в COM-ядре клиентского приложения.<br />
* Обнаружена и исправлена ошибка [[Серверный_HTTP_интерфейс|веб-сервера]], связанная с использованием одного порта в нескольких настройках. При переключениях порт может быть фантомно занят вплоть до перезагрузки службы.<br />
* Исправлена функция мягкого разрыва. Не производился разрыв существующей коммутации, что в случае использования [[Сценарии АТС#ScrInsteadBusy|«сценария вместо отбоя»]] могло приводить к неожиданным эффектам.<br />
* Исправлена ошибка обратного отзвона из удержания. При определенных обстоятельствах первым на дозвон мог разместиться абонент из общей очереди, и лишь затем удерживаемый ранее абонент.<br />
* Исправлена ошибка набора номеров при вызове шлюзов с регистрацией на сервере через аккаунт. Символы w, z, q воспринимались как служебные.<br />
* Понижен приоритет отложенных операций микширования, упаковки и расчета владения разговором.<br />
* Исправлена ошибка в автодозвоне при звонках на быстрые номера. При неудачном вызове и отказе от звонка возможно зависание линии до сброса вручную в мониторинге.<br />
* Исправлен ряд ошибок, добавлены новые функции в рабочее место оператора в вебе.<br />
* Реализовано нелимитированное сохранение резервных копий БД и сценариев с фильтрацией по временным интервалам.<br />
* Изменено поведение входящей задачи при неснятой оператором трубке и запрещенной к использованию очереди. Ранее вызов отправлялся всем операторам сразу. Теперь звонок возвращается в IVR.<br />
* Изменено значение [[Параметры файлов конфигурации#EnableAutoMap|конфигурационного ключа ''EnableAutoMap'']]. По умолчанию теперь включено для поддержки работы веб-софтфона из рабочего места оператора.<br />
* Исправлена ошибка перевода в перерыв в колл-центре, влекущая разрыв текущей коммутации.<br />
* Исправлена ошибка АТС, оставляющая пустыми значения callerid и calledid при звонках со шлюзов с внутренними линиями.<br />
* В конфигурационный файл клиентского приложения внесен параметр (''ShowLoadingBar = 0''), позволяющий отключить окно ожидания загрузки.<br />
* Исправлена ошибка в модуле [[Переадресация|«Переадресация»]]. Не происходило перетаскивание правил.<br />
* В модуле [[Кабинет#Заказы на встречные звонки|«Кабинет. Встречные звонки»]] восстановлено контекстное меню.<br />
* Выявлена проблема подключения плагинов из сторонних каталогов в версии 2.8. В конфигурационных файлах клиентского приложения и oktell.PluginStarter требуется указание <span style="color:green;">''<runtime><loadFromRemoteSources enabled="true"/></runtime>''</span>.<br />
* Исправлена функция переключения на сценарий IVR путем подмены. Состояние не выставлялось требуемое.<br />
* Исправлена проблема некорректного пересчета SeqNum в исходящем RTP потоке при смене SSRC. В некоторых случаях после смены звук пропадает.<br />
* Исправлена проблема загрузки гарнитуры с неопределенными устройствами ввода-вывода.<br />
* Исправлена ошибка SIP, заключавшаяся в неотправке дублирующих пакетов ACK на повторные сообщения 200OK.<br />
* Исправлен алгоритм менеджера задач в части работы с абонентским списком через кэш в памяти и с номерами для перезвона.<br />
* Снято ограничение [[Карта сети|карты сети]], блокирующее сохранение шлюзов с одинаковым адресом прокси-сервера.<br />
* Обнаружена и решена проблема утечки памяти при [[Управление записями разговоров|микшировании в формат MP3]].<br />
* Обнаружена и устранена причина ухудшения работы факсов в версии 2.8.<br />
<br />
<br />
<br />
====версия 2.8 (30.01.2013)====<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Версия 2.8.130130 работает в среде .NET Framework v4.0. Перед обновлением с версии 2.7 и более ранних версий настоятельно рекомендуется ознакомиться [[Версия 2.8 на базе .NET Framework v4.0|со статьей]].<br />
<br />
* Произведена миграция в среду .NET Framework v4.0.<br />
* Реализована возможность сохранения [[Управление_базами_данных#FailedCalls|неудачных исходящих звонков]]. Отображение происходит в разделе «Статистика АТС» при указании в фильтре нулевой длительности.<br />
* Исправлена работа сервера за NAT с телефонами за NAT.<br />
* Реализована возможность активировать автоматическую блокировку звонков на платные номера. Список платных номеров хранится в БД. Активация режима в разделе "Сервер АТС" модуля "Общие настройки".<br />
* Добавлена функция «Код направления» в служебные и диалоговые сценарии. Применима только в режимах, связанных с АТС.<br />
* Исправлена ошибка отображения количества отключенных внутренних линий.<br />
* Изменена функция ограничения задачи по количеству внешних линий. Учитывает резервированное состояние линии.<br />
* Исправлена ошибка в диаграмме количества звонков по номерам в модуле «Статистика АТС».<br />
* Восстановлен нечувствительный к регистру поиск в выпадающем списке при наборе текста.<br />
* Реализован веб-сервер, выдающий страницы из папки WWW, слушающий стандартный 80 порт. Сильно ограничен по функционалу. Может быть отключен в конфигурационном файле сервера ключом ''UseWebServer80''.<br />
* Исправлена проблема некорректного звука гудков на платах Ольха. Проявлялось после коммутации с SIP каналами.<br />
* Реализовано разбиение лог-файлов HAL согласно настройкам в конфигурационном файле по максимальному размеру части.<br />
* Реализована возможность частичного обновление клиентских конфигурационных файлов (всех, указанных клиентов или кроме указанных клиентов).<br />
* В компоненте сценариев «Статус объекта» реализована функция «Проверить наличие привилегии у пользователя» по коду.<br />
* Добавлена ролевая привилегия на скачивание файлов записей.<br />
* В рамках авторизации по websocket реализована возможность создавать сессии и указывать время их жизни (до 2х недель).<br />
* При отсутствии ролевой привилегии пользования пользования автодозвоном и использовании гарнитуры с отключенным автодозвоном реализован вызов в обратной последовательности. Ранее выдавало уведомление о невозможности совершения вызова.<br />
* Реализована автоматическая отправка запроса в техническую поддержку из меню в статусной строке (на основе сервисной лицензии).<br />
* Реализована возможность [[Клиентское_приложение#ActiveDirectory|авторизоваться с помощью ActiveDirectory]].<br />
* Исправлена проблема COM-API, связанная с возвратом различных идентификаторов сессии при автодозвоне до и после снятия трубки пользователем.<br />
* Исправлена проблема в АТС, связанная с переключением на сценарий IVR путем подмены. Симптом: вместо продолжения обработки сценария производится разрыв.<br />
<br />
<br />
<br />
====версия 2.7 (25.12.2012)====<br />
<br />
<br />
* Реализован переподъем слушателей сетевых интерфейсов после временной недоступности интерфейса.<br />
* В режиме обмена номерным планом между серверами поправлен случай, когда служба обмена размещена на одном из серверов.<br />
* Обнаружена и исправлена проблема отсутствия каталога для пользовательских фотографий.<br />
* Микширование и упаковка записей по умолчанию в mp3-16.<br />
* Исправлена проблема в HAL.SIP, связанная с работой за NAT при наличии нескольких интерфейсов.<br />
* Обнаружена и исправлена проблема вызова группового номера из нескольких линий, не привязанных к пользователям. Симптом: в случае использования одной из них DND, вызов обрывается всем сразу.<br />
* Исправлены некоторые интерфейсные проблемы.<br />
* Исправлена проблема некорректного обновления конфигурационного файла websock.config, влекущая невозможность работы в веб-клиенте.<br />
<br />
<br />
<br />
====версия 2.7 (12.12.2012)====<br />
<br />
''21.12.2012 состоялся вебинар посвященный обзору релиза 12.12.2012 [http://www.oktell.ru/company/press/view/224/ Посмотреть запись вебинара]''<br />
<br />
* Добавлена возможность автоматического преобразования селектора в конференцию при выходе и управляющего, и создателя. Ключ UpdateSelectorOnDirectorDisconnect серверного конфигурационного файла.<br />
* Для компонента "SQL-запрос" увеличен до 4000 максимальная длина передаваемых в БД строковых параметров.<br />
* Реализована возможность повторного размещения звонка по задаче в начале очереди в случае, если операторский телефон находился в режиме DND.<br />
* Исправлена ошибка отображения предыдущего номера при автозвонке через HTTP интерфейс сервера.<br />
* Исправлена ошибка в пуле прогрессивного набора. Симптом: при одновременном ответе нескольких линий, все кроме первой подвисают в состоянии с поднятой трубкой до ручного сброса.<br />
* В контенте звонка изменена процедура расчета стороны, инициировавшей завершение.<br />
* Исправлена проблема компонента "Дозвон" служебных сценариев. Симптом: если номер пустой, то завершается без освобождения линии, та остается в резервированном состоянии до сброса вручную.<br />
* Исправлена проблема микшера записей при настройке в стандартную папку после применения нестандартной. Возможны были перебои и микшированием, и с записью.<br />
* В клиентском приложении заменены все базовые элементы управления.<br />
* Исправлено отображение стрелок перехода, линий связи, а также перемещаемых объектов в редакторе сценариев и карты сети, наблюдавшиеся в режиме AERO Windows 7.<br />
* Исправлена работа приложения на нескольких экранах.<br />
* Реализован поиск в модуле администрирования внутренних номеров.<br />
* Добавлена возможность сохранять код отказа SIP в переменную в компоненте "Дозвон" служебного сценария.<br />
* Исправлены мелкие ошибки при сохранении параметров аппаратуры, приводящие к сбросу в дефолтные значения при перезагрузке службы, а также к выставлению неверных значений.<br />
* Реализована возможность автоматического бана SIP-пакетов по полю User-Agent. В список всегда блокируемых внесен friendly-scanner. Дополнительные задаются в конфигурационном файле сервера ключами BanUserAgent{0-99}<br />
* Оптимизирована процедура определения IP-адресов по доменным именам. Введена асинхронность и независимость. Ранее была возможна ситуация, при которой из-за недоступности одного внешних из шлюзов все входящие звонки стопорились в ожидании таймаута.<br />
* В HAL.SIP исправлены некоторые ошибки, связанные с работой сервера за NAT. <br />
* B HAL.SIP исправлена проблема при обновлении регистрации на сервере, из-за которой раньше времени истекал срок жизни сессии и шлюз переходил в несинхронизированное состояние.<br />
* Реализована поддержка работы внешних VoIP клиентов (usb-телефонов и гарнитур), если сервер работает за NAT.<br />
* Исправлена проблема режима помощи при онлайн-подслушивании в случае, когда канал-донор находится в конференции.<br />
* Исправлена ошибка, при которой после входящего INVITE с предложением T.38 на следующий INVITE сервер отвечает RequestPending.<br />
* Исправлены проблемы сохранения и работы с нестандартными портами у SIP-телефонов. <br />
* Исправлена ошибка, при которой Expires сбивается с 0 на 3600 без необходимости.<br />
* Существенно оптимизирована рассылка событий конференциями внутренним пользователям.<br />
* Исправлена проблема АТС при работе с вынесенным в отдельный процесс HAL. Симптом: при большом количестве линий и большой нагрузке возможно подвисание линий в несвободном состоянии и наблюдается это часто.<br />
* Экспорт в Excel заменен на экспорт в обменный формат CSV.<br />
* Исправлена ошибка, из-за которой при переходе пользователя из недоступного состояние в готовность не производился автоматический анализ очереди и вызов, и требовалось ручное участие.<br />
* Исправлена ошибка, при которой в записях разговоров с плат YEASTAR слышен шум и треск, хотя в разговоре не наблюдался.<br />
* Исправлена проблема отображения сокращенного рабочего места при показе модуля СОТРУДНИКИ.<br />
* Исправлено скачивание больших файлов с HTTP, отправленное из Web-Socket клиентов.<br />
* Восстановлено прохождение трафика в видео-конференциях.<br />
* Реализован автоматический перевод всех контактов в тип "неизвестные" при удалении типа контакта.<br />
* CLI. Проблема передачи даты из стоп-формы в менеджер задач при определенных языковых настройках.<br />
* Решена проблема отображения выпадающих списков за главным окном приложения.<br />
* Существенно оптимизирована работа компонента "Парсер" сценариев. Скорость ряда запросов увеличена на три порядка.<br />
* Добавлена подсказка адреса веб-клиента в строку состояния главного окна, а также регистрация доменных имен для доступа к веб-клиенту непосредственно в разделе общих настроек.<br />
* Существенно оптимизированы диалоговые формы по скорости загрузки и построения на клиенте, а также объему передаваемых данных. Для скрытых групп также введен параметр, позволяющий применить отложенный расчет и загрузку данных по требованию.<br />
* Подготовлена база для миграции на FrameWork v4.0.<br />
<br />
<br />
<br />
====версия 2.7 (28.09.2012)====<br />
<br />
* В компонент [[Общие_компоненты_сценариев#UserState|Статус объекта]] добавлены свойства задачи для чтения: ''количество линий в дозвоне'' и ''количество линий в ожидании оператора''; добавлены свойства линии для чтения: ''Контент цепочки (xml)'', ''Контент цепочки (json)'', ''Контент линии (xml)'', ''Поле контента цепочки (заголовок)'', ''Поле контента цепочки (коммутация)'', ''Поле контента линии''; добавлены свойства линии для записи ''Поле контента цепочки (заголовок)'', ''Поле контента цепочки (коммутация)'', ''Поле контента линии''.<br />
* В компонент сценариев IVR [[Компоненты_сценариев_IVR#SwitchTask|Вход в задачу]] добавлено свойство ''Идентификатор оператора в переменную''.<br />
* В компонент [[Общие_компоненты_сценариев#UserState|Статус объекта]] добавлено свойство линии для записи: ''Разрешать FLASH'', позволяющее активировать функционал переключений для внешних линий.<br />
* В компонент сценариев IVR [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние]] добавлено свойство ''Идентификатор выбранной линии в переменную''.<br />
* Добавлена возможность переключения на номер перехвата с указанием дополнительного номера с помощью компонента [[Компоненты_сценариев_IVR#Switch|Переключение]].<br />
* В компоненты [[Общие_компоненты_сценариев#ExecProcess|Запуск процесса]] и [[Компоненты_сценариев_диалога#Внешнее приложение|Внешнее приложение]] добавлена возможность вывода консольного результата в переменную.<br />
* Реализован новый компонент служебных сценариев [[Компоненты_служебных_сценариев#Коммутатор|Коммутатор]], позволяющих произвольным способом осуществлять дозвон и коммутацию двух абонентов.<br />
* В компонент [[Общие_компоненты_сценариев#webrequest|WEB-запрос]] добавлена поддержка Digest-авторизации.<br />
* В компонент [[Общие_компоненты_сценариев#webrequest|WEB-запрос]] добавлена возможность указания дополнительных заголовков и дополнительных cookies.<br />
* В компоненты сценариев IVR [[Компоненты_сценариев_IVR#Switch|Переключение]] и [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние]] добавлена возможность указания/переопределения CallerName.<br />
* В компонент [[Общие_компоненты_сценариев#EmailSend|Отправка e-mail]] добавлена возможность задания аргументом логина и пароля.<br />
* Исправлена ошибка сохранения текстовых вложений принятой электронной почты в случае использования кодировки 7-bit, а также невозможность перезаписи вложений поверх существующих файлов.<br />
* Добавлен конфигурационный параметр ''[[Параметры файлов конфигурации#UseSimpleLineState|UseSimpleLineState]]'', позволяющий корректировать способ привязки состояний номерного плана к состояниям объектов.<br />
* Добавлен конфигурационнй параметр серверного и клиентского приложения ''[[Параметры файлов конфигурации#ADLoginChecker|ADLoginChecker]]'', позволяющий совместно с дополнительным приложением активировать вход в систему от учетных записей ActiveDirectory.<br />
* Исправлено воспроизведение файлов в клиентском приложении.<br />
* Исправлена ошибка АТС, связанная с подвисанием внутренних линий в резервированном состоянии при определенном стечени обстоятельств в call-центре при использовании оператора одновременно в Call-центре и в групповых номерах.<br />
* Добавлена возможность в [[Карта сети|карте сети]] при настройке шлюза без регистрации указывать отдельно Domain и SIP Proxy.<br />
* Исправлена ошибка в статистике в случае, если звонок участвует в нескольких задачах.<br />
* Добавлено отображение IP-адресов подключенных устройств в разделе [[Мониторинг#Линии|мониторинга линий]].<br />
* Реализована возможность отправки SMS и Email сообщений из модуля [[Передача_e-mail_и_SMS-сообщений|Телефон]] во время коммутаций. Отправка производится централизованно через [[Сценарии_АТС#SvcSendEmail|специальные сценарии]], задаваемые в разделе [[Системные_настройки|общих настроек]].<br />
* Онлайн-прослушивание разговоров снабжено по умолчанию функцией скрытия слушателя (слушатели не видят друг друга), если иное не установлено конфигурационным параметром [[Параметры файлов конфигурации#HideGhostMonitor|HideGhostMonitor]].<br />
* Исправлена ошибка АТС, связанная с обработкой HOLD в режиме использования сценария исходящей маршрутизации, влекущая в некоторых случаях прогрессирующее подвисание внешних линий.<br />
* Добавлена возможность хранения записей в MP3-формате, а также выбор формата для микшера в разделе [[Управление записями разговоров]].<br />
* Добавлена возможность совершать исходящие звонки на произвольный URI, используя транки шлюзов без регистрации.<br />
* Реализована предварительная функция [[Взаимосвязанная работа серверов Oktell|взаимодействия серверов Oktell между собой]] путем использования общих транков, а также службы обмена сообщениями об абонентах звонков и номерных планах.<br />
* Реализовано отображение состояний групповых номеров в разделе [[Сотрудники]].<br />
* Оптимизирован расчет [[Ресурсы|ресурсов]] при отображении нескольким супервизорам.<br />
* Обнаружена и исправлена редко-возникающая ошибка обработчика задачи, подвешивающая оператора в занятом состоянии вплоть до перезагрузки сервера.<br />
* Обнаружена и исправлена редко-возникающая ошибка АТС, подвешивающая линии в занятом состоянии вплоть до перезагрузки сервера.<br />
* Реализована внешняя служба/приложение туннельного доступа клиентов к БД мимо службы АТС в целях уменьшения объема пика используемой виртуальной памяти процессом сервера. Подробнее в описании [[Параметры_файлов_конфигурации#DbRemote|конфигурационных настроек]].<br />
* Существенно оптимизирован способ закачивания и скачивания больших файлов через веб-сервер.<br />
* Реализовано автоматическое применение установленного времени ожидания ответа абонента в компоненте [[Компоненты_служебных_сценариев#Call|Дозвон]] при наборе внешних номеров через [[Сценарии_АТС#SvcDialExt|служебный сценарий набора номера]] из задач и стандартных номеров в соответствии с исходным значением.<br />
* Реализовано хранение изображений пользователей на диске и в разных разрешениях для нужд веб-клиента.<br />
* В конфигурационный файл сервера добавлен параметр [[Параметры_файлов_конфигурации#GCCollectorPeriodMin|GCCollectorPeriodMin]], позволяющий регулировать период принудительного запуска сборщика мусора .NET.<br />
* Найден способ наладки счетчиков производительности в случае сбоя, влекущего невозможность работы .NET с процессами.<br />
* В качестве дополнительного параметра для [[Контрольные события|контрольного события]] ''Оператор пропустил вызов'' добавлен номер звонившего абонента.<br />
* Исправлена ошибка АТС, отбивающая SIP телефон, на котором был нажат HOLD.<br />
* Добавлена возможность изменять CalledId наравне с CallerId в сценарии [[Сценарии_АТС#SvcCallerIdModify|Преобразования CallerId]].<br />
* Исправлена ошибка, в некоторых случаях мешающая прослушать файл записи конференции, связанная с неверным именованием файла или отсутствием упакованного файла.<br />
* Реализована передача на [[файловый сервер]] информации о всех каталогах с записями разговоров, делающая возможным хранение записей на разных дисках. [[Параметры_файлов_конфигурации#FileServerRecDir|Подробно о необходимой настройке]].<br />
* Добавлена функция автоматического перевода оператора в состояние перерыва со служебным кодом 1003 при блокировке системы в случае, если он свободен. Если иное не установлено параметром конфигурационного файла клиентского приложения [[Параметры_файлов_конфигурации#AutoUserStateChangeOnSystemLock|AutoUserStateChangeOnSystemLock]].<br />
* Оптимизировано взаимодействие пользователей с сервером при большом количестве подключений.<br />
* Введен ряд новых параметров в конфигурационный файл сервера, позволяющий модифицировать стандартное выделение асинхронных потоков для различных служб сервера. [[Параметры_файлов_конфигурации#ThreadManagement|Подробнее]].<br />
* Повышен приоритет использования параметра CallerName, задаваемого в компоненте сценария IVR [[Компоненты_сценариев_IVR#Switch|Переключение]]. Обратное поведение доступно конфигурационным ключом [[Параметры_файлов_конфигурации#UsePriorSwitchCallername|UsePriorSwitchCallername]].<br />
* Для IP-телефонов в карте сети добавлен параметр, позволяющий индивидуально выставлять настройки транслитерации CallerName. В общие настройки добавлен параметр, задающий поведение по умолчанию.<br />
* Оптимизирована процедура сохранения результатов звонка по задаче. Значительный эффект достигается в случае большой нагруженности сервера БД, и большого количества учетных записей пользователей в системе.<br />
* Выявлен и устранен ряд проблем, влекущих торможение сервера при больших нагрузках.<br />
* Устранена ошибка АТС, добавляющая нагрузку к серверу при звонке на групповой номер, одним из абонентов которого является SIP-телефон в режиме DND.<br />
* Исправлена ошибка менеджера задач при использовании сценария поиска абонента, влекущая после неудачной попытки звонка в некоторых обстоятельствах застревание абонента в списке вплоть до перезапуска службы сервера.<br />
* Исправлена ошибка менеджера задач, влекущая застревание абонента в обработчике задачи при одновременном использовании переключения абонента на IVR, настройке выхода из задачи при переключении на IVR, а также сценария IVR вместо отбоя.<br />
* Реализовано отображение новостей администраторам Oktell в статусной строке клиентского приложения. Может быть отключено в общих настройках для всех или индивидуально в конфигурационном файле клиентского приложения.<br />
* Обнаружена и исправлена ошибка, мешающая сохранению поля ICode в пространственной таблице oktell_cc_temp.dbo.A_Cube_CC_OperatorStates в случае, если оператор переходит в перерыв во время звонка.<br />
* Обнаружена и устранена проблема подключения VoIP каналов к системе в случае массового логина. Симптом: некоторые пользователи находятся в состоянии ''без телефона'' вплоть до повторного перезапуска клиентского приложения.<br />
* Изменено поведение [[Телефон|Телефона]] в части набора номера. Теперь набор осуществляется в поле для ввода с последующей разовой отправкой на сервер по нажатию на кнопку ''Набрать''. Подробное поведение, а также способы настройки и возврата прежнего поведения приведены в описании конфигурационного параметра [[Параметры_файлов_конфигурации#PhoneDirectDigit|PhoneDirectDigit]].<br />
* Исправлена ошибка менеджера задач, влекущая в редких случаях проставление в статистике статуса N/A в качестве результата звонка.<br />
* Добавлена функция мониторинга сервером таблицы пользовательских сообщений в БД (A_UserMessages) и рассылка сообщений пользователям при появлении новых. Подробнее в описании конфигурационного параметра [[Параметры_файлов_конфигурации#UserMessageCheckPeriodSec|UserMessageCheckPeriodSec]]<br />
* Реализована возможность автоматического отключения фильтра адресов для SIP-пакетов в соответствии со значением параметра конфигурационного файла [[Параметры_файлов_конфигурации#EnableSipTransportFilter|EnableSipTransportFilter]].<br />
* Реализована возможность подключения внешних [[Таблицы абонентов#ExtTables|таблиц абонентов]] непосредственно из других источников данных, минуя [[Подключение внешних БД|линковку]].<br />
* Изменено значение таймаута для исполнения SQL-запросов из плагинов с 30 секунд до 10 минут, а также добавлен параметр серверного конфигурационного файла DBPluginCommandTimeoutSec для управления этим значением.<br />
* Исправлена ошибка АТС, связанная с использованием стандартных номеров, включающих набор нескольких внешних номеров, влекущая при определенных обстоятельствах подвисание внешних линий в состоянии занятости до разрыва вручную.<br />
* Реализован учет выставленного, но еще не примененного состояния ''Перерыв'' при совершении звонков внутри АТС. Ранее учитывалось только при звонках из задач.<br />
* Исправлена ошибка автодозвона, подставляющая при звонке на внутренний номер в качестве CallerId всегда номера 101.<br />
* Модифицирована процедура периодического подтверждения активаций. Ранее была возможна ситуация, когда добавление нового дополнительного винчестера влекло изменение активационного кода привязки и требовалась переактивация вручную, связанная с выяснением пароля. При этом при прохождении подтверждения вручную в качестве кода активации используется прежний, а при прохождении переактивации вручную, код изменяется на текущий актуальный.<br />
* Управление настройками веб-сервера перенесено в раздел [[Настройки_веб-сервера|общих настроек]], включая порт, пароли доступа, а также способ авторизации. По умолчанию служба отключена.<br />
* Расширена функция ''[[Серверный HTTP интерфейс#upload|upload]]'' веб-сервера, позволяющая теперь указывать место размещения файла и способ обработки.<br />
* [[Серверный HTTP интерфейс]] пополнен функциями ''[[Серверный HTTP интерфейс#getavatar|getavatar]]'', ''[[Серверный HTTP интерфейс#getversion|getversion]]'', ''[[Серверный HTTP интерфейс#getsharedfile|getsharedfile]]'', ''[[Серверный HTTP интерфейс#download|download/files]]'', ''[[Серверный HTTP интерфейс#gettotalqueueinfo|gettotalqueueinfo]]''.<br />
* [[Клиентский HTTP интерфейс]] пополнен функцией ''[[Клиентский HTTP интерфейс#pbxstatplaybyidconn|pbxstatplaybyidconn]]''.<br />
* Расширен интерфейс [[Oktell_Web-Socket_Protocol|Web-Socket протокола]].<br />
* Реализован веб-плагин [http://js.oktell.ru oktell.js].<br />
* Реализована поддержка работы сервера за NAT с прямым пробросом портов по SIP-протоколу. Подробнее в разделе [[Настройки SIP-модуля]].<br />
* Выявлен и исправлен ряд проблем в аппаратной подсистеме обслуживания VoIP каналов, связанных с нестабильностью массового подключения и подвисания в занятом состоянии.<br />
* Существенно оптимизирован алгоритм микшера конференции.<br />
* Устранена незначительная утечка памяти в Subscribe-Notify модуле.<br />
* Выявлены и исправлены ошибки разного характера в SIP подсистеме, добавлены некоторые дополнительные параметры настройки. Подробнее в разделе [[Настройки SIP-модуля]].<br />
<br />
<br />
<br />
====версия 2.7 (28.03.2012)====<br />
<br />
* Добавлены функции управления конференциями в ядро клиентского приложения.<br />
* Произведена существенная оптимизация процесса перезагрузки сервера состояний. Обнаружены и устранены лишние устаревшие операции в БД.<br />
* Исправлена ошибка удаления пользователей после перезапуска сервера состояний при работе через веб-сокет.<br />
* Реализовано адекватное отсоединение веб-сокет пользователей по инициативе сервера.<br />
* Оптимизирована работа функции ping с клиентских приложений на сервер, имеющая целью стабилизировать поведение системы при нехватке ресурсов.<br />
* Оптимизировано сетевое взаимодействие между узлами системы в целях экономии асинхронных обработчиков.<br />
* Реализована запись лог-журналов на диск/в сеть через асинхронную очередь, не влияющую на приостановку работы системы из-за занятости дискового ресурса.<br />
* Исправлена ошибка в синхронизации абонентского списка с кэшем в памяти, возникшая после перевода процедуры сохранения результата звонка по задаче в асинхронный режим. Связана со звонком одному и тому же абоненту несколько раз при получении успешного результата.<br />
* Добавлена авторегулировка нагрузки менеджера задач по исходящим кампаниям в зависимости от загрузки системы и БД.<br />
* Оптимизирована функция сервера состояний поиска свободных внешних линий для менеджера задач.<br />
* Обнаружена и исправлена ошибка совместного доступа к конференции, влекущая невозможность завершить конференцию.<br />
* Рассылка событий из конференций выведена в асинхронную очередь рассылки в целях ускорения работы конференций с большим количеством участников.<br />
* В интерфейс веб-сокета добавлены методы getmyuserinfo, setusertextmessageviewed, событие usertextmessageviewed. Изменен метод sendusertextmessage.<br />
* В реализации веб-сокета обнаружена и исправлена ошибка с отправкой multiframe-сообщений.<br />
* При отмене вызова на гарнитуру клиентского приложения не сбрасывался таймер автоматического снятия трубки. Исправлено.<br />
* Исправлена ошибка входа в конференцию через сценарий. В случае, если разрыв линии происходит до окончания входа, конференция блокируется на 5 секунд. Массовый доступ в такую конференцию вызывает цепную реакцию и как следствие длительную блокировку всего сервера.<br />
* В компонент «Числовое воспроизведение» добавлено воспроизведение евроцентов.<br />
* Обнаружена и устранена фиксация пропущенных звонков при звонке через автодозвон.<br />
* Пароль пользователя с символами [, ], # заменялся пустым. Исправлено.<br />
* Изменен режим доступа к веб-камере. Добавлена возможность настройки разрешения и битрейта при работе с камерой.<br />
* В компонент «Статус объекта» добавлены функции, возвращающие количество занятых задачей линий, линий участвующих в разговоре по задаче. <br />
* В компонент «Статус объекта» добавлены функции очистки оперативной статистики задач, принудительной синхронизации таблицы абонентов. <br />
* Восстановлена сортировка в выпадающих списках клиентского приложения.<br />
* В компонент «Воспроизведение числа» добавлена возможность выбора языкового алгоритма (русский, английский, украинский, чешский).<br />
* Компонент «Воспроизведение числа» получил возможность воспроизведения англоязычных порядковых числительных.<br />
* Добавлена возможность указания дополнительных номеров, привязанных к sip-потокам (учетным записям), на которые осуществляется адресация INVITE пакетов от SIP-провайдера.<br />
<br />
<br />
<br />
====версия 2.7 (15.02.2012)====<br />
<br />
* Устранена утечка памяти в сессиях при отбое входящих звонков.<br />
* Исправлена невозможность отжатия кнопки «Хочу сказать» в селекторном совещании.<br />
* Добавлена возможность настраивать прерывание воспроизведения компонентом «Числовое воспроизведение».<br />
* Обнаружена и устранена невозможность сохранить дату окончания работы текстовой задачи.<br />
* Обнаружена и устранена ошибка, влекущая неполноценную очистку после работы компонента «Действие web-crm».<br />
* Реализован режим вызова «Интерком» на внешние и внутренние sip-каналы. Добавлены соответствующие настройки в компоненты «Переключение», «Переключение на внешние», «Дозвон».<br />
* Оптимизирована рассылка событий о смене состояний внутренних номеров по клиентским приложениям, а также менеджера задач в целях экономии асинхронных обработчиков.<br />
* Добавлена реализация протокола веб-сокет версии 13 согласно RFC6455.<br />
<br />
<br />
====версия 2.6 (31.12.2011)====<br />
<br />
* Реализовано сохранение сессии между сценариями набора номера и обработки результата звонка по задаче в случае, если звонок неудачен был.<br />
* В HAL.SIP отправлялось пустое значение поля realm в ответе 401.<br />
* Добавлены алиасы для шлюзов при настройке в карте сети для обработки случая входящих звонков с альтернативных серверов при регистрации на основном.<br />
* При поиске номера в АТС лексикографическая сортировка заменена на числовую.<br />
* Устранен разрыв соединения при вызове метода веб-сервера «setbusyinexternaltask» со значением «0».<br />
* При перезагрузке аппаратного модуля на сервере состояний не обновлялись коды для привязки вновь регистрирующихся VOIP устройств. Исправлено.<br />
* Из ответа веб-сервера удалены концевые символы \r\n, подмешивающиеся и мешающие организовывать второй запрос в рамках подключения.<br />
* Скорректирована работа таймеров в HAL.<br />
* Исправлена ошибка отображения в клиентском модуле «Администрирование.Права».<br />
* В веб-сервер добавлен метод upload для закачки файлов.<br />
* Исправлена ошибка менеджера БД при организации запросов к полям таблицы абонентов, если таблица со связями (constraint). Симптом: возвращается пустое значение.<br />
* Исправлена ошибка в HAL.SIP при завершении SUBSCRIBE-сессии. Ведет к исключению по неверному доступу к памяти и невозможности продолжения работы аппаратного модуля.<br />
* Исправлена ошибка в компоненте «Запуск процесса» в режиме ожидания выхода. Симптом: если процесс выполняется достаточно долго, компонент вешает сценарий до ручного разрыва.<br />
* Налажено обращение к строковым полям БД при исполнении запросов из сценариев через кодировку Unicode.<br />
* Веб-сокет получил возможность работать непосредственно с браузерами. Введен режим «Браузеры к октелл» для подключения web-crm без собственного web-socket сервера.<br />
* Добавлена поддержка версии 8 в веб-сокет.<br />
* В протокол веб-сокета добавлен метод execpredefineddbstoredproc для прямого исполнения разрешенных конфигом веб-сокета процедур в БД.<br />
* Добавлена настройка в клиентский конфигурационный файл HeadsetNonACMMode для выбора режима звонка без использования автодозвона.<br />
* Исправлено воспроизведение порядковых числительных. Симптом: вместо среднего и женского родов воспроизводился мужской.<br />
* В клиентский веб-интерфейс добавлены методы flashcall, getcurrentuserlogin, getcurrentserveraddress.<br />
* Исправлена ошибка автодозвона при звонке внутри АТС на несуществующий номер. Симптом: линия подвисает в состоянии reserved.<br />
* Реализовано автоматическое создание направления «Все линии».<br />
* Существенно оптимизирована работа с БД в нагруженных проектах за счет организации очередей по направлениям: статистика коммутаций, состояния пользователей, диалоговые сценарии, результаты звонков и попыток, уведомления пользователям.<br />
* Обнаружена и устранена ошибка АТС, ведущая к некорректному завершению исходящего звонка по SIP при моментальном обрыве после начала вызова. <br />
* Оптимизирован массовый запрос на получение статистики рабочего места оператора. Устранена проблема нехватки потоков на обработку клиентских запросов из-за длительного исполнения запроса в БД.<br />
* В интерфейс веб-сокета добавлены методы getflashedabonentinfo, getversion, pbxclearflash, getextendedlineinfo. В запрос login добавлено свойство showid.<br />
* Исправлена процедура авторизации на веб-сокет сервере при использовании русских букв в логине.<br />
* Исправлена процедура хендшейка к веб-сокет серверу. Симптом: при наличии в HTTP запросе дополнительных полей и дополнительных значений в стандартных полях, хендшейк не производился.<br />
* Изменена процедура рисования динамических линий при связи объектов в сценариях и карте сети для более быстрой работы в win7-aero.<br />
* Исправлена ошибка при открытии диалоговых сценариев, сохраненных в версиях до 10.08.2010, при использовании в них переменных с односимвольными именами.<br />
* Добавлен параметр серверного конфигурационного файла TaskListAbonentUseLikeNumber, позволяющий активировать поиск абонентской строчки в таблице с фильтром "number like '%x%'". По умолчанию «0» и поиск осуществляется только по идентификатору абонента.<br />
* Обнаружена и устранена проблема в АТС, влекущая идентичность сессий у двух разных звонков, осуществивших дозвон на одну внутреннюю линию.<br />
* Реализована возможность записи лог-журналов и файлов записей коммутаций и конференций на удаленный сервер в целях снижения нагрузки на локальный диск. Требуется указание в конфигурационном файле сервера ключей FileServer_Log и/или FileServer_Record со значениями в формате "address:port", а также активность на указанном сервере специальной службы октелл-файл-сервера.<br />
* В настройку компонента служебного сценария «Дозвон» добавлена возможность указывать callerid и callername для внутренних и внешних вызовов.<br />
* Проведена корректирующая работа над доступом к критической секции сервера состояний. Симптом: замечены случаи зависания системы на несколько минут или вообще с невозможностью продолжения всяческой деятельности: звонков, авторизаций, и т.д.<br />
* Реализован режим видео-конференций.<br />
<br />
<br />
====версия 2.6 (14.09.2011)====<br />
<br />
* Исправлена проблема несохранения принятых файлов факса в случае, если произошел разрыв связи.<br />
* Скорректирована адресация в пакетах sip NOTIFY для поддержки работы телефонов LinkSys.<br />
* Исправлена ошибка обработчика входящей задачи, связанная с удалением правила распределения звонка на операторов при деактивации и перезагрузке сервера состояний.<br />
* Исправлена ошибка менеджера задач в режиме персонального вывода абонента из очереди на оператора. Симптом: несколько звонков поступали на одного оператора, и только один успешный, остальные отбивались сразу.<br />
* Исправлено отображение модуля софт-телефон в режиме входящего вызова. Симптом: если в очереди несколько абонентов, информация не изменяется при смене вызывающего.<br />
* Исправлена проблема HAL.SIP при обработке встречных BYE и reINVITE. Симптом: изредка возникает исключение, требующее перезапуска аппаратного модуля.<br />
* Исправлена проблема HAL.VOIP, связанная с отвалом устройства в состоянии HookUp и требующая перезагрузки аппаратного модуля.<br />
* Исправлена проблема с отправкой Keep-Alive пакетов с сервера.<br />
* Добавлена сортировка IP-телефонов в параметрах аппаратуры по названиям.<br />
* Исправлена ошибка начальной инициализации. Симптом: при добавлении в карту сети новых устройств с регистрацией сразу принимают готовое состояние.<br />
* Исправлена иногда возникавшая ошибка HAL.SIP при разрыве sip-соединения, требующая перезагрузки аппаратного модуля.<br />
* Устранена постоянная перезагрузка клиентского устройства после перезапуска аппаратного модуля на сервере.<br />
* Исправлена ошибка HAL.SIP, связанная с регистрацией каналов на внешнем шлюзе до инициализации сетевого канала.<br />
* Исправлена ошибка при логине пользователя, возникающая в случае регистрации с той же под другим именем, когда предыдущий отвалился, но еще не обработан сервером.<br />
* При автодозвоне через сценарий набора номера отсутствует информация о вызывающем в уведомлении. Исправлено.<br />
* В карту сети добавлен режим генерации паролей для телефонов.<br />
* В компонент «Статус объекта» добавлена функция мягкого сброса, переводящая линию в «Сценарий вместо отбоя».<br />
* Если в компоненте «Действие web-crm» не назначена ветка «Переход, ошибка», а компонент неудачен, сценарий обрывался. Исправлено.<br />
* Реализовано преобразование отправляемых с клиента по факсу данных в единый tiff-документ с использованием Office.COM. Требуется .NET framework 3.0 и установленный Microsoft Office 2003 или выше, а также установленный XPS принтер. Для работы в этом режиме необходимо в конфигурационном файле клиентского приложения изменить значение ключа «FaxPreperformProcess» на «1».<br />
* В клиентский веб-сервер добавлена поддержка метода setbusyexternaltask.<br />
* Исправлена ошибка при удалении доминирующей роли в модуле «Администрирование.Пользователи».<br />
* Обнаружена и исправлена блокировка в HAL.SIP.<br />
* Исправлена ошибка отсутствующего звука после FLASH из сценария IVR с воспроизведением в конференцию.<br />
* Отключенная линия могла использоваться при исходящих звонках в некоторых режимах. Исправлено.<br />
* Исправлена ошибка затирания кода линии в хранилище сервера состояний после сохранения карты сети.<br />
* Исправлен ряд проблем HAL.SIP при анализе некорректных сообщений: длинных или кривых значений, отсутствующих полей.<br />
* Исправлен ряд проблем HAL.SIP при нестандартном поведении ответной стороны, связанной с тестами реакции на некорректное поведение.<br />
* Реализована более полная проверка на валидность входящего sip-пакета.<br />
* Добавлен метод веб-сервера execsvcscriptplain для исполнения сценариев и возврата HTML/XML-ответа в прямом необернутом виде.<br />
* HAL.SIP обучен отвечать 481 в ответ на кривые CANCEL вместо прежнего 405.<br />
* Sip ответ 487 заменен на 480.<br />
* Снижено минимальное значение периода перерегистрации с 60 до 30 секунд.<br />
* Исправлен поиск сценария IVR при запуске проектного фонового сценария из другого сценария.<br />
* Исправлена ошибка АТС, приводящая в некоторых случаях к некорректному сбросу таймера отбоя. Симптом: канал подвисает до разрыва вручную.<br />
* Обнаружена и исправлена ошибка при одновременном запуске и остановке канала.<br />
* Добавлено ограничение на количество одновременно работающих асинхронных потоков по направлениям работы.<br />
* Оптимизирована схема отправки событий с сервера на клиентов.<br />
* В веб-сервер добавлен метод wp_setuserstate.<br />
* Устранен некорректный сброс настройки keep-alive после сохранения карты сети.<br />
* В компонент «Статус объекта» добавлены определяющие действия для элемента «Пользователь»: ид, имя, логин, линия, для элемента «Линия»: ид, номер, код, пользователь, цепочка(сессия).<br />
<br />
<br />
====версия 2.6 (25.07.2011)====<br />
<br />
* В модуле [[Мои контакты|«Офис. Контакты»]] введен запрет на создание типов контактов с одинаковыми именами.<br />
* Изменен механизм рассылки сообщений из конференции по клиентским рабочим местам. <br />
* В ролевую политику добавлен ряд новых привилегий, разграничивающих права доступа к отдельным модулям в<br />
* Исправлена ошибка при работе компонента IVR [[Компоненты сценариев IVR#Переключение на номер|Переключение]]. Симптом: при запрете использования очереди в настройке компонента после завершения периода прямого начального вызова свободных абонентов вызов прекращается, но вызывающий абонент продолжает слышать КПВ.<br />
* Введен режим запрета редактирования параметров системы в разделе администрирования. Подробнее [[Настройка клиентского приложения#BlockAdmin|в описании]].<br />
* Обнаружена и устранена возможная проблема в операции сохранения [[Карта сети|карты сети]]. Симптом: при большом количестве сохраняемых SIP-объектов возможна потеря части настроек аппаратуры при последующем перезапуске.<br />
* Реализована поддержка протокола web-socket для взаимодействия с Web-CRM системами. Подробно об интеграционной архитектуре и протоколе в разделе [[Oktell Web-Socket Protocol||«Интеграции. Web-Socket протокол»]]. Подробно о настройках в разделе [[Интеграция с Web-Socket CRM|«Общие настройки. Интеграция с Web-Socket CRM»]]. Подробно о настройке динамических вызовов в описании компонента сценариев [[Общие компоненты сценариев#Действие/карточка в plugin или WebCRM|«Действие/карточка в plugin или WebCRM»]].<br />
* Добавлен компонент [[Общие компоненты сценариев#Действие/карточка в plugin или WebCRM|«Действие/карточка в plugin или WebCRM»]].<br />
* В HAL.SIP реализована отправка 481 на запрос BYE, если нет сессии и транзакции или ранее произведена встречная отправка BYE.<br />
* В список параметров аппаратуры вынесены настройки для режима ECM софт-факса.<br />
* В список [[Выражения|функций выражений]] сценариев добавлены urlencode, urldecode, b64encode, b64decode, urlencodeUtf8, urldecodeUtf8, b64encodeUtf8, b64decodeUtf8.<br />
* Исправлена ошибка, в связи с которой не сохранялся указанный в служебной задаче стартовый параметр для сценария.<br />
* Устранены визуальные глюки в окне пользовательских сообщений встроенного чата: смещение вкладок, признак просмотренности, проблемы со сворачиванием/разворачиванием в win7.<br />
* Реализована кольцевая схема выделения медиа-портов для RTP сессий. В целях борьбы с подвисающими на некоторое время внешними устройствами-шлюзами, атакующими порты сервера Oktell с неактуальными данными.<br />
* Добавлено ограничение на возврат 1000 строк в журналы звонков, где раньше ограничение отсутствовало.<br />
* Исправлена ошибка при отправке тестового e-mail из раздела [[Настройки E-mail|общих настроек]].<br />
* Оптимизирована операция загрузки списка операторов в модуле ''[[Операторы|«Call-центр. Операторы»]]''.<br />
* Добавлена возможность заносить информацию в лог-журнал Common из компонента ''[[Общие компоненты сценариев#Уведомление|«Уведомление»]]'' сценариев.<br />
* Исправлена проблема, делающая возможным отображение одинаковых веб-форм у разных операторов, обслуживающих разные вызовы, но открывающих формы в один момент времени.<br />
* Добавлена http-функция скачивания файлов записей с веб-сервера Oktell по ссылкам в журналах разговоров, отправляемых через web-socket подключение. Подробнее в разделе [[Серверный HTTP интерфейс|методов веб-сервера]].<br />
* В интерфейс веб-сервера службы добавлен ряд http-функций управления звонком из доверенного веб-сервера от имени авторизованных пользователей по указанию ключа рабочего места, пользователя или линии. Подробнее в разделе [[Серверный HTTP интерфейс|методов веб-сервера]].<br />
* Реализована поддержка авторизации пользователей через web-socket протокол с привязкой к рабочим местам.<br />
* Реализована настройка, позволяющая активировать соединение внешней линии с IVR сценарием вместо отбоя при разрыве связи по инициативе сервера. Подробнее [[Параметры АТС#ScrInsteadBusy|в описании]].<br />
* Проведена работа над обнаруженными ошибками в реализации клиент-серверного протокола oktcp. В частности устранена причина утечки памяти.<br />
* Добавлена возможность делить карту на слои, упрощая визуальное отображение.<br />
* Добавлена настройка в параметры аппаратуры, позволяющая указывать caller-id в поле From отправляемых INVITE-пакетов.<br />
* В интерфейс веб-сервера клиентского приложения добавлен ряд http-функций управления звонком и карточкой диалогового сценария. Подробнее в разделе [[Клиентский интерфейс|методов веб-сервера]].<br />
* Запущен сервер сбора статистических данных с обновленных систем в целях выявления проблем. Режим включается/отключается в [[Информация о лицензиях#AllowSendStat|общих настройках]].<br />
* Справка перенесена в онлайн.<br />
* Обнаружена и исправлена ошибка обработки серверных сообщений, связанная с перемешиванием их последовательности.<br />
* Добавлена функция getcurrentuserid в интерфейс метода OnQuery plugin-программ. Подробнее в руководстве по интеграции.<br />
* Добавлена возможность множественного выделения узлов в дереве [[Настройки оборудования|параметров аппаратуры]] стандартным образом кнопкой SHIFT.<br />
* Добавлен параметр серверного конфигурационного файла [[Параметры файлов конфигурации#FORCE_BRACKETS_FOR_URI|FORCE_BRACKETS_FOR_URI]] для расстановки в SIP пакеты треугольных скобок в заголовки To и From.<br />
* Обнаружены и исправлены визуальные проблемы в отображении формы отправки межпользовательских сообщений, стоп-формы, софт-телефона в некоторых режимах.<br />
* В интерфейс клиентского веб-сервера добавлены команды headsetanswercall, disconnectcall, declinecall по работе с текущим звонком. Подробнее в разделе [[Клиентский интерфейс|методов веб-сервера]].<br />
* Реализована возможность использовать плагины, запущенные в [[Внешние модули#LoadMode|отдельных процессах]].<br />
* Исправлена ошибка АТС в работе Flash-перключения в редкой ситуации при специфических условиях. Симптом: заблокировалась линия, пользователь не может переподключиться.<br />
* Добавлена возможность корректировать громкость сигнала софт-факса в каналах CTI (Alder, Synway) из модуля [[Настройки оборудования|параметров аппаратуры]].<br />
* Добавлена возможность фиксировать в лог журналах значения [[Управление сервером#PerformanceCounters|счетчиков производительности]].<br />
* Компонент сценариев [[Общие компоненты сценариев#Запуск процесса|«Запуск процесса»]] получил возможность дожидаться завершения запущенного процесса (с возможностью установки таймаута и принудительного завершения).<br />
* В компоненте сценариев IVR [[Компоненты сценариев IVR#Запись звукового файла|«Запись»]] реализован выбор формата и кодека, в который производить запись.<br />
* Настроена и протестирована работа сервиса распознавания речи, записанной в сценарии.<br />
* Обнаружена и устранена причина заметного торможения при сохранении объемных карт сети.<br />
* В компонент сценариев [[Общие компоненты сценариев#Статус объекта|«Статус объекта»]] добавлены функции линии: текущая позиция в очереди, расчетное оставшееся время ожидания в секундах.<br />
* В компонент сценариев [[Общие компоненты сценариев#Статус объекта|«Статус объекта»]] добавлена функция сервера: обновить список задач.<br />
* Для более корректного определения адреса удаленного SIP-устройства в [[Настройки оборудования|параметры аппаратуры]] вынесена явная настройка для SIP-потоков, устанавливающая в качестве адреса обратный адрес отправителя или адрес контакта из SIP-пакета. Ранее определение велось автоматически, но существовал целый спектр условий, при которых возникала путаница и отправляемые пакеты не доходили до адресата.<br />
* Реализована возможность flash-перевода на сценарий IVR без перезапуска последнего, а путем подменой линии. Введена [[Сценарии IVR#VarFlash|служебная переменная]], определяющая режим, а также новый тип системного IVR сценария [[Параметры АТС#ScrFlash|маршрутизации при переводе]], единственный, где режим перевода с подменой по умолчанию установлен.<br />
* Добавлена возможность строить глубокое дерево отделов в модуле «Сотрудники». Для этого отделы необходимо именовать с разделителем (символ «.»), а также в конфигурационных файлах клиентских приложений установить значение «1» для ключа [[Параметры файлов конфигурации#SplitDepartmentsTreeByDot|«SplitDepartmentsTreeByDot»]].<br />
* Реализована возможность добавления участников в конференцию непосредственно в модуле управления в [[Конференц-связь|софт-телефоне]].<br />
* Изменен принцип поведения АТС при переключении с IP-телефонов. Коснулось отмены консультационного звонка и возврата к абоненту. Ранее кнопка «Отмена» на IP-телефоне производила соединение двух абонентов, сейчас производится отбой второго и возврат к режиму HOLD с удержанием первого.<br />
* Исправлен ряд мелких недочетов в различных модулях системы.<br />
* В течение нескольких месяцев проводилась работа над обнаруженными редко возникающими ошибками в медиа-ядре, в алгоритме работы с джиттер-буфером, в работе клиентских телефонных устройств.<br />
<br />
<br />
<br />
====версия 2.5 (03.12.2010)====<br />
<br />
* Модифицирован алгоритм разбора электронной почты, полученной по протоколу POP3. Реализована поддержка multipart/alternative, вложенных сообщений message/rfc822, в компонент сценария добавлено [[Общие компоненты сценариев#Прием входящего сообщения электронной почты|свойство]], позволяющее устанавливливать предпочитаемый тип контента (text/plain, text/html, text/xml и другие). <br />
* Реализован альтернативный стандартному режим вывода абонентов из очереди входящей задачи при освобождении операторов. В настройках задачи можно выбрать между стандартным конкурентным режимом и режимом с однократным индивидуальным распределением. Подробнее в [[Голосовые задачи#Дополнительно|описании свойства задачи]]. <br />
* В веб-интерфейс клиентского приложения добавлен метод [[Клиентский интерфейс|getcurrentcallinfo]]. <br />
* При исходящих звонках через SIP-шлюз без регистрации при формировании поля From организовано применение адреса локальной машины взамен указываемого ранее адреса шлюза. <br />
* По аналогии с очисткой статистики звонков реализовано удаление статистики и записей конференций. <br />
* Произведена несущественная модификация в организации транзакций с MS SQL SERVER, позволяющая активировать пул подключений. И при этом использовать прилинкованные базы данные, не поддерживающие усиление транзакций. <br />
* Исправлена ошибка в алгоритме перезвона строго в назначенное время. <br />
* Исправлена ошибка в обработчике каналов Yeastar E1. Симптом: у разных подряд идущих звонков одинаковые идентификаторы сессий. <br />
* Исправлена ошибка, делающая невозможным установить свойство задачи с помощью компонента сценариев [[Общие компоненты сценариев#Статус объекта|Статус объекта]] с помощью указания задачи по ключу.</div>Peter%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9._%D0%9D%D0%BE%D0%B2%D1%8B%D0%B5_%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8История обновлений. Новые возможности2014-06-30T12:33:47Z<p>Peter: </p>
<hr />
<div>[[Дополнительно|Наверх]]<br />
<br />
<br />
__TOC__<br />
<br />
<br />
<br />
====Новые возможности 2.11 (1.07.2014)====<br />
<br />
<br />
* Реализован сервис расчета и сохранения [[Управление базами данных#VoiceMap|карты владения разговором]] его участниками. Включается в разделе управления БД модуля общих настроек. Достаточно затратный и требует дополнительных ресурсов.<br />
* Реализовано [[Голосовые задачи#skills|использование операторских «скиллов»]] в исходящих задачах без закрепления абонентов за операторами. Для каждого оператора с помощью тегов задается [[Операторы#skills|набор скиллов, которыми он обладает]]. В таблице абонентов для каждого абонента с помощью [[Таблицы абонентов#skills|тегов]] фиксируется набор одновременно требуемых скиллов. В итоге абоненты соединяются с теми операторами, которые обладают одновременно всеми требуемыми скиллами. В качестве примера можно рассмотреть случай требования для абонентов разных разговорных языков от операторов - для одних клиентов русский, для других национальный язык.<br />
* Реализована возможность обработки изменения учетных записей пользователей в служебном сценарии. [[Сценарии_АТС#SvcUserChanged|Подробнее]].<br />
* Реализована возможность обработки смены основных состояний пользователей в служебном сценарии (например вход и выход из системы). [[Сценарии_АТС#SvcUserStateChanged|Подробнее]].<br />
* Реализована возможность осуществления авторизации во внешних системах с помощью служебного сценария (возвращающего реальные учетные данные). [[Сценарии_АТС#SvcUserLogin|Подробнее]].<br />
* Реализован новый компонент сценариев [[Компоненты_сценариев_IVR#Recognize|Распознавание речи]], работающий с помощью сервиса ''Яндекс.SpeechKit''. Компонент существует в служебных сценариях для распознавания готового PCM-файла, и в IVR сценариях для записи и одновременного ускоренного распознавания с возможностью ввода DTMF-символов с клавиатуры. В раздел [[Настройки_распознавания|«Распознавание речи Яндекс»]] общих настроек должны быть введены ключи доступа к сервису.<br />
* В компонент сценариев ''[[Общие_компоненты_сценариев#UserState|Статус объекта]]'' добавлена возможность определения внутреннего номера для пользователя или линии.<br />
* В компонент сценариев ''[[Общие_компоненты_сценариев#UserState|Статус объекта]]'' добавлены функции определения состояния пользователя в КЦ, ручной режим, перерыв, переадресация, а также скилл-тэги.<br />
* В компонент сценариев ''[[Общие_компоненты_сценариев#UserState|Статус объекта]]'' добавлена отладочная функция полного подсчета всех объектов .NET с формированием файла статистики.<br />
* Реализовано размещение в БД информации о забаненных SIP-адресах с возможностью вывода из фильтра с помощью компонента сценариев ''[[Общие_компоненты_сценариев#UserState|Статус объекта]]''.<br />
* Компонент сценариев ''[[Общие_компоненты_сценариев#Parser|Парсер текста]]'' обучен вырезать данные из блока CDATA в XML.<br />
* В компоненте IVR сценариев ''[[Компоненты_сценариев_IVR#SwitchProject|Вход в проект]]'' добавлена возможность задавать проект через аргумент.<br />
* Компонент IVR сценариев ''[[Компоненты_сценариев_IVR#PlayNumber|Воспроизведение числа]]'' пополнился режимом воспроизведения времени без нулей в конце/в начале.<br />
* Реализована поддержка SSL при [[Общие_компоненты_сценариев#EmailReceive|получении почты]]'' по протоколам POP и IMAP.<br />
* Добавлена функция ''[[Выражения#Translit|Translit]]'' в выражения сценариев.<br />
* Добавлена возможность увеличения размерности номеров линий с 3 до 4 цифр. Может быть использовано в проектах с более чем 1000 линий одного типа. Включается конфигурационным ключом сервера ''[[Параметры_файлов_конфигурации#Use4xLineNumbers|Use4xLineNumbers]]''<br />
* [[Линии#Направления|Команды направления]] расширены с помощью служебного символа «^». Цифра, перед которой установлен символ, удаляется из набора. Может использоваться для формирования в статистике совершенно иного номера, отличного от набираемого, или изменять 8 на +7. ''Пример: +7{^89050213951} - в набор будет отправлено +79050213951, а в статистику попадет 89050213951''.<br />
* Добавлен новый тип [[Контрольные события|контрольного события]] для отслеживания неснятия трубки оператором в задаче.<br />
* Реализована возможность [[Настройки_Call-центра#SvcSupervisorHelp|запроса помощи супервизора через служебный сценарий]] (1 парам - ид оператора, 2-ид задачи, если сейчас в задаче обслуживает).<br />
* По многочисленным просьбам [[Голосовые задачи#QueueTimeout|ограничение времени нахождения в очередях]] входящих задач стало задаваться в секундах (ранее в минутах).<br />
* Добавлена настройка задачи [[Голосовые задачи#PostTimeout|«Максимальное время поствызывной обработки»]], позволяющее автоматически завершить задачу при превышении оператором времени заполнения диалоговых и стоп-форм после завершения разговора с абонентом.<br />
* Добавлена возможность использования [[Голосовые задачи#ScriptQuery|диалогового сценария запроса на дозвон]] для задач с закреплением абонента за оператором и задач с поиском абонента для оператора через сценарий.<br />
* В модуле [[Таблицы абонентов]] разрешено создание локальных таблиц абонентов на базе существующих в БД таблиц с данными.<br />
* Реализована функция перехвата звонка из модуля [[Сотрудники]] клиентского приложения с помощью команд контекстного меню.<br />
* Задействована проверка прав на воспроизведение, скачивание записей и установку комментариев в модуле [[Мои звонки]]. Применяются привилегии установленные для модуля [[Статистика АТС]].<br />
* В трей [[Сокращенное_рабочее_место|мини-окна]] клиентского приложения добавлена кнопка вызова супервизора.<br />
* Выявлены завалы при работе модуля [[Мое рабочее место]] в части осуществления сложных запросов на сервер по таймеру. Произведена оптимизация.<br />
* Повышена эффективность выставления приоритетов исходящим задачам в части задач с закреплением абонентов за операторами. Ранее несмотря на высокий приоритет задач этого типа эффективность работы по ним оставалась низкой в условиях конкурирующего использования операторов другими задачами.<br />
* Реализована возможность отправки SIP-заголовоков ''P-Asserted-Identity'' и ''Remote-Party-ID'' в ответ на входящие звонки от внутренних телефонов. Включается серверным конфигурационным ключом ''[[Параметры_файлов_конфигурации#UseAssertedIdentity|UseAssertedIdentity]]''.<br />
* Реализована возможность совершения [[Компоненты_сценариев_IVR#SwitchExt|внешних вызовов]] на шлюзы с регистрацией на сервере, используя буквенный юзернейм/номер через ''sip:username'' или ''sip:username@domain''.<br />
* Реализована возможность добавления дополнительных привилегий к [[Роли#BasicRoles|базовым ролям]].<br />
* Выключена поддержка устаревшей клиент-серверной связи через механизм .NET Remoting.<br />
* [[Встраиваемые_plugin-модули|Серверные плагины]] получили возможность использовать ряд новых методов через интерфейсный метод ''[[Сервисное_взаимодействие#Событие OnQuery|OnQuery]]'': ''[[Сервисное_взаимодействие#getpath|getpath]]'', ''[[Сервисное_взаимодействие#getconfigvalue|getconfigvalue]]'', ''[[Сервисное_взаимодействие#getversion|getversion]]'', ''[[Сервисное_взаимодействие#reloadpbxss|reloadpbxss]]'', ''[[Сервисное_взаимодействие#updatehttpsession|updatehttpsession]]'', ''[[Сервисное_взаимодействие#removehttpsession|removehttpsession]]'', ''[[Сервисное_взаимодействие#updateplugin|updateplugin]]'', ''[[Сервисное_взаимодействие#getcurrentlanguage|getcurrentlanguage]]'', ''[[Сервисное_взаимодействие#getlicense|getlicense]]'', ''[[Сервисное_взаимодействие#getkeyid|getkeyid]]''<br />
* Реализована возможность автоматической установки [[Встраиваемые_plugin-модули|плагинов]] сервером при запуске (архивы и/или сборки расположенные в каталоге ''PluginAutoUpdate'').<br />
* Поддержка архивов плагинов с манифестом в формате ''JSON''.<br />
* [[Oktell_Web-Socket_Protocol|Программный интерфейс web-socket]] пополнился методом ''[[Oktell_Web-Socket_Protocol#execmoduleproc|execmoduleproc]]'' для обращения к серверным плагинам.<br />
* [[Oktell_Web-Socket_Protocol|Программный интерфейс web-socket]] пополнился методами ''getvoiceperc'', ''getvoicemap'' для получения доступа к данным о статистике владения разговором.<br />
* В [[Oktell_Web-Socket_Protocol|программном интерфейсе web-socket]] исправлен метод ''checkmyuserprivilege'' - поле isoperator заменен на hasprivilege.<br />
* [[Серверный_HTTP_интерфейс|Интерфейс веб-сервера]] пополнился методом ''execpluginmethod'' для обращения к серверным плагинам.<br />
* [[Серверный_HTTP_интерфейс|Интерфейс веб-сервера]] пополнился методом ''download/vm/id'' для предоставления записей голосовой почты, где ''id'' - guid-идентификатор сообщения.<br />
* [[Интеграция_с_Web-Socket_CRM|Настройка связи с WEBCRM]] по web-socket теперь может производиться через указание URL (доменное имя, страница, http-параметры).<br />
* Добавлен клиентский конфигурационный ключ ''[[Параметры_файлов_конфигурации#TerminalMode|TerminalMode]]'', позволяющий установить режим привязки в терминальном подключении (использование адресов реальных терминальных клиентских машин, расширение из конфига или расширение с помощью имени пользователя Windows).<br />
* Добавлен клиентский конфигурационный ключ ''[[Параметры_файлов_конфигурации#ShowLoginAuthMode|ShowLoginAuthMode]]'', позволяющий отключить в окне авторизации отображение варианта использования учетной записи Windows.<br />
* Добавлены клиентские конфигурационные ключи ''[[Параметры_файлов_конфигурации#ExportCsvDelimiter|ExportCsvDelimiter]]'' и ''[[Параметры_файлов_конфигурации#ExportTextDelimiter|ExportTextDelimiter]]'', позволяющие установить разделители столбцов при выгрузке данных в файлы соответствующих форматов. Список возможных значений: ''comma'', ''space'', ''semicolon'', ''tab''.<br />
* Добавлен клиентский конфигурационный ключ ''[[Параметры_файлов_конфигурации#PhoneAllowHotline|PhoneAllowHotline]]'', позволяющий отключить режим HOTLINE при звонке на пустой номер в режиме использования локального устройства.<br />
* Реализована обработка клика на ссылках в полях обмена сообщениями - открытие в браузере.<br />
* В диалоговых web-формах реализована возможность производить действия ''ДАЛЕЕ'' и ''СТОП'' путем изменения веб-страницей заголовка на специальные значения (''oktellcommand_next'', ''oktellcommand_stop'', ''oktellcommand_nextforce'', ''oktellcommand_stopforce'').<br />
* Реализован импорт таблиц абонентов из файлов CSV.<br />
* Добавлен клиентский конфигурационный ключ ''[[Параметры_файлов_конфигурации#SipForceKeepAliveIntervalSec|SipForceKeepAliveIntervalSec]]'', позволяющий принудительно включить отправку keep-alive пакетов в SIP подключение локального устройства и установить определенный параметром интервал.<br />
* Добавлен клиентский конфигурационный ключ ''[[Параметры_файлов_конфигурации#SipDomainMode|SipDomainMode]]'', позволяющий устанавливать режим определения доменного имени сервера для подключения локального устройства. По умолчанию используется IP-адрес сервера, определенному для текущего подключения в конфигурационном файле. Могут также использоваться параметры, переопределяющие доменное имя и порт, соответствующие текущему подключению (''SipDomain'', ''SipPort'' с соответсвующим числовым суффиксом или без него), которые могут применяться для подключения к прокси-серверу или к серверу, находящемуся за NAT с переопределенным портом взамен стандартного.<br />
* Добавлены клиентские конфигурационные ключи ''[[Параметры_файлов_конфигурации#SipDomain|SipDomain]]'', ''[[Параметры_файлов_конфигурации#SipPort|SipPort]]'', позволяющие явно переопределить домен и порт SIP-сервера для конкретного подключения в случае использования нестандартных настроек NAT.<br />
* Исправлены некоторые ошибки клиентского SIP-модуля, обслуживающего подключение локального устройства к серверу.<br />
* Реализована поддержка ''[http://ru.wikipedia.org/wiki/DTLS DTLS-соединения]'' в модуле HAL-SIP, ответственном за ''[http://ru.wikipedia.org/wiki/WebRTC WebRTC]''.<br />
* Реализована поддержка ''[http://ru.wikipedia.org/wiki/WebRTC WebRTC]'' при работе с Mozilla Firefox.<br />
* Реализована поддержка сквозных видео-звонков между SIP-устройствами, подключенными к серверу.<br />
* Выявлена и устранена проблема в безопасности SIP-подключений.<br />
* Выявлен и устранен ряд частных проблем в HAL.SIP, связанных с блокировками, исключениями, ростом памяти, отправкой некорректных данных в SIP-запросах/ответах.<br />
* Исправлена ошибка в работе межсерверного взаимодействия, связанная с обнулением списка отделов после перезагрузки сервера состояний.<br />
* Исправлена ошибка менеджера задач, влекущая разрыв разговора оператора с третьим лицом в случае обрыва внешней линии, находящейся на удержании.<br />
* Исправлена проверка прав при приглашении участниками новых абонентов в закрытые конференции.<br />
* Исправлена ошибка АТС, в следствие которой неверно определялись персональные внутренние номера пользователей.<br />
* Исправлена ошибка в работе компонента «Файловая операция» в режиме определения размера файла.<br />
* Исправлена ошибка менеджера служебных задач. Симптом: суточная периодическая задача с узким временем работы после перезапуска сервера не срабатывает в первые сутки.<br />
* Исправлена ошибка в работе контрольного события о выходе оператора из КЦ.<br />
* Исправлена проблема кодирования имен файлов в формируемых ZIP-архивах.<br />
* Исправлена ошибка менеджера голосовых задач, связанная с отсутствием в статистике состояния поствызывной обработки у оператора, осуществившего переключение абонента на IVR с выходом из задачи.<br />
* Исправлена ошибка отображения и сохранения национальных символов в истории сообщений чата.<br />
* Исправлена ошибка авторизации, связанная с невозможностью входа пользователя после однократного попадания в ситуацию нехватки пользовательских лицензий.<br />
* Исправлена ошибка сохранения неудачного звонка в БД, в результате которой фиксировалась команда набора, а не сам номер.<br />
* Исправлена ошибка АТС при осуществлении звонков на шлюзы с внутренними линиями - не подставлялся Caller-name.<br />
* Исправлена ошибка модуля «Мои звонки», не дававшая перезвонить на неудачный номер.<br />
* Поправлено контрольное событие "Пропуск звонка" при отклонении звонка оператором в задаче - CallerId не сохранялся.<br />
* Исправлены несколько ошибок логирования и сетевого взаимодействия, способные при определенных условиях привести к росту памяти службой сервера.<br />
* Устранено удаление данных из базы oktell_cc_temp при очистке оперативной статистики по задачам с закреплением абонентов за операторами.<br />
* Устранена проблема длительного зацикливания менеджера голосовых задач при поиске оператора для абонента через хранимую процедуру в приоритетной исходящей задаче с запросом/уведомлением при отсутствии подходящих операторов.<br />
* Добавлена подстановка Caller-name при звонках на шлюзы с внутренними линиями.<br />
* Исправлена проблема менеджера голосовых задач, связанного с подвисанием линии в случае выхода оператора из КЦ во время запроса на дозвон.<br />
* Исправлена проверка прав на внешние линии/направления при подключении к разговору.<br />
* Устранена ошибочная привязка ограничения количества потоков в текстовых задачах к количеству внешних линий в системе.<br />
* Устранена ошибка менеджера голосовых задач, связанная с ложным повторным прозвоном завершенных абонентов, возникающая вследствие таймаута запроса к БД на синхронизацию таблицы абонентов.<br />
* Устранена проблема роста памяти вследствие использования динамических рабочих мест, возникающая при частой перезагрузке сервера состояний.<br />
* Исправлена работа контрольного события «Операторов меньше установленного».<br />
* Исправлена ошибка предиктивных задач. Симптом: при выходе последнего оператора из колл-центра задача продолжает набирать номера абонентов.<br />
* Исправлена ошибка PBX, в ходе которой возникала отвязка SIP-телефона от стационарного рабочего места после использования телефона в динамической связи.<br />
* Исправлена ошибка, приводящая к неотправке SIP сообщения NOTIFY с информацией о состоянии абонента сразу после подписки.<br />
* Исправлена ошибка сохранения в БД звонка на шлюзы, зарегистрированные на сервере с режимом набора «Аккаунт, затем номер», в результате которой фиксировалась команда набора, а не сам номер.<br />
<br />
<br />
<br />
<br />
====Новые возможности 2.10 (20.01.2014)====<br />
<br />
<br />
* В веб-клиент включена первая версия раздела ''[[Oktell_Web_Оператор#Дашборды|Дашборды]]''.<br />
* Веб-клиент получил возможность отображать ''[[Компоненты сценариев диалога#WebForm|веб-формы]]'' диалоговых сценариев (без подстановки значений в поля).<br />
* Реализовано сохранение сессий веб-клиентов в БД в целях сохранения между производимыми перезагрузками сервера.<br />
* Реализована политика прав доступа пользователей к объектам Call-центра. Проекты, таблицы абонентов, задачи, индикаторы, отчеты и дашборды получили возможность определять индивидуальные права доступа. Соответствующие общие привилегии в ролях на изменение и удаление объектов ликвидированы.<br />
* ''[[Таблицы абонентов]]'' получили возможность назначать столбцам с типом данных ''uniqueidentifier'' смысловой тип ''Идентификатор оператора''. Применяется в задачах с закреплением абонентов за операторами.<br />
* В задачах ''[[Голосовые задачи#FixOperator|с закреплением абонента за оператором]]'' активирована периодическая синхронизация с таблицей абонентов для задач этого типа. Реализована возможность выбора - запрос на дозвон или уведомление оператору. Скорректирована процедура очистки кэша.<br />
* Произведена оптимизация и корректировка механизма поиска очередного абонента для звонка по [[Голосовые задачи|задаче]] при использовании ''[[Голосовые задачи#DBCache|кэша в БД]]''.<br />
* Реализован новый тип задач ''Поиск абонента для оператора''.<br />
* Реализовано состояние ''ручного режима в Call-центре'', фактически приостанавливающее использование оператора исходящими задачами. В пространственной таблице операторских состояний для этого выделено отдельное состояние (код 12). В запросы [[Oktell_Web-Socket_Protocol|WebSocket-интерфейса]] (''setuserstate'') и COM-интерфейса введено свойство для управления состоянием. В модулях ''[[Ресурсы]]'' и ''[[Операторы]]'' отображение состояния в виде пиктограммы ''«М»'' и доступ к управлению состоянием для супервизора.<br />
* Реализована первая версия задач с прогрессивно-предиктивным набором. В конфигурационный файл вынесены константы ''[[Параметры_файлов_конфигурации#PredictivePoolTimerIntervalMs|PredictivePoolTimerIntervalMs]]'', ''[[Параметры_файлов_конфигурации#PredictivePoolClearStatOnDeactivate|PredictivePoolClearStatOnDeactivate]]'', ''[[Параметры_файлов_конфигурации#PredictivePoolExtraShiftTimeoutMs|PredictivePoolExtraShiftTimeoutMs]]''.<br />
* Реализована возможность выдачи прав доступа к записям разговоров по внешним направлениям. Ранее была доступна установка права доступа для всех внешних линий сразу.<br />
* Добавлены новые фирменные мелодии ожидания. Применяются автоматически, если в системе используются мелодии по умолчанию. <br />
* Работа локальных устройств и гарнитур в клиентском приложении переведена на протокол SIP. Как результат незначительно изменилось управление модулем ''[[Телефон]]''.<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлен ряд новых функций. Присоединение звонка к задаче с возможностью указания ид абонента (задание параметра через json-хеш с ключами ''{task|user, idinlist}''). Определение расписания задачи (по текущему времени). Определение рабочего времени офиса с учетом настроенных праздников (по указанному времени). Перезагрузка общих настроек из БД. Изменение ограничения максимального количества внешних линий для задач (-1 - снятие лимита). Установить для пользователя: статус, занятость, переадресация, перерыв, кц, ручной режим кц.<br />
* В компонент IVR-сценариев ''[[Компоненты сценариев IVR#Switch|Переключение]]'' добавлена возможность сохранять код отказа SIP, а также при переключении на внутренние номера указывать сигнал вызова (значение SIP-заголовка ''Alert-Info'').<br />
* Компонент диалоговых сценариев ''[[Компоненты сценариев диалога#WebForm|Веб-форма]]'' получил возможность определять поведение при нажатии на кнопку ''ДАЛЕЕ''. Возможность заблокировать кнопку в принципе, продолжить, а также ''SUBMIT'' веб-документу.<br />
* Исправлена ошибка в работе компонента сценариев ''[[Общие компоненты сценариев#EmailReceive|Получение E-mail]]'' в режиме работы с IMAP сервером.<br />
* Исправлена ошибка компонента сценариев ''[[Общие компоненты сценариев#EmailSend|Отправка E-mail]]'', связанная с блокировкой выбранных файлов вложений на некоторое время после завершения работы компонента. <br />
* В компонентах сценариев ''[[Компоненты служебных сценариев#Call|Дозвон]]'', ''[[Компоненты сценариев IVR#SwitchExt|Переключение на внешние линии]]'' и ''[[Компоненты сценариев IVR#Switch|Переключение]]'' реализовано защитное преобразование выбранного режима перед началом работы в соответствии с модулем-инициатором запуска.<br />
* В компоненте сценариев ''[[Общие компоненты сценариев#WebRequest|WEB-запрос]]'' добавлена возможность осуществлять запросы ''PUT'', ''HEAD'', ''DELETE''. Исправлена работа с Cookies.<br />
* Ряд мелких исправлений в компонентах сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'', ''[[Общие компоненты сценариев#WebRequest|WEB-запрос]]''.<br />
* Оптимизирована передача данных из веб-сервиса 1C в сценарий с помощью компонента ''[[Общие компоненты сценариев#1CQuery|Запрос к 1С]]''.<br />
* Служебные сценарии получили возможность запускать процессы на клиенте с помощью нового компонента (через указание пользователя, который должен быть авторизован через толстое приложение или COM-ядро).<br />
* В модуле ''[[Сценарии АТС#SvcUserChanged|общих настроек]]'' добавлена возможность выбора служебного сценария уведомления об изменении учетной записи пользователя с передачей кода операции (1-создание, 2-изменение, 3-удаление), ид пользователя, логина, незашифрованного пароля, имени. Пароль передается только при создании или при изменении с модификацией пароля, иначе просто пустая строка. При удалении только идентификатор передается.<br />
* В модуле ''[[Сценарии АТС#SvcUserStateChanged|общих настроек]]'' добавлена возможность выбора сценария уведомления о входе/выходе пользователя в систему.<br />
* В модуле ''[[Настройки_Call-центра#SvcSupervisorHelp|общих настроек]]'' добавлена возможность выбора служебного сценария обработки запроса помощи супервизора.<br />
* [[Oktell_Web-Socket_Protocol|WebSocket-интерфейс]] дополнен пользовательскими методами: ''checkmyuserprivilege'', ''getmyuserprivileges'', ''pbxanswercall'', ''updatesession''. Серверными методами: ''wp_setuserstate'', ''wp_getuserstate'', ''closecallbychain'', ''getalluserstates'', ''subscribeevent'', ''unsubscribeevent'' и серверным событием ''srv_userstate''.<br />
* В [[Oktell_Web-Socket_Protocol|WebSocket-интерфейсе]] реализована возможность хранения файлов, прикрепленных к сообщениям чата, под уникальными именами (свойство ''hidefiles'' метода ''chatsendmessage'').<br />
* В COM интерфейс добавлены методы ''Conf_AttachToGhost(string ghostid)'', ''string Conf_SetGhostMode(string xml)'', позволяющие организовать прослушивание в реальном времени. Исправлены некоторые ошибки.<br />
* Расширена функциональность [[Серверный_HTTP_интерфейс|веб-сервера]]. Реализована возможность исполнять служебные сценарии без прохождения авторизации на сервере (с помощью запроса специальным образом настроенных веб-страниц в подпапке ''WWW''). Обработка запросов с ''transfer-encoding:chunked''. Запросы ''checklicenseactual'', ''closecallbychain''.<br />
* Добавлен ключ конфигурации ''[[Параметры_файлов_конфигурации#WebServerNoAuth_Loopback|WebServerNoAuth_Loopback]]'', позволяющий отключить требование авторизации при обращении к [[Серверный_HTTP_интерфейс|веб-серверу]] с собственного адреса сервера.<br />
* Исправлен ряд недочетов в менеджере голосовых задач. Таймеры и периоды активности задач. Пауза перед резервированием освободившегося оператора. Отбой внешней линии во время длительного исполнения запроса в БД перед входом в задачу приводил к зависанию линии оператора после попытки соединения. Корректное размещение в статистику информации о звонке при присоединение существующего звонка к задаче. Корректное полное удаление оператора из обработчика входящей задачи. При использовании сценария поиска абонента не применялось указание на завершение задачи, если идентификатор абонента не установлен сценарием в служебную переменную.<br />
* Косметические исправления в модуле ''[[Пользователи]]''.<br />
* Добавлена новая ролевая привилегия ''Возможность редактирования запросов SQL''. <br />
* Исправлены незначительные ошибки в модуле ''[[Настройки_SIP-модуля|Настройки аппаратуры]]''.<br />
* Исправлено отображение таблицы журнала звонков в модуле ''[[Мои контакты]]''.<br />
* Исправлены ошибки в модуле ''[[Статистика#Диаграммы и настройка|Статистика call-центра]]'', а также реализована возможность использовать предопределенную переменную ''@authorizeduserid'' (в отчетах из хранимых процедур - таблицу ''#authorizeduserid'') для привязки отчетов к конкретным пользователям.<br />
* Косметические исправления в модуле ''[[Ресурсы]]''. Ошибка скрытия неактивных пользователей. Ошибка при отрисовке списка задач при определенных условиях. Кэширование данных по запросу производилось без учета выбранного интервала расчета.<br />
* Косметические исправления в ''[[Редактор_web-форм|дизайнере диалоговых веб-форм]]''. Назначение переменных в качестве значений (слетало в константу). Удалена привязка выпадающих списков к начальным значениям.<br />
* Добавлено управление масштабом в диалоговых веб-формах и других модулях, использующих встроенный браузер.<br />
* Из ''[[Редактор_карты_сети|карты сети]]'' удалены USB-телефоны. Теперь учетной записью для работы локального устройства снабжаются компьютеры, не связанные с объектами SIP-телефонов и аналоговых телефонов, а также динамические рабочие места.<br />
* Устранен рост памяти в SIP-сервере при работе с динамическими транками.<br />
* Исправлены обнаруженные ошибки и недочеты в SIP-сервере. При forking-вызове не всегда отправлялся CANCEL. При одновременном поступлении SIP-ответов 180 и 183 не всегда была успешной последующая коммутация. Отключение таймеров при определенных условиях. <br />
* Исправлена ошибка в определении пути для сохранения резервных копий БД, если в конфигурационном файле установлено нестандартное значение базового каталога для резервных копий. Симптом: файл всегда перезаписывался и хранился в единственном экземпляре.<br />
* Исправлена ошибка сервера, приводившая к остановке периодических процессов, в том числе автоматического управления графиком перерывов операторов.<br />
* Исправлена ошибка, связанная с неотображением в статистике причины перерыва, выставленной оператором, после осуществления оператором звонка вручную.<br />
* Некоторые незначительные исправления в АТС. Сброс состояний, приводивших в некоторых случаях к отсутствию сигнала КПВ при исходящих звонках.<br />
* В модуле автодозвона реализован обратный вызов оператора с использованием интеркома.<br />
* Исправлена ошибка в автоматическом удалении записей разговоров по истечении времени хранения, приводившая к пропуску некоторых файлов.<br />
* Исправлено значение свойства ''TimeStop'' в [[Сценарии_АТС#SvcContent|контенте линии]], ранее всегда имел нулевое значение.<br />
* Введен отладочный конфигурационный параметр ''[[Параметры_файлов_конфигурации#DEBUG_LogActiveThreadStackTrace|DEBUG_LogActiveThreadStackTrace]]'' для периодического вывода в лог Debug информации о стеке всех активных потоков.<br />
<br />
<br />
<br />
<br />
====версия 2.9 (02.10.2013)====<br />
<br />
<br />
* Обнаружена и исправлена ошибка SIP-сервера, в ходе которой полученные повторные ответы 200 OK на сообщения REGISTER приводили к блокировке аккаунта вплоть до перезагрузки<br />
* Исправлен выбор расширения для файла в компоненте IVR сценариев ''[[Компоненты сценариев IVR#Record|Запись]]'' в соответствии с выбранным кодеком.<br />
* Исправлена ошибка элемента управления ''таблица'' клиентского приложения, приводившая в ходе удаления нескольких выделенных строк к некорректному определению индексов.<br />
* Реализовано определение номеров и доступ к функциям ''CallerId'' и ''CalledId'' из сценария для шлюзов с внутренними линиями.<br />
* Восстановлен разбор мультипартовых SIP-INVITE сообщений.<br />
* Обнаружена и исправлена проблема периодического отсутствия отчета об успешной работе факса, несмотря на удачное завершение приема/передачи.<br />
* Реализовано сохранение кода отказа SIP в статистике исходящих попыток звонков в колл-центре, а также их передача в сценарий обработки результата попытки звонка по задаче.<br />
* Реализовано перенаправление звонков на указанный адрес при получении SIP-ответа ''3xx Moved''. Для звонков по шлюзам без регистрации и шлюзам межсерверного взаимодействия, а также для звонков на внутренние номера, не использующие SIP-forking.<br />
* Обеспечена возможность генерации сигналов КПВ в SIP-линии, по которым был отправлен предварительный ответ ''183 Session Progress''.<br />
* Обнаружена и исправлена проблема неверного отображения свойств компонента ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' в режиме ''установить для линии''.<br />
* Реализована предварительная проверка параметров лицензии при добавлении [[Динамическое_управление_картой_сети|динамических транков]].<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлена возможность определения параметров лицензии, количества используемых линий, пользователей, а также команда принудительного обновления сертификата.<br />
* Исправлена привязка звонка к задаче с помощью компонента ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' через пользователя. <br />
* Исправлена ошибка SIP-сервера при работе за NAT. Симптом: в поле Contact подставлялся локальный адрес.<br />
* Реализовано обновление состояния входящих регистрационных сессий по динамическим потокам при перезагрузке сервера, если динамические потоки загружаются на старте).<br />
* Исправлена функция ''CallerId'' в сценариях IVR для внутренних линий SIP шлюзов. Симптом: возвращает пустоту.<br />
* Исправлена работа компонента сценариев ''[[Общие компоненты сценариев#WebRequest|WEB-запрос]]''. Симптом: после перехода на .NET v4.0 многократная работа компонента в различных сценариях после нескольких сот тысяч запросов прекращает отправку.<br />
* Реализован дополнительный вариант фильтрации по правам компонентов ''[[Компоненты сценариев IVR#SwitchExt|Переключение на внешние линии]]'' и ''[[Компоненты служебных сценариев#Call|Дозвон]]'' - по приоритетам линий.<br />
* Размещение информации по вручную прикрепленному к задаче звонку в пространственной таблице колл-центра ''EffortConnections''.<br />
* Исправлено отображение задач в модуле ''[[Ресурсы]]''. Симптом: при некоторых обстоятельствах выводятся не все задачи.<br />
* Исправлена ошибка SIP-forking: множественный звонок при исходящем же отбое не инициировал завершение одной из сессий.<br />
* Обнаружена и исправлена некорректная обработка одновременных встречных Cancel <-> Ok, приводившая к подвисанию звонка вплоть до разрыва вручную.<br />
* Исправлена генерация номеров динамических линий. Некорректное дублирование приводит к проблемам в коммутировании линий.<br />
* Исправлена загрузка сильно вложенного и взаимозамкнутого [[Внутренние номера#Rules|номерного плана]].<br />
* Исправлена ошибка WebRTC, возникающая при закрытии вкладки браузера с активной сессией разговора.<br />
* В интерфейс [[Oktell Web-Socket Protocol|WebSocket]] добавлены методы ''сс_addoperatortotask'', ''cc_removeoperatorfromtask'', ''cc_settaskactive''.<br />
* Реализован обмен сообщениями в веб-клиенте в виде диалогов. Интерфейс [[Oktell Web-Socket Protocol|WebSocket]] сервера пополнен рядом методов.<br />
* Добавлен режим запуска [[Служебные задачи|служебных задач]] - ''На старте сервера''.<br />
* Реализовано сохранение в БД информации о текущем состоянии регистрации всех SIP-потоков системы (таблица A_StreamRegistration).<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' внесены функции добавления/удаления оператора в задачу.<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлена возможность определения заголовков из входящего SIP INVITE или 200OK сообщения.<br />
* В выражения сценариев добавлена функция ''[[Выражения#Translit|translit]]''.<br />
* Исправлена [[Серверный HTTP интерфейс#upload|закачка файлов]] на веб-сервер Oktell при отсутствии заголовка Content-transfer-encoding.<br />
* Добавлена ролевая привилегия редактирования групп [[Мои контакты|контактов]].<br />
* Добавлена ролевая привилегия работы с [[Мои контакты|контактами]] из общих групп. Запрещает удалять и редактировать общие контакты, назначать личным контактам общие группы, а также создавать, редактировать и удалять общие группы.<br />
* Восстановлена работа функции ''Время отсутствия звука в линии'', возвращаемая компонентом ''[[Общие компоненты сценариев#UserState|Статус объекта]]''.<br />
* Оптимизирована с точки зрения объема используемой памяти обработка входящих SIP-сообщений.<br />
* Оптимизировано обновление [[Динамическое_управление_картой_сети|динамической карты сети]] в случае, когда изменений фактически не производится.<br />
* Обнаружена и исправлена ошибка сохранения имен контактов и пользователей с символом перевода строки, который отрицательно влияет на формирование SIP-сообщений.<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлена возможность определения локальных адресов сервера.<br />
* Исправлена работа компонента ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' в части установки свойств конференциям.<br />
* Исправлена функция ''UrlDecode'' в разделе [[Выражения|выражений сценариев]].<br />
* Обнаружена и обработана проблема фильтрации отправляемого SIP сообщения CANCEL при моментальной отмене до получения предварительного ответа.<br />
* В модулях клиентского приложения заменен браузер. Встроено ядро браузера CHROME.<br />
* В режиме дизайнера веб-форм добавлена возможность выбирать в качестве источника файлы MHT.<br />
* В компонент сценариев «Файловая операция» добавлена функции взятия хеша MD5 от содержимого.<br />
<br />
<br />
<br />
<br />
====версия 2.8 (26.07.2013)====<br />
<br />
<br />
* Реализована возможность [[Параметры_АТС#StrongPassword|запрета использования простых паролей]].<br />
* Реализована возможность [[Параметры_АТС#PaidNumbers|автоматического запрета всех исходящих звонков на несанкционированные номера]].<br />
* Реализована возможность использования динамических рабочих мест [[Параметры файлов конфигурации#EnableAutoMapSip|с автоматической привязкой к существующим в карте сети SIP-телефонам]].<br />
* Реализован альтернативный способ управления гарнитурой с клавиатуры, поддерживающий работу в x64 системах.<br />
* Обнаружена и устранена причина периодических зависаний клиентского приложения в совершенно различных модулях.<br />
* Реализовано рабочее место оператора в web-клиенте, поддерживающее отображение [[Компоненты сценариев диалога#Диалоговая форма|диалоговых форм стандартного типа]].<br />
* Добавлен ряд новых функций в компонент сценариев [[Общие_компоненты_сценариев#Статус объекта|«Статус объекта»]]: определить для линии время отсутствия входящего звука, определить вхождение линии в направление, определить идентификатор и номер скоммутированной линии/конференции, определить наличие привилегии у пользователя, принудительно перерегистрировать сип-аккаунт или все сип-аккаунты, определить внешний IP-адрес сервера через STUN-запрос, сохранить скриншот пользователя.<br />
* Реализована возможность использовать одновременно связь с CRM и web-клиентов на основе OktellJS.<br />
* Реализована возможность использовать защищенные каналы связи (TLS) для работы c web-сервером Oktell. Касается взаимодействия по [[Серверный_HTTP_интерфейс|HTTP-API]], а также для работы [[Oktell_Web-Socket_Protocol|web-socket]] каналов.<br />
* Реализована возможность подключаться к CRM по http/https в альтернативу [[Oktell_Web-Socket_Protocol#Arch1|websocket-соединениям]].<br />
* Обнаружена и исправлена проблема версии Oktell 2.8 по использованию плагинов внутри собственного процесса.<br />
* Добавлены ролевые привилегии: возможность исполнять методы Web-API, доступ к скачиванию записей разговоров.<br />
* Изменена настройка [[Настройки_веб-сервера|HTTP-веб-сервера]], WebSocket-сервера, [[Интеграция_с_Web-Socket_CRM|подключения к WebCRM]] и Web-клиента, настройка сертификатов X509 для работы TLS.<br />
* Исправлена проблема проверки и отключения лицензий в случае одновременного использования динамических рабочих мест и плат телефонии, а также превышения общего количества линий.<br />
* Исправлены некоторые обнаруженные ошибки отображения в клиентском приложении.<br />
* Исправлена проблема менеджера задач по работе с индивидуальными операторскими задачами в режиме запроса на звонок. Симптом: если оператор оставляет окно запроса на звонок на срок более получаса, абонент подвисает и задача не может быть завершена до перезагрузки сервера.<br />
* Исправлена выдача страниц [[Серверный_HTTP_интерфейс|HTTP-веб-сервером]]. Симптом: неверный content-type, вследствие чего ответы скачивались, а не отображались браузерами.<br />
* Добавлена автоматическая выдача веб-сервером файлов index.html из подпапок.<br />
* Добавлена возможность управления поведением компонента [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние]] в режиме ''прослушивания медиа-потока'' через [[Параметры_файлов_конфигурации#PBX_Use180SdpAs183|конфигурационный файл]]. Решается задача переключения между генерацией КПВ (длинных гудков) и медиа-соединением при получении последовательности различных ответов 180, 183.<br />
* В сценариях реализован новый [[Переменные#Types|тип переменных]] с глобальной серверной областью видимости без привязки к сессиям. Существующие глобальные переменные преобразованы в сессионные.<br />
* Реализована функция [[Управление базами данных#ComputeVoices|расчета времени владения разговором в коммутациях]].<br />
* Добавлена функция NowTick в [[Выражения|выражения сценариев]].<br />
* При удалении нелицензированных внутренних линий внедрена функция выбора преимущественно каналов, не находящихся в коммутации.<br />
* При отправке факс-сообщения установлено принятие за успешный результат отправки хотя бы одной страницы.<br />
* Реализована возможность [[Динамическое управление картой сети|динамического управления]] объектами в карте сети с помощью сценариев (json-структура в компоненте [[Общие компоненты сценариев#UserState|«Статус объекта»]]).<br />
* При обновлении клиентского приложения с сервера реализовано отображение процента завершения скачивания архива.<br />
* Добавлен разбор [http://ru.wikipedia.org/wiki/JSON JSON]-форматированных строк в сценариях с помощью компонента [[Общие компоненты сценариев#Parser|«Парсер»]].<br />
* Реализована [[Свойства компонентов#SipPhone|поддержка WebRTC]] в HAL.SIP.<br />
* Реализована функция [[Свойства компонентов#SipPhone|SIP.forking]] - множественная регистрация устройств под одной учетной записью.<br />
* В веб-операторе реализована поддержка WebRTC и регистрация телефона на сервере Oktell (нового или вторым подключением к существующему).<br />
* Добавлен ряд возможных событий-команд для работы плагинов: ''declinecall'', ''connectabonents'', ''makeflash''<span style="color:gray;">(mode=''abort''|''next''|''switch'')</span>.<br />
* Модернизировано сохранение пользовательских сообщений через очередь доступа к БД.<br />
* В компоненте сценариев [[Общие компоненты сценариев#UserState|«Статус объекта»]] реализованы дополнительные функции для взаимодействия с конференциями.<br />
* В компоненте сценариев [[Общие компоненты сценариев#UserState|«Статус объекта»]] реализованы дополнительные функции для взаимодействия с направлениями.<br />
* В АТС внедрена функция отказа от вызова без фиксации пропущенного вызова на телефоне, если отказ производится по причине снятия трубки другим абонентом вызываемого группового номера.<br />
* Реализована функция сквозной коммутации в состоянии early-media (SIP-сообщение ''183 Session Progress'') с обеих сторон.<br />
* Реализована функция подключения текущего звонка к задаче через клиентский модуль [[Мое рабочее место|«Мое рабочее место»]], через компонент [[Общие компоненты сценариев#UserState|«Статус объекта»]], а также через компонент сценариев [[Компоненты служебных сценариев#Connector|«Коммутатор»]] и командой [[Oktell_Web-Socket_Protocol#attachcalltotask|cc_attachcalltotask]] в интерфейсе websocket.<br />
* Добавлены задачи нового типа [[Голосовые задачи#ManualCall|«Дозвон вручную»]] для организации кампаний с полностью ручным определением абонентов и их вызовом.<br />
* Реализована поддержка gzip в [[Серверный_HTTP_интерфейс|веб-сервере]] при отправке скриптов и документов.<br />
* Реализована функция динамической регистрации учетной записи SIP-телефона и привязки ее к рабочему месту в браузере с использованием webrtc.<br />
* Оптимизировано сохранение [[Карта сети|карты сети]] путем частичного изменения.<br />
* Оптимизировано сохранение [[Настройки оборудования|настроек аппаратуры]].<br />
* В контекстное меню модуля [[Ресурсы|«Ресурсы»]] добавлены команды ''Позвонить'', ''Подключиться к разговору'', ''Отправить сообщение операторам задачи''.<br />
* В модуле «Ресурсы» по умолчанию удалены из отображения линии. Включить можно в разделе «Администрирование. Клиентское приложение».<br />
* В интерфейс websocket добавлена команда [[[[Oktell_Web-Socket_Protocol#pbxmakeflash|''pbxmakeflash'']]. В функцию [[Oktell_Web-Socket_Protocol#login|''login'']] добавлено свойство ''usewebrtc'', в ответе приводятся параметры для подключения SIP-софтфона или WebRTC-софтфона.<br />
* Изменено хранение пользовательских сообщений в БД, произведена нормализация с учетом массовых сообщений. <br />
* Реализована функция прослушивания канала, являющегося участником конференции. Теперь в момент прослушивания доступен звук со всех участников конференции.<br />
* В компонент сценариев IVR [[Компоненты сценариев IVR#PlayFile|«Воспроизведение»]] добавлен режим генерации DTMF.<br />
* Обновлены стандартные [[Статистика|отчеты коллцентра]].<br />
* Реализована нормальная обработка комбинации HOLD + Soft Flash в АТС.<br />
* Изменен порядок привязки SIP-сообщений к сессиям. Теперь одинаковые callid не являются проблемой, если используются в рамках разных учетных записей.<br />
* Реализовано сохранение в статистике и проброс в [[Голосовые задачи#EffortResultScript|сценарий обработки результата попытки]] в качестве 5-го неявного параметра кода ответа-отказа SIP при исходящих звонках.<br />
* В сценарии IVR добавлена возможность определять файл записи/воспроизведения с помощью выражения.<br />
* Добавлен новый тип отображения отчетов - [[Статистика#VertHysto|вертикальная гистограмма]].<br />
* Изменено отображение отчетов типа [[Статистика#Plane|«Плоскость»]]. Теперь в качестве значений допускаются ''NULL''.<br />
* Добавлено сохранение идентификаторов сессии и коммутации в [[Управление базами данных#DTMFflow|таблицу DTMF сигналов]].<br />
* Реализована возможность [[[[Конференц-связь#Управление конференцией с помощью DTMF|управления конференцией с телефона через DTMF]]. Преобразование коммутации в конференцию, приглашение участников, отключение участников, завершение конференции.<br />
* Реализовано хранение данных в БД о регистрациях клиентских SIP устройств, и применение их при перезапуске HAL и сервера.<br />
* Исправлено прослушивание записей конференций. Происходила ошибка при нахождении клиента и сервера в разных часовых поясах.<br />
* Исправлены некоторые проблемы в HAL.VoIP сервере, связанные с отключением устройств из-за потери связи.<br />
* Исправлена ошибка, связанная с невозможностью изменить базовый порт SIP (5060).<br />
* Исправлена ошибка предварительного преобразования многостраничных .tiff изображений в клиентском приложении при отправке факсов. При использовании клиентского модуля преобразований оставалась только первая страница.<br />
* Добавлено описание прослушиваемой конференции во встроенный плеер.<br />
* Исправлена проблема изредка наблюдаемого явления отсутствия звука в SIP-телефонах после изменения параметров сессии.<br />
* Обнаружены и устранены некоторые оставшиеся проблемы при работе шлюза без регистрации из-за NAT.<br />
* Обнаружена и исправлена ошибка в сохранении приоритета [[Запись разговоров|общих правил записи коммутаций]].<br />
* Обнаружена и устранена проблема загрузки ресурсов плагина в версии 2.8, работающей в среде .NET Framework v4.0. <br />
* Обнаружена и устранена проблема в триггере БД при сохранении пользовательских сообщений, приводящая при больших нагрузках к блокировкам и откату транзакций сохранения.<br />
* Обнаружена и устранена проблема общего торможения АТС при массовых задержках ответов на отправляемые сервером SIP-сообщения CANCEL.<br />
* При использования сценария набора номеров для приглашения новых участников конференции организована передача данных о пользователе-инициаторе вызова.<br />
* Обнаружена и исправлена ошибка АТС, приводящая при определенных условиях использования режима HOLD к подвисанию канала вплоть до ручного сброса в мониторинге.<br />
* Исправлена ошибка раздела [[Настройки оборудования|«Параметры аппаратуры»]] клиентского приложения, связанная с невозможностью сохранить измененные значения после повторного переключения в модуль.<br />
* Понижены минимальные возможные границы для некоторых настроек (мин время в очереди, макс время переключения на оператора, время Hunt-вызова)<br />
* Исправлена работа функции управления гарнитурой с клавиатуры в COM-ядре клиентского приложения.<br />
* Обнаружена и исправлена ошибка [[Серверный_HTTP_интерфейс|веб-сервера]], связанная с использованием одного порта в нескольких настройках. При переключениях порт может быть фантомно занят вплоть до перезагрузки службы.<br />
* Исправлена функция мягкого разрыва. Не производился разрыв существующей коммутации, что в случае использования [[Сценарии АТС#ScrInsteadBusy|«сценария вместо отбоя»]] могло приводить к неожиданным эффектам.<br />
* Исправлена ошибка обратного отзвона из удержания. При определенных обстоятельствах первым на дозвон мог разместиться абонент из общей очереди, и лишь затем удерживаемый ранее абонент.<br />
* Исправлена ошибка набора номеров при вызове шлюзов с регистрацией на сервере через аккаунт. Символы w, z, q воспринимались как служебные.<br />
* Понижен приоритет отложенных операций микширования, упаковки и расчета владения разговором.<br />
* Исправлена ошибка в автодозвоне при звонках на быстрые номера. При неудачном вызове и отказе от звонка возможно зависание линии до сброса вручную в мониторинге.<br />
* Исправлен ряд ошибок, добавлены новые функции в рабочее место оператора в вебе.<br />
* Реализовано нелимитированное сохранение резервных копий БД и сценариев с фильтрацией по временным интервалам.<br />
* Изменено поведение входящей задачи при неснятой оператором трубке и запрещенной к использованию очереди. Ранее вызов отправлялся всем операторам сразу. Теперь звонок возвращается в IVR.<br />
* Изменено значение [[Параметры файлов конфигурации#EnableAutoMap|конфигурационного ключа ''EnableAutoMap'']]. По умолчанию теперь включено для поддержки работы веб-софтфона из рабочего места оператора.<br />
* Исправлена ошибка перевода в перерыв в колл-центре, влекущая разрыв текущей коммутации.<br />
* Исправлена ошибка АТС, оставляющая пустыми значения callerid и calledid при звонках со шлюзов с внутренними линиями.<br />
* В конфигурационный файл клиентского приложения внесен параметр (''ShowLoadingBar = 0''), позволяющий отключить окно ожидания загрузки.<br />
* Исправлена ошибка в модуле [[Переадресация|«Переадресация»]]. Не происходило перетаскивание правил.<br />
* В модуле [[Кабинет#Заказы на встречные звонки|«Кабинет. Встречные звонки»]] восстановлено контекстное меню.<br />
* Выявлена проблема подключения плагинов из сторонних каталогов в версии 2.8. В конфигурационных файлах клиентского приложения и oktell.PluginStarter требуется указание <span style="color:green;">''<runtime><loadFromRemoteSources enabled="true"/></runtime>''</span>.<br />
* Исправлена функция переключения на сценарий IVR путем подмены. Состояние не выставлялось требуемое.<br />
* Исправлена проблема некорректного пересчета SeqNum в исходящем RTP потоке при смене SSRC. В некоторых случаях после смены звук пропадает.<br />
* Исправлена проблема загрузки гарнитуры с неопределенными устройствами ввода-вывода.<br />
* Исправлена ошибка SIP, заключавшаяся в неотправке дублирующих пакетов ACK на повторные сообщения 200OK.<br />
* Исправлен алгоритм менеджера задач в части работы с абонентским списком через кэш в памяти и с номерами для перезвона.<br />
* Снято ограничение [[Карта сети|карты сети]], блокирующее сохранение шлюзов с одинаковым адресом прокси-сервера.<br />
* Обнаружена и решена проблема утечки памяти при [[Управление записями разговоров|микшировании в формат MP3]].<br />
* Обнаружена и устранена причина ухудшения работы факсов в версии 2.8.<br />
<br />
<br />
<br />
====версия 2.8 (30.01.2013)====<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Версия 2.8.130130 работает в среде .NET Framework v4.0. Перед обновлением с версии 2.7 и более ранних версий настоятельно рекомендуется ознакомиться [[Версия 2.8 на базе .NET Framework v4.0|со статьей]].<br />
<br />
* Произведена миграция в среду .NET Framework v4.0.<br />
* Реализована возможность сохранения [[Управление_базами_данных#FailedCalls|неудачных исходящих звонков]]. Отображение происходит в разделе «Статистика АТС» при указании в фильтре нулевой длительности.<br />
* Исправлена работа сервера за NAT с телефонами за NAT.<br />
* Реализована возможность активировать автоматическую блокировку звонков на платные номера. Список платных номеров хранится в БД. Активация режима в разделе "Сервер АТС" модуля "Общие настройки".<br />
* Добавлена функция «Код направления» в служебные и диалоговые сценарии. Применима только в режимах, связанных с АТС.<br />
* Исправлена ошибка отображения количества отключенных внутренних линий.<br />
* Изменена функция ограничения задачи по количеству внешних линий. Учитывает резервированное состояние линии.<br />
* Исправлена ошибка в диаграмме количества звонков по номерам в модуле «Статистика АТС».<br />
* Восстановлен нечувствительный к регистру поиск в выпадающем списке при наборе текста.<br />
* Реализован веб-сервер, выдающий страницы из папки WWW, слушающий стандартный 80 порт. Сильно ограничен по функционалу. Может быть отключен в конфигурационном файле сервера ключом ''UseWebServer80''.<br />
* Исправлена проблема некорректного звука гудков на платах Ольха. Проявлялось после коммутации с SIP каналами.<br />
* Реализовано разбиение лог-файлов HAL согласно настройкам в конфигурационном файле по максимальному размеру части.<br />
* Реализована возможность частичного обновление клиентских конфигурационных файлов (всех, указанных клиентов или кроме указанных клиентов).<br />
* В компоненте сценариев «Статус объекта» реализована функция «Проверить наличие привилегии у пользователя» по коду.<br />
* Добавлена ролевая привилегия на скачивание файлов записей.<br />
* В рамках авторизации по websocket реализована возможность создавать сессии и указывать время их жизни (до 2х недель).<br />
* При отсутствии ролевой привилегии пользования пользования автодозвоном и использовании гарнитуры с отключенным автодозвоном реализован вызов в обратной последовательности. Ранее выдавало уведомление о невозможности совершения вызова.<br />
* Реализована автоматическая отправка запроса в техническую поддержку из меню в статусной строке (на основе сервисной лицензии).<br />
* Реализована возможность [[Клиентское_приложение#ActiveDirectory|авторизоваться с помощью ActiveDirectory]].<br />
* Исправлена проблема COM-API, связанная с возвратом различных идентификаторов сессии при автодозвоне до и после снятия трубки пользователем.<br />
* Исправлена проблема в АТС, связанная с переключением на сценарий IVR путем подмены. Симптом: вместо продолжения обработки сценария производится разрыв.<br />
<br />
<br />
<br />
====версия 2.7 (25.12.2012)====<br />
<br />
<br />
* Реализован переподъем слушателей сетевых интерфейсов после временной недоступности интерфейса.<br />
* В режиме обмена номерным планом между серверами поправлен случай, когда служба обмена размещена на одном из серверов.<br />
* Обнаружена и исправлена проблема отсутствия каталога для пользовательских фотографий.<br />
* Микширование и упаковка записей по умолчанию в mp3-16.<br />
* Исправлена проблема в HAL.SIP, связанная с работой за NAT при наличии нескольких интерфейсов.<br />
* Обнаружена и исправлена проблема вызова группового номера из нескольких линий, не привязанных к пользователям. Симптом: в случае использования одной из них DND, вызов обрывается всем сразу.<br />
* Исправлены некоторые интерфейсные проблемы.<br />
* Исправлена проблема некорректного обновления конфигурационного файла websock.config, влекущая невозможность работы в веб-клиенте.<br />
<br />
<br />
<br />
====версия 2.7 (12.12.2012)====<br />
<br />
''21.12.2012 состоялся вебинар посвященный обзору релиза 12.12.2012 [http://www.oktell.ru/company/press/view/224/ Посмотреть запись вебинара]''<br />
<br />
* Добавлена возможность автоматического преобразования селектора в конференцию при выходе и управляющего, и создателя. Ключ UpdateSelectorOnDirectorDisconnect серверного конфигурационного файла.<br />
* Для компонента "SQL-запрос" увеличен до 4000 максимальная длина передаваемых в БД строковых параметров.<br />
* Реализована возможность повторного размещения звонка по задаче в начале очереди в случае, если операторский телефон находился в режиме DND.<br />
* Исправлена ошибка отображения предыдущего номера при автозвонке через HTTP интерфейс сервера.<br />
* Исправлена ошибка в пуле прогрессивного набора. Симптом: при одновременном ответе нескольких линий, все кроме первой подвисают в состоянии с поднятой трубкой до ручного сброса.<br />
* В контенте звонка изменена процедура расчета стороны, инициировавшей завершение.<br />
* Исправлена проблема компонента "Дозвон" служебных сценариев. Симптом: если номер пустой, то завершается без освобождения линии, та остается в резервированном состоянии до сброса вручную.<br />
* Исправлена проблема микшера записей при настройке в стандартную папку после применения нестандартной. Возможны были перебои и микшированием, и с записью.<br />
* В клиентском приложении заменены все базовые элементы управления.<br />
* Исправлено отображение стрелок перехода, линий связи, а также перемещаемых объектов в редакторе сценариев и карты сети, наблюдавшиеся в режиме AERO Windows 7.<br />
* Исправлена работа приложения на нескольких экранах.<br />
* Реализован поиск в модуле администрирования внутренних номеров.<br />
* Добавлена возможность сохранять код отказа SIP в переменную в компоненте "Дозвон" служебного сценария.<br />
* Исправлены мелкие ошибки при сохранении параметров аппаратуры, приводящие к сбросу в дефолтные значения при перезагрузке службы, а также к выставлению неверных значений.<br />
* Реализована возможность автоматического бана SIP-пакетов по полю User-Agent. В список всегда блокируемых внесен friendly-scanner. Дополнительные задаются в конфигурационном файле сервера ключами BanUserAgent{0-99}<br />
* Оптимизирована процедура определения IP-адресов по доменным именам. Введена асинхронность и независимость. Ранее была возможна ситуация, при которой из-за недоступности одного внешних из шлюзов все входящие звонки стопорились в ожидании таймаута.<br />
* В HAL.SIP исправлены некоторые ошибки, связанные с работой сервера за NAT. <br />
* B HAL.SIP исправлена проблема при обновлении регистрации на сервере, из-за которой раньше времени истекал срок жизни сессии и шлюз переходил в несинхронизированное состояние.<br />
* Реализована поддержка работы внешних VoIP клиентов (usb-телефонов и гарнитур), если сервер работает за NAT.<br />
* Исправлена проблема режима помощи при онлайн-подслушивании в случае, когда канал-донор находится в конференции.<br />
* Исправлена ошибка, при которой после входящего INVITE с предложением T.38 на следующий INVITE сервер отвечает RequestPending.<br />
* Исправлены проблемы сохранения и работы с нестандартными портами у SIP-телефонов. <br />
* Исправлена ошибка, при которой Expires сбивается с 0 на 3600 без необходимости.<br />
* Существенно оптимизирована рассылка событий конференциями внутренним пользователям.<br />
* Исправлена проблема АТС при работе с вынесенным в отдельный процесс HAL. Симптом: при большом количестве линий и большой нагрузке возможно подвисание линий в несвободном состоянии и наблюдается это часто.<br />
* Экспорт в Excel заменен на экспорт в обменный формат CSV.<br />
* Исправлена ошибка, из-за которой при переходе пользователя из недоступного состояние в готовность не производился автоматический анализ очереди и вызов, и требовалось ручное участие.<br />
* Исправлена ошибка, при которой в записях разговоров с плат YEASTAR слышен шум и треск, хотя в разговоре не наблюдался.<br />
* Исправлена проблема отображения сокращенного рабочего места при показе модуля СОТРУДНИКИ.<br />
* Исправлено скачивание больших файлов с HTTP, отправленное из Web-Socket клиентов.<br />
* Восстановлено прохождение трафика в видео-конференциях.<br />
* Реализован автоматический перевод всех контактов в тип "неизвестные" при удалении типа контакта.<br />
* CLI. Проблема передачи даты из стоп-формы в менеджер задач при определенных языковых настройках.<br />
* Решена проблема отображения выпадающих списков за главным окном приложения.<br />
* Существенно оптимизирована работа компонента "Парсер" сценариев. Скорость ряда запросов увеличена на три порядка.<br />
* Добавлена подсказка адреса веб-клиента в строку состояния главного окна, а также регистрация доменных имен для доступа к веб-клиенту непосредственно в разделе общих настроек.<br />
* Существенно оптимизированы диалоговые формы по скорости загрузки и построения на клиенте, а также объему передаваемых данных. Для скрытых групп также введен параметр, позволяющий применить отложенный расчет и загрузку данных по требованию.<br />
* Подготовлена база для миграции на FrameWork v4.0.<br />
<br />
<br />
<br />
====версия 2.7 (28.09.2012)====<br />
<br />
* В компонент [[Общие_компоненты_сценариев#UserState|Статус объекта]] добавлены свойства задачи для чтения: ''количество линий в дозвоне'' и ''количество линий в ожидании оператора''; добавлены свойства линии для чтения: ''Контент цепочки (xml)'', ''Контент цепочки (json)'', ''Контент линии (xml)'', ''Поле контента цепочки (заголовок)'', ''Поле контента цепочки (коммутация)'', ''Поле контента линии''; добавлены свойства линии для записи ''Поле контента цепочки (заголовок)'', ''Поле контента цепочки (коммутация)'', ''Поле контента линии''.<br />
* В компонент сценариев IVR [[Компоненты_сценариев_IVR#SwitchTask|Вход в задачу]] добавлено свойство ''Идентификатор оператора в переменную''.<br />
* В компонент [[Общие_компоненты_сценариев#UserState|Статус объекта]] добавлено свойство линии для записи: ''Разрешать FLASH'', позволяющее активировать функционал переключений для внешних линий.<br />
* В компонент сценариев IVR [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние]] добавлено свойство ''Идентификатор выбранной линии в переменную''.<br />
* Добавлена возможность переключения на номер перехвата с указанием дополнительного номера с помощью компонента [[Компоненты_сценариев_IVR#Switch|Переключение]].<br />
* В компоненты [[Общие_компоненты_сценариев#ExecProcess|Запуск процесса]] и [[Компоненты_сценариев_диалога#Внешнее приложение|Внешнее приложение]] добавлена возможность вывода консольного результата в переменную.<br />
* Реализован новый компонент служебных сценариев [[Компоненты_служебных_сценариев#Коммутатор|Коммутатор]], позволяющих произвольным способом осуществлять дозвон и коммутацию двух абонентов.<br />
* В компонент [[Общие_компоненты_сценариев#webrequest|WEB-запрос]] добавлена поддержка Digest-авторизации.<br />
* В компонент [[Общие_компоненты_сценариев#webrequest|WEB-запрос]] добавлена возможность указания дополнительных заголовков и дополнительных cookies.<br />
* В компоненты сценариев IVR [[Компоненты_сценариев_IVR#Switch|Переключение]] и [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние]] добавлена возможность указания/переопределения CallerName.<br />
* В компонент [[Общие_компоненты_сценариев#EmailSend|Отправка e-mail]] добавлена возможность задания аргументом логина и пароля.<br />
* Исправлена ошибка сохранения текстовых вложений принятой электронной почты в случае использования кодировки 7-bit, а также невозможность перезаписи вложений поверх существующих файлов.<br />
* Добавлен конфигурационный параметр ''[[Параметры файлов конфигурации#UseSimpleLineState|UseSimpleLineState]]'', позволяющий корректировать способ привязки состояний номерного плана к состояниям объектов.<br />
* Добавлен конфигурационнй параметр серверного и клиентского приложения ''[[Параметры файлов конфигурации#ADLoginChecker|ADLoginChecker]]'', позволяющий совместно с дополнительным приложением активировать вход в систему от учетных записей ActiveDirectory.<br />
* Исправлено воспроизведение файлов в клиентском приложении.<br />
* Исправлена ошибка АТС, связанная с подвисанием внутренних линий в резервированном состоянии при определенном стечени обстоятельств в call-центре при использовании оператора одновременно в Call-центре и в групповых номерах.<br />
* Добавлена возможность в [[Карта сети|карте сети]] при настройке шлюза без регистрации указывать отдельно Domain и SIP Proxy.<br />
* Исправлена ошибка в статистике в случае, если звонок участвует в нескольких задачах.<br />
* Добавлено отображение IP-адресов подключенных устройств в разделе [[Мониторинг#Линии|мониторинга линий]].<br />
* Реализована возможность отправки SMS и Email сообщений из модуля [[Передача_e-mail_и_SMS-сообщений|Телефон]] во время коммутаций. Отправка производится централизованно через [[Сценарии_АТС#SvcSendEmail|специальные сценарии]], задаваемые в разделе [[Системные_настройки|общих настроек]].<br />
* Онлайн-прослушивание разговоров снабжено по умолчанию функцией скрытия слушателя (слушатели не видят друг друга), если иное не установлено конфигурационным параметром [[Параметры файлов конфигурации#HideGhostMonitor|HideGhostMonitor]].<br />
* Исправлена ошибка АТС, связанная с обработкой HOLD в режиме использования сценария исходящей маршрутизации, влекущая в некоторых случаях прогрессирующее подвисание внешних линий.<br />
* Добавлена возможность хранения записей в MP3-формате, а также выбор формата для микшера в разделе [[Управление записями разговоров]].<br />
* Добавлена возможность совершать исходящие звонки на произвольный URI, используя транки шлюзов без регистрации.<br />
* Реализована предварительная функция [[Взаимосвязанная работа серверов Oktell|взаимодействия серверов Oktell между собой]] путем использования общих транков, а также службы обмена сообщениями об абонентах звонков и номерных планах.<br />
* Реализовано отображение состояний групповых номеров в разделе [[Сотрудники]].<br />
* Оптимизирован расчет [[Ресурсы|ресурсов]] при отображении нескольким супервизорам.<br />
* Обнаружена и исправлена редко-возникающая ошибка обработчика задачи, подвешивающая оператора в занятом состоянии вплоть до перезагрузки сервера.<br />
* Обнаружена и исправлена редко-возникающая ошибка АТС, подвешивающая линии в занятом состоянии вплоть до перезагрузки сервера.<br />
* Реализована внешняя служба/приложение туннельного доступа клиентов к БД мимо службы АТС в целях уменьшения объема пика используемой виртуальной памяти процессом сервера. Подробнее в описании [[Параметры_файлов_конфигурации#DbRemote|конфигурационных настроек]].<br />
* Существенно оптимизирован способ закачивания и скачивания больших файлов через веб-сервер.<br />
* Реализовано автоматическое применение установленного времени ожидания ответа абонента в компоненте [[Компоненты_служебных_сценариев#Call|Дозвон]] при наборе внешних номеров через [[Сценарии_АТС#SvcDialExt|служебный сценарий набора номера]] из задач и стандартных номеров в соответствии с исходным значением.<br />
* Реализовано хранение изображений пользователей на диске и в разных разрешениях для нужд веб-клиента.<br />
* В конфигурационный файл сервера добавлен параметр [[Параметры_файлов_конфигурации#GCCollectorPeriodMin|GCCollectorPeriodMin]], позволяющий регулировать период принудительного запуска сборщика мусора .NET.<br />
* Найден способ наладки счетчиков производительности в случае сбоя, влекущего невозможность работы .NET с процессами.<br />
* В качестве дополнительного параметра для [[Контрольные события|контрольного события]] ''Оператор пропустил вызов'' добавлен номер звонившего абонента.<br />
* Исправлена ошибка АТС, отбивающая SIP телефон, на котором был нажат HOLD.<br />
* Добавлена возможность изменять CalledId наравне с CallerId в сценарии [[Сценарии_АТС#SvcCallerIdModify|Преобразования CallerId]].<br />
* Исправлена ошибка, в некоторых случаях мешающая прослушать файл записи конференции, связанная с неверным именованием файла или отсутствием упакованного файла.<br />
* Реализована передача на [[файловый сервер]] информации о всех каталогах с записями разговоров, делающая возможным хранение записей на разных дисках. [[Параметры_файлов_конфигурации#FileServerRecDir|Подробно о необходимой настройке]].<br />
* Добавлена функция автоматического перевода оператора в состояние перерыва со служебным кодом 1003 при блокировке системы в случае, если он свободен. Если иное не установлено параметром конфигурационного файла клиентского приложения [[Параметры_файлов_конфигурации#AutoUserStateChangeOnSystemLock|AutoUserStateChangeOnSystemLock]].<br />
* Оптимизировано взаимодействие пользователей с сервером при большом количестве подключений.<br />
* Введен ряд новых параметров в конфигурационный файл сервера, позволяющий модифицировать стандартное выделение асинхронных потоков для различных служб сервера. [[Параметры_файлов_конфигурации#ThreadManagement|Подробнее]].<br />
* Повышен приоритет использования параметра CallerName, задаваемого в компоненте сценария IVR [[Компоненты_сценариев_IVR#Switch|Переключение]]. Обратное поведение доступно конфигурационным ключом [[Параметры_файлов_конфигурации#UsePriorSwitchCallername|UsePriorSwitchCallername]].<br />
* Для IP-телефонов в карте сети добавлен параметр, позволяющий индивидуально выставлять настройки транслитерации CallerName. В общие настройки добавлен параметр, задающий поведение по умолчанию.<br />
* Оптимизирована процедура сохранения результатов звонка по задаче. Значительный эффект достигается в случае большой нагруженности сервера БД, и большого количества учетных записей пользователей в системе.<br />
* Выявлен и устранен ряд проблем, влекущих торможение сервера при больших нагрузках.<br />
* Устранена ошибка АТС, добавляющая нагрузку к серверу при звонке на групповой номер, одним из абонентов которого является SIP-телефон в режиме DND.<br />
* Исправлена ошибка менеджера задач при использовании сценария поиска абонента, влекущая после неудачной попытки звонка в некоторых обстоятельствах застревание абонента в списке вплоть до перезапуска службы сервера.<br />
* Исправлена ошибка менеджера задач, влекущая застревание абонента в обработчике задачи при одновременном использовании переключения абонента на IVR, настройке выхода из задачи при переключении на IVR, а также сценария IVR вместо отбоя.<br />
* Реализовано отображение новостей администраторам Oktell в статусной строке клиентского приложения. Может быть отключено в общих настройках для всех или индивидуально в конфигурационном файле клиентского приложения.<br />
* Обнаружена и исправлена ошибка, мешающая сохранению поля ICode в пространственной таблице oktell_cc_temp.dbo.A_Cube_CC_OperatorStates в случае, если оператор переходит в перерыв во время звонка.<br />
* Обнаружена и устранена проблема подключения VoIP каналов к системе в случае массового логина. Симптом: некоторые пользователи находятся в состоянии ''без телефона'' вплоть до повторного перезапуска клиентского приложения.<br />
* Изменено поведение [[Телефон|Телефона]] в части набора номера. Теперь набор осуществляется в поле для ввода с последующей разовой отправкой на сервер по нажатию на кнопку ''Набрать''. Подробное поведение, а также способы настройки и возврата прежнего поведения приведены в описании конфигурационного параметра [[Параметры_файлов_конфигурации#PhoneDirectDigit|PhoneDirectDigit]].<br />
* Исправлена ошибка менеджера задач, влекущая в редких случаях проставление в статистике статуса N/A в качестве результата звонка.<br />
* Добавлена функция мониторинга сервером таблицы пользовательских сообщений в БД (A_UserMessages) и рассылка сообщений пользователям при появлении новых. Подробнее в описании конфигурационного параметра [[Параметры_файлов_конфигурации#UserMessageCheckPeriodSec|UserMessageCheckPeriodSec]]<br />
* Реализована возможность автоматического отключения фильтра адресов для SIP-пакетов в соответствии со значением параметра конфигурационного файла [[Параметры_файлов_конфигурации#EnableSipTransportFilter|EnableSipTransportFilter]].<br />
* Реализована возможность подключения внешних [[Таблицы абонентов#ExtTables|таблиц абонентов]] непосредственно из других источников данных, минуя [[Подключение внешних БД|линковку]].<br />
* Изменено значение таймаута для исполнения SQL-запросов из плагинов с 30 секунд до 10 минут, а также добавлен параметр серверного конфигурационного файла DBPluginCommandTimeoutSec для управления этим значением.<br />
* Исправлена ошибка АТС, связанная с использованием стандартных номеров, включающих набор нескольких внешних номеров, влекущая при определенных обстоятельствах подвисание внешних линий в состоянии занятости до разрыва вручную.<br />
* Реализован учет выставленного, но еще не примененного состояния ''Перерыв'' при совершении звонков внутри АТС. Ранее учитывалось только при звонках из задач.<br />
* Исправлена ошибка автодозвона, подставляющая при звонке на внутренний номер в качестве CallerId всегда номера 101.<br />
* Модифицирована процедура периодического подтверждения активаций. Ранее была возможна ситуация, когда добавление нового дополнительного винчестера влекло изменение активационного кода привязки и требовалась переактивация вручную, связанная с выяснением пароля. При этом при прохождении подтверждения вручную в качестве кода активации используется прежний, а при прохождении переактивации вручную, код изменяется на текущий актуальный.<br />
* Управление настройками веб-сервера перенесено в раздел [[Настройки_веб-сервера|общих настроек]], включая порт, пароли доступа, а также способ авторизации. По умолчанию служба отключена.<br />
* Расширена функция ''[[Серверный HTTP интерфейс#upload|upload]]'' веб-сервера, позволяющая теперь указывать место размещения файла и способ обработки.<br />
* [[Серверный HTTP интерфейс]] пополнен функциями ''[[Серверный HTTP интерфейс#getavatar|getavatar]]'', ''[[Серверный HTTP интерфейс#getversion|getversion]]'', ''[[Серверный HTTP интерфейс#getsharedfile|getsharedfile]]'', ''[[Серверный HTTP интерфейс#download|download/files]]'', ''[[Серверный HTTP интерфейс#gettotalqueueinfo|gettotalqueueinfo]]''.<br />
* [[Клиентский HTTP интерфейс]] пополнен функцией ''[[Клиентский HTTP интерфейс#pbxstatplaybyidconn|pbxstatplaybyidconn]]''.<br />
* Расширен интерфейс [[Oktell_Web-Socket_Protocol|Web-Socket протокола]].<br />
* Реализован веб-плагин [http://js.oktell.ru oktell.js].<br />
* Реализована поддержка работы сервера за NAT с прямым пробросом портов по SIP-протоколу. Подробнее в разделе [[Настройки SIP-модуля]].<br />
* Выявлен и исправлен ряд проблем в аппаратной подсистеме обслуживания VoIP каналов, связанных с нестабильностью массового подключения и подвисания в занятом состоянии.<br />
* Существенно оптимизирован алгоритм микшера конференции.<br />
* Устранена незначительная утечка памяти в Subscribe-Notify модуле.<br />
* Выявлены и исправлены ошибки разного характера в SIP подсистеме, добавлены некоторые дополнительные параметры настройки. Подробнее в разделе [[Настройки SIP-модуля]].<br />
<br />
<br />
<br />
====версия 2.7 (28.03.2012)====<br />
<br />
* Добавлены функции управления конференциями в ядро клиентского приложения.<br />
* Произведена существенная оптимизация процесса перезагрузки сервера состояний. Обнаружены и устранены лишние устаревшие операции в БД.<br />
* Исправлена ошибка удаления пользователей после перезапуска сервера состояний при работе через веб-сокет.<br />
* Реализовано адекватное отсоединение веб-сокет пользователей по инициативе сервера.<br />
* Оптимизирована работа функции ping с клиентских приложений на сервер, имеющая целью стабилизировать поведение системы при нехватке ресурсов.<br />
* Оптимизировано сетевое взаимодействие между узлами системы в целях экономии асинхронных обработчиков.<br />
* Реализована запись лог-журналов на диск/в сеть через асинхронную очередь, не влияющую на приостановку работы системы из-за занятости дискового ресурса.<br />
* Исправлена ошибка в синхронизации абонентского списка с кэшем в памяти, возникшая после перевода процедуры сохранения результата звонка по задаче в асинхронный режим. Связана со звонком одному и тому же абоненту несколько раз при получении успешного результата.<br />
* Добавлена авторегулировка нагрузки менеджера задач по исходящим кампаниям в зависимости от загрузки системы и БД.<br />
* Оптимизирована функция сервера состояний поиска свободных внешних линий для менеджера задач.<br />
* Обнаружена и исправлена ошибка совместного доступа к конференции, влекущая невозможность завершить конференцию.<br />
* Рассылка событий из конференций выведена в асинхронную очередь рассылки в целях ускорения работы конференций с большим количеством участников.<br />
* В интерфейс веб-сокета добавлены методы getmyuserinfo, setusertextmessageviewed, событие usertextmessageviewed. Изменен метод sendusertextmessage.<br />
* В реализации веб-сокета обнаружена и исправлена ошибка с отправкой multiframe-сообщений.<br />
* При отмене вызова на гарнитуру клиентского приложения не сбрасывался таймер автоматического снятия трубки. Исправлено.<br />
* Исправлена ошибка входа в конференцию через сценарий. В случае, если разрыв линии происходит до окончания входа, конференция блокируется на 5 секунд. Массовый доступ в такую конференцию вызывает цепную реакцию и как следствие длительную блокировку всего сервера.<br />
* В компонент «Числовое воспроизведение» добавлено воспроизведение евроцентов.<br />
* Обнаружена и устранена фиксация пропущенных звонков при звонке через автодозвон.<br />
* Пароль пользователя с символами [, ], # заменялся пустым. Исправлено.<br />
* Изменен режим доступа к веб-камере. Добавлена возможность настройки разрешения и битрейта при работе с камерой.<br />
* В компонент «Статус объекта» добавлены функции, возвращающие количество занятых задачей линий, линий участвующих в разговоре по задаче. <br />
* В компонент «Статус объекта» добавлены функции очистки оперативной статистики задач, принудительной синхронизации таблицы абонентов. <br />
* Восстановлена сортировка в выпадающих списках клиентского приложения.<br />
* В компонент «Воспроизведение числа» добавлена возможность выбора языкового алгоритма (русский, английский, украинский, чешский).<br />
* Компонент «Воспроизведение числа» получил возможность воспроизведения англоязычных порядковых числительных.<br />
* Добавлена возможность указания дополнительных номеров, привязанных к sip-потокам (учетным записям), на которые осуществляется адресация INVITE пакетов от SIP-провайдера.<br />
<br />
<br />
<br />
====версия 2.7 (15.02.2012)====<br />
<br />
* Устранена утечка памяти в сессиях при отбое входящих звонков.<br />
* Исправлена невозможность отжатия кнопки «Хочу сказать» в селекторном совещании.<br />
* Добавлена возможность настраивать прерывание воспроизведения компонентом «Числовое воспроизведение».<br />
* Обнаружена и устранена невозможность сохранить дату окончания работы текстовой задачи.<br />
* Обнаружена и устранена ошибка, влекущая неполноценную очистку после работы компонента «Действие web-crm».<br />
* Реализован режим вызова «Интерком» на внешние и внутренние sip-каналы. Добавлены соответствующие настройки в компоненты «Переключение», «Переключение на внешние», «Дозвон».<br />
* Оптимизирована рассылка событий о смене состояний внутренних номеров по клиентским приложениям, а также менеджера задач в целях экономии асинхронных обработчиков.<br />
* Добавлена реализация протокола веб-сокет версии 13 согласно RFC6455.<br />
<br />
<br />
====версия 2.6 (31.12.2011)====<br />
<br />
* Реализовано сохранение сессии между сценариями набора номера и обработки результата звонка по задаче в случае, если звонок неудачен был.<br />
* В HAL.SIP отправлялось пустое значение поля realm в ответе 401.<br />
* Добавлены алиасы для шлюзов при настройке в карте сети для обработки случая входящих звонков с альтернативных серверов при регистрации на основном.<br />
* При поиске номера в АТС лексикографическая сортировка заменена на числовую.<br />
* Устранен разрыв соединения при вызове метода веб-сервера «setbusyinexternaltask» со значением «0».<br />
* При перезагрузке аппаратного модуля на сервере состояний не обновлялись коды для привязки вновь регистрирующихся VOIP устройств. Исправлено.<br />
* Из ответа веб-сервера удалены концевые символы \r\n, подмешивающиеся и мешающие организовывать второй запрос в рамках подключения.<br />
* Скорректирована работа таймеров в HAL.<br />
* Исправлена ошибка отображения в клиентском модуле «Администрирование.Права».<br />
* В веб-сервер добавлен метод upload для закачки файлов.<br />
* Исправлена ошибка менеджера БД при организации запросов к полям таблицы абонентов, если таблица со связями (constraint). Симптом: возвращается пустое значение.<br />
* Исправлена ошибка в HAL.SIP при завершении SUBSCRIBE-сессии. Ведет к исключению по неверному доступу к памяти и невозможности продолжения работы аппаратного модуля.<br />
* Исправлена ошибка в компоненте «Запуск процесса» в режиме ожидания выхода. Симптом: если процесс выполняется достаточно долго, компонент вешает сценарий до ручного разрыва.<br />
* Налажено обращение к строковым полям БД при исполнении запросов из сценариев через кодировку Unicode.<br />
* Веб-сокет получил возможность работать непосредственно с браузерами. Введен режим «Браузеры к октелл» для подключения web-crm без собственного web-socket сервера.<br />
* Добавлена поддержка версии 8 в веб-сокет.<br />
* В протокол веб-сокета добавлен метод execpredefineddbstoredproc для прямого исполнения разрешенных конфигом веб-сокета процедур в БД.<br />
* Добавлена настройка в клиентский конфигурационный файл HeadsetNonACMMode для выбора режима звонка без использования автодозвона.<br />
* Исправлено воспроизведение порядковых числительных. Симптом: вместо среднего и женского родов воспроизводился мужской.<br />
* В клиентский веб-интерфейс добавлены методы flashcall, getcurrentuserlogin, getcurrentserveraddress.<br />
* Исправлена ошибка автодозвона при звонке внутри АТС на несуществующий номер. Симптом: линия подвисает в состоянии reserved.<br />
* Реализовано автоматическое создание направления «Все линии».<br />
* Существенно оптимизирована работа с БД в нагруженных проектах за счет организации очередей по направлениям: статистика коммутаций, состояния пользователей, диалоговые сценарии, результаты звонков и попыток, уведомления пользователям.<br />
* Обнаружена и устранена ошибка АТС, ведущая к некорректному завершению исходящего звонка по SIP при моментальном обрыве после начала вызова. <br />
* Оптимизирован массовый запрос на получение статистики рабочего места оператора. Устранена проблема нехватки потоков на обработку клиентских запросов из-за длительного исполнения запроса в БД.<br />
* В интерфейс веб-сокета добавлены методы getflashedabonentinfo, getversion, pbxclearflash, getextendedlineinfo. В запрос login добавлено свойство showid.<br />
* Исправлена процедура авторизации на веб-сокет сервере при использовании русских букв в логине.<br />
* Исправлена процедура хендшейка к веб-сокет серверу. Симптом: при наличии в HTTP запросе дополнительных полей и дополнительных значений в стандартных полях, хендшейк не производился.<br />
* Изменена процедура рисования динамических линий при связи объектов в сценариях и карте сети для более быстрой работы в win7-aero.<br />
* Исправлена ошибка при открытии диалоговых сценариев, сохраненных в версиях до 10.08.2010, при использовании в них переменных с односимвольными именами.<br />
* Добавлен параметр серверного конфигурационного файла TaskListAbonentUseLikeNumber, позволяющий активировать поиск абонентской строчки в таблице с фильтром "number like '%x%'". По умолчанию «0» и поиск осуществляется только по идентификатору абонента.<br />
* Обнаружена и устранена проблема в АТС, влекущая идентичность сессий у двух разных звонков, осуществивших дозвон на одну внутреннюю линию.<br />
* Реализована возможность записи лог-журналов и файлов записей коммутаций и конференций на удаленный сервер в целях снижения нагрузки на локальный диск. Требуется указание в конфигурационном файле сервера ключей FileServer_Log и/или FileServer_Record со значениями в формате "address:port", а также активность на указанном сервере специальной службы октелл-файл-сервера.<br />
* В настройку компонента служебного сценария «Дозвон» добавлена возможность указывать callerid и callername для внутренних и внешних вызовов.<br />
* Проведена корректирующая работа над доступом к критической секции сервера состояний. Симптом: замечены случаи зависания системы на несколько минут или вообще с невозможностью продолжения всяческой деятельности: звонков, авторизаций, и т.д.<br />
* Реализован режим видео-конференций.<br />
<br />
<br />
====версия 2.6 (14.09.2011)====<br />
<br />
* Исправлена проблема несохранения принятых файлов факса в случае, если произошел разрыв связи.<br />
* Скорректирована адресация в пакетах sip NOTIFY для поддержки работы телефонов LinkSys.<br />
* Исправлена ошибка обработчика входящей задачи, связанная с удалением правила распределения звонка на операторов при деактивации и перезагрузке сервера состояний.<br />
* Исправлена ошибка менеджера задач в режиме персонального вывода абонента из очереди на оператора. Симптом: несколько звонков поступали на одного оператора, и только один успешный, остальные отбивались сразу.<br />
* Исправлено отображение модуля софт-телефон в режиме входящего вызова. Симптом: если в очереди несколько абонентов, информация не изменяется при смене вызывающего.<br />
* Исправлена проблема HAL.SIP при обработке встречных BYE и reINVITE. Симптом: изредка возникает исключение, требующее перезапуска аппаратного модуля.<br />
* Исправлена проблема HAL.VOIP, связанная с отвалом устройства в состоянии HookUp и требующая перезагрузки аппаратного модуля.<br />
* Исправлена проблема с отправкой Keep-Alive пакетов с сервера.<br />
* Добавлена сортировка IP-телефонов в параметрах аппаратуры по названиям.<br />
* Исправлена ошибка начальной инициализации. Симптом: при добавлении в карту сети новых устройств с регистрацией сразу принимают готовое состояние.<br />
* Исправлена иногда возникавшая ошибка HAL.SIP при разрыве sip-соединения, требующая перезагрузки аппаратного модуля.<br />
* Устранена постоянная перезагрузка клиентского устройства после перезапуска аппаратного модуля на сервере.<br />
* Исправлена ошибка HAL.SIP, связанная с регистрацией каналов на внешнем шлюзе до инициализации сетевого канала.<br />
* Исправлена ошибка при логине пользователя, возникающая в случае регистрации с той же под другим именем, когда предыдущий отвалился, но еще не обработан сервером.<br />
* При автодозвоне через сценарий набора номера отсутствует информация о вызывающем в уведомлении. Исправлено.<br />
* В карту сети добавлен режим генерации паролей для телефонов.<br />
* В компонент «Статус объекта» добавлена функция мягкого сброса, переводящая линию в «Сценарий вместо отбоя».<br />
* Если в компоненте «Действие web-crm» не назначена ветка «Переход, ошибка», а компонент неудачен, сценарий обрывался. Исправлено.<br />
* Реализовано преобразование отправляемых с клиента по факсу данных в единый tiff-документ с использованием Office.COM. Требуется .NET framework 3.0 и установленный Microsoft Office 2003 или выше, а также установленный XPS принтер. Для работы в этом режиме необходимо в конфигурационном файле клиентского приложения изменить значение ключа «FaxPreperformProcess» на «1».<br />
* В клиентский веб-сервер добавлена поддержка метода setbusyexternaltask.<br />
* Исправлена ошибка при удалении доминирующей роли в модуле «Администрирование.Пользователи».<br />
* Обнаружена и исправлена блокировка в HAL.SIP.<br />
* Исправлена ошибка отсутствующего звука после FLASH из сценария IVR с воспроизведением в конференцию.<br />
* Отключенная линия могла использоваться при исходящих звонках в некоторых режимах. Исправлено.<br />
* Исправлена ошибка затирания кода линии в хранилище сервера состояний после сохранения карты сети.<br />
* Исправлен ряд проблем HAL.SIP при анализе некорректных сообщений: длинных или кривых значений, отсутствующих полей.<br />
* Исправлен ряд проблем HAL.SIP при нестандартном поведении ответной стороны, связанной с тестами реакции на некорректное поведение.<br />
* Реализована более полная проверка на валидность входящего sip-пакета.<br />
* Добавлен метод веб-сервера execsvcscriptplain для исполнения сценариев и возврата HTML/XML-ответа в прямом необернутом виде.<br />
* HAL.SIP обучен отвечать 481 в ответ на кривые CANCEL вместо прежнего 405.<br />
* Sip ответ 487 заменен на 480.<br />
* Снижено минимальное значение периода перерегистрации с 60 до 30 секунд.<br />
* Исправлен поиск сценария IVR при запуске проектного фонового сценария из другого сценария.<br />
* Исправлена ошибка АТС, приводящая в некоторых случаях к некорректному сбросу таймера отбоя. Симптом: канал подвисает до разрыва вручную.<br />
* Обнаружена и исправлена ошибка при одновременном запуске и остановке канала.<br />
* Добавлено ограничение на количество одновременно работающих асинхронных потоков по направлениям работы.<br />
* Оптимизирована схема отправки событий с сервера на клиентов.<br />
* В веб-сервер добавлен метод wp_setuserstate.<br />
* Устранен некорректный сброс настройки keep-alive после сохранения карты сети.<br />
* В компонент «Статус объекта» добавлены определяющие действия для элемента «Пользователь»: ид, имя, логин, линия, для элемента «Линия»: ид, номер, код, пользователь, цепочка(сессия).<br />
<br />
<br />
====версия 2.6 (25.07.2011)====<br />
<br />
* В модуле [[Мои контакты|«Офис. Контакты»]] введен запрет на создание типов контактов с одинаковыми именами.<br />
* Изменен механизм рассылки сообщений из конференции по клиентским рабочим местам. <br />
* В ролевую политику добавлен ряд новых привилегий, разграничивающих права доступа к отдельным модулям в<br />
* Исправлена ошибка при работе компонента IVR [[Компоненты сценариев IVR#Переключение на номер|Переключение]]. Симптом: при запрете использования очереди в настройке компонента после завершения периода прямого начального вызова свободных абонентов вызов прекращается, но вызывающий абонент продолжает слышать КПВ.<br />
* Введен режим запрета редактирования параметров системы в разделе администрирования. Подробнее [[Настройка клиентского приложения#BlockAdmin|в описании]].<br />
* Обнаружена и устранена возможная проблема в операции сохранения [[Карта сети|карты сети]]. Симптом: при большом количестве сохраняемых SIP-объектов возможна потеря части настроек аппаратуры при последующем перезапуске.<br />
* Реализована поддержка протокола web-socket для взаимодействия с Web-CRM системами. Подробно об интеграционной архитектуре и протоколе в разделе [[Oktell Web-Socket Protocol||«Интеграции. Web-Socket протокол»]]. Подробно о настройках в разделе [[Интеграция с Web-Socket CRM|«Общие настройки. Интеграция с Web-Socket CRM»]]. Подробно о настройке динамических вызовов в описании компонента сценариев [[Общие компоненты сценариев#Действие/карточка в plugin или WebCRM|«Действие/карточка в plugin или WebCRM»]].<br />
* Добавлен компонент [[Общие компоненты сценариев#Действие/карточка в plugin или WebCRM|«Действие/карточка в plugin или WebCRM»]].<br />
* В HAL.SIP реализована отправка 481 на запрос BYE, если нет сессии и транзакции или ранее произведена встречная отправка BYE.<br />
* В список параметров аппаратуры вынесены настройки для режима ECM софт-факса.<br />
* В список [[Выражения|функций выражений]] сценариев добавлены urlencode, urldecode, b64encode, b64decode, urlencodeUtf8, urldecodeUtf8, b64encodeUtf8, b64decodeUtf8.<br />
* Исправлена ошибка, в связи с которой не сохранялся указанный в служебной задаче стартовый параметр для сценария.<br />
* Устранены визуальные глюки в окне пользовательских сообщений встроенного чата: смещение вкладок, признак просмотренности, проблемы со сворачиванием/разворачиванием в win7.<br />
* Реализована кольцевая схема выделения медиа-портов для RTP сессий. В целях борьбы с подвисающими на некоторое время внешними устройствами-шлюзами, атакующими порты сервера Oktell с неактуальными данными.<br />
* Добавлено ограничение на возврат 1000 строк в журналы звонков, где раньше ограничение отсутствовало.<br />
* Исправлена ошибка при отправке тестового e-mail из раздела [[Настройки E-mail|общих настроек]].<br />
* Оптимизирована операция загрузки списка операторов в модуле ''[[Операторы|«Call-центр. Операторы»]]''.<br />
* Добавлена возможность заносить информацию в лог-журнал Common из компонента ''[[Общие компоненты сценариев#Уведомление|«Уведомление»]]'' сценариев.<br />
* Исправлена проблема, делающая возможным отображение одинаковых веб-форм у разных операторов, обслуживающих разные вызовы, но открывающих формы в один момент времени.<br />
* Добавлена http-функция скачивания файлов записей с веб-сервера Oktell по ссылкам в журналах разговоров, отправляемых через web-socket подключение. Подробнее в разделе [[Серверный HTTP интерфейс|методов веб-сервера]].<br />
* В интерфейс веб-сервера службы добавлен ряд http-функций управления звонком из доверенного веб-сервера от имени авторизованных пользователей по указанию ключа рабочего места, пользователя или линии. Подробнее в разделе [[Серверный HTTP интерфейс|методов веб-сервера]].<br />
* Реализована поддержка авторизации пользователей через web-socket протокол с привязкой к рабочим местам.<br />
* Реализована настройка, позволяющая активировать соединение внешней линии с IVR сценарием вместо отбоя при разрыве связи по инициативе сервера. Подробнее [[Параметры АТС#ScrInsteadBusy|в описании]].<br />
* Проведена работа над обнаруженными ошибками в реализации клиент-серверного протокола oktcp. В частности устранена причина утечки памяти.<br />
* Добавлена возможность делить карту на слои, упрощая визуальное отображение.<br />
* Добавлена настройка в параметры аппаратуры, позволяющая указывать caller-id в поле From отправляемых INVITE-пакетов.<br />
* В интерфейс веб-сервера клиентского приложения добавлен ряд http-функций управления звонком и карточкой диалогового сценария. Подробнее в разделе [[Клиентский интерфейс|методов веб-сервера]].<br />
* Запущен сервер сбора статистических данных с обновленных систем в целях выявления проблем. Режим включается/отключается в [[Информация о лицензиях#AllowSendStat|общих настройках]].<br />
* Справка перенесена в онлайн.<br />
* Обнаружена и исправлена ошибка обработки серверных сообщений, связанная с перемешиванием их последовательности.<br />
* Добавлена функция getcurrentuserid в интерфейс метода OnQuery plugin-программ. Подробнее в руководстве по интеграции.<br />
* Добавлена возможность множественного выделения узлов в дереве [[Настройки оборудования|параметров аппаратуры]] стандартным образом кнопкой SHIFT.<br />
* Добавлен параметр серверного конфигурационного файла [[Параметры файлов конфигурации#FORCE_BRACKETS_FOR_URI|FORCE_BRACKETS_FOR_URI]] для расстановки в SIP пакеты треугольных скобок в заголовки To и From.<br />
* Обнаружены и исправлены визуальные проблемы в отображении формы отправки межпользовательских сообщений, стоп-формы, софт-телефона в некоторых режимах.<br />
* В интерфейс клиентского веб-сервера добавлены команды headsetanswercall, disconnectcall, declinecall по работе с текущим звонком. Подробнее в разделе [[Клиентский интерфейс|методов веб-сервера]].<br />
* Реализована возможность использовать плагины, запущенные в [[Внешние модули#LoadMode|отдельных процессах]].<br />
* Исправлена ошибка АТС в работе Flash-перключения в редкой ситуации при специфических условиях. Симптом: заблокировалась линия, пользователь не может переподключиться.<br />
* Добавлена возможность корректировать громкость сигнала софт-факса в каналах CTI (Alder, Synway) из модуля [[Настройки оборудования|параметров аппаратуры]].<br />
* Добавлена возможность фиксировать в лог журналах значения [[Управление сервером#PerformanceCounters|счетчиков производительности]].<br />
* Компонент сценариев [[Общие компоненты сценариев#Запуск процесса|«Запуск процесса»]] получил возможность дожидаться завершения запущенного процесса (с возможностью установки таймаута и принудительного завершения).<br />
* В компоненте сценариев IVR [[Компоненты сценариев IVR#Запись звукового файла|«Запись»]] реализован выбор формата и кодека, в который производить запись.<br />
* Настроена и протестирована работа сервиса распознавания речи, записанной в сценарии.<br />
* Обнаружена и устранена причина заметного торможения при сохранении объемных карт сети.<br />
* В компонент сценариев [[Общие компоненты сценариев#Статус объекта|«Статус объекта»]] добавлены функции линии: текущая позиция в очереди, расчетное оставшееся время ожидания в секундах.<br />
* В компонент сценариев [[Общие компоненты сценариев#Статус объекта|«Статус объекта»]] добавлена функция сервера: обновить список задач.<br />
* Для более корректного определения адреса удаленного SIP-устройства в [[Настройки оборудования|параметры аппаратуры]] вынесена явная настройка для SIP-потоков, устанавливающая в качестве адреса обратный адрес отправителя или адрес контакта из SIP-пакета. Ранее определение велось автоматически, но существовал целый спектр условий, при которых возникала путаница и отправляемые пакеты не доходили до адресата.<br />
* Реализована возможность flash-перевода на сценарий IVR без перезапуска последнего, а путем подменой линии. Введена [[Сценарии IVR#VarFlash|служебная переменная]], определяющая режим, а также новый тип системного IVR сценария [[Параметры АТС#ScrFlash|маршрутизации при переводе]], единственный, где режим перевода с подменой по умолчанию установлен.<br />
* Добавлена возможность строить глубокое дерево отделов в модуле «Сотрудники». Для этого отделы необходимо именовать с разделителем (символ «.»), а также в конфигурационных файлах клиентских приложений установить значение «1» для ключа [[Параметры файлов конфигурации#SplitDepartmentsTreeByDot|«SplitDepartmentsTreeByDot»]].<br />
* Реализована возможность добавления участников в конференцию непосредственно в модуле управления в [[Конференц-связь|софт-телефоне]].<br />
* Изменен принцип поведения АТС при переключении с IP-телефонов. Коснулось отмены консультационного звонка и возврата к абоненту. Ранее кнопка «Отмена» на IP-телефоне производила соединение двух абонентов, сейчас производится отбой второго и возврат к режиму HOLD с удержанием первого.<br />
* Исправлен ряд мелких недочетов в различных модулях системы.<br />
* В течение нескольких месяцев проводилась работа над обнаруженными редко возникающими ошибками в медиа-ядре, в алгоритме работы с джиттер-буфером, в работе клиентских телефонных устройств.<br />
<br />
<br />
<br />
====версия 2.5 (03.12.2010)====<br />
<br />
* Модифицирован алгоритм разбора электронной почты, полученной по протоколу POP3. Реализована поддержка multipart/alternative, вложенных сообщений message/rfc822, в компонент сценария добавлено [[Общие компоненты сценариев#Прием входящего сообщения электронной почты|свойство]], позволяющее устанавливливать предпочитаемый тип контента (text/plain, text/html, text/xml и другие). <br />
* Реализован альтернативный стандартному режим вывода абонентов из очереди входящей задачи при освобождении операторов. В настройках задачи можно выбрать между стандартным конкурентным режимом и режимом с однократным индивидуальным распределением. Подробнее в [[Голосовые задачи#Дополнительно|описании свойства задачи]]. <br />
* В веб-интерфейс клиентского приложения добавлен метод [[Клиентский интерфейс|getcurrentcallinfo]]. <br />
* При исходящих звонках через SIP-шлюз без регистрации при формировании поля From организовано применение адреса локальной машины взамен указываемого ранее адреса шлюза. <br />
* По аналогии с очисткой статистики звонков реализовано удаление статистики и записей конференций. <br />
* Произведена несущественная модификация в организации транзакций с MS SQL SERVER, позволяющая активировать пул подключений. И при этом использовать прилинкованные базы данные, не поддерживающие усиление транзакций. <br />
* Исправлена ошибка в алгоритме перезвона строго в назначенное время. <br />
* Исправлена ошибка в обработчике каналов Yeastar E1. Симптом: у разных подряд идущих звонков одинаковые идентификаторы сессий. <br />
* Исправлена ошибка, делающая невозможным установить свойство задачи с помощью компонента сценариев [[Общие компоненты сценариев#Статус объекта|Статус объекта]] с помощью указания задачи по ключу.</div>Peter%D0%A1%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D0%B9_HTTP_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81Серверный HTTP интерфейс2014-06-30T12:33:04Z<p>Peter: </p>
<hr />
<div>[[Веб-интерфейс|Наверх]]<br />
<br />
<br />
Встроенный web-сервер Oktell<br />
* обрабатывает поступающие запросы в рамках Web-API (требуется базовая авторизация под учетной записью любого пользователя, имеющему привилегию исполнения методов Web-API).<br />
* выдает страницы из папки WWW (авторизация не требуется).<br />
* обслуживает подключения WebSocket для работы пользователей в web-клиенте и в решениях, интегрированных с помощью Oktell.js или непосредственно по интеграционному протоколу Oktell WebSocket (авторизация происходит в рамках интеграционного протокола под учетной записью одного из пользователей).<br />
<br />
В случае необходимости сервисного доступа к API необходимо создать дополнительную учетную запись пользователя, снабдить его правами и использовать его авторизационную информацию.<br />
<br />
<br />
Серверная служба осуществляет прослушивание портов 80, 4055 (могут быть изменены в [[Настройки_веб-сервера|настройках веб-сервера]]) и способна исполнять некоторые поступающие на него по протоколу HTTP (или HTTPS) запросы. Серверная служба осуществляет прослушивание всех сетевых интерфейсов. <br />
<br />
На все запросы, требующие, но не прошедшие авторизацию, веб-сервер отвечает «403 Forbidden».<br />
В качестве логина/пароля для basic-авторизации выступают логин-пароль любого пользователя, имеющего ролевую привилегию исполнения web-api-запросов.<br />
<br />
Запросы могут поступать с использованием методов GET и POST. Как GET, так и POST запрос позволяет перечислять параметры в URL.<br />
<br />
Начиная с версии Oktell 2.9 обязательно использование''' basic-авторизации''', например: <br />
http://login:password@192.168.0.1:4055/wp_setuserstate?user=admin&userstateid=5<br />
<br />
<br />
===Команды серверного веб-интерфейса===<br />
<br />
<br />
-------------------------------<br />
<br />
<div id="execsvcscript"></div><br />
'''execsvcscript'''. Осуществляет запуск произвольного служебного сценария на сервере (код запуска 27). Запуск служебного сценария может осуществляться синхронно и асинхронно. В синхронном режиме возвращаемое сценарием значение (присвоенное служебной переменной [[Служебные сценарии|Возвращаемое значение 1]]) передается в качестве ответа на запрос. <br />
<br />
Параметры: <br />
<br />
* <span style="color:green;">name</span> - название служебного сценария, подлежащего запуску, существующего и размещенного на сервере в каталоге общих сценариев. <br />
<br />
* <span style="color:green;">startparam1, startparam2, startparam3, startparam4, startparam5</span> - значения стартовых параметров, передаваемых в сценарий и доступных в качестве [[Функции|соответствующих функций]]. <br />
<br />
* <span style="color:green;">async</span> - режим запуска служебного сценария. 0 - синхронно с ожиданием завершения и возвратом значения, 1 - асинхронно. <br />
<br />
* <span style="color:green;">timeout</span> - в случае запуска в синхронном режиме устанавливает максимально допустимое время ожидания завершения сценария в секундах. При превышении обрывает ожидание и возвращает ответ на веб-запрос без результата работы сценария. <br />
<br />
http://login:password@192.168.0.1:4055/execsvcscript?name=SvcScript1&startparam1=123&startparam2=234&async=0&timeout=10<br />
<br />
Пример структуры возвращаемого значения:<br />
<br />
<pre><br />
<?xml version="1.0" encoding="utf-16"?><br />
<oktellxmlmapper version="80710"><br />
<data name="result" count="1"><br />
<property_set name="execsvcscript"><br />
<property_simple key="started" value="1" name="success" /><br />
<property_simple key="startresult" value="0" name="success" /><br />
<property_simple key="returnvalue" name="abcdef" /><br />
</property_set><br />
</data><br />
</oktellxmlmapper><br />
</pre><br />
<br />
<br />
-------------------------------<br />
<br />
'''execsvcscriptplain'''. Аналогично методу <span style="gray;">execsvcscript</span> осуществляет запуск произвольного служебного сценария на сервере (код запуска 27) с такими же параметрами. Отличие состоит в том, что ответ сценария, сохраненный в переменную «Выходное значение» без искажений размещается в контенте ответа на запрос, в то время как базовый метод обрамляет ответ в XML формат.<br />
<br />
<span style="color:green;"><br />
Для того, чтобы исполнять некоторые служебные сценарии без базовой авторизации можно воспользоваться следующей схемой. Из каталога ''WWW'' файлы отдаются без авторизации. Дополнительные изменения в этом каталоге администратором сервера могут инициировать выдачу ответа не в виде содержимого файла, а в виде результата работы служебного сценария. Разберем на примере, остальное вы сможете сделать по собственным задачам.<br />
<br />
<span style="color:green;"><br />
1. Положите в папку ''WWW'' в рабочем каталоге сервера файл ''test.html'' с любым тестовым содержимым.<br />
<br />
<span style="color:green;"><br />
2. Выполните запрос ''http://server:port/test.html'', подставив адрес и порт доступа к веб-серверу Oktell. Без пароля должно вернуться и отобразиться в браузере содержимое файла.<br />
<br />
<span style="color:green;"><br />
3. Рядом с файлом ''test.html'' создайте файл ''test.html.execsvcscriptplain'', в его тело разместите JSON-форматированную строку, например:<br />
<pre><br />
{<br />
"scriptname":"myscript", <br />
"timeout":10, <br />
"parameter1":"ЧЕРЕЗ WWW"<br />
}<br />
</pre><br />
<br />
<span style="color:green;"><br />
4. Создайте служебный сценарий ''myscript'', выводящий какое-нибудь уведомление, чтобы было видно и понятно, что сценарий запустился.<br />
<br />
<span style="color:green;"><br />
5. Выполните тот же запрос ''http://server:port/test.html'' — уведомление должно отобразиться.<br />
<br />
<span style="color:green;"><br />
6. Все параметры GET запроса (или POST запроса с ''Content-type: application/x-www-form-urlencoded'') будут разобраны и переданы на старт сценария точно также, как если бы исполнялся метод ''execsvcscriptplain''. То есть значения параметров, условия исполнения — асинхр/синхр, таймаут ожидания и.т.д.<br />
<br />
<span style="color:green;"><br />
7. В качестве значения служебной переменной ''Выходное значение'' сценария вы можете организовать вывод любого содержимого, в том числе и HTML страницы, которое будет без изменений возвращено в теле HTTP-ответа.<br />
<br />
<span style="color:green;"><br />
8. Для передачи в сценарий некоторых служебных данных из тела HTTP-запроса существуют специальные значения, которые можно принудительно назначить в качестве значений одного из пяти возможных стартовых параметров служебного сценария (оригинальные значения, передаваемые в сценарий с помощью параметров GET будут в этом случае частично или полностью перезатерты):<br />
%parameters% — строка параметров GET в неразобранном виде;<br />
%content% — контент запроса;<br />
%headers% — все заголовки HTTP запроса (фактически полный текст запроса без контента);<br />
%page% — адрес запрошенной страницы;<br />
%requestline% — полный текст строки-запроса;<br />
Например:<br />
<br />
<pre><br />
{<br />
"scriptname":"myscript", <br />
"timeout":10, <br />
"parameter1":"Константа",<br />
"parameter3":"%page%"<br />
}<br />
</pre><br />
<br />
<span style="color:green;"><br />
При этом значения параметров 2, 4 и 5 будут переданы из самого GET запроса, если они в нем указаны.<br />
</span><br />
<br />
<br />
<br />
-------------------------------<br />
<br />
'''execpluginmethod'''. Исполняет указанный метод в [[Встраиваемые_plugin-модули|серверном плагине]], передавая в него параметры и возвращая результат с выходными параметрами.<br />
<br />
Параметры:<br />
<br />
* <span style="color:green;">idmodule</span> - идентификатор серверного плагина.<br />
* <span style="color:green;">idform</span> - идентификатор исполняемого метода (формы).<br />
* <span style="color:green;">inputparams</span> - набор входных значений в JSON строке, соответствующих заявленным входным параметром выбранной формы.<br />
* <span style="color:green;">inputparamsb64</span> - альтернативный вариант кодирования набора входных значений - через base64.<br />
<br />
<pre><br />
{<br />
"param1": "...",<br />
"param2": "...",<br />
...<br />
}<br />
</pre><br />
<br />
В ответе возвращается строка с JSON содержимым результата. <br />
<br />
-------------------------------<br />
<br />
'''tst_getintnumberreadyusers'''. Для указанного внутреннего стандартного номера возвращает количество свободных и занятых пользователей, а также список свободных пользователей, указанных в виде прямых внутренних стандартных номеров, по которым их можно вызвать.<br />
<br />
Параметры: <br />
<br />
* <span style="color:green;">number</span> - номер, состояние объектов которого необходимо определить. <br />
<br />
http://login:password@192.168.0.1:4055/tst_getintnumberreadyusers?number=120<br />
<br />
Пример структуры возвращаемого значения:<br />
<br />
<pre> <br />
<?xml version="1.0" encoding="utf-8"?><br />
<group name="120" ready="2" busy="3"><br />
<element name="223"/><br />
<element name="227"/><br />
</group><br />
</pre><br />
<br />
<br />
-------------------------------<br />
<br />
'''tst_getuserstate'''. Возвращает XML-структуру, содержащую текущее состояние указанного в запросе пользователя.<br />
<br />
Параметры: <br />
<br />
* <span style="color:green;">number</span> - номер, состояние объектов которого необходимо определить. <br />
<br />
http://login:password@localhost:4055/tst_getuserstate?iduser=DA803F01-EA77-40FA-BC9D-E2EFB36FD5A8<br />
<br />
Пример структуры возвращаемого значения:<br />
<br />
<pre><br />
<?xml version="1.0" encoding="utf-16"?><br />
<oktellxmlmapper version="80710"><br />
<data name="userstate" count="1"><br />
<property_set name="user" id="da803f01-ea77-40fa-bc9d-e2efb36fd5a8"><br />
<property_simple key="id" value="da803f01-ea77-40fa-bc9d-e2efb36fd5a8" /><br />
<property_simple key="state" value="1" name="usReady" /><br />
</property_set><br />
</data><br />
</oktellxmlmapper><br />
</pre><br />
<br />
<br />
-------------------------------<br />
<br />
'''getlicensefulltext'''. Возвращает полный текст информации о лицензии на текущем установленном на сервере языке, аналогичный отображаемому в разделе [[Информация о лицензиях|Администрирование. Общие настройки. Информация о лицензии]].<br />
<br />
http://login:password@192.168.0.1:4055/getlicensefulltext<br />
<br />
<br />
'''getlicensefullxml'''. Возвращает xml-структуру лицензионного сертификата.<br />
<br />
http://login:password@192.168.0.1:4055/getlicensefullxml<br />
<br />
<br />
-------------------------------<br />
<br />
'''getlicenseinfo'''. Возвращает значение указанного параметра лицензионного сертификата.<br />
<br />
Параметры: <br />
* <span style="color:green;">detail</span> - требуемый параметр. <br />
<br />
::regserial - 7-значный номер регистрации, <br />
<br />
::confirmdate - дата следующего подтверждения сертификата в формате dd.MM.yyyy, <br />
<br />
::updatelimitdate - конечная дата поддерживаемых версий согласно лицензии на обновления в формате dd.MM.yyyy.<br />
<br />
http://login:password@192.168.0.1:4055/getlicensefullxml?detail=regserial<br />
<br />
<br />
-------------------------------<br />
<br />
<div id="download"></div><br />
'''download'''. Позволяет скачать файл с сервера.<br />
<br />
::* download/rec/ABC, download/fax/ABC, download/vm/id - предоставляет файлы записей разговоров, файлы полученных факсимильных сообщений, файлы голосовой почты. Правильная ссылка предоставляется через web-socket подключение. В качестве дополнительного может использоваться параметр ''attachment''.<br />
<br />
::* download/byscript - предоставляет доступ к произвольному файлу, путь к которому определяется служебным сценарием, запускаемым этим запросом. Используются все параметры для метода [[#execsvcscript|execsvcscript]], а также дополнительный параметр ''attachment''. Считается что сценарий вернет путь к файлу, который и будет возвращен.<br />
<br />
::* download/files - предоставляет доступ к произвольному файлу по прямой ссылке, определяемой параметром path. Путь может быть абсолютным или относительным (относительно рабочего каталога службы сервера Oktell или относительно хранилища файлов). Дополнительно может использоваться параметр ''attachment''. Следует иметь в виду, что в соответствии со значением ключа [[Параметры файлов конфигурации#AllowDownloadFilesDirectlyOnlyFromTemp]] в конфигурационном файле по умолчанию, разрешенная зона для произвольного скачивания ограничена временной папкой и [[Настройки веб-сервера#LocalStoragePath|папкой хранилища]].<br />
<br />
Параметры:<br />
<br />
* <span style="color:green;">attachment</span> - «1» указывает на скачивание в виде вложения, «0» - на скачивание в виде медиа (по расширению файла). По умолчанию 1.<br />
<br />
http://login:password@192.168.0.1:4055/download/byscript?name=SvcScript1&startparam1=123&startparam2=234&async=0&timeout=10<br />
<br />
<br />
-------------------------------<br />
<br />
<div id="getsharedfile"></div><br />
'''getsharedfile'''. Позволяет скачать файл из открытой папки локального хранилища (\LocalStorage\Shared) по прямой ссылке без прохождения авторизации при подключении к HTTP серверу. В качестве указания файла может быть передан абсолютный путь на сервере, путь относительно рабочего каталога службы Oktell, путь относительно локального хранилища, а также путь относительно открытой папки локального хранилища. Чуть что не так - возвращает ''404 Not Found''.<br />
<br />
Для скачивания файлов, размещенных вне открытой папки локального хранилища, требуется авторизация (если иное не установлено в [[Настройки веб-сервера|настройках HTTP сервера]]) и использование метода '''download/files'''.<br />
<br />
Параметры:<br />
<br />
* <span style="color:green;">path</span> - Путь относительный или абсолютный к файлу, расположенному в открытом разделе хранилища.<br />
<br />
* <span style="color:green;">attachment</span> - «1» указывает на скачивание в виде вложения, «0» - на скачивание в виде медиа (по расширению файла). По умолчанию 1.<br />
<br />
http://login:password@192.168.0.1:4055/getsharedfile?path=123.jpg<br />
<br />
<br />
-------------------------------<br />
<br />
<div id="downloadrecordbylink"></div><br />
'''downloadrecordbylink'''. Позволяет скачать файл записи разговора с сервера, код которого упакован и передан через web-socket подключение.<br />
<br />
Параметры: <br />
<br />
* <span style="color:green;">recordlink</span> - требуемый параметр.<br />
<br />
http://login:password@192.168.0.1:4055/downloadrecordbylink?recordlink=ABCDEFGH<br />
<br />
<br />
-------------------------------<br />
<br />
<div id="upload"></div><br />
'''upload'''. Позволяет закачать файл на сервер. Веб-сервер понимает <span style="color:gray;">Content-Type</span> ''multipart/form-data'' и ''application/octet-stream''. В запросе должны также присутствовать поля <span style="color:gray;">Content-Transfer-Encoding</span>, <span style="color:gray;">Content-Disposition</span>. В одном запросе с помощью MIME могут быть переданы несколько файлов. Для формирования неслучайных имен, исходные имена должны быть указаны в качестве параметра суб-заголовка <span style="color:gray;">Content-Disposition</span>.<br />
Размещение их осуществляется по умолчанию во временном каталоге <span style="color:gray;">\OktellWorkDirectory\Temp\UploadData</span>, если иное не указано с помощью параметров ''storagemode'' и ''subfolder''.<br />
<br />
Параметры могут быть переданы в URL:<br />
<br />
* <span style="color:green;">storagemode</span> - Место размещения файла. Варианты значений: <br />
:* ''storage'' - в специально отведенном файловом хранилище, доступном извне только после авторизации, по временному паролю или в случае если авторизация HTTP веб-сервера не используется.<br />
:* ''storageshared'' - в специально отведенном файловом хранилище, открытом для доступа извне без авторизации (если внешний пользователь знает прямую ссылку) с помощью метода '''getsharedfile'''.<br />
:* ''temp'' (по умолчанию) - во временной папке. Гарантировано очищается при перезапуске службы. Файлы доступны для скачивания извне без авторизации по прямой ссылке с помощью метода '''getsharedfile'''.<br />
:* ''script'' - размещается во временной папке, а затем запускается указанный в дополнительных параметрах служебный сценарий, в который в качестве пятого параметра передается результат сохранения файлов с указанием полных путей (xml). Ожидается, что сценарий самостоятельно разместит эти файлы (перенесет в другое место из временной папки). На выход в этом случае возвращается результат, аналогичный результату метода '''execsvcscript'''. Дополнительные параметры также соответствуют параметрам метода '''execsvcscript'''.<br />
:* ''scriptplain'' - размещается во временной папке, а затем запускается указанный в дополнительных параметрах служебный сценарий, в который в качестве пятого параметра передается результат сохранения файлов с указанием полных путей (xml). Ожидается, что сценарий самостоятельно разместит эти файлы (перенесет в другое место из временной папки). На выход в этом случае возвращается результат, аналогичный результату метода '''execsvcscriptplain'''. Дополнительные параметры также соответствуют параметрам метода '''execsvcscriptplain'''.<br />
<br />
* <span style="color:green;">pathmode</span> - Определяет, абсолютный или относительный путь к сохраненным файлам возвращать в ответе (или передавать в сценарий). Варианты значений: ''absolute'' и ''relative'' соответственно, по умолчанию возвращается относительный путь.<br />
<br />
* <span style="color:green;">subfolder</span> - Определяет подкаталог (или подпуть), куда разместить закачиваемые файлы, относительно базового определенного хранилища.<br />
<br />
При размещении файлов необходимо предусмотреть, каким образом и для чего они будут использоваться, кем и при каких условиях скачиваться, надолго или не надолго попадать в хранилище. Обратите внимание на настройку конфигурационного файла [[Параметры файлов конфигурации#AllowDownloadFilesDirectlyOnlyFromTemp|AllowDownloadFilesDirectlyOnlyFromTemp]], а также на параметр ''[[Настройки веб-сервера#LocalStoragePath|Путь к хранилищу файлов]]'' в общих настройках.<br />
<br />
Запрос должен использовать метод POST с передачей тела сообщения. Сама страница может выглядеть, например, одним из вариантов:<br />
<br />
http://login:password@192.168.0.1:4055/upload<br />
<br />
http://login:password@192.168.0.1:4055/upload?storagemode=storage&pathmode=absolute&subfolder=MessageFiles<br />
<br />
http://login:password@192.168.0.1:4055/upload?storagemode=scriptplain&name=Размещение<br />
<br />
Для примера запроса можно обратиться к сценарию закачки файла на сервер Oktell ([[Файл:uploadfile.oscr]]), присутствующему также в шаблонных сценариях дистрибутива версии начиная с 25.03.2012. <br />
<br />
В качестве ответа возвращается XML-структура с описанием всех сохраненных файлов и путей к ним. <br />
<br />
Пример возвращаемого значения:<br />
<br />
<pre><br />
<?xml version="1.0" encoding="utf-16"?><br />
<uploadfilesresult count="3"><br />
<file name="1.jpg" saved="1" size="13277" path="C:\Oktell\Temp\UploadData\1.jpg"/><br />
<file name="note.txt" saved="1" size="938" path="C:\Oktell\Temp\UploadData\note.txt"/><br />
<file name="noteerror.txt" saved="0"/><br />
</uploadfilesresult><br />
</pre><br />
<br />
<br />
-------------------------------<br />
<br />
<div id="getavatar"></div><br />
'''getavatar'''. Возвращает изображение(аватарку) указанного пользователя Oktell.<br />
Изображения размещаются в хранилище файлов, и скачивать их можно даже не проходя положенную авторизацию при соединении с HTTP-сервером.<br />
Изображения пользователей хранятся в размере 352х288 (максимальные размеры с учетом пропорций), а также 32x32 и 96x96-ных образах. Ссылки на скачивание выдаются через web-socket подключение, но могут быть сгенерированы и автоматически.<br />
<br />
Параметры могут быть переданы в URL:<br />
<br />
* <span style="color:green;">path</span> - путь/имя файла запрашиваемого изображения (если требуется уменьшенная копия, или если известна ссылка или название файла).<br />
<br />
* <span style="color:green;">userid</span> - если параметр path не указан или некорректен, можно получить полное изображение по идентификатору пользователя.<br />
<br />
* <span style="color:green;">attachment</span> - «1» указывает на скачивание в виде вложения, «0» - на скачивание в виде медиа-изображения (content-type=image/*). По умолчанию 1.<br />
<br />
<br />
-------------------------------<br />
<br />
<div id="getversion"></div><br />
'''getversion'''. Возвращает версию сервера Oktell.<br />
<br />
http://login:password@192.168.0.1:4055/getversion<br />
<br />
Пример возвращаемого значения:<br />
<br />
<pre><br />
<?xml version="1.0" encoding="utf-16"?><br />
<oktellxmlmapper version="80710"><br />
<data name="version" count="1"><br />
<property_set name="version"><br />
<property_cdata key="text"><![CDATA[Версия программы: 2.7.120918(4644.26860). Версия БД: 120711.]]></property_cdata><br />
<property_cdata key="environment"><![CDATA[1.1.4322.2032]]></property_cdata><br />
<property_cdata key="build"><![CDATA[2.7.4644.26860]]></property_cdata><br />
<property_simple key="date" value="120918" /><br />
<property_cdata key="halbuild"><![CDATA[2.15.40.134]]></property_cdata><br />
<property_simple key="haldate" value="120913" /><br />
</property_set><br />
</data><br />
</oktellxmlmapper><br />
</pre><br />
<br />
<br />
-------------------------------<br />
<br />
<div id="gettotalqueueinfo"></div><br />
'''gettotalqueueinfo'''. Возвращает информацию обо всех очередях в настоящее время с описанием внутренних номеров, списка абонентов у каждого из них. Информация возвращается в JSON представлении.<br />
<br />
http://login:password@192.168.0.1:4055/gettotalqueueinfo<br />
<br />
Пример структуры возвращаемого значения:<br />
<pre><br />
[<br />
{<br />
"numid": "5d2965c3-39ce-4929-912e-c97031582fc6",<br />
"numprefix": "14",<br />
"ruleid": "bb4c2822-34c8-4bff-9e9b-e2826b904204",<br />
"rulename": "Петр",<br />
"queue": [<br />
{<br />
"chainid": "dd8466d8-7aa3-4df1-b1b7-b933a11da518",<br />
"objecttype": 0,<br />
"objecttypestr": "qotQueueLogic",<br />
"objectid": "263fb71f-88d2-4787-b16c-e22559336030",<br />
"queuesource": 2,<br />
"queuesourcestr": "qsIVR",<br />
"queuepriority": 10,<br />
"callerid": "21",<br />
"calledid": "14",<br />
"srclineid": "173210d8-fcfc-49f7-b770-d3609445b188",<br />
"srclinenumber": "17633",<br />
"srcelementid": "173210d8-fcfc-49f7-b770-d3609445b188"<br />
"managedlineid": "173210d8-fcfc-49f7-b770-d3609445b188",<br />
"managedlinenumber": "17633",<br />
"department": "",<br />
"isuser": true,<br />
"userid": "7cf84c23-2736-4fc8-9bf7-bfbb4778fb01",<br />
"userlogin": "manager2",<br />
"username": "Виктор Викторыч",<br />
"istask": false,<br />
"startqueuetime": "2012-09-28 09:46:33",<br />
"lenqueue": 41.953125<br />
}<br />
] <br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------<br />
<br />
Несколько следующих команд предоставляют доступ к функционалу управления звонками, аналогичному доступным для клиентских приложений. Все эти запросы выполняются от имени указанной линии (параметр line), указанного пользователя (параметр user) или указанного рабочего места (параметр wp). Достаточно указания только одного из вышеприведенных параметров. В качестве значения может использоваться guid-идентификатор, название, имя пользователя, логин, номер линии и т.д. По указанному значению однозначно определяется внутренняя линия, от имени которой и исполняется команда.<br />
<br />
<br />
'''wp_getchaincontent'''. Возвращает текущий контент цепочки, в которой участвует линия. Результат представляет собой JSON-структуру.<br />
<br />
http://login:password@192.168.0.1:4055/wp_getchaincontent?user=DA803F01-EA77-40FA-BC9D-E2EFB36FD5A8<br />
<br />
Пример структуры возвращаемого значения:<br />
<pre><br />
{<br />
"createtime": "2011-07-27 14:41:28",<br />
"chainid": "c7b333a5-93b3-4277-8c60-9844d63a4732"<br />
"customfield": "",<br />
"trace": [<br />
{<br />
"contentelementtype": "call",<br />
"pbxdirection": "internal",<br />
"objectid": "63d38304-3bff-4e8e-8c42-8f2f11b57c73",<br />
"objecttype": 0,<br />
"objecttypestr": "qotQueueLogic",<br />
"queuesource": 1,<br />
"queuesourcestr": "qsLineLogic",<br />
"queuepriority": 10,<br />
"istask": false,<br />
"managedlineid": "e76c86ea-a28a-4519-b4ff-8879a92c62b7",<br />
"isuser": true,<br />
"userlogin": "Dima",<br />
"startqueuetime": "2011-07-27 14:41:29",<br />
"department": "Программисты",<br />
"callerid": "#999",<br />
"calledid": "183",<br />
"srcelementid": "e76c86ea-a28a-4519-b4ff-8879a92c62b7",<br />
"srclineid": "e76c86ea-a28a-4519-b4ff-8879a92c62b7",<br />
"srclinenumber": "17002",<br />
"managedlinenumber": "17002",<br />
"userid": "2a594b51-bb89-4da6-a69f-f48761baf0d9",<br />
"username": "Дмитрий Евгеньевич"<br />
},<br />
{<br />
"contentelementtype": "commutation",<br />
"commutationid": "8fc371f2-ae36-4744-ae7f-bee8c79385a8",<br />
"connectiontype": 3,<br />
"connectiontypestr": "ctInnerInner",<br />
"alineid": "e76c86ea-a28a-4519-b4ff-8879a92c62b7",<br />
"alinenumber": "17002",<br />
"aisuser": true,<br />
"auserid": "2a594b51-bb89-4da6-a69f-f48761baf0d9",<br />
"auserlogin": "Dima",<br />
"ausername": "Дмитрий Евгеньевич",<br />
"aoutnumber": "#999",<br />
"anumberdialed": "183",<br />
"atext": "Дмитрий Евгеньевич",<br />
"blineid": "070aafb0-f47c-4df5-a01f-7bb08ceee269",<br />
"blinenumber": "17001",<br />
"bisuser": true,<br />
"buserid": "7cf84c23-2736-4fc8-9bf7-bfbb4778fb01",<br />
"buserlogin": "VIKTIRICH",<br />
"busername": "Виктор Викторыч",<br />
"boutnumber": "183",<br />
"bnumberdialed": "",<br />
"btext": "Виктор Викторыч",<br />
"timestart": "2011-07-27 14:41:29",<br />
"timeanswer": "2011-07-27 14:41:31",<br />
"isrecorded": true<br />
}<br />
] <br />
}<br />
</pre><br />
<br />
<br />
-------------------------------<br />
<br />
'''wp_getabonentinfo'''. Возвращает информацию о противоположном абоненте в коммутации, в которой участвует линия. Результат представляет собой JSON-структуру<br />
<br />
http://login:password@192.168.0.1:4055/wp_getchaincontent?user=ivan<br />
<br />
Пример структуры возвращаемого значения:<br />
<pre><br />
{<br />
"currentlinestate": 32,<br />
"currentlinestatestr": "lsCommutated",<br />
"abonentinfo": {<br />
"cansendfiles": false,<br />
"isconference": false,<br />
"callerlineid": "070aafb0-f47c-4df5-a01f-7bb08ceee269",<br />
"callercomment": "",<br />
"isuser": true,<br />
"callername": "Виктор Викторыч",<br />
"canswitchtoconf": false,<br />
"callerusername": "Виктор Викторыч",<br />
"commutationid": "21164dde-0c43-46cf-b00f-77bd51cbe284",<br />
"calleruserlogin": "VIKTIRICH",<br />
"callerdescription": "",<br />
"callerlinenum": "17001",<br />
"isivr": false,<br />
"callerid": "183",<br />
"callersimple": "Виктор Викторыч",<br />
"calleruserid": "7cf84c23-2736-4fc8-9bf7-bfbb4778fb01",<br />
"canfax": true,<br />
"canvideo": false,<br />
"chainid": "b8b552d1-7cb9-4469-a45d-451f27516af1",<br />
"isextline": false<br />
}<br />
}<br />
</pre><br />
<br />
<br />
-------------------------------<br />
<br />
'''wp_autocallstart'''. Запускает автодозвон или разовый звонок на указанный номер.<br />
<br />
Дополнительные параметры:<br />
<br />
* <span style="color:green;">number</span> - обязательный параметр. <br />
<br />
* <span style="color:green;">direction</span> - необязательный параметр. По умолчанию используется автоопределение (если указанный номер найден среди внутренних номеров, осуществляется звонок вовнутрь, в противном случае осуществляется звонок наружу.<br />
<br />
::pbx - звонок внутрь, <br />
<br />
::city - звонок вовне<br />
<br />
* <span style="color:green;">sequence</span> - необязательный параметр. По умолчанию стандартный прямой вызов (direct)<br />
<br />
::direct - сначала вызывается абонент, после ответа производится обратный вызов линии. <br />
<br />
::back - сначала осуществляется вызов самой линии, а затем вызов от ее имени указанного номера. <br />
<br />
http://login:password@192.168.0.1:4055/wp_autocallstart?line=16038&number=538&direction=pbx<br />
<br />
<br />
-------------------------------<br />
<br />
'''wp_switchcall'''. Производит flash-переключение текущего звонка на указанный номер. Если линия неактивна, то запускает автодозвон. Все параметры аналогичны [[#wp_autocallstart|wp_autocallstart]].<br />
<br />
<br />
-------------------------------<br />
<br />
'''wp_autocallstop'''. Останавливает активную сессию автодозвона.<br />
<br />
http://login:password@192.168.0.1:4055/wp_autocallstop?line=16038<br />
<br />
<br />
-------------------------------<br />
<br />
'''wp_flash'''. Генерирует flash от имени линии.<br />
<br />
http://login:password@192.168.0.1:4055/wp_flash?user=ivan<br />
<br />
Дополнительные параметры:<br />
<br />
* <span style="color:green;">mode</span> - Режим переключения, если на удержании уже имеется абонент. <br />
:* ''abort'' - отбой текущему, возврат к тому, кто на удержании.<br />
:* ''switch'' - возврат к тому, кто на удержании, текущего на удержание<br />
:* ''next'' - отбой текущему, переход сразу в набор номера, не возвращаясь к тому, кто на удержании.<br />
<br />
<br />
-------------------------------<br />
<br />
'''wp_declinecall'''. Отклоняет входящий вызов.<br />
<br />
http://login:password@192.168.0.1:4055/wp_declinecall?wp=OPERATOR1<br />
<br />
<br />
-------------------------------<br />
<br />
'''wp_setuserstate'''. Изменяет текущее состояние пользователя и/или перемещает его из одного режима в другой. В любом случае, если пользователь определен, возвращается ответ 200 OK без дополнительных параметров. Оповещение о смене режимов и состояний протекает в обычном режиме путем событийного оповещения клиентского рабочего места.<br />
<br />
Дополнительные параметры: <br />
<br />
* <span style="color:green;">userstateid</span> - определяет новое состояние пользователя. Не все переходы между состояниями возможны, так например, невозможно сделать пользователя свободным, если он занят разговором по телефону, невозможно ввести пользователя в перерыв, если он не находится в режиме call-центра и т.д. Также невозможен перевод пользователя в служебные состояния (отключен, без телефона, зарезервирован и т.д.). Значение параметра указывается в виде числа из набора:<br />
::1 - свободен,<br />
::2 - перерыв,<br />
::3 - нет на месте,<br />
::5 - занят в разговоре или в обработчике задачи.<br />
<br />
* <span style="color:green;">onredirect</span> - 0 или 1, определяет активность режима переадресации. Доступно только при выключенном режиме call-центра. Может выставляться как отдельно, так и одновременно с определением других режимов состояния.<br />
<br />
* <span style="color:green;">oncallcenter</span> - 0 или 1, определяет активность режима call-центра. Производит дополнительно смену состояний, если текущее состояние противоречит выбранному режиму (вывод из перерыва при выходе, вывод из переадресации при входе в call-центр).<br />
<br />
* <span style="color:green;">onccmanual</span> - 0 или 1, определяет активность ручного режима в call-центре. Может быть изменено только при нахождении пользователя в call-центре.<br />
<br />
* <span style="color:green;">onlunch</span> - 0 или 1, определяет активность режима перерыва. Доступно только при включенном режиме call-центра. Может выставляться как отдельно, так и одновременно с определением других режимов состояния. При активном режиме перерыва пользователь переводится в состояние перерыва вместо готовности всякий раз, как только освобождается. Вместе с переводом в режим перерыва возможно указание причины и кода причины перерыва (параметры lunchreasonid и lunchreasonmsg) - для регламентированных причин, содержащихся в БД указывается только код, для индивидуальных причин указывается только текст.<br />
<br />
* <span style="color:green;">lunchreasonid</span> - числовой код регламентной причины перерыва (определены в разделе общих настроек). <br />
<br />
* <span style="color:green;">lunchreasonmsg</span> - описание индивидуальной причины перерыва. <br />
<br />
http://login:password@192.168.0.1:4055/wp_setuserstate?user=ivanov&userstateid=5<br />
<br />
http://login:password@192.168.0.1:4055/wp_setuserstate?user=ivanov&onlunch=1&lunchreasonid=1001<br />
<br />
<br />
-------------------------------</div>PeterOktell_Web-Socket_ProtocolOktell Web-Socket Protocol2014-06-30T12:09:19Z<p>Peter: </p>
<hr />
<div>[[Веб-интерфейс|Наверх]]<br />
<br />
<br />
В рамках настоящей статьи рассматриваются вопросы интеграции web-системы и коммуникационной системы (в дальнейшем WebCRM и Oktell). WebCRM на рабочем месте сотрудника используется через браузер. Телефон, находящийся на рабочем месте сотрудника подключен к серверу (узлу коммутаций) Oktell. Решается задача функционального объединения двух системы с предоставлением возможности приема и совершения звонков и управления телефоном из интерфейсов WebCRM. <br />
<br />
<br />
__TOC__<br />
<br />
<br />
<div id="OktellFunc"></div><br />
===Краткое описание возможностей телефонии Oktell===<br />
<br />
<br />
Стандартный функционал Oktell предоставляет пользователям:<br />
:* доступ к управлению телефонами (позвонить, переключить, отклонить звонок, организовать конференцию, пригласить других участников в конференцию, подключиться к разговору в режиме прослушивания, помощи и т.д.).<br />
:* доступ к управлению состояниями пользователей (перерыв - чтобы поток входящих звонков не поступал, занят - чтобы отметить факт обработки звонка, переадресация - чтобы все звонки на пользователя перенаправлялись в соответствии с настроенными правилами, готов - чтобы вернуться к обычному режиму).<br />
:* информацию о текущем состоянии телефонов, внутренних номеров, пользователей с т.з. занятости в операциях телефонии.<br />
:* информацию о поступающем звонке, абоненте<br />
:* доступ к статистике разговоров (по правам).<br />
:* доступ к записям разговоров (по правам).<br />
:* доступ к информации об ожидающей очереди абонентов в реальном времени.<br />
:* доступ к контентам сессий и линий.<br />
:* доступ к управлению режимом переадресации.<br />
:* возможность запуска служебных сценариев.<br />
и т.д.<br />
<br />
<br />
В рамках настройки сценариев Oktell, имеется возможность отправлять синхронные и асинхронные запросы в WebCRM (фактически исполнять методы по событиям в Oktell) и получать ответы и применять их в рамках проведения маршрутизации или любых других действий, реализуемых в сценариях. Например: <br />
:* Выяснить, какому клиенту/контакту принадлежит определившийся номер телефона или введенный им вручную с помощью DTMF-набора номер договора, отфильтровать по черному списку, переключить вызов на ответственного за работу с этим контактом пользователя, если пользователя нет в системе - переключить на секретаря, а если контакт новый - соединить с отделом продаж. Если ответственный пользователь занят, предложить оставить голосовое сообщение для VIP клиентов. <br />
:* В момент поступления звонка открыть карточку у пользователя, которому направляется звонок. Закрыть ее автоматически, если пользователь так и не снял трубку (а снял кто-то другой, или звонок потерялся). <br />
:* Выполнить какое-то важное с т.з. WebCRM действие в случае, например, если пользователь оставил заказ на встречный звонок, занести его в список задач.<br />
<br />
<br />
Именно сценарии придают жизнь Oktell и его сервисам. <br />
<br />
Среди событий Oktell, отрабатываемых в сценариях:<br />
<br />
:* поступление внешнего звонка.<br />
:* завершение звонка.<br />
:* переключение абонента на пользователя, группу пользователей, задачу call-центра.<br />
:* любое из интересующих явлений в ходе обработки звонка (от преобразования номера абонента в нужный формат и сверки времени поступления звонка до обработки контента звонка после завершения и выявления там факта состоявшейся конференции).<br />
:* наступление определенного времени.<br />
:* периодический запуск по таймеру.<br />
:* поступление/отправка e-mail.<br />
:* поступление/отправка sms/icq/jabber.<br />
:* контрольные события call-центра (оператор первым положил трубку, оператор слишком долго находится в перерыве или поствызывной обработке, число операторов в задаче меньше минимально допустимого, число абонентов в очереди задачи больше допустимого и т.д.)<br />
:* ручной запуск сценария по инициативе пользователя или WebCRM.<br />
:* исходящий звонок от пользователя<br />
:* поступление голосовой почты<br />
:* появление где-то в базе данных интересующего события (например появление новой записи в таблице абонентов)<br />
:* появление где-то на веб-ресурсе интересующего события (например температура на улице опустилась ниже нуля)<br />
<br />
<br />
<br />
<br />
<div id="Arch1"></div><br />
===Схема интеграции 1 (межсерверное соединение)===<br />
<br />
<br />
<br />
<br />
[[Файл:Arch1.jpg|center]]<br />
<br />
<br />
Сервер Oktell взаимодействует с телефонами и с веб-сервером WebCRM. <br />
<br />
Веб-сервер WebCRM взаимодействует ответно с сервером Oktell и с браузерами (клиентами). <br />
<br />
Между сервером Oktell и веб-сервером WebCRM существует только один [[#Exchange|канал для двустороннего обмена сообщениями]].<br />
<br />
Установка соединения может производиться как сервером Oktell, так и веб-сервером WebCRM. В случае разрыва соединения сторона-инициатор вновь организует подключение.<br />
# При выборе соединения со стороны сервера WebCRM в [[Интеграция_с_Web-Socket_CRM|настройках Web-Socket]] Oktell должен быть выбран один из режимов «CRM к Oktell» с указанием требуемого способа авторизации.<br />
# При выборе соединения со стороны сервера Oktell должен быть выбран один из режимов «Oktell к CRM» с указанием [[#websockver|версии]] протокола Web-Socket.<br />
<br />
После установки соединения системы обмениваются данными друг о друге, об авторизованных пользователях, о динамических методах. <br />
Все авторизованные в WebCRM пользователи автоматически становятся авторизованными в Oktell. В дальнейшем авторизация подключающихся пользователей и вывод отключившихся осуществляется с помощью сообщений login и logoff.<br />
Считается, что авторизацию пользователь проходит на веб-сервере WebCRM, и повторной проверки пароля в Oktell не требуется. Поэтому при организации сообщений login поле password не требует указания.<br />
<br />
Любой запрос от клиента к Oktell отправляется на сервер WebCRM, где формируется интеграционное сообщение и перенаправляется на сервер Oktell.<br />
Персональные сообщения/команды от Oktell клиенту также направляются на WebCRM, где они должны быть перенаправлены клиенту.<br />
Общие сообщения/команды от Oktell направляются к серверу, где проводится их обработка.<br />
<br />
Часть общих событий, например изменение состояния абонента в номерном плане, отправляется в WebCRM однократно и без привязки к конкретному пользователю, подразумевая тем самым, что веб-сервер WebCRM самостоятельно размножит сообщение и отправит всем заинтересованным клиентам.<br />
<br />
В рамках такой интеграции WebCRM может предоставлять в Oktell некоторые общие сервисы, которые доступны администратору при настройке сценариев Oktell. Например, доступ к БД WebCRM на поиск маршрута для обработки звонка конкретного клиента. Подробнее в разделе [[#Dynamic|Динамическое взаимодействие]].<br />
<br />
<br />
<br />
<br />
<div id="Arch2"></div><br />
===Схема интеграции 2 (клиент-серверное соединение)===<br />
<br />
<br />
<br />
<br />
[[Файл:Arch2.jpg|center]]<br />
<br />
<br />
Сервер Oktell взаимодействует с телефонами и с конечными клиентами (браузерами). <br />
<br />
Веб-сервер CRM взаимодействует только с клиентами и БД. <br />
<br />
Между Oktell и каждым клиентом существует один или несколько [[#Exchange|каналов для двустороннего обмена сообщениями]] (поддерживается работа в нескольких вкладках браузера).<br />
<br />
В данном случае клиенты (браузеры) производят подключения к серверу Oktell, и в его настройках должен быть включен и настроен [[Настройки_веб-сервера|Web-сервер]], а в сообщениях [[#login|''login'']] должен быть указан пароль пользователя (MD5).<br />
<br />
При таком способе интеграции у WebCRM не требуется наличие собственного Web-Socket сервера. Каждый клиент (браузер) подключается по Web-Socket протоколу непосредственно к серверу Oktell. Веб-сервер CRM занимается формированием страниц и предоставлением данных из БД WebCRM. Непосредственная взаимосвязь между серверами WebCRM и Oktell отсутствует, доступ не требуется, клиенты самостоятельно обрабатывают и объединяют данные двух систем.<br />
По такому принципу реализованы [http://www.oktell.ru/weboktell Web-клиент Oktell] и плагин [http://js.oktell.ru/ Oktell.js], доступный для встраивания в другие проекты.<br />
<br />
Поскольку клиентов может быть много, при рассылке событий возможна оптимизация за счет исключения тех клиентов, где конкретное событие не является необходимым. Достигается это путем подписки/отписки клиентов на определенные типы сообщений.<br />
<br />
Применительно к этому способу интеграции существует ряд дополнительных методов интерфейса. Большинство таких методов доступно и при [[#Arch1|схеме интеграции 1]], но не являются там необходимыми, так как часть данных и работ проводится на веб-сервере WebCRM.<br />
<br />
В отличие от [[#Arch1|схемы интеграции 1]], где Oktell запрашивает у сервера WebCRM список [[#Dynamic|динамических методов и форм]], которые затем могут быть использованы в сценариях Oktell, здесь динамические методы недоступны. Чтобы получить доступ к динамическим методам, следует использовать упрощенный вариант [[#Arch3|схемы интеграции 3]].<br />
<br />
<br />
<br />
<br />
<div id="Arch3"></div><br />
===Схема интеграции 3 (межсерверное и клиент-серверное соединение)===<br />
<br />
<br />
<br />
<br />
[[Файл:Arch_3.jpg|center]]<br />
<br />
<br />
Является комбинацией [[#Arch1|схемы 1]] и [[#Arch2|схемы 2]]. То есть клиенты имеют возможность подключаться непосредственно к серверу Oktell, минуя websocket-сервер CRM, а связь с сервером происходит по специальному каналу, который может быть обеспечиваться как websocket-подключением, так и периодическими http подключениями. <br />
<br />
В этом случае при разработке решений можно пользоваться javascript-библиотекой [http://js.oktell.ru Oktell.js], не требующей ни полного погружения в настоящий интеграционный протокол, ни в настройку websocket. Также в этом случае для CRM не обязательно иметь собственный websocket-сервер для обслуживания клиентов. Более того, можно вообще обойтись лишь настройкой HTTP для обмена сервисными сообщениями вроде [[#whoareyou|взаимных представлений]] и запроса [[#getavailablemethods|динамических методов]] и [[#getavailableforms|форм]]. Исполнение [[#Dynamic|динамических методов и форм]] будет возможно как на сервере, так и на клиентах. На сервере - по межсерверному каналу (http, https, websocket, websocket secure), на клиенте - по индивидуальным websocket-подключениям (защищенным или нет). Все остальные запросы и события имеют персональную подоплеку и отправляются по индивидуальным клиент-серверным подключениям.<br />
<br />
При этом в случае websocket соединения между серверами Oktell и CRM остается возможность часть клиентов туннелировать через сервер CRM, а часть клиентов обслуживать непосредственно. В этом смысле это самый широкий способ интеграции, и два других выступают частными случаями.<br />
<br />
<br />
<br />
<br />
<div id="UserPhone"></div><br />
===Привязка пользователя к телефону===<br />
<br />
<br />
Решению подлежит задача сопоставления конкретных пользователей CRM с конкретными телефонными устройствами. Поскольку элементы управления устройством находятся в браузере, а влияют они на поведение конкретного телефона. Например, так выглядит простейшая задача перевода звонка из браузера на врача Михайлова: звонок должен поступить на телефон, находящийся в кабинете 103, за компьютером в котором сейчас сидит Михайлов (в браузере открыта WebCRM и авторизован Михайлов). <br />
Настройка этого происходит в Oktell. <br />
<br />
Пользователи могут работать:<br />
:* стационарно каждый за своим рабочим местом. <br />
:* перемещаться с одного рабочего место за другое.<br />
:* работать посменно за одним рабочим местом.<br />
(Рабочее место = компьютер + телефон)<br />
<br />
Необходимо в каждый момент времени знать, около какого телефона какой пользователь сидит. <br />
<br />
<br />
Существуют два подхода к решению, также возможны их комбинации в рамках одного сервера.<br />
<br />
'''1. Жесткая привязка пользователя к телефонной учетной записи.'''<br />
<br />
''Для этого в карте сети Oktell в свойствах телефона требуется указание пользователя WebCRM''<br />
<br />
''Плюсы'': При взаимодействии Oktell и WebCRM используются одни и те же идентификаторы (например логины пользователей), соответственно отсутствует проблема привязки как таковая.<br />
<br />
''Минусы'': Пользователь вынужден перемещаться с одного компьютера на другой вместе со своим телефоном, или переназначая учетную запись в телефонном аппарате.<br />
<br />
<br />
'''2. Телефон привязывается к компьютеру, а в момент логина пользователя сопоставление производится через этот компьютер.'''<br />
<br />
''Плюсы'': Кто бы ни залогинился с этого компьютера, приобретает управление рядом стоящим телефоном, все звонки пользователю попадают на этот телефон.<br />
<br />
''Минусы'': Требует указания одного из постоянных идентификаторов компьютера в Oktell, а также передачи его из WebCRM/web-клиента в момент логина для привязки. Это может быть айпи адрес, хостнейм или любой другой постоянный идентификатор, задаваемый в конфигурации.<br />
<br />
<br />
Синхронизация учетных записей Oktell и WebCRM может производиться по логинам (по умолчанию) или по GUID-идентификаторам. Соответственно в персональных запросах должны указываться userlogin и/или userid.<br />
<br />
Логин в Oktell нужен для приведения состояния пользователя в готовность. Без этого звонки на пользователя не поступают, а обрабатываются как и в случае, когда он недоступен. Логофф - обратная операция. В ходе взаимодействия пользователю доступны команды управления своим состоянием. Он может отлучиться, выставить перерыв, переадресацию, занятость и т.д. Все это нужно для того, чтобы изменить направление маршрутизации звонков и режим работы call-центра. А в случае [[#Arch2|схемы интеграции 2]] и [[#Arch3|схемы интеграции 3]] также для авторизации. Индивидуальное подключение не обрабатывает никакие запросы, не осуществив авторизацию.<br />
<br />
<br />
<span style="color:red">ВНИМАНИЕ! Ограничение: Oktell не позволяет пользователям авторизовываться с разных рабочих мест одновременно. Делается это для того, чтобы каждому пользователю соответствовало не более одного телефона. <br />
Однако персональные соединения [[#Arch2|схемы интеграции 2]] и [[#Arch3|схемы интеграции 3]] могут быть множественными, например как вкладки одного браузера. При этом привязка к телефону осуществляется первым авторизовавшимся подключением и остается таковой до закрытия всех вкладок/подключений этого пользователя.<br />
<br />
<br />
<br />
<br />
<div id="Exchange"></div><br />
===Взаимодействие по каналу связи===<br />
<br />
В этом разделе описывается межсерверный канал websocket, а канал HTTP подразумевается ограниченным аналогом.<br />
<br />
Все взаимодействие между Oktell и WebCRM (а также между Oktell и браузером) идет по общему каналу путем двустороннего обмена сообщениями между сторонами.<br />
<br />
<br />
[[Файл:Socket 3.jpg|center]] <br />
<br />
<br />
[[Файл:Socket 3b.jpg|center]]<br />
<br />
<br />
<div id="websockver"></div><br />
Взаимодействие на транспортном уровне происходит по Web-Socket протоколу. Поддерживаются версии<br />
:* [http://tools.ietf.org/html/rfc6455 rfc6455 v13]<br />
:* [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-08 v8] <br />
:* [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-07 v7]<br />
:* [http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-75 75]<br />
:* [http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76 76]<br />
<br />
''[[Примеры WebSocket Handshake]]''.<br />
<br />
В зависимости от выбранной схемы интеграции и выбранного в настройках направления и способа подключения одна из сторон производит подключение (Oktell к серверу WebCRM, сервер WebCRM к Oktell, клиенты WebCRM к Oktell).<br />
Рукопожатие (handshake) на установление Web-Socket соединения предлагается также стороной-инициатором. [http://ru.wikipedia.org/wiki/WebSocket Подробнее].<br />
Рукопожатие является HTTP запросом и при необходимости поддерживает прохождение Basic или Digest-авторизации. В качестве логина и пароля выступают указанные в [[Интеграция_с_Web-Socket_CRM|настройках Web-Socket]] значения. Описание процедуры рукопожатия описывается в документации к каждой версии протокола Web-Socket.<br />
<br />
Все сообщения имеют идентификаторы для организации серий типа «запрос-ответ» (поле <span style="color:green">''qid''</span>).<br />
Сообщения могут адресоваться конкретному пользователю или относиться к общим. В первом случае в сообщении должен присутствовать идентификатор, позволяющий различать одинаковые, но направляемые от разных пользователей команды из WebCRM в Oktell и наоборот соответственно.<br />
<br />
Возможные направления и типы сообщений:<br />
:* Oktell генерирует события.<br />
:* Oktell производит запросы к веб-системе. WebCRM отправляет ответы на получаемые запросы.<br />
:* WebCRM производит запросы к Oktell. В том числе и команды. Oktell отправляет ответы на запросы.<br />
<br />
''В случае HTTP подключения к CRM работа ограничивается запросами из Oktell и ответами на них из CRM.''<br />
<br />
Каждое сообщение представляет из себя строку [http://ru.wikipedia.org/wiki/JSON JSON] или [http://ru.wikipedia.org/wiki/XML XML] в кодировке [http://ru.wikipedia.org/wiki/UTF8 UTF-8]. Сообщения в общем потоке данных в канале отделяются друг от друга в соотвествии с версией используемого протокола Web-Socket: <br />
:*Версии [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] подразумевают использование фреймов, в заголовках которых определяется тип и размер.<br />
:*Версии [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 в теле сообщений.<br />
<br />
''В случае HTTP подключения к CRM запросы из октелл отправляются методом POST с передачей параметра '''data''', значением которого является упакованная в base64 строка JSON или XML.''<br />
<br />
Формат самих сообщений определяется непосредственно [[#Список методов интерфейса|протоколом интеграции Oktell-WebCRM]]. Например вот так выглядит сообщение из Oktell в WebCRM о факте входящего вызова в формате json:<br />
<br />
[[Файл:Json.jpg]]<br />
<br />
Сообщения длиной более 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]), то способ отправки длинных сообщений в нескольких фреймах определен в самом протоколе. Однако это имеет ограничение: при передаче одного длинного сообщения в нескольких фреймах, оно не может быть прервано передачей других сообщений.<br />
<br />
Структура каждого сообщения - это список из двух объектов, первый из которых - тип сообщения, второй - словарь параметров. В словаре обязательно присутствует идентификатор запроса (поле <span style="color:green">''qid''</span> с любым текстовым уникальным значением). В случае, когда сообщение производится от имени пользователя, присутствуют его идентификаторы (<span style="color:green">''userid''</span> и/или <span style="color:green">''userlogin''</span>).<br />
<br />
Среди параметров находятся и индивидуальные параметры сообщения. Поддерживается произвольная вложенность объектов: строк, чисел, дат, словарей, списков.<br />
<br />
<br />
<br />
<br />
<div id="Dynamic"></div><br />
<br />
===Динамическое взаимодействие===<br />
<br />
<br />
В момент создания сценариев в Oktell администратор имеет возможность настроить индивидуальное взаимодействие с WebCRM.<br />
Взаимодействие представляет собой вызов определенного метода WebCRM с передачей в него входных параметров, и возможно ожидание его исполнения с возвратом (нескольких) выходных значений.<br />
<br />
Сразу после организации подключения к серверу WebCRM Oktell производит запрос доступных в WebCRM динамических методов (как было сказано выше, это происходит в рамках [[#Arch1|схемы интеграции 1]] и [[#Arch3|схемы интеграции 3]]). <br />
В ответ WebCRM перечисляет список действий, инициативу исполнения которых она готова отдать наружу в Oktell. При описании метода в представлении указываются:<br />
:* человеческое название;<br />
:* краткий код метода;<br />
:* описание для администратора, настраивающего Oktell;<br />
:* список входных параметров с упоминанием типов (и возможных значений для перечислений);<br />
:* список выходных параметров, если метод возвращает данные и призван влиять на алгоритм сценария в Oktell;<br />
:* признак того, нужно ли исполнять метод с привязкой к конкретному пользователю и в направлении индивидуального пользовательского подключения, или это обращение к серверу вообще;<br />
:* разрешено ли отменять исполнение (например для метода «открыть карточку такую-то» возможна отмена, означающая «закрыть карточку такую-то»);<br />
:* куда Oktell направлять серверный запрос - через стандартное подключение (websocket или http в соответствии с настройками) или по HTTP/HTTPS на альтернативный URL веб-сервера (передача осуществляется точно также POST запросом с упаковкой сообщения в переменную ''data'' в виде base64.<br />
<br />
По каждому методу дополнительно описывается перечень входных и выходных параметров, их типы, способ исполнения метода (по организованному каналу или отдельным http-подключением), возможность его отмены (для длительных асинхронных операций, например метод ''Открыть диалоговую форму'' может быть отменен обратным методом ''Закрыть диалоговую форму'', а может быть прерван с тем же результатом).<br />
<br />
В [[#Interface|интеграционном интерфейсе Oktell<->WebCRM]] отсутствует таким образом необходимость конкретизировать методы WebCRM. <br />
В момент настройки сценария Oktell администратор уже имеет о них информацию и настраивает конкретный сценарий под место. <br />
<br />
Администратором определяется одно или несколько из доступных действий, определяется момент исполнения, определяются входные параметры или способ их вычисления, а также режим ожидания, таймаута или асинхронного выполнения. <br />
В момент работы Oktell отправляет команду на исполнение в соответствии с определенными администратором настройками и представлением динамического метода. <br />
Если метод призван исполняться синхронно и возвращать некие значения, то сценарий приостанавливается, а после получения ответа сохраняет результаты в переменных сценария и продолжает выполнение. <br />
Работа с динамическими методами и формами производится в сценариях Oktell компонентом [[Общие_компоненты_сценариев#Действие/карточка_в_plugin_или_WebCRM|Действие в WebCRM]].<br />
<br />
<br />
Для примера: в момент поступления вызова Oktell определил номер абонента. Производит синхронное исполнение динамического метода WebCRM ''Вернуть ид компании по номеру телефона'', дожидается ответа и принимает в сценарий значение. Далее исполняет динамический метод ''Ответственный сотрудник по компании'', дожидается ответа и принимает в сценарий значение. Все это время абоненту проигрывается голосовое или музыкальное приветствие. Когда воспроизведение завершается, Oktell производит маршрутизацию в соответствии с вернувшимися значениями, а также в момент поступления звонка сотруднику исполняет динамический метод ''Открыть карточку компании'' с передачей в качестве параметра идентификатора, вернувшегося на первом шаге. В случае, если сотрудник не снимает трубку, Oktell отменяет исполнение метода, тем самым отдавая команду на закрытие карточки компании. <br />
<br />
Ни об одном из перечисленных в примере методов WebCRM сервер Oktell не знает, зато знает администратор, настраивающий систему на работу совместно с WebCRM.<br />
<br />
<br />
Подробно список и интерфейс методов динамического взаимодействия приведен в разделе [[#DynamicMethods|Методы динамического взаимодействия]].<br />
<br />
<br />
<br />
<br />
<div id="Interface"></div><br />
===Список методов общего интерфейса===<br />
<br />
<br />
Взаимодействие происходит путем обмена сообщениями по установившемуся транспортному каналу. <br />
Часть сообщений носят вид событий, часть - вид запросов (команд), часть - вид ответов на запросы. Каждое сообщение представляет собой байтовое представление текста с escape-последовательностями, описывающего объект в виде структуры JSON (возможен вариант XML), преобразованного через кодировку UTF8. <br />
<br />
На первом уровне объекта - массив из двух значений: строковый кодовый идентификатор сообщения, именованный список параметров:<br />
<pre>[ "messagecode", {"var1":"value1", "var2":"value2", ...} ]</pre><br />
<br />
В общем случае среди параметров могут присутствовать сложные объекты (массивы и словари):<br />
<pre>"var1":["a", "b", "c"] или "var2":{"a":1, "b":2, "c":3}</pre><br />
<br />
В каждом сообщении присутствует параметр <span style="color:green">''qid''</span>, содержащий уникальный строковый идентификатор сообщения, обеспечивающий возможность построения из сообщений серий вида «запрос-ответ».<br />
В случае, когда сообщение относится к конкретному пользователю (отправляется от его имени), в нем присутствуют параметры <span style="color:green">''userlogin''</span> и <span style="color:green">''userid''</span>. По умолчанию синхронизация учетных записей пользователей происходит по их уникальным логинам. <br />
<br />
<br />
<br />
<br />
====Представление систем друг другу====<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green">'''whoareyou'''</span><br />
<br />
Двунаправленный запрос на возврат информации об удаленной стороне. Служит для выстраивания взаимоотношений на основе типа подключения, а также дает возможность получить имя системы для указания администратору.<br />
Ответом является сообщение ''iam''.<br />
<br />
Применяется в [[#Arch1|схеме интеграции 1]].<br />
<br />
<pre><br />
[<br />
"whoareyou",<br />
{<br />
"qid": "4FEEB8EF-DF4B-47AE-8EFE-4BDA577A6FF8",<br />
"type": "ws-server",<br />
"name": "Iris CRM",<br />
"version": 10.5<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* type - собственный тип сервера, осуществляющего запрос. <br />
Oktell при запросе указывает значение ''commserver''.<br />
WebCRM может указывать что либо отличное, например ''ws-server'' или ''crm-server''.<br />
//* name - собственное название службы. <br />
//* version - собственная версия службы. <br />
</pre><br />
<br />
<br />
<span style="color:green">'''iam'''</span><br />
<br />
Двунаправленный ответ на запрос ''whoareyou''. Возвращает информацию об удаленной стороне.<br />
<br />
<pre><br />
[<br />
"iam",<br />
{<br />
"qid": "080C0DF2-442B-410E-9204-4ADB3399FCC0",<br />
"type": "commserver",<br />
"name": "Oktell",<br />
"version": 100425,<br />
"build": "2.5.3928.8022"<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* type - тип удаленного сервера. <br />
Oktell при запросе указывает значение ''commserver''.<br />
WebCRM может указывать что либо отличное, например ''ws-server'' или ''crm-server''.<br />
//* name - название службы на удаленнм сервере.<br />
//* version - версия службы на удаленном сервере. <br />
</pre><br />
<br />
<br />
<br />
<br />
<div id="DynamicMethods"></div><br />
====Методы динамического взаимодействия====<br />
<br />
Информация от CRM о поддерживаемых методах, доступных Oktell для инициации исполнения.<br />
<br />
Серия методов forms - частный случай методов, позволяющий выделить в отдельную категорию работу с карточками. Смысл и способ работы тот же самый. Тем не менее карточки могут быть представлены как методы.<br />
<br />
----------------------------------------------<br />
<br />
Методы: <br />
# <span style="color:green">>>> getavailablemethods<br><br />
# <span style="color:green"><<< availablemethods<br><br />
# <span style="color:green">>>> executemethod<br><br />
# <span style="color:green"><<< methodresult<br><br />
# <span style="color:green">>>> cancelmethod<br><br />
# <span style="color:green">>>> executemethodwaitaborted<br><br />
<br />
<br />
Формы:<br />
# <span style="color:green">>>> getavailableforms<br><br />
# <span style="color:green"><<< availableforms<br><br />
# <span style="color:green">>>> showform<br><br />
# <span style="color:green">>>> closeform<br><br />
# <span style="color:green"><<< formresult<br><br />
# <span style="color:green">>>> showformwaitaborted<br><br />
<br />
<br />
------------------------------------------------------------------------------<br />
<div id="getavailablemethods"></div><br />
<span style="color:green">>>> '''getavailablemethods'''</span><br />
<br />
Отправляет из Oktell в CRM сообщение-запрос на возврат доступных динамических методов CRM. Отправляется только на сервер CRM (websocket или http).<br />
<br />
<pre><br />
[<br />
"getavailablemethods",<br />
{<br />
"qid": "76EF6E46-23DA-47B6-B3BD-A7076FEDE170"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green"><<< '''availablemethods'''</span><br />
<br />
Сообщение-ответ из CRM в Oktell со списком доступных динамических методов CRM.<br />
<br />
<pre><br />
[<br />
"availablemethods",<br />
{<br />
"qid": "76EF6E46-23DA-47B6-B3BD-A7076FEDE170",<br />
"methods": [<br />
{<br />
"key": "16893E86-4D73-4F4C-8629-6E484B2CB5B0", <br />
"name": "Вернуть данные о компании",<br />
"description": "Возвращает информацию о компании по одному из выбранных идентификаторов, чтобы в дальнейшем использовать при открытии карточки данных о компании",<br />
"connectiontype": "http",<br />
"url": "http://192.168.0.100:4000/pbxapi/method1.php",<br />
"defineuser": false,<br />
"allowcancel": false,<br />
"inputparams": [<br />
{<br />
"key": "type",<br />
"name": "Тип поиска",<br />
"description": "",<br />
"type": "list",<br />
"items": [<br />
{<br />
id: "byphone",<br />
name: "По номеру телефона"<br />
},<br />
{<br />
id: "byaccount",<br />
name: "По номеру договора"<br />
}<br />
]<br />
},<br />
{<br />
"key": "data",<br />
"name": "Значение идентификатора",<br />
"description": "Номер телефона или номер договора (в соответствии с выбранным типом)",<br />
"type": "string"<br />
},<br />
{...},<br />
{...}<br />
]<br />
"outputparams": [<br />
{<br />
"key": "accountid",<br />
"name": "Идентификатор клиента",<br />
"description": "Для дальнейшей передачи на отображение карточки",<br />
"type": "string"<br />
},<br />
{...},<br />
{...}<br />
]<br />
},<br />
{<br />
"key": "createrecord", <br />
"name": "Создать новое дело",<br />
"description": "Отображает контактные данные об абоненте (комании или человеке) при входящем/исходящем звонке",<br />
"connectiontype": "websocket",<br />
"defineuser": true,<br />
"allowcancel": false,<br />
"inputparams": [<br />
{<br />
"key": "sessionid",<br />
"name": "Идентификатор сессии звонка",<br />
"description": "Для связи с номером дела",<br />
"type": "string"<br />
}<br />
],<br />
"outputparams": [<br />
{<br />
"key": "recordid",<br />
"name": "Идентификатор созданного дела",<br />
"description": "Для дальнейшей передачи на отображение карточки",<br />
"type": "string"<br />
}<br />
{...},<br />
{...}<br />
]<br />
},<br />
{<br />
"key": "card_records", <br />
"name": "Показать карточку «ДЕЛА»",<br />
"description": "Отображает контактные данные об абоненте (комании или человеке) при входящем/исходящем звонке",<br />
"connectiontype": "default",<br />
"defineuser": true,<br />
"allowcancel": true,<br />
"inputparams": [<br />
{<br />
"key": "recordid",<br />
"name": "Номер дела",<br />
"description": "Номер дела, который ранее был создан при вызове метода «Создать запись дела»",<br />
"type": "string"<br />
},<br />
{<br />
"key": "accountid",<br />
"name": "Идентификатор клиента",<br />
"description": "Идентификатор клиента в базе данных CRM",<br />
"type": "string"<br />
},<br />
{...},<br />
{...}<br />
]<br />
},<br />
{...},<br />
{...}<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<pre><br />
//* method:key, param:key - произвольные строковые идентификаторы, упоминаемые при вызове форм из октелла<br />
//* method:name, param:name - краткие человеческие названия, отображаются в списках при настройке сценария.<br />
//* method:description, param:description - описания, если смысл формы/параметра нетривиален, и админу может потребоваться объясняение<br />
//* method:inputparams - список входных параметров, значения которых требуется передавать в командном сообщении на исполнение соответствующего метода.<br />
//* method:outputparams - список выходных параметров, значения которых можно ожидать в сообщении о выполнении метода.<br />
//* param:type - тип параметра: string, int|int64, bool, decimal|float|double, datetime, list. Если не указан - строка. Дает администратору представление.<br />
//* param:items - в случае если тип параметра=list, здесь идет перечисление вариантов списка<br />
//* method:connectiontype - websocket|http|https|default - куда ломиться, через веб-сокет (дефолтный канал), или запросом к http-серверу. Дефолтный канал - если к CRM подключение по HTTP, то запрос по тому же адресу будет.<br />
//* method:defineuser - true|false - определять пользователя, или запрос к веб-серверу вообще.<br />
//* method:allowcancel - true|false - поддерживается ли отмена исполнения (например закрытие открывшейся карточки).<br />
</pre><br />
<br />
<br />
------------------------------------------------------------------------------<br />
<span style="color:green">>>> '''executemethod'''</span><br />
<br />
Сообщение-команда из Oktell в CRM на выполнение динамического метода (возможно у конкретного пользователя). В зависимости от представления метода может исполняться на сервере CRM или передаваться в пользовательское подключение. <br />
<br />
Параметр ''waitresponsems'' указывает интервал в миллисекундах, которое сценарий предполагает ожидать возврата ответа после исполнения метода; если значение равно нулю, значит метод исполняется асинхронно и ответ не нужен. При этом если происходит прерывание исполнения сценария, или в случае наличия множественных подключений от пользователя при получении первого ответа, отправляется уведомительное событие ''executemethodwaitaborted''.<br />
<br />
<pre><br />
[<br />
"executemethod",<br />
{<br />
"qid": "4A8E20A1-57F9-4CA6-B4EE-221E2EB00364",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"methodkey": "createrecord",<br />
"executionid": "25FC81FC-C5D0-40FB-B4E0-882352E12D86",<br />
"inputparameters": {<br />
"sessionid": "2A2C48FE-D8B6-4B51-951A-09D31543D000"<br />
},<br />
"waitresponsems": 0<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green"><<< '''methodresult'''</span><br />
<br />
Сообщение-результат выполнения динамического метода из CRM в Oktell с возвратом выходных значений. Не отправляется, если исполнение прерывается командой CancelMethod.<br />
<br />
<pre><br />
[<br />
"methodresult",<br />
{<br />
"qid": "A238110C-6B74-4980-AA23-41402B1E9B0E",<br />
"methodkey": "createrecord",<br />
"executionid": "25FC81FC-C5D0-40FB-B4E0-882352E12D86",<br />
"outputparameters": {<br />
"recordid": "ADCB1376-BA66-496C-A56E-AB7A7D5A9193"<br />
}<br />
}<br />
]<br />
</pre><br />
<br />
<br />
------------------------------------------------------------------------------<br />
<span style="color:green">>>> '''cancelmethod'''</span><br />
<br />
Сообщение-команда из Oktell на прекращение выполнения ранее запущенного динамического метода. Отправляется туда же, куда предварительно было отправлено сообщение ''executemethod''.<br />
<br />
<pre><br />
[<br />
"cancelmethod",<br />
{<br />
"qid": "6ADC3F1E-B1DD-4768-BAF8-3EEB477B2F17",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"methodkey": "card_records",<br />
"executionid": "25FC81FC-C5D0-40FB-B4E0-882352E12D86",<br />
"forcecancel": 0<br />
}<br />
]<br />
</pre><br />
<br />
<br />
------------------------------------------------------------------------------<br />
<span style="color:green">>>> '''executemethodwaitaborted'''</span><br />
<br />
Сообщение-событие из Oktell, уведомляющее сервер/клиента CRM о прекращении ожидания ответа на выполнение метода. Отправляется туда же, куда предварительно было отправлено сообщение ''executemethod''. Отправляется только в том случае, если Oktell производил ожидание ответа (параметр ''waitresponsems'' не был равен нулю).<br />
<br />
<pre><br />
[<br />
"executemethodwaitaborted",<br />
{<br />
"qid": "6ADC3F1E-B1DD-4768-BAF8-3EEB477B2F17",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"methodkey": "card_records",<br />
"executionid": "25FC81FC-C5D0-40FB-B4E0-882352E12D86"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
------------------------------------------------------------------------------<br />
<div id="getavailableforms"></div><br />
<span style="color:green">>>> '''getavailableforms'''</span><br />
<br />
Отправляет из Oktell в CRM сообщение-запрос на возврат доступных карточек CRM. Отправляется только на сервер CRM (websocket или http).<br />
<br />
<pre><br />
[<br />
"getavailableforms",<br />
{<br />
"qid": "7A1FF57A-ED91-4033-A42F-1D2AE630450E"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green"><<< '''availableforms'''</span><br />
<br />
Сообщение-ответ из CRM в Oktell со списком доступных карточек CRM. Команда на отображение форм отправляется в клиентские подключение (или на сервер-мультиплексор), в серверный канал такие команды не отправляются. В этом основное различие динамических методов и форм.<br />
<br />
Следует понимать, что формы могут иметь разное назначение, и соответственно разный способ работы с данными. Например форма некоторого запроса отображается с целью получения данных обратно в сценарий - в этом случае форме нужны выходные параметры, и вызов ее происходит с ожиданием ответа. Одновременно могут существовать и использоваться формы, работающие с данными из CRM и взаимодействующие непосредственно с CRM, возможно находящиеся в отображении длительное время. В этом случае Oktell выступает лишь как инициатор их открытия с передачей входных идентификационных параметров. Таким формам выходные значения не нужны.<br />
<br />
<pre><br />
[<br />
"availableforms",<br />
{<br />
"qid": "7A1FF57A-ED91-4033-A42F-1D2AE630450E",<br />
"forms": [<br />
{<br />
"key": "formB840825C", <br />
"name": "Данные о компании",<br />
"description": "Отображает контактные данные об абоненте (комании или человеке) при входящем/исходящем звонке",<br />
"inputparams": [<br />
{<br />
"key": "accountid",<br />
"name": "Код компании",<br />
"description": "Код компании, который CRM возвращает в поле [accountid] в ответ на запрос данных о компании по номеру телефона",<br />
"type": "string"<br />
},<br />
{<br />
"key": "page",<br />
"name": "Активная страница",<br />
"description": "Открываемая страница формы по умолчанию при открытии карточки",<br />
"type": "list",<br />
"items": [<br />
{<br />
id: "page1",<br />
name: "Контактные данные"<br />
},<br />
{<br />
id: "page2",<br />
name: "История взаимодействия"<br />
},<br />
{<br />
id: "page3",<br />
name: "Комментарии"<br />
}<br />
]<br />
{...},<br />
{...}<br />
]<br />
},<br />
{...},<br />
{...}<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
------------------------------------------------------------------------------<br />
<span style="color:green">>>> '''showform'''</span><br />
<br />
Сообщение-команда из Oktell в CRM на открытие карточки у конкретного пользователя. <br />
<br />
<pre><br />
[<br />
"showform",<br />
{<br />
"qid": "5CF770AE-E308-41DA-B89E-7BBCE75BE36F",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"formkey": "formB840825C",<br />
"windowid": "9F5D8B1A-8818-41EA-A240-04DA07498C40",<br />
"inputparameters": {<br />
"accountid": "05379F49-AB22-4872-B2C2-0D4BA019EA0B",<br />
"page": "page2"<br />
},<br />
"waitresponsems": 0<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green"><<< '''formresult'''</span><br />
<br />
Сообщение-результат из CRM в Oktell при закрытии карточки пользователем с возвратом выходных значений. Не отправляется, если отображение прерывается командой CloseForm<br />
<br />
<pre><br />
[<br />
"formresult",<br />
{<br />
"qid": "EC9E1619-AC1B-4071-98B9-30808B9ED0EC",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"formkey": "formB840825C",<br />
"windowid": "9F5D8B1A-8818-41EA-A240-04DA07498C40",<br />
"outputparameters": {<br />
"comment": "блаблабла"<br />
}<br />
}<br />
]<br />
</pre><br />
<br />
<br />
------------------------------------------------------------------------------<br />
<span style="color:green">>>> '''closeform'''</span><br />
<br />
Сообщение-команда из Oktell на закрытие карточки у конкретного пользователя. Отправляется туда же, куда предварительно было отправлено сообщение ''executemethod''.<br />
<br />
<pre><br />
[<br />
"closeform",<br />
{<br />
"qid": "FAA1A503-FEC6-4D23-ADA9-2E4FD63F2C96",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"formkey": "formB840825C",<br />
"windowid": "9F5D8B1A-8818-41EA-A240-04DA07498C40",<br />
"forceclose": 0<br />
}<br />
]<br />
</pre><br />
<br />
<br />
------------------------------------------------------------------------------<br />
<span style="color:green">>>> '''showformwaitaborted'''</span><br />
<br />
Сообщение-событие из Oktell, уведомляющее сервер/клиента CRM о прекращении ожидания ответа на отображение формы. Отправляется туда же, куда предварительно было отправлено сообщение ''showform''. Отправляется только в том случае, если Oktell производил ожидание ответа (параметр ''waitresponsems'' не был равен нулю).<br />
<br />
<pre><br />
[<br />
"showformwaitaborted",<br />
{<br />
"qid": "6ADC3F1E-B1DD-4768-BAF8-3EEB477B2F17",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"formkey": "formB840825C",<br />
"windowid": "9F5D8B1A-8818-41EA-A240-04DA07498C40"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<br />
<br />
====Обмен данными об активных пользователях====<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''getactiveusers'''</span><br />
<br />
Запрос из Oktell в CRM на возврат текущих активных (авторизованных) пользователей. Применяется при старте одной из систем в момент организации подключения.<br />
<br />
<pre><br />
[<br />
"getactiveusers",<br />
{<br />
"qid": "9C44D978-E380-4405-B1B9-C4894BF188A7"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green"><<< '''activeusers'''</span><br />
<br />
Ответное сообщение из CRM в Oktell со списком активных авторизованных пользователей CRM.<br />
<br />
<pre><br />
[<br />
"activeusers",<br />
{<br />
"qid": "9C44D978-E380-4405-B1B9-C4894BF188A7",<br />
"users": [<br />
{"userlogin": "ivanov", "userid": "20394857203948752345"},<br />
{"userlogin": "petrov", "userid": "kasjdfhlaksjdfhlaks"},<br />
{"userlogin": "sidorov", "userid": "987495873948573945"}<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<div id="login"></div><br />
<span style="color:green"><<< '''login'''</span><br />
<br />
Сообщение из CRM в Oktell об авторизации пользователя. Запрос кросс-авторизации в Oktell в рамках [[#Arch1|схемы интеграции 1]].<br />
<br />
Логин используется в частности для привязки пользователя к конкретному телефонному аппарату. Возможны разные варианты привязки:<br />
# Для конкретного телефона в [[Карта сети|карте сети]] Oktell задается конкретный пользователь WebCRM, при логине производится автоматическая привязка (если телефону назначен также пользователь по умолчанию, то он отключается). При выходе выходе пользователя из WebCRM происходит обратный процесс. При этом телефоном считается учетная запись (комбинация логин-пароль или IP-адрес устройства, в зависимости от типа регистрации), и фактически разные устройства могут в течение времени принимать эти значения.<br />
# Во время логина WebCRM в сообщении указывает любой идентификатор (или их список) рабочего места, с которого осуществляется запуск (это может быть HostName, IP-адрес, или любой другой уникальный идентификатор, указанный для сопоставления также и в карте сети в качестве адреса компьютера). Соединенный с этим компьютером логической связью телефон в карте сети становится рабочим телефоном авторизованного таким образом пользователя. По аналогии с работой клиентских приложений Oktell.<br />
<br />
В случае индивидуальных подключений [[#Arch2|схемы интеграции 2]] и [[#Arch3|схемы интеграции 3]] требуется указание как логина, так и пароля для проведения полной проверки, причем пароль необходимо указывать в виде MD5 хеша. При этом возможно использование сессий (параметры ''sessionid'' и ''expires''). Клиент указывает время жизни сессии в секундах, сервер возвращает идентификатор сессии; в дальнейшем при повторном подключении в указанный интервал времени клиент может указывать сессию и новое время жизни для продления, но не указывать пароль. Если сессия существует (время не вышло, сервер не перезагружался), то авторизация будет подтверждена.<br />
<br />
<span style="color:green">ВНИМАНИЕ! В версии 2.8 пароли case-sensitive, в версии 2.7 пароли case-insensitive. При переходе между версиями до полного обновления всех паролей рекомендуется указывать пароль в дублированном виде: параметр ''password'' - MD5(lowercase), ''Password'' - MD5(normalcase).<br />
<br />
В случае [[#Arch1|схемы интеграции 1]] подразумевается, что авторизация пользователя происходит в WebCRM, и указания пароля при кросс-логине в Oktell не требуется, равно как и сессий. <br />
<br />
<pre><br />
[<br />
"login",<br />
{<br />
"qid": "9D484E0E-BE08-47B5-ABBD-490936881056",<br />
"userlogin": "ivanov",<br />
"userid": "29834234234",<br />
"password": "D41D8CD98F00B204E9800998ECF8427E",<br />
"expires": 86400,<br />
"usewebrtc": 1<br />
}<br />
]<br />
</pre><br />
<br />
<pre><br />
[<br />
"login",<br />
{<br />
"qid": "9D484E0E-BE08-47B5-ABBD-490936881056",<br />
"userlogin": "ivanov",<br />
"userid": "29834234234"<br />
}<br />
]<br />
</pre><br />
<br />
<pre><br />
[<br />
"login",<br />
{<br />
"qid": "9D484E0E-BE08-47B5-ABBD-490936881056",<br />
"userlogin": "ivanov",<br />
"userid": "29834234234",<br />
"workplace": "wp001",<br />
"sessionid": "838AC713-9D4D-43E2-A57D-D4F2D7545FB5",<br />
"expires": 86400<br />
}<br />
]<br />
</pre><br />
<br />
<pre><br />
[<br />
"login",<br />
{<br />
"qid": "9D484E0E-BE08-47B5-ABBD-490936881056",<br />
"userlogin": "ivanov",<br />
"userid": "29834234234",<br />
"workplace": [<br />
"wp001",<br />
"192.168.0.204",<br />
"81.22.217.33"<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''loginresult'''</span><br />
<br />
Сообщение из Oktell в CRM о результате авторизации или кросс-авторизации пользователя. Отправляется в ответ на запрос авторизации в Oktell методом ''login'', а в рамках [[#Arch1|схемы интеграции 1]] может быть отправлено самостоятельно по результатам обработки сообщения ''activeusers'' после установки связи с CRM. В случае запроса использования клиентом WebRTC, в ответе направляется информация по учетной записи телефона, ожидающей подключения по SIP.<br />
<br />
<pre><br />
[<br />
"loginresult",<br />
{<br />
"qid": "939AA33E-011F-4FEC-B60A-8BC1B4888B5A",<br />
"userlogin": "ivanov",<br />
"userid": "29834234234",<br />
"result": 0,<br />
"error": 50093,<br />
"errormsg": "Пользователь уже зарегистрирован"<br />
}<br />
]<br />
</pre><br />
<br />
<pre><br />
[<br />
"loginresult",<br />
{<br />
"qid": "939AA33E-011F-4FEC-B60A-8BC1B4888B5A",<br />
"userlogin": "ivanov",<br />
"userid": "29834234234",<br />
"result": 1,<br />
"sessionid": "838AC713-9D4D-43E2-A57D-D4F2D7545FB5",<br />
"expires": 10000,<br />
"sipuser": "phone81",<br />
"siplogin": "phone81",<br />
"sippass": "3kd94FnI",<br />
"sipport": 5060<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''logout'''</span><br />
<br />
Сообщение из CRM в Oktell о выходе (логауте) пользователя. Команда на кросс-логаут в Oktell.<br />
<br />
<pre><br />
[<br />
"logout",<br />
{<br />
"qid": "9D484E0E-BE08-47B5-ABBD-490936881056",<br />
"userlogin": "ivanov",<br />
"userid": "29834234234"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''logoutresult'''</span><br />
<br />
Сообщение из Oktell в CRM о результате кросс-логаута пользователя. Может быть отправлено в ответ на запрос кросс-логаута в Oktell, а может быть отправлено самостоятельно в случае длительного отсутствия откликов от пользователя (не задействовано) или выгрузки пользователя по инициативе сервера.<br />
<br />
<pre><br />
[<br />
"logoutresult",<br />
{<br />
"qid": "4B25E210-2D67-4675-A5AE-46DC9CBC32F9",<br />
"userlogin": "ivanov",<br />
"userid": "29834234234",<br />
"result": 1<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''updatesession'''</span><br />
<br />
Команда из CRM в Oktell о продлении сессии пользователя (для сохранения возможности производить вход без пароля).<br />
<br />
<pre><br />
[<br />
"updatesession",<br />
{<br />
"qid": "9D484E0E-BE08-47B5-ABBD-490936881056",<br />
"userlogin": "ivanov",<br />
"userid": "29834234234",<br />
"sessionid": "9238749273982734023",<br />
"expires": 86400<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<br />
<br />
====Обмен состояниями пользователей====<br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''entercallcenter'''</span><br />
<br />
Запрос из CRM на вход в режим call-центра. При проведении изменений в ответ отправляется сообщение userstatechanged.<br />
<br />
<pre><br />
[<br />
"entercallcenter",<br />
{<br />
"qid": "7DD2ED7A-B6BF-4988-A780-99719C65CA5D",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green"><<< '''exitcallcenter'''</span><br />
<br />
Запрос из CRM на выход из режима call-центра. При проведении изменений в ответ отправляется сообщение userstatechanged.<br />
<br />
<pre><br />
[<br />
"exitcallcenter",<br />
{<br />
"qid": "6E899456-C373-48EB-949E-E2C0D79D45EA",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''checkmyuserprivilege'''</span><br />
<br />
Запрос из CRM на проверку наличия у пользователя обще-ролевой привилегии.<br />
<br />
<pre><br />
[<br />
"checkmyuserprivilege",<br />
{<br />
"qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"code": "DashboardCreate"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''checkmyuserprivilegeresult'''</span><br />
<br />
Ответ на ''checkmyuserprivilege''.<br />
<br />
<pre><br />
[<br />
"checkmyuserprivilegeresult",<br />
{<br />
"qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"code": "DashboardCreate",<br />
"hasprivilege": true<br />
}<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''getmyuserprivileges'''</span><br />
<br />
Запрос из CRM на возврат всех имеющихся у пользователя обще-ролевых привилегий.<br />
<br />
<pre><br />
[<br />
"getmyuserprivileges",<br />
{<br />
"qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getmyuserprivilegesresult'''</span><br />
<br />
Ответ на ''getmyuserprivileges''.<br />
<br />
<pre><br />
[<br />
"getmyuserprivilegesresult",<br />
{<br />
"qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"privileges":[<br />
"ExtWP",<br />
"ViewOffice",<br />
...<br />
]<br />
}<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<br />
<br />
====Текстовый чат v.1 (версии до 2.8.130909)====<br />
<br />
<br />
Обмен текстовыми сообщениями в первоначальном варианте, где подразумевается только диалоговое общение между двумя пользователями.<br />
Начиная с версии 2.8.130909 этот способ считается устаревшим. <br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''usertextmessagereceived'''</span><br />
<br />
Сообщение-событие из Oktell в CRM о новом входящем текстовом сообщении чата.<br />
<br />
<pre><br />
[<br />
"usertextmessagereceived",<br />
{<br />
"qid": "D5582E04-2964-438C-A8DB-21AF898BBAE0",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"messageid": "0263C7BF-DEB3-406F-9CF9-6F56D828C755",<br />
"snduserlogin": "Петров",<br />
"snduserid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"sndusername": "Петров Антон Григорьевич",<br />
"messagetext": "раз два три четыре пять вышел зайчик погулять",<br />
"messagedate": "2011-03-27 14:12:28",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''usertextmessageviewed'''</span><br />
<br />
Сообщение-событие из Oktell в CRM о прочитанности отправленного сообщения.<br />
<br />
<pre><br />
[<br />
"usertextmessageviewed",<br />
{<br />
"qid": "D5582E04-2964-438C-A8DB-21AF898BBAE0",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"vieweduserid": "66D12297-E400-4862-BD24-F6DACCFDF9DA",<br />
"messageids": [<br />
"0263C7BF-DEB3-406F-9CF9-6F56D828C755",<br />
"4B5110FD-899B-4429-A659-2B9695B4D89E"<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green"><<< '''sendusertextmessage'''</span><br />
<br />
Запрос из CRM в Oktell на отправку текстового сообщения в рамках чата другому пользователю. <br />
Вложения и сообщения в конференциях - опция, используемая веб-клиентом Oktell.<br />
<br />
<pre><br />
[<br />
"sendusertextmessage",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"messageid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",<br />
"recvuserlogin": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",<br />
"recvuserid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",<br />
"messagetext": "раз два три четыре пять вышел зайчик погулять",<br />
"isconferencechat": true,<br />
"files": [<br />
"Temp\1.jpg",<br />
"Temp\2.jpg"<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''sendusertextmessageresult'''</span><br />
<br />
Ответ из Oktell на команду отправки сообщения.<br />
<br />
<pre><br />
[<br />
"sendusertextmessageresult",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"messageid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",<br />
"dtformat": "yyyy-MM-dd HH:mm:ss",<br />
"sentdate": "2012-03-18 13:06:28"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green"><<< '''setusermessageviewed'''</span><br />
<br />
Запрос из CRM в Oktell на выставление признака прочитанности текстового сообщения пользователем. В ответ возвращается количество реально отмеченных сообщений. Может быть больше или меньше указанного. Событие о прочитанности отправляется пользователю, указанному в поле senderuserid (параметр может не указываться).<br />
<br />
<pre><br />
[<br />
"setusermessageviewed",<br />
{<br />
"qid": "AA29AE60-50C3-48EE-A32E-3D98265D7412",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"senderuserid": "689BD58D-2288-4E93-8647-58FB0756F3CA",<br />
"messageids": [ <br />
"0B9A00D8-12F6-4A0F-A8A3-4C840E98C240", <br />
"4748964E-9ADC-4999-9ACB-12B8B46660CF" <br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''setusermessageviewedresult'''</span><br />
<br />
Ответ из Oktell на команду установки признака прочитанности ''setusermessageviewed''.<br />
<br />
<pre><br />
[<br />
"setusermessageviewedresult",<br />
{<br />
"qid": "AA29AE60-50C3-48EE-A32E-3D98265D7412",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"updatedcount": 12<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<br />
<br />
====Текстовый чат v.2 (версии начиная с 2.8.130909)====<br />
<br />
<br />
Обмен текстовыми сообщениями протекает в рамках чатов - индивидуальных, массовых, прикрепленных. Вводится понятие чата с соответствующими свойствами - названием, списком участников, возможностью их редактирования. Требует подписки на совокупность событий ''chat''.<br />
Интерфейс доступен и считается основным начиная с версии 2.8.130909.<br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''chatcreate'''</span><br />
<br />
Запрос из CRM в Oktell на создание нового чата. Чаты создаются одним из участников, все остальные уведомляются о создании. Чаты могут существовать сколь угодно длительное время и использоваться многократно.<br />
Идентификатор может не указываться, тогда он генерируется и возвращается в ответе. <br />
Типы: 1 - приватный диалог двух участников, 2 - чат с нерегламентированным количеством участников, 3 - привязанный к конференции. <br />
По результатам создания генерируется и отправляется событие ''[[chatcreated]]'' всем заявленным участникам чата. <br />
<br />
<br />
<pre><br />
[<br />
"chatcreate",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",<br />
"name": "название чата",<br />
"type": 2,<br />
"linkedobjectid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240"<br />
"members": [<br />
"D9E54EB7-D3D9-43D6-B70C-019ABC6FC457",<br />
"A530C87E-6A07-471C-B70C-E7C1C31AD9A7"<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''chatcreateresult'''</span><br />
<br />
Ответ из Oktell на команду создания нового чата.<br />
<br />
<pre><br />
[<br />
"chatcreateresult",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''chatsetname'''</span><br />
<br />
Запрос из CRM в Oktell на изменение названия существующему чату. <br />
По результатам изменения генерируется и отправляется событие ''[[chatnamechanged]]'' всем авторизованным участникам чата. <br />
<br />
<br />
<pre><br />
[<br />
"chatsetname",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",<br />
"name": "новое название чата"<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''chatsetnameresult'''</span><br />
<br />
Ответ из Oktell на команду изменения названия чата.<br />
<br />
<pre><br />
[<br />
"chatsetnameresult",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''chataddmembers'''</span><br />
<br />
Запрос из CRM в Oktell на добавление участников к существующему чату. <br />
Операция доступна только для участников чата.<br />
В качестве ключей участников ожидаются идентификаторы или логины (более затратная операция в части поиска).<br />
По результатам изменения генерируется и отправляется событие ''[[chatmemberadded]]'' всем авторизованным участникам чата, включая новых. <br />
<br />
<br />
<pre><br />
[<br />
"chataddmembers",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",<br />
"members": [<br />
"D9E54EB7-D3D9-43D6-B70C-019ABC6FC457",<br />
"A530C87E-6A07-471C-B70C-E7C1C31AD9A7"<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''chataddmembersresult'''</span><br />
<br />
Ответ из Oktell на команду добавления участников к существующему чату.<br />
<br />
<pre><br />
[<br />
"chataddmembersresult",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''chatremovemembers'''</span><br />
<br />
Запрос из CRM в Oktell на удаление участников из существующего чата. <br />
Операция доступна только для создателя чата.<br />
В качестве ключей участников ожидаются идентификаторы или логины (более затратная операция в части поиска).<br />
По результатам изменения генерируется и отправляется событие ''[[chatmemberremoved]]'' всем авторизованным участникам чата, включая удаленных. <br />
<br />
<br />
<pre><br />
[<br />
"chatremovemembers",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",<br />
"members": [<br />
"D9E54EB7-D3D9-43D6-B70C-019ABC6FC457",<br />
"A530C87E-6A07-471C-B70C-E7C1C31AD9A7"<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''chatremovemembersresult'''</span><br />
<br />
Ответ из Oktell на команду удаления участников из существующего чата.<br />
<br />
<pre><br />
[<br />
"chatremovemembersresult",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''chatgetmembers'''</span><br />
<br />
Запрос из CRM в Oktell на получение информации о текущих участниках указанного чата. <br />
<br />
<br />
<pre><br />
[<br />
"chatgetmembers",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''chatgetmembersresult'''</span><br />
<br />
Ответ из Oktell на запрос информации о текущих участниках указанного чата.<br />
<br />
<pre><br />
[<br />
"chatgetmembersresult",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",<br />
"members": [<br />
{<br />
"id":"D9E54EB7-D3D9-43D6-B70C-019ABC6FC457"<br />
},<br />
...<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''chatsendmessage'''</span><br />
<br />
Запрос из CRM в Oktell на отправку сообщения в указанный чат. <br />
Идентификатор messageid может не указываться, тогда генерируется и возвращается в ответе. Сообщение может содержать вложенные файлы ('''files''') и указание на скрытое их хранение на диске ('''hidefiles''').<br />
<br />
<br />
<pre><br />
[<br />
"chatsendmessage",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240"<br />
"messageid": "2CD5BB8F-CC88-4D01-8A1F-5CEB2CD72AAE",<br />
"messagetext": "раз два три четыре пять вышел зайчик погулять"<br />
"hidefiles": false,<br />
"files": [<br />
"Temp\1.jpg",<br />
"Temp\2.txt"<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''chatsendmessageresult'''</span><br />
<br />
Ответ из Oktell на отправку сообщения в указанный чат.<br />
<br />
<pre><br />
[<br />
"chatsendmessageresult",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"messageid": "2CD5BB8F-CC88-4D01-8A1F-5CEB2CD72AAE"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''chatsetmessageviewed'''</span><br />
<br />
Запрос из CRM в Oktell на установку флага прочитанности указанного сообщения. Вместе с указанным сообщением маркируются прочитанными также все предшествующие сообщения этого же чата.<br />
<br />
<br />
<pre><br />
[<br />
"chatsetmessageviewed",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",<br />
"messageid": "D9E54EB7-D3D9-43D6-B70C-019ABC6FC457"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''chatsetmessageviewedresult'''</span><br />
<br />
Ответ из Oktell на установку флага прочитанности сообщения.<br />
<br />
<pre><br />
[<br />
"chatsetmessageviewedresult",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''chatgetprivateid'''</span><br />
<br />
Запрос из CRM в Oktell на получение идентификатора существующего приватного диалога между двумя пользователями, один из которых - авторизованный пользователь. Приватные диалоги соответствуют чатам с типом "1".<br />
В системе возможно существование нескольких приватных диалогов между пользователями, в этом случае возвращается любой из них. В случае отсутствия приватных диалогов в качестве идентификатора возвращается null.<br />
<br />
<br />
<pre><br />
[<br />
"chatgetprivateid",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"opponentid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''chatgetprivateidresult'''</span><br />
<br />
Ответ из Oktell на запрос идентификатора приватного диалога. Если приватный диалог между пользователями не найден, возвращается null.<br />
<br />
<pre><br />
[<br />
"chatgetprivateidresult",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chatid": "D9E54EB7-D3D9-43D6-B70C-019ABC6FC457"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''chatgetbyid'''</span><br />
<br />
Запрос из CRM в Oktell на получение информации о чате, указанному с помощью идентификатора. Среди информационных полей возвращаются название, количество участников, последнее сообщение в чате с признаком ''прочитано/не прочитано'', а также идентификатор оппонента, если это приватный диалог.<br />
<br />
<br />
<pre><br />
[<br />
"chatgetbyid",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chatid": "0B9A00D8-12F6-4A0F-A8A3-4C840E98C240",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''chatgetbyidresult'''</span><br />
<br />
Ответ из Oktell на запрос информации о чате. Если чат не найден по указанному идентификатору, возвращается null.<br />
<br />
<pre><br />
[<br />
"chatgetbyidresult",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"dtformat": "yyyy-MM-dd HH:mm:ss",<br />
"chat": {<br />
"id":"01483664-9D99-4B1B-8131-C46386A6FC68",<br />
"name":"приватный чат",<br />
"type":"1",<br />
"creatorid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",<br />
"membercount":"4",<br />
"privateopponentid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",<br />
"linkedobjectid":"",<br />
"lastdtutc":"2013-09-05 14:08:02",<br />
"lastmessage":{<br />
"id":"4067F854-E88A-40C1-82C5-7F125A77A25F",<br />
"amiauthor":false,<br />
"authorid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",<br />
"authorlogin":"sergeev",<br />
"authorname":"Сергеев Вахтанг Абрикосович",<br />
"dtutc":"2013-09-05 14:08:02",<br />
"text":"Зайди как освободишься",<br />
"isnew":"true"<br />
}<br />
}<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''chatgethotlist'''</span><br />
<br />
Запрос из CRM в Oktell на получение информации о горячих чатах, в рамках которых последние сообщения были сравнительно недавно. <br />
Запрос информации осуществляется с указанием нужной страницы (в сортированном по убыванию даты последней активности списке ''count'' элементов, начиная с ''startidx'').<br />
Можно также наложить дополнительные фильтры, применяемые к названию чата и к имени оппонента приватного диалога (''search1'' и ''search2''). <br />
Возвращаемая информация аналогична методу ''chatgetbyid''. <br />
<br />
<br />
<pre><br />
[<br />
"chatgethotlist",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"startidx": 0,<br />
"count": 10,<br />
"search1": "мой чат",<br />
"search2": "vjq xfn",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''chatgethotlistresult'''</span><br />
<br />
Ответ из Oktell на запрос информации о горячих чатах.<br />
<br />
<pre><br />
[<br />
"chatgethotlistresult",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"dtformat": "yyyy-MM-dd HH:mm:ss",<br />
"chatlist": [<br />
{<br />
"id":"01483664-9D99-4B1B-8131-C46386A6FC68",<br />
"name":"приватный чат",<br />
"type":"1",<br />
"creatorid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",<br />
"membercount":"4",<br />
"privateopponentid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",<br />
"linkedobjectid":"",<br />
"lastdtutc":"2013-09-05 14:08:02",<br />
"lastmessage":{<br />
"id":"4067F854-E88A-40C1-82C5-7F125A77A25F",<br />
"amiauthor":false,<br />
"authorid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",<br />
"authorlogin":"sergeev",<br />
"authorname":"Сергеев Вахтанг Абрикосович",<br />
"dtutc":"2013-09-05 14:08:02",<br />
"text":"Зайди как освободишься",<br />
"isnew":"true"<br />
},<br />
...<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''chatgettotalnewmessagecount'''</span><br />
<br />
Запрос из CRM в Oktell на получение количества непрочитанных сообщений всего по всем чатам с участием пользователя. <br />
<br />
<br />
<pre><br />
[<br />
"chatgettotalnewmessagecount",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''chatgettotalnewmessagecountresult'''</span><br />
<br />
Ответ из Oktell на запрос количества непрочитанных сообщений всего.<br />
<br />
<pre><br />
[<br />
"chatgettotalnewmessagecountresult",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"count": 31<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''chatgetmessagehistory'''</span><br />
<br />
Запрос из CRM в Oktell на получение истории сообщений по чату. <br />
Может быть наложен дополнительный фильтр на текст сообщения (''search1'' и ''search2''), ограничения на период выдачи истории (''dtstartutc'', ''dtstoputc''). По умолчанию весь период истории без фильтрации по тексту сообщений.<br />
Данные выдаются из сортированного по убыванию даты отправки списка сообщений с указанной страницы (''startidx'', ''count''). По умолчанию первые 10 сообщений.<br />
<br />
<br />
<pre><br />
[<br />
"chatgetmessagehistory",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chatid": "14D6DBB7-D5CB-471B-888A-9AACC8CD737B",<br />
"startidx": 0,<br />
"count": 50,<br />
"dtstartutc": "2013-07-12 13:00:00",<br />
"dtstoputc": "2013-07-12 15:00:00",<br />
"search1": "abkmnh",<br />
"search2": "фильтр"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''chatgetmessagehistoryresult'''</span><br />
<br />
Ответ из Oktell на запрос истории сообщений в чате.<br />
<br />
<pre><br />
[<br />
"chatgetmessagehistoryresult",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"dtformat": "yyyy-MM-dd HH:mm:ss",<br />
"messagelist": [<br />
{<br />
"id":"4067F854-E88A-40C1-82C5-7F125A77A25F",<br />
"amiauthor":false,<br />
"authorid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",<br />
"authorlogin":"sergeev",<br />
"authorname":"Сергеев Вахтанг Абрикосович",<br />
"dtutc":"2013-09-05 14:08:02",<br />
"text":"Зайди как освободишься",<br />
"isnew":"true"<br />
"files":[<br />
{<br />
"path":"Temp\1.jpg",<br />
"size":329002<br />
},<br />
...<br />
]<br />
},<br />
...<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''chatcreated'''</span><br />
<br />
Сообщение из Oktell в CRM о факте создания нового текстового чата с участием авторизованного пользователя.<br />
Отправляется всем участникам созданного чата.<br />
<br />
<br />
<pre><br />
[<br />
"chatcreated",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"dtformat": "yyyy-MM-dd HH:mm:ss",<br />
"chat": {<br />
"id":"01483664-9D99-4B1B-8131-C46386A6FC68",<br />
"name":"приватный чат",<br />
"type":"1",<br />
"creatorid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",<br />
"membercount":"4",<br />
"privateopponentid":"F6CDFE11-91D2-47C0-89ED-FA9243B80A77",<br />
"linkedobjectid":"",<br />
"lastdtutc":"2013-09-05 14:08:02",<br />
"members":[<br />
{<br />
"id": "",<br />
"name": ""<br />
},<br />
...<br />
]<br />
}<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''chatnamechanged'''</span><br />
<br />
Сообщение из Oktell в CRM о факте изменения названия существующего текстового чата.<br />
Отправляется всем участникам этого чата.<br />
<br />
<br />
<pre><br />
[<br />
"chatnamechanged",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chatid": "41EE8C8F-A7DE-4F78-8F57-7F299CE2767B",<br />
"name": "новое имя"<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''chatmemberadded'''</span><br />
<br />
Сообщение из Oktell в CRM о факте добавления новых участников к существующему текстовому чату. <br />
Отправляется всем участникам этого чата.<br />
<br />
<br />
<pre><br />
[<br />
"chatmemberadded",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chatid": "41EE8C8F-A7DE-4F78-8F57-7F299CE2767B",<br />
"members":[<br />
{<br />
"id": "",<br />
"name": ""<br />
},<br />
...<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''chatmemberremoved'''</span><br />
<br />
Сообщение из Oktell в CRM о факте удаления некоторых участников из существующего текстового чата. <br />
Отправляется всем участникам этого чата.<br />
<br />
<br />
<pre><br />
[<br />
"chatmemberremoved",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chatid": "41EE8C8F-A7DE-4F78-8F57-7F299CE2767B",<br />
"members":[<br />
{<br />
"id": ""<br />
},<br />
...<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''chatmessage'''</span><br />
<br />
Сообщение из Oktell в CRM о факте поступления сообщения из текстового чата. <br />
Отправляется всем участникам этого чата, включая отправителя (в этом случае поля authorname и authorlogin отсутствуют).<br />
<br />
<br />
<pre><br />
[<br />
"chatmessage",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"dtformat": "yyyy-MM-dd HH:mm:ss",<br />
"chatid": "41EE8C8F-A7DE-4F78-8F57-7F299CE2767B",<br />
"messageid": "14D6DBB7-D5CB-471B-888A-9AACC8CD737B",<br />
"amiauthor": false,<br />
"authorid": "B1D4DCA9-2246-4EA1-B71E-68FF29AC92E4",<br />
"authorname": "",<br />
"authorlogin": "",<br />
"dtutc": "2013-09-05 16:10:04",<br />
"text": "тело сообщения",<br />
"isnew": true<br />
"files":[<br />
{<br />
"path":"Temp\1.jpg",<br />
"size":329002<br />
},<br />
...<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''chatmessageviewed'''</span><br />
<br />
Сообщение из Oktell в CRM о факте прочтения сообщения кем либо из участников текстового чата. <br />
Генерируется для отправителя сообщения, а также для пользователя, который прочитал сообщение.<br />
<br />
<br />
<pre><br />
[<br />
"chatmessageviewed",<br />
{<br />
"qid": "F14F31B7-F203-4462-975F-3A37DD16240B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chatid": "41EE8C8F-A7DE-4F78-8F57-7F299CE2767B",<br />
"messageid": "14D6DBB7-D5CB-471B-888A-9AACC8CD737B",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<br />
<br />
====Голосовая почта====<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''voicemailreceived'''</span><br />
<br />
Сообщение из Oktell в CRM о факте поступления голосовой почты на ящик пользователя.<br />
<br />
<pre><br />
[<br />
"voicemailreceived",<br />
{<br />
"qid": "080C0DF2-442B-410E-9204-4ADB3399FCC0",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<br />
<br />
====Всплывающие уведомления====<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''shownotifymessage'''</span><br />
<br />
Команда из Oktell в CRM об уведомлении пользователя по аналогии с всплывающими уведомлениями клиентского приложения Oktell<br />
<br />
<pre><br />
[<br />
"shownotifymessage",<br />
{<br />
"qid": "99CC8C57-1793-486A-AFB1-6E5CA3E6855E",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"id": "A33027E1-096F-38B8-1198-BB4D7C15823A",<br />
"sender": "АТС",<br />
"text": "Петров",<br />
"savedb": "true",<br />
"autohide": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"dtformat": "dd.MM.yyyy HH:mm:ss",<br />
"dt": "25.09.2011 13:07:12",<br />
"type": 262144,<br />
"backcolor": "00FF0000",<br />
"uniquekey": "E7899B61-55C3-4007-91EE-DDB348913AA8",<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* id - идентификатор сообщения. Присутствует, если сообщение сохранено в БД.<br />
//* savedb: true|false. Сохранено ли сообщение в БД.<br />
//* dt - дата/время генерации уведомления.<br />
//* uniquekey - код сообщения. Может отсутствовать. Но если есть - допускается одновременное отображение только <br />
одного уведомления с таким кодом (либо закрывать автоматически предыдущее, либо не отображать это)<br />
//* backcolor - hex AARRGGBB<br />
//* type - тип сообщения из флагового списка кратных двойке кодов<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''setnotifyshown'''</span><br />
<br />
Запрос из CRM в Oktell об установке признака прочтенности уведомления. Это актуально для уведомлений, сохраняемых в БД.<br />
<br />
<pre><br />
[<br />
"setnotifyshown",<br />
{<br />
"qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"id": "A33027E1-096F-38B8-1198-BB4D7C15823A",<br />
"wasshown": false<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* id - идентификатор сообщения. Может отсутствовать. Но если есть - допускается одновременное отображение только <br />
одного уведомления с таким кодом (либо закрывать автоматически предыдущее, либо не отображать это)<br />
//* ids - список идентификаторов отображенных уведомлений. <br />
</pre><br />
<br />
<br />
<br />
<br />
====Сообщения от АТС====<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''phoneevent_ringstarted'''</span><br />
<br />
Сообщение из Oktell в CRM о входящем звонке. Не имеет отношения к постановке звонка в очередь. Фактически когда телефон пользователя начал звенеть.<br />
<br />
<pre><br />
[<br />
"phoneevent_ringstarted",<br />
{<br />
"qid": "00488421-97E4-443B-81B7-D645E403AEBB",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chainid": "D6C8232D-4E4A-48BB-954E-C719582A4718",<br />
"callerlineid": "BC1FD50B-651F-459D-B659-28230E919673",<br />
"callerlinenum": "13027",<br />
"callerdirection": "oktell_pbx",<br />
"callerid": "73439170203",<br />
"callername": "ОАО Металлург",<br />
"callerdescription": "Металлоконструкции, изделия из черных и цветных металлов",<br />
"callerinfo": "Абонент: 315, Задача 'Входящие в call-центр'",<br />
"callercomment": "Еще что-то об абоненте",<br />
"calleruserlogin": "",<br />
"calleruserid": "00000000-0000-0000-0000-000000000000",<br />
"isextline": true,<br />
"canfax": true,<br />
"canvideo": false,<br />
"isconference": false,<br />
"confid": "00000000-0000-0000-0000-000000000000",<br />
"confname": "",<br />
"confroom": 0,<br />
"confinviternumber": "",<br />
"confinviteruserid": "00000000-0000-0000-0000-000000000000",<br />
"confinviteruserlogin": "",<br />
"istask": true,<br />
"taskid": "F94BD1FE-B628-4CC3-B215-F3F84B275EDD",<br />
"taskname": "Входящие в call-центр"<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* Частично могут отсутстовать параметры, описывающие абонента. <br />
// Если istask=false, то остутствуют taskid, taskname, tasktalklimitsec, taskfromhandlesec<br />
// Если звонок не от другого пользователя, то отсутствуют calleruserlogin, calleruserid<br />
// Если isconference=false, то отсутствует confid, confname, confroom<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''phoneevent_ringstopped'''</span><br />
<br />
Сообщение из Oktell в CRM о прекращении входящего вызова. Если пользователь не снял трубку, а вызов прекратился.<br />
<br />
<pre><br />
[<br />
"phoneevent_ringstopped",<br />
{<br />
"qid": "BEB91146-BA27-4236-9CAC-EF562719E7E5",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chainid": "D6C8232D-4E4A-48BB-954E-C719582A4718"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''phoneevent_commstarted'''</span><br />
<br />
Сообщение из Oktell в CRM о коммутации<br />
<br />
<pre><br />
[<br />
"phoneevent_commstarted",<br />
{<br />
"qid": "B7ACFEC1-65BB-4773-A425-DC39F5D1A48C",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chainid": "D6C8232D-4E4A-48BB-954E-C719582A4718",<br />
"commutationid": "072F2EE0-4B3B-49A7-AB5B-E213AE752A53"<br />
"callerlineid": "BC1FD50B-651F-459D-B659-28230E919673",<br />
"callerlinenum": "13027",<br />
"callerid": "73439170203",<br />
"callername": "ОАО Металлург",<br />
"callerdescription": "Металлоконструкции, изделия из черных и цветных металлов",<br />
"callerinfosimple": "Абонент: 315, Задача 'Входящие в call-центр'",<br />
"callercomment": "Еще что-то об абоненте",<br />
"calleruserlogin": "",<br />
"calleruserid": "00000000-0000-0000-0000-000000000000",<br />
"isextline": true,<br />
"canfax": true,<br />
"canvideo": false,<br />
"cansendfiles": true,<br />
"canbuildconf": true,<br />
"isivrscript": false,<br />
"isconference": false,<br />
"confid": "00000000-0000-0000-0000-000000000000",<br />
"confname": "",<br />
"confroom": 0,<br />
"istask": true,<br />
"taskid": "F94BD1FE-B628-4CC3-B215-F3F84B275EDD",<br />
"taskname": "Входящие в call-центр",<br />
"tasktalklimitsec": 180,<br />
"taskfromhandlesec": 24<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* Частично могут отсутстовать параметры, описывающие абонента. <br />
// Если istask=false, то остутствуют taskid, taskname, tasktalklimitsec, taskfromhandlesec<br />
// Если звонок не от другого пользователя, то отсутствуют calleruserlogin, calleruserid<br />
// Если isconference=false, то отсутствует confid, confname, confroom<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''phoneevent_commstopped'''</span><br />
<br />
Сообщение из Oktell в CRM о завершении коммутации. Не путать со звонком. Коммутаций в рамках обработки звонка может быть много.<br />
<br />
<pre><br />
[<br />
"phoneevent_commstopped",<br />
{<br />
"qid": "D514511C-BD4F-406B-B9C7-695CDC6C40E7",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chainid": "D6C8232D-4E4A-48BB-954E-C719582A4718",<br />
"commutationid": "072F2EE0-4B3B-49A7-AB5B-E213AE752A53"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''phoneevent_ivrstarted'''</span><br />
<br />
Сообщение из Oktell в CRM о соединении с IVR-сценарием.<br />
<br />
<pre><br />
[<br />
"phoneevent_ivrstarted",<br />
{<br />
"qid": "46E07742-0B24-4DD6-B4C6-12CDC1F7B938",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"scriptname": "(Служебный) Вход в АТС",<br />
"chainid": "D6C8232D-4E4A-48BB-954E-C719582A4718",<br />
"commutationid": "072F2EE0-4B3B-49A7-AB5B-E213AE752A53"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''phoneevent_ivrstopped'''</span><br />
<br />
Сообщение из Oktell в CRM о завершении соединения с IVR сценарием.<br />
<br />
<pre><br />
[<br />
"phoneevent_ivrstopped",<br />
{<br />
"qid": "FC9DD78C-1A5F-4E06-9AB5-A9CEDE025F6A",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''phoneevent_acmcallstarted'''</span><br />
<br />
Сообщение из Oktell в CRM о запуске автодозвона.<br />
<br />
<pre><br />
[<br />
"phoneevent_acmcallstarted",<br />
{<br />
"qid": "410B1930-423E-4632-B3DE-54EC48C0E8A0",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chainid": "D6C8232D-4E4A-48BB-954E-C719582A4718",<br />
"callnumber": "471",<br />
"isextline": false,<br />
"callername": "Сигизмунд Львович Кац",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''phoneevent_acmcallstopped'''</span><br />
<br />
Сообщение из Oktell в CRM об остановке автодозвона.<br />
<br />
<pre><br />
[<br />
"phoneevent_acmcallstopped",<br />
{<br />
"qid": "410B1930-423E-4632-B3DE-54EC48C0E8A0",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chainid": "D6C8232D-4E4A-48BB-954E-C719582A4718",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''phoneevent_faxstarted'''</span><br />
<br />
Сообщение из Oktell о начале факс-сеанса на оппозитном канале.<br />
<br />
<pre><br />
[<br />
"phoneevent_faxstarted",<br />
{<br />
"qid": "28979AE8-8E06-4EED-9114-98CB126CA8F4",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chainid": "D6C8232D-4E4A-48BB-954E-C719582A4718",<br />
"opponentlineid": "BC1FD50B-651F-459D-B659-28230E919673",<br />
"faxdirection": "send",<br />
"description": ""<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''phoneevent_faxstopped'''</span><br />
<br />
Сообщение из Oktell о завершении факс-сеанса на оппозитном канале (следом возврат в коммутацию, если трубку не положили там).<br />
<br />
<pre><br />
[<br />
"phoneevent_faxstopped",<br />
{<br />
"qid": "324CD087-BC2D-4FF3-A9BD-86A7276A4DED",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chainid": "D6C8232D-4E4A-48BB-954E-C719582A4718",<br />
"result": 0,<br />
"error": 65289,<br />
"errormsg": "NoFaxPages"<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* error: список FaxError<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''phoneevent_faxreceived'''</span><br />
<br />
Cообщение из Oktell о завершении приема факса со ссылками на файлы.<br />
<br />
<pre><br />
[<br />
"phoneevent_faxreceived",<br />
{<br />
"qid": "C20E48DF-628D-4954-ADDE-D2C3B31C6700",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"result": 1,<br />
"files": [<br />
{<br />
"filename": "",<br />
"filesize": 172934,<br />
"filelink": "\/temp\/receivedfax\/a802d3ea\/img01.tiff",<br />
"availabletill": "2011-03-27 23:39:18",<br />
},<br />
{...},<br />
{...}<br />
]<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* Даже если result=0, могут быть частично полученные файлы.<br />
</pre><br />
<br />
<br />
<br />
<br />
====Команды к АТС====<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''pbxautocallstart'''</span><br />
<br />
Запрос из CRM к Oktell на совершение звонка. В зависимости от текущего состояния линии - запускается автодозвон или нет, звонок на внешнюю линию, во внутрений номерной план, или автоопределение, сначала вызываться сам пользователь будет, а потом звонок абоненту, или сначала дозвон до абонента, а потом вызов пользователя.<br />
<br />
<pre><br />
[<br />
"pbxautocallstart",<br />
{<br />
"qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"number": "425",<br />
"direction": "int",<br />
"sequence": "abonent",<br />
"intercom": false<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* direction: int, ext, undefined (внутрь, наружу, автоопределение)<br />
//* sequence: abonent, user (сначала до абонента, сначала до пользователя)<br />
//* intercom: true|false (интерком-вызов, обычный вызов)<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''pbxautocallstartresult'''</span><br />
<br />
Ответ из Oktell в CRM на запрос звонка.<br />
<br />
<pre><br />
[<br />
"pbxautocallstartresult",<br />
{<br />
"qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"number": "425",<br />
"direction": "int",<br />
"sequence": "abonent",<br />
"result": 0,<br />
"error": 5,<br />
"errormsg": "cntNumberNotFound"<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* error, errormsg: EACMAnswer:<br />
//* cntStartedSuccessfully = 0 //Звонок успешно взят в реализацию<br />
//* cntUserNotReady = 1 //У пользователя-инициатора не найдены линии, готовые линии, или состояние кривое<br />
//* cntBusy = 2 //При звонке на внутренний номер - признак занятости. В очереди и сам повисеть может<br />
//* cntExtLineNotFound = 3, //Не найдены готовые внешние линии<br />
//* cntError = 4, //Прочие ошибки, исключения.<br />
//* cntControlNotReady = 5, //Режим не доделан.<br />
//* cntNumberNotFound = 6 //Внутренний номер не найден (по факту, если сервер сам будет определять <br />
направление звонка, это вообще не будет задействовано)<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''pbxautocallabort'''</span><br />
<br />
Запрос из CRM к Oktell на прекращение автодозвона<br />
<pre><br />
[<br />
"pbxautocallabort",<br />
{<br />
"qid": "28BF3E8F-1F97-47AB-BD42-92D174D4A705",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''pbxtransfercall'''</span><br />
<br />
Аналогично запросу из CRM на совершение звонка - запрос на совершение переключения. Если линия свободна - действует аналогично полностью запросу на звонок. Если пользователь в разговоре - через флэш набирает указанный номер.<br />
<br />
<pre><br />
[<br />
"pbxtransfercall",<br />
{<br />
"qid": "81FBE5C2-E81B-4D0D-8AC0-72C22ACCD4E2",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"number": "425",<br />
"direction": "int",<br />
"sequence": "abonent",<br />
"intercom": false <br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''pbxtransfercallresult'''</span><br />
<br />
И аналогичный ответ из Oktell в CRM.<br />
<br />
<pre><br />
[<br />
"pbxtransfercallresult",<br />
{<br />
"qid": "81FBE5C2-E81B-4D0D-8AC0-72C22ACCD4E2",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"number": "425",<br />
"direction": "int",<br />
"sequence": "abonent",<br />
"result": 0,<br />
"error": 5,<br />
"errormsg": "cntNumberNotFound"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''pbxdeclinecall'''</span><br />
<br />
Запрос из CRM к Oktell на отклонение звонка.<br />
<br />
<pre><br />
[<br />
"pbxdeclinecall",<br />
{<br />
"qid": "0AFB2B0C-A68F-448B-9B4B-AB42096D4E95",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''pbxabortcall'''</span><br />
<br />
Запрос из CRM к Oktell на обрыв текущего существующего сеанса связи. Не путать с DeclineCall. Прекращает коммутацию, если существует, прекращает автодозвон, если запущен.<br />
<br />
<pre><br />
[<br />
"pbxabortcall",<br />
{<br />
"qid": "53F2EE86-46AF-4A37-8C60-2F27EADD10DE",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<div id="pbxmakeflash"></div><br />
<span style="color:green"><<< '''pbxmakeflash'''</span><br />
<br />
Запрос из CRM в Oktell на программную эмуляцию флэш.<br />
<br />
<pre><br />
[<br />
"pbxmakeflash",<br />
{<br />
"qid": "DD836C5D-4F3E-4FD2-9B60-24E330B03FC6",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"mode": "default"<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* mode - abort, switch, next - устанавливает поведение, если на удержании уже находится абонент.<br />
abort - обрыв текущему и переключение на того кто на удержании<br />
switch - возврат к тому, кто на удержании, с размещением текущего на удержании<br />
next - обрыв текущему и переход сразу в набор номера<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''pbxmaketransfer'''</span><br />
<br />
Запрос из CRM в Oktell на перевод текущего звонка.<br><br />
Если A соединен с B, и от А приходит команда трансфер(C), то абонента B переключает на C, а A в отбой.<br><br />
Если A соединен с B, а в это время во флеше/холде находится D, то абонента B переключает на C, а A соединяется с D.<br><br />
Если A ни с кем не соединен, то просто отбой в A.<br />
<br />
<pre><br />
[<br />
"pbxmaketransfer",<br />
{<br />
"qid": "DD836C5D-4F3E-4FD2-9B60-24E330B03FC6",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"transferto": "475"<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* transferto - номер, на который осуществить перевод.<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''pbxclearflash'''</span><br />
<br />
Запрос из CRM в Oktell на обрыв линии, находящейся на удержании.<br />
<br />
<pre><br />
[<br />
"pbxclearflash",<br />
{<br />
"qid": "DD836C5D-4F3E-4FD2-9B60-24E330B03FC6",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
}<br />
]<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''pbxfaxreceive'''</span><br />
<br />
Запрос из CRM в Oktell на переключение в прием факса.<br />
<br />
<pre><br />
[<br />
"pbxfaxreceive",<br />
{<br />
"qid": "59305AD1-40A5-476A-B76D-2DAB1F2A89D3",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"linkmode": "simple"<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* linkmode - full, simple - устанавливает формат ссылок, в котором будут указаны полученные файлы<br />
в событии об окончании приема.<br />
full - вернуть абсолютную ссылку на скачивание через http.<br />
simple - вернуть относительную ссылку на скачивание.<br />
При формировании абсолютной ссылки в качестве доменного имени берется значение из <br />
раздела [[Интеграция с WEB-Socket CRM]] общих настроек Oktell.<br />
</pre><br />
<br />
<br />
<span style="color:green"><<< '''pbxfaxstop'''</span><br />
<br />
Запрос из CRM в Oktell на прерывание приема/передачи факса.<br />
<br />
<pre><br />
[<br />
"pbxfaxstop",<br />
{<br />
"qid": "59305AD1-40A5-476A-B76D-2DAB1F2A89D3",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''pbxmakeflash'''</span><br />
<br />
Запрос из CRM в Oktell на программную эмуляцию флэш.<br />
<br />
<pre><br />
[<br />
"pbxmakeflash",<br />
{<br />
"qid": "DD836C5D-4F3E-4FD2-9B60-24E330B03FC6",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"mode": "default"<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* mode - abort, switch, next - устанавливает поведение, если на удержании уже находится абонент.<br />
abort - обрыв текущему и переключение на того кто на удержании<br />
switch - возврат к тому, кто на удержании, с размещением текущего на удержании<br />
next - обрыв текущему и переход сразу в набор номера<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''pbxanswercall'''</span><br />
<br />
Запрос из CRM в Oktell на снятие трубки при входящем звонке (с помощью изменения SIP-вызова на интерком).<br />
<br />
<pre><br />
[<br />
"pbxanswercall",<br />
{<br />
"qid": "DD836C5D-4F3E-4FD2-9B60-24E330B03FC6",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<br />
<br />
====Запросы к АТС общего характера====<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''exectmcall'''</span><br />
<br />
Запрос из CRM в Oktell. Осуществляет размещение короткого задания на дозвон и соединение с указанным оператором (пользователем).<br />
Дозвониться до одного из указанных абонентов-номеров группы A, соединить с одним из указанных абонентов-номеров группы B.<br />
Результатом выполнения является одна коммутация.<br />
<br />
Не требует указания пользователя.<br />
Считается серверным методом, хотя может вызываться и по индивидуальному клиентскому каналу.<br />
<br />
<pre><br />
[<br />
"exectmcall",<br />
{<br />
"qid": "BE06A1E4-759A-4BFA-8D15-5FCF756EEE53",<br />
"taskid": "qud82039lsdfmnasd",<br />
"a_abonents": [<br />
"7931289",<br />
"83959279394",<br />
"425",<br />
"688C1DD6-7429-4B47-819D-C15827654A53",<br />
{ <br />
"type": 11,<br />
"key": "84951435565"<br />
}<br />
],<br />
"b_abonents": [<br />
"1211F58F-93AE-470C-895D-E3A163E8FF5F",<br />
"ivanov",<br />
"2BC51D79-BA63-47D7-93CA-1F283029C529",<br />
{<br />
"type": 12,<br />
"key": "1211F58F-93AE-470C-895D-E3A163E8FF5F"<br />
}<br />
]<br />
"mode": 0<br />
}<br />
]<br />
</pre><br />
<pre><br />
[<br />
"exectmcall",<br />
{<br />
"qid": "BE06A1E4-759A-4BFA-8D15-5FCF756EEE53",<br />
"taskid": "qud82039lsdfmnasd",<br />
"taskcode": "xxxxx",<br />
"a_abonents": ["4952172020"],<br />
"b_abonents": ["417"],<br />
"mode": 0,<br />
"ownertext": "Задача соединения",<br />
"sessionid": "FB232E90-524A-453C-95BA-1B42251F5A14",<br />
"projectid": "F95BA34E-2CE2-49FA-B3C2-4344199F5B42",<br />
"a_callerid": "4959261589",<br />
"a_music": "Фоновое воспроизведение для оператора",<br />
"a_usequeue": false,<br />
"a_queuepriority": 10,<br />
"a_timeoutsec": 40,<br />
"b_callerid": "4952172020",<br />
"b_music": "?**ivr?Фоновое воспроизведение",<br />
"b_usequeue": true,<br />
"b_queuepriority": 5,<br />
"b_timeoutsec": 40,<br />
}<br />
]<br />
</pre><br />
<pre><br />
Обязательными параметрами являются только a_abonents и b_abonents. Остальные имеют значения по умолчанию.<br />
<br />
//* taskid - уникальный строковый идентификатор задания. <br />
Может быть не указан, тогда генерируется автоматически.<br />
//* taskcode - пользовательский код задачи, передается в сценарии, обслуживающие дозвоны.<br />
//* a_abonents - набор из одного или нескольких абонентов, относящихся к группе A.<br />
//* b_abonents - набор из одного или нескольких абонентов, относящихся к группе B.<br />
abonent:type - типы представления о конкретном абоненте<br />
Undefined = 0, //Не определен, определить автоматически.<br />
External = 11,//Внешний номер <br />
InternalItem = 12,//Внутренний элемент - пользователь или линия, <br />
задаются ключами (идентификатор, номер, логин, имя).<br />
InternalRule = 13,//Стандартный внутренний номер<br />
InternalFast = 14,//Быстрый номер<br />
InternalEmergency = 15,//Экстренный номер<br />
InternalIVR = 16,//Сценарий IVR<br />
//* mode: <br />
0 - вызывает сначала группу A (достает первого ответившего), <br />
потом абонентов группы B (достает первого ответившего)<br />
1 - вызывает сначала группу B (достает первого ответившего), <br />
потом абонентов группы A (достает первого ответившего)<br />
2 - вызывает одновременно всех, достает первого ответившего из группы A <br />
и первого ответившего из группы B.<br />
//* a_music, b_music - мелодия ожидания для абонентов группы A и B. Задается с помощью строки:<br />
- ''?**ivr?scriptname'', где scriptname - название фонового медиа сценария IVR.<br />
- ''?**ff?filepath'', где filepath - абсолютный путь к звуковому файлу (*.mp3 или *.wav).<br />
- ''?**ff?folderpath'', где folderpath - абсолютный путь к каталогу со звуковыми файлами, выбираются рандомно.<br />
- ''?**ff?filename'', где filename - название файла с расширением (*.mp3 или *.wav) в стандартном каталоге Snd.<br />
- абсолютный путь к каталогу cо звуковыми файлами <br />
- абсолютный путь к файлу <br />
- название файла с расширением в стандартном каталоге Snd<br />
- название фонового медиа-сценария IVR<br />
- если не указывать, указывать неверно или указывать пустоту - играется <br />
[[Музыкальное сопровождение#Alternative|альтернативная мелодия ожидания]] (возможно сценарий) из общих настроек<br />
//* sessionid - генерируемый идентификатор цепочки коммутаций/сессии.<br />
//* ownertext - название владельца служебного сценария набора номеров.<br />
//* projectid - привязанный идентификатор проекта (участвует в поиске сценариев).<br />
//* a_usequeue, b_usequeue: true|false. Использовать ли очередь ожидания при вызове внутренних абонентов.<br />
//* a_queuepriority, b_queuepriority: числовой приоритет при размещении в очередях. <br />
Традиционно чем меньше значение - тем больше приоритет. <br />
Значения по умолчанию определены в [[Настройки менеджера очередей|общих настройках]]<br />
//* a_timeoutsec, b_timeoutsec: таймаут в секундах для вызова абонентов соответствующей группы.<br />
Режим использования таймаута задается в разделе [[Настройки менеджера очередей|настроек менеджера очередей]].<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''exectmcallresult'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает результат исполнения хранимой процедуры в БД Oktell. Перечисляет все выходные наборы данных.<br />
<br />
<pre><br />
[<br />
"exectmcallresult",<br />
{<br />
"qid": "BE06A1E4-759A-4BFA-8D15-5FCF756EEE53",<br />
"taskid": "qud82039lsdfmnasd"<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* taskid - возвращает идентификатор запущенного задания.<br />
В дальнейшем с помощью него можно будет отменить задание (если оно еще не будет к тому времени исполнено)<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''exectmcallreport'''</span><br />
<br />
Отчет о выполнении задания. Указывает код задания, и причину ошибки в случае неудачи.<br />
<br />
<pre><br />
[<br />
"exectmcallreport",<br />
{<br />
"qid": "DDA55585-F598-4F8C-B605-E6E186E6D859",<br />
"taskid": "qud82039lsdfmnasd",<br />
"success": false,<br />
"errorid": 21,<br />
"errorstr": "CallAbonentFailure"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''stoptmcall'''</span><br />
<br />
Запрос из CRM в Oktell. Отменяет ранее запущенное методом ''exectmcall'' задание, если оно еще не завершило исполнение.<br />
<br />
Не требует указания пользователя.<br />
<br />
<pre><br />
[<br />
"stoptmcall",<br />
{<br />
"qid": "DDA55585-F598-4F8C-B605-E6E186E6D859",<br />
"taskid": "qud82039lsdfmnasd"<br />
}<br />
]<br />
</pre> <br />
<br />
<br />
<span style="color:green">>>> '''stoptmcallresult'''</span><br />
<br />
Ответ от Oktell в CRM. Возвращает результат отмены задания.<br />
<br />
<pre><br />
[<br />
"stoptmcallresult",<br />
{<br />
"qid": "DDA55585-F598-4F8C-B605-E6E186E6D859",<br />
"taskid": "qud82039lsdfmnasd",<br />
"success": false,<br />
"errortext": "task not found"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''gettotalqueue'''</span><br />
<br />
Запрос из CRM в Oktell на возврат информации обо всех очередях.<br />
Может использоваться без указания пользователя.<br />
Не рекомендуется к частому использованию, так как требует значительных вычислительных ресурсов.<br />
<br />
<pre><br />
[<br />
"gettotalqueue",<br />
{<br />
"qid": "DDDB5BCA-A200-448C-93C7-EFEAE5AFE48D",<br />
"skipempty": true<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''gettotalqueueresultresult'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает список всех очередей и их абонентов<br />
<br />
<pre><br />
[<br />
"gettotalqueueresult",<br />
{<br />
"qid": "DDDB5BCA-A200-448C-93C7-EFEAE5AFE48D",<br />
"result": [<br />
{<br />
"numid": "507db30b-f8f7-46cf-b3c7-6b8ba7b696a8",<br />
"numprefix": "12",<br />
"ruleid": "6ffab1ac-7b9b-4ba2-8547-233175368b6d",<br />
"rulename": "Денис"<br />
"queue": [<br />
{<br />
"objectid": "928efda2-a3b3-423b-9d49-d2e76879c718",<br />
"chainid": "d1c2b337-6293-4ea0-a355-f59caaeff54b",<br />
"srcelementid": "38d8b6ad-a68b-4075-a1a3-038510f20a54",<br />
"objecttype": 0,<br />
"objecttypestr": "qotQueueLogic",<br />
"queuesource": 1,<br />
"queuesourcestr": "qsLineLogic",<br />
"callerid": "14",<br />
"calledid": "12",<br />
"isuser": true,<br />
"userid": "da803f01-ea77-40fa-bc9d-e2efb36fd5a8",<br />
"userlogin": "Peter",<br />
"username": "Петр Александрович", <br />
"department": "Программисты",<br />
"managedlineid": "38d8b6ad-a68b-4075-a1a3-038510f20a54",<br />
"managedlinenumber": "16001",<br />
"srclineid": "38d8b6ad-a68b-4075-a1a3-038510f20a54",<br />
"srclinenumber": "16001", <br />
"queuepriority": 9,<br />
"startqueuetime": "2012-06-07 12:58:44",<br />
"lenqueue": 1.4375,<br />
"istask": false<br />
}<br />
]<br />
},<br />
...<br />
{}<br />
]<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* result - содержит список всех очередей. Очередь при этом содержится в словаре.<br />
//* result:numid - идентификатор стандартного внутреннего номера, при котором данная очередь.<br />
//* result:numprefix - стандартный внутреннего номер, при котором данная очередь.<br />
//* result:ruleid - идентификатор номерного правила, при котором данная очередь.<br />
//* result:rulename - название номерного правила, при котором данная очередь.<br />
//* result:queue - список абонентов очереди в порядке убывания. Каждый абонент содержится в словаре.<br />
</pre><br />
<br />
====Запуск служебного сценария====<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''startsvcscript'''</span>, <br />
<span style="color:green">'''execsvcscript'''</span><br />
<br />
Запрос из CRM в Oktell на запуск служебного сценария. ''startsvcscript'' - от имени пользователя, ''execsvcscript'' - без указания пользователя от имени сервера.<br />
<br />
<pre><br />
[<br />
"startsvcscript",<br />
{<br />
"qid": "244E3867-470E-4A56-904D-D435D57CFBFE",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"scriptname": "Служебный сценарий получения почты",<br />
"startparam1": "значение параметра 1",<br />
"startparam2": "значение параметра 2",<br />
"startparam3": "значение параметра 3",<br />
"startparam4": "значение параметра 4",<br />
"startparam5": "значение параметра 5",<br />
"waitresponse": true,<br />
"waittimeoutsec": 10<br />
}<br />
]<br />
</pre><br />
<pre><br />
[<br />
"execsvcscript",<br />
{<br />
"qid": "244E3867-470E-4A56-904D-D435D57CFBFE",<br />
"scriptname": "Служебный сценарий получения почты",<br />
"startparam1": "значение параметра 1",<br />
"startparam2": "значение параметра 2",<br />
"startparam3": "значение параметра 3",<br />
"startparam4": "значение параметра 4",<br />
"startparam5": "значение параметра 5",<br />
"waitresponse": true,<br />
"waittimeoutsec": 10<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* scriptname - название сценария в общем разделе.<br />
//* startparamN - строковое значение соответствующего параметра.<br />
При необходимости передать больше параметров следует объединять параметры в одну строку<br />
с использованием символа-разделителя, а в самом сценарии производить обратную операцию.<br />
//* waitresponse - ожидать ли ответа.<br />
//* waittimeoutsec - таймаут ожидания ответа в секундах. 0 - вечно.<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''startsvcscriptresult'''</span>,<br />
<span style="color:green">'''execsvcscriptresult'''</span><br />
<br />
Ответ Oktell на запрос запуска служебного сценария.<br />
<br />
<pre><br />
[<br />
"startsvcscriptresult",<br />
{<br />
"qid": "244E3867-470E-4A56-904D-D435D57CFBFE",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"scriptname": "Служебный сценарий получения почты",<br />
"result": 0,<br />
"returnvalue": "присвоенный в сценарии результат",<br />
"error": 10<br />
}<br />
]<br />
</pre><br />
<pre><br />
[<br />
"execsvcscriptresult",<br />
{<br />
"qid": "244E3867-470E-4A56-904D-D435D57CFBFE",<br />
"scriptname": "Служебный сценарий получения почты",<br />
"result": 0,<br />
"returnvalue": "присвоенный в сценарии результат",<br />
"error": 10<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* error: 10 - файл не найден, 11 - исключение, 12 - таймаут<br />
//* returnvalue - возвращаемый результат сценария (если сценарий исполнился, и его завершения удалось дождаться)<br />
</pre><br />
<br />
<br />
<br />
<br />
====Конференц-связь====<br />
<br />
Запросы из CRM, ответы от Oktell, события из Oktell<br />
<br />
---------------------------------------------<br />
<span style="color:green"><<< '''confhandleevent'''</span><br />
<br />
Запрос из CRM к Oktell. Подписка/отписка на указанную категорию событий сервера конференций.<br />
<br />
<pre><br />
[<br />
"confhandleevent",<br />
{<br />
"qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",<br />
"eventtype": "competitors",<br />
"handle": true<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* eventtype - уровень глубины получаемых сообщений. conferences|competitors|userstates<br />
предполагается, что в общем случае инфа идет только о списке конференций (conferences);<br />
когда юзер находится в конференции - дополнительно о внутреннем состоянии конференции (competitors);<br />
когда юзер настраивает конференцию и выбирает из списка участников для автоматического приглашения - <br />
о состояниях всех пользователей (userstates).<br />
Подписками управляет сам внешний модуль. Когда потребность уходит - необходимо отписываться, <br />
чтобы не заваливать канал порожняком.<br />
//* handle - true|false - подписаться/отписаться<br />
</pre><br />
<br />
<br />
---------------------------------------------<br />
<span style="color:green"><<< '''checkcanconnecttogathertoconference'''</span><br />
<br />
Запрос из CRM к oktell. В момент коммутации, в случае если во флеш-буфере находится абонент, определяет, существует ли возможность переключиться всем вместе в конференцию единой командой. Это возможно, если один из абонентов - конференция, а другой - линия/пользователь.<br />
<br />
<pre><br />
[<br />
"checkcanconnecttogathertoconference",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''confcheckcanconnecttogatherresult'''</span><br />
<br />
Ответ из Oktell в CRM на запрос возможности совместного переключения в конференцию.<br />
<br />
<pre><br />
[<br />
"confcheckcanconnecttogatherresult",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"canconnecttogather": true,<br />
"inconference": false,<br />
}<br />
]<br />
</pre><br />
<br />
<br />
---------------------------------------------<br />
<span style="color:green"><<< '''connecttogathertoconference'''</span><br />
<br />
Запрос из CRM к oktell. Производит совместное переключение текущего онлайн-абонента и флеш-абонента в существующую конференцию.<br />
<br />
<pre><br />
[<br />
"connecttogathertoconference",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
---------------------------------------------<br />
<span style="color:green"><<< '''buildconferencefromcommutation'''</span><br />
<br />
Запрос из CRM к oktell. Производит преобразование текущей коммутации в конференцию с двумя участниками.<br />
<br />
<pre><br />
[<br />
"buildconferencefromcommutation",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
---------------------------------------------<br />
<span style="color:green"><<< '''attachasghost'''</span><br />
<br />
Запрос из CRM к Oktell. Производит подключение к указанному каналу/пользователю на прослушку/помощь.<br />
<br />
<pre><br />
[<br />
"attachasghost",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"ghostedid": "FE9D6B52-C267-4D39-AC9F-81A0F44713FF",<br />
"ghostedlogin": "Петров"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''attachasghostresult'''</span><br />
<br />
Ответ из Oktell в CRM на запрос о подключении к каналу на прослушку.<br />
<br />
<pre><br />
[<br />
"attachasghostresult",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"result": 0,<br />
"error": 52703<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* ghostedid - ид пользователя или линии, к которому подцепляться для прослушки<br />
//* ghostedlogin - логин пользователя, к которому подцепляться для прослушки<br />
</pre><br />
<br />
<br />
---------------------------------------------<br />
<span style="color:green"><<< '''getconferences'''</span><br />
<br />
Запрос из CRM в Oktell на возврат текущих активных конференц-сессий.<br />
<br />
<pre><br />
[<br />
"getconferences",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getconferencesresult'''</span><br />
<br />
Ответ из Oktell в CRM со списком текущих активных конференц-сессий.<br />
<br />
<pre><br />
[<br />
"getconferencesresult",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferencelist": [<br />
{<br />
"id": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",<br />
"room": 884,<br />
"name": "Планерка",<br />
"description": "",<br />
"accessmode": 11,<br />
"accessmodestr": "Free",<br />
"isselector": true,<br />
"record": true,<br />
"creatorid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"creatorlogin": "Иванов",<br />
"creatorname": "Иван Иванович Иванов", <br />
"directorid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"directorlogin": "Петров",<br />
"directorname": "Петр Петрович Петров",<br />
"timestart": "2011-04-03 17:58:22",<br />
"canvieweachother": true,<br />
"everyonecaninvite": true,<br />
"recordrights": 2,<br />
"recordrightsstr": "Competitors",<br />
"isghost": false,<br />
"ghostmode": 11,<br />
"ghostmodestr": "Monitor"<br />
},<br />
{...},<br />
{...}<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
---------------------------------------------<br />
<span style="color:green"><<< '''getconferencecompetitors'''</span><br />
<br />
Запрос из CRM в Oktell на возврат текущих участников указанной конференции.<br />
<br />
<pre><br />
[<br />
"getconferencecompetitors",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "F16D26E3-2A78-49C2-AFCE-815611A16E22"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getconferencecompetitorsresult'''</span><br />
<br />
Ответ из Oktell в CRM со списком текущих участников указанной в запросе конференции.<br />
<br />
<pre><br />
[<br />
"getconferencecompetitorsresult",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "F16D26E3-2A78-49C2-AFCE-815611A16E22",<br />
"competitorlist": [<br />
{<br />
"competitorid": "65AC0E98-64DE-41CF-B609-D00A4C8B07FD",<br />
"chainid": "91687102-E19F-466C-A0BE-B6C3EEF83EE7",<br />
"sessionid": "91687102-E19F-466C-A0BE-B6C3EEF83EE7",<br />
"userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"userlogin": "Петров",<br />
"username": "Петр Петрович Петров",<br />
"lineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",<br />
"linenumber": "17004",<br />
"number": "472",<br />
"intnumber": "472",<br />
"extnumber": "",<br />
"confstate": 11,<br />
"confstatestr": "OnlineTalking",<br />
"wanttalk": false,<br />
"isdirector": true,<br />
"iscreator": false,<br />
"isghost": false,<br />
"isghostmajor": false,<br />
"islifebuoy": false<br />
},<br />
{...},<br />
{...}<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
---------------------------------------------<br />
<span style="color:green"><<< '''getusersforconferenceinvitelist'''</span><br />
<br />
Запрос из CRM в Oktell на возврат возможных участников конференции (учетных записей всех пользователей системы с указанием их состояний и присутствия в других конференциях).<br />
<br />
<pre><br />
[<br />
"getusersforconferenceinvitelist",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getusersforconferenceinvitelistresult'''</span><br />
<br />
Ответ из Oktell в CRM со списком учетных записей, доступных для приглашения в конференцию с их текущими состояниями и присутствием в других конференциях.<br />
<br />
<pre><br />
[<br />
"getusersforconferenceinvitelistresult",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"possiblecompetitorlist": [<br />
{<br />
"userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"userlogin": "Петров",<br />
"username": "Петр Петрович Петров",<br />
"groupid": "F72C315A-F9EA-471E-A679-D4BA4797DB51",<br />
"groupname": "Руководство"<br />
"userstate": 5,<br />
"userstatestr": "usFullbusy",<br />
"isredirect": false,<br />
"islunch": false,<br />
"inconference": true,<br />
"conferenceid": "F16D26E3-2A78-49C2-AFCE-815611A16E22",<br />
"confstate": 11,<br />
"confstatestr": "OnlineTalking"<br />
},<br />
{...},<br />
{...}<br />
],<br />
"result": 1<br />
}<br />
]<br />
</pre><br />
<br />
<br />
---------------------------------------------<br />
<span style="color:green"><<< '''createnewconference'''</span><br />
<br />
Запрос из CRM в Oktell на создание новой конференции. Указывает параметры самой конференц-сессии, список участников для приглашения на старте.<br />
<br />
<pre><br />
[<br />
"createnewconference",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conference": {<br />
"id": "17A3F9D2-040C-471B-A4F5-6A13BEB27667",<br />
"room": 578<br />
"name": "Совещание с заказчиком",<br />
"description": "",<br />
"accessmode": "free",<br />
"isselector": true,<br />
"record": true,<br />
"recordrights": "selected",<br />
"everyonecaninvite": true,<br />
"canvieweachother": true<br />
},<br />
"competitors": [<br />
{<br />
"userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"userlogin": "Петров",<br />
"lineid": "F93FE9C-0B80-4242-BD24-D338BE8E4FC0",<br />
"intnumber": "472",<br />
"extnumber": "89047289889",<br />
"cantalk": true<br />
},<br />
{...},<br />
{...}<br />
],<br />
"recordusers": [<br />
{<br />
"userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"userlogin": "Петров",<br />
},<br />
{...},<br />
{...}<br />
]<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* conference:accessmode - free|shared|closed (свободный вход, вход по запросу, вход запрещен)<br />
//* conference:recordrights - director|competitors|selected (только управляющий, все участники, избранные участники)<br />
Определяет, кто может прослушивать запись конференции.<br />
//* competitors - список автоматически приглашаемых участников. Допускается/следует указывать только один <br />
параметр из набора {userid|userlogin, lineid, intnumber, extnumber}<br />
//* список recordusers следует указывать, если conference:recordrights=selected.<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''createnewconferenceresult'''</span><br />
<br />
Ответ из Oktell в CRM с результатом исполнения команды на создание конференции.<br />
<br />
<pre><br />
[<br />
"createnewconferenceresult",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"result": 0,<br />
"error": 1,<br />
"errormsg": "alreadyexists",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
---------------------------------------------<br />
<span style="color:green"><<< '''setupexistingconference'''</span><br />
<br />
Запрос из CRM в Oktell от имени управляющего конференции на изменение параметров указанной конференции.<br />
<br />
<pre><br />
[<br />
"setupexistingconference",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conference": {<br />
"id": "17A3F9D2-040C-471B-A4F5-6A13BEB27667",<br />
"room": 578<br />
"name": "Совещание с заказчиком",<br />
"description": "",<br />
"accessmode": "free",<br />
"isselector": true,<br />
"recordrights": "selected",<br />
"everyonecaninvite": true,<br />
"canvieweachother": true,<br />
"ghostmode": "monitor"<br />
},<br />
"recordusers": [<br />
{<br />
"userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"userlogin": "Петров",<br />
},<br />
{...},<br />
{...}<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''setupexistingconferenceresult'''</span><br />
<br />
Ответ из Oktell в CRM с результатом исполнения команды на изменение параметров конференции.<br />
<br />
<pre><br />
[<br />
"setupexistingconferenceresult",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"result": 0,<br />
"error": 1,<br />
"errormsg": "notfound",<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* conference:accessmode - free|shared|closed<br />
//* conference:recordrights - director|competitors|selected<br />
//* conference:ghostmode - monitor|help|talk<br />
//* список recordusers имеет смысл только когда conference:recordrights=selected.<br />
</pre><br />
<br />
<br />
---------------------------------------------<br />
<span style="color:green"><<< '''getconferenceinfo'''</span><br />
<br />
Запрос из CRM в Oktell на возврат текущих параметров указанной конференции.<br />
<br />
<pre><br />
[<br />
"getconferenceinfo",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getconferenceinforesult'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает текущие настройки указанной в запросе конференции, текущих ее участников и их состояния.<br />
<br />
<pre><br />
[<br />
"getconferenceinforesult",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"result": 1,<br />
"conference": {<br />
"id": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",<br />
"room": 884,<br />
"name": "Планерка",<br />
"description": "",<br />
"accessmode": 11,<br />
"accessmodestr": "Free",<br />
"isselector": true,<br />
"record": true,<br />
"creatorid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"creatorlogin": "Иванов",<br />
"creatorname": "Иван Иванович Иванов", <br />
"directorid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"directorlogin": "Петров",<br />
"directorname": "Петр Петрович Петров",<br />
"timestart": "2011-04-03 17:58:22",<br />
"canvieweachother": true,<br />
"everyonecaninvite": true,<br />
"recordrights": 2,<br />
"recordrightsstr": "Competitors",<br />
"isghost": false,<br />
"ghostmode": 11,<br />
"ghostmodestr": "Monitor"<br />
},<br />
"competitors": [<br />
{<br />
"userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"userlogin": "Петров",<br />
"lineid": "F93FE9C-0B80-4242-BD24-D338BE8E4FC0",<br />
"intnumber": "472",<br />
"extnumber": "89047289889",<br />
"cantalk": true<br />
},<br />
{...},<br />
{...}<br />
],<br />
"recordusers": [<br />
{<br />
"userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"userlogin": "Петров",<br />
},<br />
{...},<br />
{...}<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
---------------------------------------------<br />
<span style="color:green"><<< '''stopconference'''</span><br />
<br />
Запрос из CRM в Oktell от имени управляющего конференции на прекращение указанной конференции.<br />
<br />
<pre><br />
[<br />
"stopconference",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''stopconferenceresult'''</span><br />
<br />
Ответ из Oktell в CRM с результатом выполнения запроса на прекращение указанной конференции.<br />
<br />
<pre><br />
[<br />
"stopconferenceresult",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",<br />
"result": 0,<br />
"error": 1,<br />
"errormsg": "accessdenied"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
---------------------------------------------<br />
<span style="color:green"><<< '''confsetvoiceparams'''</span><br />
<br />
Запрос из CRM в Oktell от имени управляющего конференции на изменение голосовых свойств канала указанного участника указанной конференции.<br />
<br />
<pre><br />
[<br />
"confsetvoiceparams",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",<br />
"competitor": {<br />
"competitorid": "249995A5-8A64-49CC-87CA-D797FCFB7782",<br />
"userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"userlogin": "Петров",<br />
"lineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",<br />
"cantalk": true,<br />
"canlisten": true,<br />
"ghosthelp": false<br />
}<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* competitor - указывает на одного участника конференции. <br />
/ достаточно/следует указывать только один из набора определяющих участника идентификаторов <br />
{competitorid, userid|userlogin, lineid}<br />
<br />
//* competitor:cantalk - может ли говорить<br />
//* competitor:canlisten - может ли слышать<br />
//* competitor:ghosthelp - в режиме прослушки:помощи для одного из подслушиваемых каналов - <br />
может ли слышать подключившегося супервизора<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''confsetvoiceparamsresult'''</span><br />
<br />
Ответ из Oktell в CRM с результатом выполнения запроса на изменение голосовых свойств канала.<br />
<br />
<pre><br />
[<br />
"confsetvoiceparamsresult",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",<br />
"result": 0,<br />
"error": 1,<br />
"errormsg": "accessdenied"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
---------------------------------------------<br />
<span style="color:green"><<< '''confsetwanttalk'''</span><br />
<br />
Запрос из CRM в Oktell от имени простого бесправного участника селекторного совещания на взятие голоса (сообщение для управляющего).<br />
<br />
<pre><br />
[<br />
"confsetwanttalk",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",<br />
"wanttalk": true<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''confsetwanttalkresult'''</span><br />
<br />
Ответ из Oktell в CRM с результатом выполнения запроса на взятие голоса.<br />
<br />
<pre><br />
[<br />
"confsetwanttalkresult",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",<br />
"result": 1<br />
}<br />
]<br />
</pre><br />
<br />
<br />
---------------------------------------------<br />
<span style="color:green"><<< '''confsetghostmode'''</span><br />
<br />
Запрос из CRM в Oktell от имени прослушивающего супервизора на изменение режима конференц-помощи.<br />
<br />
<pre><br />
[<br />
"confsetghostmode",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",<br />
"ghostmode": "help",<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* ghostmode - monitor, help, conference (подслушивание, помощь, конференция)<br />
</pre><br />
<br />
<span style="color:green">>>> '''confsetghostmoderesult'''</span><br />
<br />
Ответ из Oktell в CRM с результатом выполнения запроса на изменение режима конференц-помощи.<br />
<br />
<pre><br />
[<br />
"confsetghostmoderesult",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",<br />
"result": 1<br />
}<br />
]<br />
</pre><br />
<br />
<br />
---------------------------------------------<br />
<span style="color:green"><<< '''exitconference'''</span><br />
<br />
Запрос из CRM в Oktell на вывод авторизованного пользователя из конференции. В канал подается отбой. Альтернативой является положение трубки на телефоне.<br />
<br />
<pre><br />
[<br />
"exitconference",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''exitconferenceresult'''</span><br />
<br />
Ответ из Oktell в CRM с результатом выполнения запроса на выход из конференции.<br />
<br />
<pre><br />
[<br />
"exitconferenceresult",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",<br />
"result": 1<br />
}<br />
]<br />
</pre><br />
<br />
<br />
---------------------------------------------<br />
<span style="color:green"><<< '''confdisconnectcompetitor'''</span><br />
<br />
Запрос из CRM в Oktell от имени управляющего конференцией на вывод из конференции указанного участника.<br />
<br />
<pre><br />
[<br />
"confdisconnectcompetitor",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",<br />
"competitor": {<br />
"competitorid": "249995A5-8A64-49CC-87CA-D797FCFB7782",<br />
"userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"userlogin": "Петров",<br />
"lineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",<br />
}<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* competitor - указывает на одного участника конференции. <br />
/ достаточно/следует указывать только один из набора определяющих участника идентификаторов <br />
{competitorid, userid|userlogin, lineid}<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''confdisconnectcompetitorresult'''</span><br />
<br />
Ответ из Oktell в CRM с результатом выполнения запроса на вывод указанного в запросе участника.<br />
<br />
<pre><br />
[<br />
"confdisconnectcompetitorresult",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",<br />
"result": 1<br />
}<br />
]<br />
</pre><br />
<br />
<br />
---------------------------------------------<br />
<span style="color:green"><<< '''enterconference'''</span><br />
<br />
Запрос из CRM в Oktell на вход в конференцию. При необходимости осуществляет запрос на вход у управляющего. Прерывание может производиться командой exitconference<br />
<pre><br />
[<br />
"enterconference",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''enterconferenceresult'''</span><br />
<br />
Ответ из Oktell в CRM с результатом выполнения запроса на вход в конференцию.<br />
<br />
<pre><br />
[<br />
"enterconferenceresult",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",<br />
"result": 1<br />
}<br />
]<br />
</pre><br />
<br />
<br />
---------------------------------------------<br />
<span style="color:green"><<< '''confdisconnectcompetitor'''</span><br />
<br />
Запрос-команда из CRM в Oktell от имени управляющего конференцией на разрешение/запрет входа в конференцию указанному участнику, ранее запросившему право входа.<br />
<br />
<pre><br />
[<br />
"confpermitdenyentrance",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",<br />
"competitor": {<br />
"competitorid": "249995A5-8A64-49CC-87CA-D797FCFB7782",<br />
"userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"userlogin": "Петров",<br />
"lineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",<br />
"permit": true<br />
}<br />
}<br />
]<br />
</pre><br />
<pre> <br />
//* competitor - указывает на одного участника конференции. <br />
/ достаточно/следует указывать только один из набора определяющих участника идентификаторов <br />
{competitorid, userid|userlogin, lineid}<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''confpermitdenyentranceresult'''</span><br />
<br />
Ответ из Oktell в CRM с результатом выполнения запроса на разрешение/запрет входа в конференцию участнику.<br />
<br />
<pre><br />
[<br />
"confpermitdenyentranceresult",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",<br />
"result": 1<br />
}<br />
]<br />
</pre><br />
<br />
<br />
---------------------------------------------<br />
<span style="color:green"><<< '''invitetoconference'''</span><br />
<br />
Запрос из CRM в Oktell от имени управляющего конференцией или любого другого участника на приглашение в конференцию стороннего абонента (пользователя, линию, абонента по внутреннему/внешнему номеру).<br />
<br />
<pre><br />
[<br />
"invitetoconference",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",<br />
"competitors": [<br />
{<br />
"userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"userlogin": "Петров",<br />
"lineid": "F93FE9C-0B80-4242-BD24-D338BE8E4FC0",<br />
"intnumber": "472",<br />
"extnumber": "89047289889",<br />
"cantalk": true<br />
},<br />
{...},<br />
{...}<br />
]<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* competitors - список автоматически приглашаемых участников. Допускается/следует указывать только один <br />
параметр из набора {userid|userlogin, lineid, intnumber, extnumber}<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''invitetoconference'''</span><br />
<br />
Ответ из Oktell в CRM с результатом выполнения запроса на приглашение нового участника конференции.<br />
<br />
<pre><br />
[<br />
"invitetoconference",<br />
{<br />
"qid": "4F78270D-B35F-48A9-B88A-557B1AA97A1B",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"conferenceid": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",<br />
"result": 1<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<br />
<br />
====События из Oktell, касающиеся конференций====<br />
<br />
---------------------------------------------<br />
<span style="color:green">>>> '''conflistchanged'''</span><br />
<br />
Событие из Oktell в CRM об изменении списка текущих активных конференций.<br />
<br />
<pre><br />
[<br />
"conflistchanged",<br />
{<br />
"qid": "2A6380B4-ADD4-4CD3-9A5C-9483A3B3723A",<br />
"conferencelist": [<br />
{<br />
"id": "519C0DDA-8DDF-4212-9AE1-9E4047AB4BE3",<br />
"room": 884,<br />
"name": "Планерка",<br />
"description": "",<br />
"accessmode": 11,<br />
"accessmodestr": "Free",<br />
"isselector": true,<br />
"record": true,<br />
"creatorid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"creatorlogin": "Иванов",<br />
"creatorname": "Иван Иванович Иванов", <br />
"directorid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"directorlogin": "Петров",<br />
"directorname": "Петр Петрович Петров",<br />
"timestart": "2011-04-03 17:58:22",<br />
"canvieweachother": true,<br />
"everyonecaninvite": true,<br />
"recordrights": 2,<br />
"recordrightsstr": "Competitors",<br />
"isghost": false,<br />
"ghostmode": 11,<br />
"ghostmodestr": "Monitor"<br />
},<br />
{...},<br />
{...}<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
---------------------------------------------<br />
<span style="color:green">>>> '''"conf***"'''</span><br />
<br />
Другие событие из Oktell в CRM об изменениях на сервере конференций. Общий список возможных событий приведен ниже.<br />
<br />
<pre><br />
[<br />
"conf***",<br />
{<br />
"qid": "2A6380B4-ADD4-4CD3-9A5C-9483A3B3723A",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"eventinfo": {<br />
***<br />
}<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* conflistchanged,<br />
//* confparamschanged, <br />
//* confcompositionchanged, <br />
//* confcompetitorstatechanged, <br />
//* confentrancedenied, <br />
//* confentrancepermitted, <br />
//* confentrancerequest, <br />
//* confnotifyinvite, <br />
//* confpossiblecompetitorstatechanged<br />
</pre><br />
<br />
<br />
<br />
<br />
====Состояния пользователей и линий====<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''userstatechanged'''</span><br />
<br />
Сообщение из Oktell в CRM о смене состояния пользователя в Oktell. Отправляется на имя пользователя, чье состояние сменилось. Отправляется как результат запроса на смену состояния или независимо.<br />
<br />
<pre><br />
[<br />
"userstatechanged",<br />
{<br />
"qid": "66F8D479-0234-47DF-B043-3A065FF464A7",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"userstateid": 2,<br />
"onredirect": true,<br />
"onlunch": false,<br />
"oncallcenter": false,<br />
"onccmanual": false<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------<br />
<span style="color:green"><<< '''setuserstate'''</span><br />
<br />
Запрос из CRM к Oktell на смену состояния пользователя от его имени. При проведении изменений в ответ отправляется сообщение userstatechanged.<br />
<br />
Для изменения только одного из параметров состояния можно остальные не указывать (например оставлять только oncallcenter).<br />
<br />
<pre><br />
[<br />
"setuserstate",<br />
{<br />
"qid": "2A45010A-8EEA-4876-90CB-F062459D4BE2",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"userstateid": 2,<br />
"onredirect": false,<br />
"onlunch": false,<br />
"oncallcenter": false,<br />
"onccmanual": false,<br />
"lunchreasonid": 120,<br />
"lunchreasonmsg": ""<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* lunchreasonid и lunchreasonmsg - расширение для будущей статистики, устанавливают причину перерыва. <br />
id - если причина одна из стандартных. msg - если что-то уникальное юзер ввел.<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getuserstate'''</span><br />
<br />
Запрос из CRM в Oktell состояния указанного пользователя системы.<br />
<br />
<pre><br />
[<br />
"getuserstate",<br />
{<br />
"qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getuserstateresult'''</span><br />
<br />
Ответ из Oktell в CRM с полным состоянием указанного в запросе пользователя системы. <br />
<pre><br />
[<br />
"getuserstateresult",<br />
{<br />
"qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"userstate": 5,<br />
"userstateid": 5,<br />
"userstatestr": "usFullbusy",<br />
"onredirect": true,<br />
"onlunch": false,<br />
"oncallcenter": false,<br />
"onccmanual": false<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''checkuserintask'''</span><br />
<br />
Запрос из CRM в Oktell о присутствии указанного пользователя в задачах call-центра.<br />
<br />
<pre><br />
[<br />
"checkuserintask",<br />
{<br />
"qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''checkuserintaskresult'''</span><br />
<br />
Ответ из Oktell в CRM с ответом на запрос присутствия указанного в запросе пользователя в задачах коллчентра. Описание задачи в случае положительного ответа.<br />
<br />
<pre><br />
[<br />
"checkuserintaskresult",<br />
{<br />
"qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"intask": true,<br />
"task": {,<br />
"id": "1D565B41-1D16-46DE-B2C5-CF55ED5279F0",<br />
"name": "Исходящий обзвон",<br />
"code": "af-2329",<br />
"direction": "outgoing",<br />
"contacttype": 0,<br />
"contacttypestr": "Call",<br />
"projectid": "E6ADBA0D-C9FF-40F2-96FF-6D2F455F9D5A"<br />
}<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getmyuserinfo'''</span><br />
<br />
Запрос из CRM в Oktell на получение информации о текущем авторизованном пользователе: имя, внутренний номер, номер и идентификатор линии.<br />
<br />
<pre><br />
[<br />
"getmyuserinfo", <br />
{ <br />
"qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",</pre><br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B", <br />
} <br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getmyuserinforesult'''</span><br />
<br />
Ответ из Oktell в CRM с ответом на запрос информации о текущем авторизованном пользователе.<br />
<br />
<pre><br />
[<br />
"getmyuserinforesult",<br />
{<br />
"qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"username": "Иванов Иван Иванович",<br />
"mainpbxnumber": "471",<br />
"hasline": 1,<br />
"lineid": "267F8F36-4713-4B66-81BD-019512E56E7E",<br />
"linenumber": "17374",<br />
"isoperator": true<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getuserphoto'''</span><br />
<br />
Запрос из CRM в Oktell о текущем изображении (аватарке) указанного пользователя. Можно указывать только логин (''photoownerlogin'') или только идентификатор (''photoownerid'') интересующего пользователя.<br />
<br />
<pre><br />
[<br />
"getuserphoto",<br />
{<br />
"qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"photoownerlogin": "Петров",<br />
"photoownerid": "3F140170-AEEF-4621-AF9D-247116AE1411"<br />
"mode": "link"<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* mode - link, page, data. По умолчанию page. <br />
link - вернуть абсолютную ссылку на скачивание через http.<br />
page - вернуть относительную ссылку на скачивание.<br />
вернуть данные изображения в base64.<br />
При формировании абсолютной ссылки в качестве доменного имени берется значение из <br />
раздела [[Интеграция с WEB-Socket CRM]] общих настроек Oktell.<br />
//* photoownerlogin, photoownerid - логин и/или идентификатор пользователя, чья аватарка требуется<br />
Может не указываться, тогда будет возвращена аватарка авторизованного пользователя.<br />
</pre> <br />
<br />
<br />
<span style="color:green">>>> '''getuserphotoresult'''</span><br />
<br />
Ответ из Oktell в CRM с ответом на запрос информации о текущем авторизованном пользователе.<br />
<br />
<pre><br />
[<br />
"getuserphotoresult",<br />
{<br />
"qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"result": 1,<br />
"link": "http://..."<br />
"link32": "http://..."<br />
"link96": "http://..."<br />
}<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* result. В случае отсутствия файла или по любой другой причине неудачи описание неудачи<br />
будет находиться в поле errormsg. Например "File not found".<br />
//* imagedatab64. В случае возврата целиком изображения, оно будет в base64 строке содержаться в поле.<br />
//* link, link32, link96. В случае возврата ссылки на изображение в полях лежат соответственно<br />
ссылки на полное изображение, 32х32- и 96x96- пиксельные образы.<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getalluserphotolink'''</span><br />
<br />
Запрос из CRM в Oktell на получение ссылок на текущие изображения (аватарки) всех пользователей системы.<br />
<br />
<pre><br />
[<br />
"getalluserphotolink",<br />
{<br />
"qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"mode": "link"<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* mode - link, page. По умолчанию page. <br />
link - вернуть абсолютную ссылку на скачивание через http.<br />
page - вернуть относительную ссылку на скачивание.<br />
При формировании абсолютной ссылки в качестве доменного имени берется значение из <br />
раздела [[Интеграция с WEB-Socket CRM]] общих настроек Oktell.<br />
</pre> <br />
<br />
<br />
<span style="color:green">>>> '''getalluserphotolinkresult'''</span><br />
<br />
Ответ из Oktell в CRM с ответом на запрос ссылкок на текущие изображения (аватарки) всех пользователей системы.<br />
<br />
<pre><br />
[<br />
"getalluserphotolinkresult",<br />
{<br />
"qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"result": 1,<br />
"links": [ <br />
{<br />
"userid": "C6036E73-FB90-4F0C-B780-81CE5659BFEA",<br />
"userlogin": "Сидоров",<br />
"link": "http://...",<br />
"link32x32": "http://...",<br />
"link96x96": "http://...",<br />
},<br />
...<br />
]<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* result. Если в наборе есть хотя бы одна аватарка, будет содержать 1. Иначе 0.<br />
//* links. Содержит набор пользовательских словарей, в каждом из которых идентификатор, <br />
логин и набор ссылок link, link32, link96. В полях лежат соответственно<br />
ссылки на полное изображение, 32х32- и 96x96- пиксельные образы.<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''setmyuserphoto'''</span><br />
<br />
Запрос из CRM в Oktell на установку нового изображения (аватарки) текущего пользователя.<br />
<br />
<pre><br />
[<br />
"setmyuserphoto",<br />
{<br />
"qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"filepath": "",<br />
"imagedatab64": "",<br />
"filename": ""<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* filepath - если файл уже на сервере где-то, то это путь к нему - <br />
относительный рабочего каталога, относительный файлового хранилища, или абсолютный.<br />
Допускается устанавливать в качестве аватарки изображения размером не более 1 MБ.<br />
либо<br />
//* imagedatab64 и filename - если файл целиком прокачивается через веб-сокет, то тут base64 строка<br />
с образом файла.<br />
<br />
//* если не указано ни filepath, ни imagedatab64, ни filename - стирает текущую аватарку.<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''setmyuserphotoresult'''</span><br />
<br />
Ответ из Oktell в CRM с ответом на запрос информации о текущем авторизованном пользователе.<br />
<br />
<pre><br />
[<br />
"setmyuserphotoresult",<br />
{<br />
"qid": "0DD06DFF-E7C7-431B-BC29-920EAC81F76F",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"result": 1<br />
}<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* result. В случае отсутствия файла или по любой другой причине неудачи описание неудачи<br />
будет находиться в поле errormsg. Например "File not found".<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''changepassword'''</span><br />
<br />
Запрос из CRM в Oktell на изменение пароля текущего авторизованного пользователя. <br />
В версиях 2.7 пароль в нижнем регистре, в версиях 2.8 пароль без изменения регистра.<br />
<br />
<pre><br />
[<br />
"changepassword",<br />
{<br />
"qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"newpwdmd5": "",<br />
"oldpwdmd5": ""<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* oldpwdmd5 - MD5 текущего пароля.<br />
//* newpwdmd5 - MD5 нового пароля.<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''changepasswordresult'''</span><br />
<br />
Ответ от Oktell в CRM о результате изменения пароля.<br />
<br />
<pre><br />
[<br />
"changepasswordresult",<br />
{<br />
"qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"result": 0,<br />
"errormsg": "password should be md5 string" <br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getcurrentlinestate'''</span><br />
<br />
Запрос из CRM в Oktell состояния телефонной линии указанного пользователя.<br />
<br />
<pre><br />
[<br />
"getcurrentlinestate",<br />
{<br />
"qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getcurrentlinestateresult'''</span><br />
<br />
Ответ из Oktell в CRM с полным состоянием телефонной линии указанного в запросе пользователя системы. <br />
<pre><br />
[<br />
"getcurrentlinestateresult",<br />
{<br />
"qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"hasline": true,<br />
"lineid": "866692FC-DA08-459D-BAA1-428F9BA6A0D1",<br />
"linenumber": "17012",<br />
"linetype": 5,<br />
"linetypestr": "ltIntIP",<br />
"linestate": 32,<br />
"linestatestr": "lsCommutated"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getcurrentqueue'''</span><br />
<br />
Запрос из CRM в Oktell состояния очереди указанного пользователя.<br />
<br />
<pre><br />
[<br />
"getcurrentqueue",<br />
{<br />
"qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getcurrentqueueresult'''</span><br />
<br />
Ответ из Oktell в CRM с состоянием очереди указанного в запросе пользователя системы. <br />
<pre><br />
[<br />
"getcurrentqueueresult",<br />
{<br />
"qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"queue": [<br />
{<br />
"objectid": "723114EE-2ABF-4806-9BC6-FBB532C31B44",<br />
"objecttype": 0,<br />
"objecttypestr": "qotQueueLogic",<br />
"queuesource": 1,<br />
"queuesourcestr": "qsLineLogic",<br />
"queuepriority": 9,<br />
"srcelementid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",<br />
"srclineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",<br />
"srclinenumber": "17004",<br />
"startqueuetime": "2011-04-05 15:02:28",<br />
"lenqueue": 72,<br />
"managedlineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",<br />
"managedlinenumber": "17004",<br />
"callerid": "472",<br />
"calledid": "479",<br />
"isuser": true,<br />
"userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"userlogin": "Петров",<br />
"username": "Петр Петрович Петров",<br />
"department": "Руководство",<br />
"chainid": "02B99AD3-C954-4FD3-B07D-DFEDD83C0BF5",<br />
"istask": true,<br />
"taskid": "95575C37-5FDE-412C-8F42-36D55B1EC6BB",<br />
"taskname": "Входящая кампания",<br />
"taskdirection": "incoming",<br />
"tasklistid": "7D9A3E9C-0AD3-4C68-BC02-4EBFE3684507",<br />
"tasklistinfo": [<br />
{<br />
"key": "Название организации",<br />
"value": "ООО МДГХ"<br />
},<br />
{...},<br />
{...}<br />
]<br />
},<br />
{...},<br />
{...}<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getcallingoutabonentinfo'''</span><br />
<br />
Запрос из CRM в Oktell на возврат информации об абоненте, которому осуществляется исходящий вызов от имени указанного пользователя.<br />
<br />
<pre><br />
[<br />
"getcallingoutabonentinfo",<br />
{<br />
"qid": "AF4B98AA-51D8-4944-B10C-04B0DE1E1BBC",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getcallingoutabonentinforesult'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает информацию об абоненте, которому осуществляется исходящий вызов от имени указанного в запросе пользователя.<br />
<br />
<pre><br />
[<br />
"getcallingoutabonentinforesult",<br />
{<br />
"qid": "AF4B98AA-51D8-4944-B10C-04B0DE1E1BBC",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chainid": "19ADB2C3-A0B5-47AB-AB2C-CBE15CF98968",<br />
"number": "89032728973",<br />
"name": "",<br />
"lineid": "98F670D2-20E2-4883-B45E-42CDE1F3365F",<br />
"linenumber": "13005"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getflashedabonentinfo'''</span><br />
<br />
Запрос из CRM в Oktell на возврат информации об абоненте, находящемся на удержании.<br />
<br />
<pre><br />
[<br />
"getflashedabonentinfo",<br />
{<br />
"qid": "DC35D182-8BAB-4DE4-919C-5F79090D92DE",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getcallingoutabonentinforesult'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает информацию об абоненте, находящемся на удержании<br />
<br />
<pre><br />
[<br />
"getflashedabonentinforesult",<br />
{<br />
"qid": "DC35D182-8BAB-4DE4-919C-5F79090D92DE",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"containsflashed": 1,<br />
"abonent": {<br />
"chainid": "19ADB2C3-A0B5-47AB-AB2C-CBE15CF98968",<br />
"isconference": 0,<br />
"conferenceid": "0D2A4CA1-FF17-473B-A5E9-E035CB16E257",<br />
"conferenceroom": "#124",<br />
"conferencename": "Планерка",<br />
"conferencedescription": "",<br />
"name": "",<br />
"comment": "",<br />
"description": "",<br />
"simplename": "",<br />
"number": "89032728973",<br />
"lineid": "98F670D2-20E2-4883-B45E-42CDE1F3365F",<br />
"linenumber": "13005",<br />
"userid": "",<br />
"userlogin": "",<br />
"username": ""<br />
}<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getextendedlineinfo'''</span><br />
<br />
Запрос из CRM в Oktell на возврат расширенной информации о текущей линии и ее оппозитных абонентах: текущее состояние, информация об абоненте в коммутации, информация об абоненте на удержании.<br />
<br />
<pre><br />
[<br />
"getextendedlineinfo",<br />
{<br />
"qid": "55D54351-651E-4EC2-8E48-1D5136811FB9",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getextendedlineinfo'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает информацию об абоненте, которому осуществляется исходящий вызов от имени указанного в запросе пользователя.<br />
<br />
<pre><br />
[<br />
"getextendedlineinforesult",<br />
{<br />
"qid": "55D54351-651E-4EC2-8E48-1D5136811FB9",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"linestateid": 5,<br />
"linestatestr": "lsCommutated,<br />
"chainid": "19ADB2C3-A0B5-47AB-AB2C-CBE15CF98968",<br />
"datetimeformat" = "dd.MM.yyyy HH:mm:ss",<br />
"activetimestart" = "01.12.2011 16:59:28",<br />
"abonent": {<br />
"isconference": false,<br />
"conferenceid": "0D2A4CA1-FF17-473B-A5E9-E035CB16E257",<br />
"conferenceroom": "#124",<br />
"conferencename": "Планерка",<br />
"conferencedescription": "",<br />
"iscommutated": false,<br />
"iswaitingfaxline": false,<br />
"iswaitinginflash": false,<br />
"iswaitingforanswer": false,<br />
"number": "",<br />
"name": "",<br />
"description": "",<br />
"userid": "",<br />
"userlogin": "",<br />
"username": "",<br />
"comment": "",<br />
"simplename": "",<br />
"lineid": "",<br />
"linenumber": "",<br />
"isextline": false,<br />
"iswaitingforanswer": false,<br />
"extnumber": "",<br />
"queuesourceid": 1,<br />
"queuesourcestr": "",<br />
"isivr": false,<br />
"ivrname": "",<br />
"isroutingivr": false, <br />
"ismediaivr": false, <br />
"isrestartivr": false,<br />
"isautocall": false,<br />
"number": "",<br />
"isringing": false,<br />
"ringtimesec": 172,<br />
"isconference": false,<br />
"conferenceid": "",<br />
"conferencename": "",<br />
"conferenceroom": "",<br />
"conferencedescription": "",<br />
"inviteruserid": "",<br />
"inviterusername": "",<br />
"inviteruserlogin": "",<br />
"number": "",<br />
"name": "",<br />
"comment": "",<br />
"description": "",<br />
"direction": "",<br />
"isextline": true,<br />
"istask": false,<br />
"taskid": "",<br />
"taskname": "",<br />
"userid": "",<br />
"userlogin": "",<br />
"username": "",<br />
"lineid": "",<br />
"linenumber": ""<br />
}<br />
"isflashing": true,<br />
"flashed": {<br />
"isconference": true,<br />
"conferenceid": "0D2A4CA1-FF17-473B-A5E9-E035CB16E257",<br />
"conferenceroom": "#124",<br />
"conferencename": "Планерка",<br />
"conferencedescription": "",<br />
"number": "",<br />
"name": "",<br />
"description": "",<br />
"userid": "",<br />
"userlogin": "",<br />
"username": "",<br />
"comment": "",<br />
"simplename": "",<br />
"lineid": "",<br />
"linenumber": "",<br />
"isextline": false<br />
}<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* С отступом в примере указаны поля, появляющиеся в случае, если базовое булево поле имеет значение true. <br />
// Например, если isringing=true, то указанные с отступом поля будут присутствовать и представлять собой<br />
// информацию об абоненте, осуществляющем вызов текущего канала.<br />
</pre><br />
<br />
<br />
<br />
<br />
====Управление переадресацией====<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getredirectrules'''</span><br />
<br />
Запрос из CRM в Oktell на возврат списка правил переадресации для текущего пользователя с их настройками.<br />
<br />
<pre><br />
[<br />
"getredirectrules",<br />
{<br />
"qid": "4CC7EDEC-499B-4C03-95D3-57B8C30FC110",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getredirectrulesresult'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает список правил переадресации для текущего пользователя с их настройками.<br />
<br />
<pre><br />
[<br />
"getredirectrulesresult",<br />
{<br />
"qid": "4CC7EDEC-499B-4C03-95D3-57B8C30FC110",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"redirectrules": [<br />
{<br />
"id": "5FD3120D-E86B-4F4B-B57C-AC32343CD00F",<br />
"caption": "Постоянное",<br />
"description": "Действует всегда, когда я в состоянии переадресации",<br />
"priority": 1,<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"isenabled": true,<br />
"allowcascade": true,<br />
"state": 2,<br />
"statestr": "Active",<br />
"destinationnumber": "89050213951",<br />
"onlyforredirectstate": true,<br />
"definesources": true,<br />
"sources": [<br />
{<br />
"type": 0,<br />
"typestr": "ExtNumber",<br />
"description": "",<br />
"srcnumber": "4959741589",<br />
"srcid": ""<br />
},<br />
...<br />
],<br />
"defineschedule": true,<br />
"tformat": "HH:mm:ss",<br />
"schedule": [<br />
{<br />
"weekday": 0,<br />
"weekdaystr": "Sunday",<br />
"tstart": "00:00:00",<br />
"tstop": "23:59:59",<br />
},<br />
...<br />
]<br />
},<br />
...<br />
]<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* state: disabled=0, enabled=1, active=2<br />
//* defineschedule - если false, значит активно всегда<br />
//* definesources - если false, значит для всех номеров<br />
//* sourcetype - extnumber=0, user=1, client=3, clientgroup=4. <br />
Если номер - то указывается scrnumber, иначе srcid<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''saveredirectrules'''</span><br />
<br />
Запрос из CRM в Oktell. Сохраняет новое/измененное правило переадресации для текущего пользователя.<br />
<br />
<pre><br />
[<br />
"saveredirectrules",<br />
{<br />
"qid": "4CC7EDEC-499B-4C03-95D3-57B8C30FC110",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"redirectrules": [<br />
{<br />
"id": "5FD3120D-E86B-4F4B-B57C-AC32343CD00F",<br />
"caption": "Постоянное",<br />
"description": "Действует всегда, когда я в состоянии переадресации",<br />
"priority": 1,<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"isenabled": true,<br />
"allowcascade": true,<br />
"destinationnumber": "89050213951",<br />
"onlyforredirectstate": true,<br />
"definesources": true,<br />
"sources": [<br />
{<br />
"type": 0,<br />
"typestr": "ExtNumber",<br />
"description": "",<br />
"srcnumber": "4959741589",<br />
"srcid": ""<br />
},<br />
...<br />
],<br />
"defineschedule": true,<br />
"tformat": "HH:mm:ss",<br />
"schedule": [<br />
{<br />
"weekday": 0,<br />
"weekdaystr": "Sunday",<br />
"tstart": "00:00:00",<br />
"tstop": "23:59:59",<br />
},<br />
...<br />
]<br />
},<br />
...<br />
]<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* state: disabled=0, enabled=1, active=2<br />
//* defineschedule - если false, значит активно всегда<br />
//* definesources - если false, значит для всех номеров<br />
//* sourcetype - extnumber=0, user=1, client=3, clientgroup=4. Если номер - то указывается scrnumber, иначе srcid<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''saveredirectrulesresult'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает список правил переадресации для текущего пользователя с их настройками.<br />
<br />
<pre><br />
[<br />
"saveredirectrulesresult",<br />
{<br />
"qid": "4CC7EDEC-499B-4C03-95D3-57B8C30FC110",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"result": 1<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''deleteredirectrules'''</span><br />
<br />
Запрос из CRM в Oktell. Удаляет указанные правила переадресации для текущего пользователя.<br />
<br />
<pre><br />
[<br />
"deleteredirectrules",<br />
{<br />
"qid": "4CC7EDEC-499B-4C03-95D3-57B8C30FC110",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"<br />
"ids": [<br />
"5FD3120D-E86B-4F4B-B57C-AC32343CD00F",<br />
...<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''deleteredirectrulesresult'''</span><br />
<br />
Ответ из Oktell в CRM. Ничего не возвращает, кроме факта выполнения запроса на удаление правил переадресации.<br />
<br />
<pre><br />
[<br />
"deleteredirectrulesresult",<br />
{<br />
"qid": "4CC7EDEC-499B-4C03-95D3-57B8C30FC110",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''setredirectruleenabled'''</span><br />
<br />
Запрос из CRM в Oktell. Включает/выключает указанные правила переадресации.<br />
<br />
<pre><br />
[<br />
"setredirectruleenabled",<br />
{<br />
"qid": "4CC7EDEC-499B-4C03-95D3-57B8C30FC110",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"<br />
"id": "5FD3120D-E86B-4F4B-B57C-AC32343CD00F",<br />
"enabled": true<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''setredirectruleenabledresult'''</span><br />
<br />
Ответ из Oktell в CRM. Ничего не возвращает, кроме факта выполнения запроса на включение/выключения указанных правил переадресации.<br />
<br />
<pre><br />
[<br />
"setredirectruleenabledresult",<br />
{<br />
"qid": "4CC7EDEC-499B-4C03-95D3-57B8C30FC110",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<br />
<br />
====Контент звонка====<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getchaincontent'''</span><br />
<br />
Запрос из CRM в Oktell на возврат контента текущей сессии, в которой участвует линия указанного пользователя. Кто инициировал звонок, когда, с кем коммутировался, кто переключал, куда, на кого, когда, были ли комментарии какие-то установлены в контент...<br />
<br />
<pre><br />
[<br />
"getchaincontent",<br />
{<br />
"qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getchaincontentresult'''</span><br />
<br />
Ответ из Oktell в CRM с контентом текущей сессии указанного в запросе пользователя. <br />
<pre><br />
[<br />
"getchaincontentresult",<br />
{<br />
"qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chainid": "19ADB2C3-A0B5-47AB-AB2C-CBE15CF98968",<br />
"result": 1,<br />
"content": {<br />
"chainid": "19ADB2C3-A0B5-47AB-AB2C-CBE15CF98968",<br />
"createtime": "2011-04-06 20:38:41",<br />
"customfield": "трололололо",<br />
"trace": [<br />
{<br />
"contentelementtype": "call",<br />
"pbxdirection": "internal",<br />
"objectid": "723114EE-2ABF-4806-9BC6-FBB532C31B44",<br />
"objecttype": 0,<br />
"objecttypestr": "qotQueueLogic",<br />
"queuesource": 5,<br />
"queuesourcestr": "qsIncomingTask",<br />
"queuepriority": 7,<br />
"srcelementid": "98F670D2-20E2-4883-B45E-42CDE1F3365F",<br />
"srclineid": "98F670D2-20E2-4883-B45E-42CDE1F3365F",<br />
"srclinenumber": "13005",<br />
"startqueuetime": "2011-04-06 20:38:41",<br />
"managedlineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",<br />
"managedlinenumber": "17004",<br />
"callerid": "89048928835",<br />
"calledid": "4959211586",<br />
"isuser": false,<br />
"department": "",<br />
"istask": true,<br />
"taskid": "95575C37-5FDE-412C-8F42-36D55B1EC6BB",<br />
"taskname": "Входящая кампания",<br />
"taskdirection": "incoming",<br />
"tasklistid": "7D9A3E9C-0AD3-4C68-BC02-4EBFE3684507",<br />
"tasklistinfo": [<br />
{<br />
"key": "Название организации",<br />
"value": "ООО МДГХ"<br />
}<br />
]<br />
},<br />
{<br />
"contentelementtype": "commutation",<br />
"commutationid": "58D76504-DA2D-42C2-9016-1089A94DC1BF",<br />
"timestart": "2011-04-06 20:40:01",<br />
"timeanswer": "2011-04-06 20:40:04",<br />
"connectiontype": 5,<br />
"connectiontypestr": "ctOuterInner",<br />
"isrecorded": true,<br />
"customfield": "траляляляля",<br />
"alineid": "98F670D2-20E2-4883-B45E-42CDE1F3365F",<br />
"alinenumber": "13005",<br />
"anumberdialed": "4959211586",<br />
"aoutnumber": "89048928835",<br />
"aisuser": false,<br />
"atext": "ООО «СДЗЦ» (89048928835)",<br />
"blineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",<br />
"blinenumber": "17004",<br />
"bnumberdialed": "",<br />
"boutnumber": "472",<br />
"bisuser": true,<br />
"buserid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"buserlogin": "Петров",<br />
"busername": "Петр Петрович Петров",<br />
"btext": "Петр Петрович Петров",<br />
"timestop": "2011-04-06 20:42:12",<br />
"length": 128.32,<br />
"stopside": "a",<br />
"stopreason": 2,<br />
"stopreasonstr": "scrAbonentHangOff"<br />
},<br />
{...},<br />
{...}<br />
]<br />
}<br />
}<br />
]<br />
</pre><br />
<pre><br />
* trace:contentelementtype: <br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''setchaincontentcustomfield'''</span><br />
<br />
Запрос из CRM в Oktell на установку комментария в контент текущей сессии, в которой участвует канал указанного пользователя.<br />
<br />
<pre><br />
[<br />
"setchaincontentcustomfield",<br />
{<br />
"qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"customfield": "фывафыдвлаожфыдлвао"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''setchaincontentcustomfieldresult'''</span><br />
<br />
Ответ из Oktell в CRM с результатом установки комментария в контент текущей сессии, в которой участвует канал указанного в запросе пользователя.<br />
<br />
<pre><br />
[<br />
"setchaincontentcustomfieldresult",<br />
{<br />
"qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chainid": "19ADB2C3-A0B5-47AB-AB2C-CBE15CF98968",<br />
"result": 1<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''setchaincontentcustomfield'''</span><br />
<br />
Запрос из CRM в Oktell на возврат комментария из контента текущей сессии, в которой участвует канал указанного пользователя.<br />
<br />
<pre><br />
[<br />
"getchaincontentcustomfield",<br />
{<br />
"qid": "AF4B98AA-51D8-4944-B10C-04B0DE1E1BBC",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getchaincontentcustomfieldresult'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает комментарий из контента текущей сессии, в которой участвует канал указанного в запросе пользователя.<br />
<br />
<pre><br />
[<br />
"getchaincontentcustomfieldresult",<br />
{<br />
"qid": "AF4B98AA-51D8-4944-B10C-04B0DE1E1BBC",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"chainid": "19ADB2C3-A0B5-47AB-AB2C-CBE15CF98968",<br />
"customfield": "фывафыдвлаожфыдлвао",<br />
"result": 1<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<br />
<br />
====Журнал звонков====<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getpbxcalljournal'''</span><br />
<br />
Запрос из CRM в Oktell на возврат журнала звонков АТС по указанному фильтру в соответствии с правами пользователя.<br />
В том числе ссылки на файлы записей разговоров.<br />
<br />
<pre><br />
[<br />
"getpbxcalljournal",<br />
{<br />
"qid": "4CC7EDEC-499B-4C03-95D3-57B8C30FC110",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"filter": {<br />
"idconn": "08708573-4AF9-45F2-83B7-B8A0DDEF52EC",<br />
"idchain": "94B5B657-3009-45E0-9095-F5D7BA163EB2",<br />
"datestart": "2011-04-07",<br />
"datestop": "2011-04-07",<br />
"timestart": "08:00:00",<br />
"timestop": "20:00:00",<br />
"connectiontype": "all",<br />
"intnumber": "",<br />
"outnumber": "89503222555",<br />
"minduration": 1,<br />
"userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"userlogin: "Петров"<br />
"comment": "",<br />
"showcallcenter": false,<br />
"taskid": "00000000-0000-0000-0000-000000000000"<br />
}<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* filter - фильтр для запроса. Все поля не являются обязательными.<br />
По умолчанию возвращаются разговоры за текущий день с 8:00 до 17:00 без звонков call-центра <br />
длительностью более 1 секунды, которые доступны авторизованному пользователю по правам контроля.<br />
К фильтру могут быть применены: <br />
idconn - идентификатор конкретно интересующей коммутации.<br />
idchain - идентификатор конкретно интересующей цепочки коммутаций/сессии.<br />
datestart - дата начала интересующего периода. Включительно.<br />
datestop - дата окончания интересующего периода. Включительно.<br />
timestart - время начала интересующего внутридневного интервала. <br />
timestop - время окончания интересующего внутридневного интервала. <br />
connectiontype - тип соединения (all, incoming, outcoming, internal, conference).<br />
intnumber - интересующий внутренний номер.<br />
outnumber - интересующий внешний номер.<br />
minduration - минимальная длительность коммутации в секундах, может быть действительным значением.<br />
userid - идентификатор интересующего пользователя.<br />
userlogin - логин интересующего пользователя.<br />
comment - строка включения в комментарии.<br />
showcallcenter: true|false. Отображать ли коммутации call-центра.<br />
taskid - идентификатор задачи в рамках call-центра, чьи звонки интересны.<br />
</pre><br />
<br />
<br />
<span style="color:green"><<< '''getpbxcalljournalresult'''</span><br />
<br />
Ответ от Oktell в CRM. Возвращает журнал звонков АТС по указанному фильтру в соответствии с правами пользователя.<br />
<br />
<pre><br />
[<br />
"getpbxcalljournalresult",<br />
{<br />
"qid": "4CC7EDEC-499B-4C03-95D3-57B8C30FC110",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"dtformat": "dd.MM.yyyy HH:mm:ss",<br />
"data": [<br />
{<br />
"commutationid": "044d56f9-7137-49b6-bacf-a10370a54df4",<br />
"chainid": "672ec703-e77a-47b1-b698-cb8488352fc9",<br />
"connectiontype": 10,<br />
"connectiontypestr": "conference",<br />
"dtstart": "2011-04-09 19:55:30",<br />
"dtanswer": "2011-04-09 19:55:30",<br />
"dtstop": "2011-04-09 19:55:33",<br />
"length": 2,<br />
"answerlength": 0,<br />
"hascomment": false,<br />
"isbetweenusers": true,<br />
"fromcc": false,<br />
"isconf": true,<br />
"isrecorded": true,<br />
"recordlink": "/download/rec/AQAAAAAQIKvNHczNCBEBAAAA",<br />
"fileext": "wav",<br />
"auserid": "AA3B3E14-2B44-4D08-8C62-3C616F9D27E3",<br />
"auserlogin": "Крючков",<br />
"alineid": "A117499D-23EA-4BF8-A6B9-F49580E9628C",<br />
"alinenumber": "16001",<br />
"aoutnumber": "Семен Егорович Крючков",<br />
"anumberdialed": "",<br />
"atext": "Семен Егорович Крючков",<br />
"conferenceid": "224476F1-2E41-4C8F-BA85-6BEF0EBB5339",<br />
"conferenceroom": "751",<br />
"conferencename": "Автоконференция #751 09.04.11 19:55:30",<br />
"conferencedirectorid": "AA3B3E14-2B44-4D08-8C62-3C616F9D27E3",<br />
"conferencedirectorlogin": "Крючков",<br />
"conferencedirectorname": "Семен Егорович Крючков",<br />
"reasonstop": -1,<br />
"stopside": "a"<br />
},<br />
{<br />
"commutationid": "5F64DECF-194C-474B-8CA7-824E82A1C072",<br />
"chainid": "22A01B17-064B-4E19-99BA-FED96680AF25",<br />
"connectiontype": 5,<br />
"connectiontypestr": "ctOuterInner",<br />
"dtstart": "2011-04-09 19:57:24",<br />
"dtanswer": "2011-04-09 19:57:24",<br />
"dtstop": "2011-04-09 19:58:13",<br />
"length": 49,<br />
"answerlength": 0,<br />
"hascomment": true,<br />
"isbetweenusers": true,<br />
"fromcc": false,<br />
"isrecorded": true,<br />
"recordlink": "/download/rec/AAAAAABwOltxHczNCGlCAACBPgAA",<br />
"fileext": "mp3",<br />
"isconf": false,<br />
"auserid": "AA3B3E14-2B44-4D08-8C62-3C616F9D27E3",<br />
"auserlogin": "Крючков",<br />
"alineid": "A117499D-23EA-4BF8-A6B9-F49580E9628C",<br />
"alinenumber": "16001",<br />
"aoutnumber": "Семен Егорович Крючков",<br />
"anumberdialed": "",<br />
"atext": "Семен Егорович Крючков",<br />
"buserid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"buserlogin": "Петров",<br />
"blineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",<br />
"blinenumber": "17004",<br />
"boutnumber": "",<br />
"bnumberdialed": "217",<br />
"btext": "Петр Петрович Петров",<br />
"reasonstop": -1,<br />
"stopside": "b"<br />
}<br />
{...},<br />
{...}<br />
]<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* dtformat - формат представления даты/времени.<br />
//* data - набор попавших в выдачу коммутаций/конференций. Каждая запись - в отдельном словаре.<br />
commutationid - идентификатор коммутации.<br />
chainid - идентификатор цепочки коммутаций/сессии.<br />
connectiontype, connectiontypestr - Тип соединения:<br />
ctInnerOuter = 1, //внутренняя линия с внешней линией<br />
ctInnerIvr = 2, //внутренняя линия с IVR<br />
ctInnerInner = 3, //внутренняя линия с внутренней линией<br />
ctOuterIvr = 4, //внешняя линия с IVR<br />
ctOuterInner = 5, //внешняя линия с внутренней линией линией<br />
ctOuterOuter = 6, //внешняя линия с внешней линией <br />
ctIvrOuter = 7, //IVR с внешней линией <br />
ctIvrInner = 8, //IVR с внутренней линией<br />
ctConference = 10,//Конференция<br />
ctSelector = 11,//Селекторное совещание<br />
dtstart - дата/время начала вызова перед осуществлением коммутации.<br />
dtanswer - дата/время ответа и начала коммутации.<br />
dtstop - дата/время окончания коммутации<br />
length - длительность в секундах<br />
answerlength - длительность ответа в секундах.<br />
hascomment - true|false. Имеет ли данная коммутация комментарий.<br />
isbetweenusers - true|false. Является ли текущая коммутация между пользователями системы.<br />
fromcc - true|false. Произведена ли текущая коммутация в рамках работы call-центра.<br />
isrecorded - true|false. Записана ли коммутация.<br />
recordlink - относительная ссылка на скачивание файла записи разговора.<br />
fileext - если файл записан, то его расширение mp3 или wav. Возвращает только если в полном <br />
результате менее 5 записей, иначе поле отсутствует.<br />
isconf - true|false. Является ли текущая запись конференцией.<br />
auserid - идентификатор пользователя абонента a. <br />
Если IVR - 'ab000000-0000-0000-0000-000000000000',<br />
Если внешний абонент - 'bf000000-0000-0000-0000-000000000000'<br />
auserlogin - логин пользователя абонента a.<br />
alineid - идентификатор линии абонента a.<br />
alinenumber - номер линии абонента a.<br />
aoutnumber - номер абонента a (CallerId).<br />
anumberdialed - набранный абонентом a номер.<br />
atext - текстовое описание абонента a.<br />
buserid - идентификатор пользователя абонента b. <br />
Если IVR - 'ab000000-0000-0000-0000-000000000000',<br />
Если внешний абонент - 'bf000000-0000-0000-0000-000000000000'<br />
buserlogin - логин пользователя абонента b.<br />
blineid - идентификатор линии абонента b.<br />
blinenumber - номер линии абонента b.<br />
boutnumber - номер абонента b (CallerId).<br />
bnumberdialed - набранный абонентом b номер.<br />
btext - текстовое описание абонента b.<br />
reasonstop - причина разрыва коммутации.<br />
stopside - a, b. По чьей инициативе коммутация прервана.<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getpbxcallcomment'''</span><br />
<br />
Запрос из CRM в Oktell на возврат комментария к указанной коммутации.<br />
<br />
<pre><br />
[<br />
"getpbxcallcomment",<br />
{<br />
"qid": "1E3C27C0-BE28-4621-AD39-6D1B31EB37EB",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"commutationid": "73567FD4-EFB9-46BF-9346-35B8638FE644"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green"><<< '''getpbxcallcommentresult'''</span><br />
<br />
Ответ от Oktell в CRM. Возвращает комментарий к запрошенной коммутации.<br />
<br />
<pre><br />
[<br />
"getpbxcallcommentresult",<br />
{<br />
"qid": "1E3C27C0-BE28-4621-AD39-6D1B31EB37EB",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"commutationid": "73567FD4-EFB9-46BF-9346-35B8638FE644",<br />
"comment": "раз два три четыре пять вышел зайчик погулять"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''setpbxcallcomment'''</span><br />
<br />
Запрос из CRM в Oktell на установку комментария для указанной коммутации.<br />
<br />
<pre><br />
[<br />
"setpbxcallcomment",<br />
{<br />
"qid": "3AB79A11-24FB-4D10-B7FD-5FD1653A679D",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"commutationid": "73567FD4-EFB9-46BF-9346-35B8638FE644"<br />
"comment": "раз два три четыре пять вышел зайчик погулять"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green"><<< '''setpbxcallcommentresult'''</span><br />
<br />
Ответ от Oktell в CRM. Возвращает результат установки комментария к коммутации.<br />
<br />
<pre><br />
[<br />
"setpbxcallcommentresult",<br />
{<br />
"qid": "3AB79A11-24FB-4D10-B7FD-5FD1653A679D",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"result": 1<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getpbxmycalljournal'''</span><br />
<br />
Запрос из CRM в Oktell на возврат журнала собственных звонков авторизованного пользователя по указанному фильтру.<br />
В том числе ссылки на файлы записей разговоров.<br />
<br />
<pre><br />
[<br />
"getpbxmycalljournal",<br />
{<br />
"qid": "F95D0A08-D904-49C9-A4B9-8C02B1781A89",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"linkmode": "full",<br />
"filter": {<br />
"datestart": "2011-04-07",<br />
"datestop": "2011-04-07",<br />
"comment": "",<br />
"number": "89503222555",<br />
"media": "all",<br />
"type": "all"<br />
}<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* linkmode - full, simple - устанавливает формат ссылок, в котором будут указаны полученные файлы<br />
в событии об окончании приема.<br />
full - вернуть абсолютную ссылку на скачивание через http.<br />
simple - вернуть относительную ссылку на скачивание.<br />
При формировании абсолютной ссылки в качестве доменного имени берется значение из <br />
раздела [[Интеграция с WEB-Socket CRM]] общих настроек Oktell.<br />
//* filter - фильтр для запроса. Все поля не являются обязательными.<br />
По умолчанию возвращаются разговоры за текущий день с 8:00 до 17:00, в которых<br />
участвовал авторизованный пользователь <br />
К фильтру могут быть применены: <br />
datestart - дата начала интересующего периода. Включительно.<br />
datestop - дата окончания интересующего периода. Включительно.<br />
comment - строка включения в комментарии.<br />
number - интересующий номер оппонента.<br />
media - external, internal, all. Среда вызова.<br />
type - тип звонка:<br />
incoming - входящий звонок.<br />
outcoming - исходящий звонок.<br />
missed - пропущенный звонок. Что является пропущенным звонком определяется в разделе<br />
[[Менеджер очередей]] общих настроек Oktell.<br />
conference - конференция.<br />
selector - селекторное совещание.<br />
all - все типы звонков.<br />
</pre><br />
<br />
<br />
<span style="color:green"><<< '''getpbxmycalljournalresult'''</span><br />
<br />
Ответ от Oktell в CRM. Возвращает журнал собственных звонков авторизованного пользователя по указанному фильтру.<br />
<br />
<pre><br />
[<br />
"getpbxmycalljournalresult",<br />
{<br />
"qid": "F95D0A08-D904-49C9-A4B9-8C02B1781A89",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"dtformat": "dd.MM.yyyy HH:mm:ss",<br />
"data": [<br />
{<br />
"type": 1,<br />
"typestr": "incoming",<br />
"media": 2,<br />
"mediastr": "internal",<br />
"commutationid": "73567FD4-EFB9-46BF-9346-35B8638FE644",<br />
"chainid": "46fe0543-4a58-49c5-b501-644b8ddad69a",<br />
"dtstart": "2011-04-09 19:55:25",<br />
"dtanswer": "2011-04-09 19:55:27",<br />
"dtstop": "2011-04-09 19:56:29",<br />
"length": 61,<br />
"number": "14",<br />
"alineid": "3294CD8F-7865-436A-AC2E-CEA481D8F52D",<br />
"alinenumber": "17011",<br />
"blineid": "021BDECD-196B-408F-8C36-8C37C0A94C5A",<br />
"blinenumber": "17014",<br />
"isrecorded": true,<br />
"recordlink": "http://192.168.0.12:4055/download/rec/AQAAAADQfMDNHczNCBEBAAAA",<br />
"hascomment": true,<br />
"abonentname": "Петр Петрович Петров",<br />
"isconf": false<br />
},<br />
{<br />
"type": 10,<br />
"typestr": "conference",<br />
"media": 10,<br />
"mediastr": "conference",<br />
"commutationid": "20CF9B5A-5FFE-4456-8984-E7B79D7166EE",<br />
"chainid": "E443FEA7-5ABB-49CB-A28D-8CC25F404E97",<br />
"dtstart": "2011-04-09 19:58:12",<br />
"dtanswer": "2011-04-09 19:58:12",<br />
"dtstop": "2011-04-09 19:59:45",<br />
"length": 93,<br />
"alineid": "3294CD8F-7865-436A-AC2E-CEA481D8F52D",<br />
"alinenumber": "17011",<br />
"isconf": true,<br />
"conferenceid": "224476F1-2E41-4C8F-BA85-6BEF0EBB5339",<br />
"conferenceroom": "751",<br />
"conferencename": "Автоконференция #751 09.04.11 19:55:30",<br />
"conferencedirectorid": "AA3B3E14-2B44-4D08-8C62-3C616F9D27E3",<br />
"conferencedirectorlogin": "Крючков",<br />
"conferencedirectorname": "Семен Егорович Крючков",<br />
"isrecorded": true,<br />
"recordlink": "http://192.168.0.12:4055/download/rec/AAAAAACQSBTLHczNCGlCAACBPgAA",<br />
"hascomment": true<br />
},<br />
{...},<br />
{...}<br />
]<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* dtformat - формат представления даты/времени.<br />
//* data - набор попавших в выдачу коммутаций/конференций. Каждая запись - в отдельном словаре.<br />
type, typestr - тип звонка:<br />
incoming = 1 - входящий звонок.<br />
outcoming = 2 - исходящий звонок.<br />
missed = 3 - пропущенный звонок. Что является пропущенным звонком определяется <br />
в разделе [[Настройки менеджера очередей|Менеджер очередей]] общих настроек Oktell.<br />
conference = 10 - конференция.<br />
selector = 11 - селекторное совещание. <br />
media, mediastr - тип среды вызова:<br />
external = 2 - внешняя среда.<br />
internal = 1 - внутренний вызов.<br />
conference = 10 - конференция.<br />
selector = 11 - селекторное совещание.<br />
commutationid - идентификатор коммутации.<br />
chainid - идентификатор цепочки коммутаций/сессии.<br />
dtstart - дата/время начала вызова перед осуществлением коммутации.<br />
dtanswer - дата/время ответа и начала коммутации.<br />
dtstop - дата/время окончания коммутации<br />
length - длительность в секундах<br />
alineid - идентификатор линии абонента a.<br />
alinenumber - номер линии абонента a.<br />
blineid - идентификатор линии абонента b, если это коммутация.<br />
blinenumber - номер линии абонента b, если это коммутация.<br />
isrecorded - true|false. Записана ли коммутация.<br />
recordlink - относительная или абсолютная ссылка на скачивание файла записи разговора.<br />
hascomment - true|false. Имеет ли данная коммутация комментарий.<br />
abonentname - текстовое описание оппозитного абонента коммутации.<br />
isconf - true|false. Является ли текущая запись конференцией(селектором) или нет.<br />
conferenceid - идентификатор конференции/селектора.<br />
conferenceroom - номер комнаты конференции/селектора.<br />
conferencename - название конференции/селектора.<br />
conferencedirectorid - идентификатор управляющего пользователя конференции/селектора.<br />
conferencedirectorlogin - логин управляющего пользователя конференции/селектора.<br />
conferencedirectorname - имя управляющего пользователя конференции/селектора.<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''removepbxcallrecord'''</span><br />
<br />
Запрос из CRM в Oktell. Удаляет запись разговора указанной коммутации в соответствии с правами доступа.<br />
<br />
<pre><br />
[<br />
"removepbxcallrecord",<br />
{<br />
"qid": "DF061C5B-1B3B-41AA-94FF-A7A2F8FA6AE7",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"commutationid": "73567FD4-EFB9-46BF-9346-35B8638FE644"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green"><<< '''removepbxcallrecordresult'''</span><br />
<br />
Ответ от Oktell в CRM. Возвращает результат удаления записи разговора.<br />
<br />
<pre><br />
[<br />
"removepbxcallrecordresult",<br />
{<br />
"qid": "DF061C5B-1B3B-41AA-94FF-A7A2F8FA6AE7",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"result": 1<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getvoiceperc'''</span><br />
<br />
Запрос из CRM в Oktell. Возвращает информацию о [[Управление_базами_данных#ComputeVoices|распределении владения разговором участниками коммутации]].<br />
<br />
<pre><br />
[<br />
"getvoiceperc",<br />
{<br />
"qid": "DF061C5B-1B3B-41AA-94FF-A7A2F8FA6AE7",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"commutationid": "73567FD4-EFB9-46BF-9346-35B8638FE644"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green"><<< '''getvoicepercresult'''</span><br />
<br />
Ответ от Oktell в CRM. Возвращает результат.<br />
<br />
<pre><br />
[<br />
"getvoicepercresult",<br />
{<br />
"qid": "DF061C5B-1B3B-41AA-94FF-A7A2F8FA6AE7",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"result": 1,<br />
"aperc": 12,<br />
"bperc": 29,<br />
"alinenum": "17e003",<br />
"blinenum": "16e215"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getvoicemap'''</span><br />
<br />
Запрос из CRM в Oktell. Возвращает [[Управление_базами_данных#VoiceMap|детальную карту владения разговором участниками коммутации]].<br />
<br />
<pre><br />
[<br />
"getvoicemap",<br />
{<br />
"qid": "DF061C5B-1B3B-41AA-94FF-A7A2F8FA6AE7",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"commutationid": "73567FD4-EFB9-46BF-9346-35B8638FE644"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green"><<< '''getvoicepercresult'''</span><br />
<br />
Ответ от Oktell в CRM. Возвращает результат.<br />
<br />
<pre><br />
[<br />
"getvoicemapresult",<br />
{<br />
"qid": "DF061C5B-1B3B-41AA-94FF-A7A2F8FA6AE7",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"result": 1,<br />
"errormsg": "",<br />
"abinbase64": [base64 от бинарки ("0100101101011110"-> byte[]-> base64)],<br />
"bbinbase64": [base64 от бинарки ("0100101101011110"-> byte[]-> base64)],<br />
"abinlen": 15,<br />
"bbinlen": 15,<br />
"alinenum": "17e003",<br />
"blinenum": "16e215"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<br />
<br />
====Номерной план====<br />
<br />
-------------------------------------------------<br />
<span style="color:green">>>> '''pbxnumberstatechanged'''</span><br />
<br />
Сообщение из Oktell о смене состояния внутреннего номера (или группы внутренних номеров)<br />
<br />
<pre><br />
[<br />
"pbxnumberstatechanged",<br />
{<br />
"qid": "5B9508DF-565B-44E1-A122-6FEB70ADA0B9",<br />
"numbers": [<br />
{"num": "425", "numstateid": 3},<br />
{"num": "427", "numstateid": 2},<br />
{"num": "#82", "numstateid": 3}<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getusersbynumbers'''</span><br />
<br />
Запрос из CRM в Oktell на возврат информации о пользователях системы по указанным внутренним номерам от имени указанного пользователя.<br />
<br />
<pre><br />
[<br />
"getusersbynumbers",<br />
{<br />
"qid": "20D0F23E-F26A-4BD9-BE65-B6F76D91880A",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"numbers": [<br />
"883",<br />
"470",<br />
"472",<br />
"485"<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getusersbynumbersresult'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает информацию о пользователях, которые обнаруживаются системой при парсинге указанных в запросе внутренних номеров.<br />
<br />
<pre><br />
[<br />
"getusersbynumbersresult",<br />
{<br />
"qid": "20D0F23E-F26A-4BD9-BE65-B6F76D91880A",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"result": 1,<br />
"users": [<br />
{<br />
"userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"userlogin": "Петров",<br />
"username": "Петр Петрович Петров",<br />
},<br />
{<br />
"userid": "2AC66E31-ADF0-4F84-A589-417A5A599EEA",<br />
"userlogin": "Сидоров",<br />
"username": "Сидор Сидорович Сидоров"<br />
}<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getitemsbynumbers'''</span><br />
<br />
Запрос из CRM в Oktell на возврат информации о пользователях и линиях системы по указанным внутренним номерам от имени указанного пользователя.<br />
<br />
<pre><br />
[<br />
"getitemsbynumbers",<br />
{<br />
"qid": "0A8B1B7C-E4DD-47FC-A17F-A9200602A8DE",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"numbers": [<br />
"883",<br />
"470",<br />
"472",<br />
"485"<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getitemsbynumbersresult'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает информацию о пользователях и линиях, которые обнаруживаются системой при парсинге указанных в запросе внутренних номеров.<br />
<br />
<pre><br />
[<br />
"getitemsbynumbersresult",<br />
{<br />
"qid": "0A8B1B7C-E4DD-47FC-A17F-A9200602A8DE",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"result": 1,<br />
"items": [<br />
{<br />
"type": "user",<br />
"userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"userlogin": "Петров",<br />
"username": "Петр Петрович Петров",<br />
},<br />
{<br />
"type": "user",<br />
"userid": "2AC66E31-ADF0-4F84-A589-417A5A599EEA",<br />
"userlogin": "Сидоров",<br />
"username": "Сидор Сидорович Сидоров"<br />
},<br />
{<br />
"type": "line",<br />
"lineid": "50203B8C-8079-4B52-8D24-ECDA4BF7877A",<br />
"linenumber": "17025"<br />
}<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getsystemnumberbyuser'''</span><br />
<br />
Запрос из CRM в Oktell на возврат системного внутреннего номера, по которому может быть произведен вызов указанного в суб-параметре пользователя от имени указанного пользователя.<br />
<br />
<pre><br />
[<br />
"getsystemnumberbyuser",<br />
{<br />
"qid": "0A8B1B7C-E4DD-47FC-A17F-A9200602A8DE",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"user": {<br />
"userid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"userlogin": "Петров"<br />
}<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getsystemnumberbyuserresult'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает системный внутренний номер указанного в суб-параметре пользователя.<br />
<br />
<pre><br />
[<br />
"getsystemnumberbyuserresult",<br />
{<br />
"qid": "0A8B1B7C-E4DD-47FC-A17F-A9200602A8DE",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"result": 1,<br />
"systemnumber": "U28CA980EF9F84B83B4934454AA54FCD8"<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getpbxnumbersforitem'''</span><br />
<br />
Запрос из CRM в Oktell на возврат текстового списка внутренних номеров указанного в суб-параметре пользователя.<br />
<br />
<pre><br />
[<br />
"getpbxnumbersforitem",<br />
{<br />
"qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"<br />
"itemtype": "user",<br />
"itemuserid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"itemuserlogin: "Петров"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getpbxnumbersforitemresult'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает список несистемных внутренних номеров через запятую, по которым возможен вызов пользователя, указанного в суб-параметре запроса.<br />
<br />
<pre><br />
[<br />
"getpbxnumbersforitemresult",<br />
{<br />
"qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"itemtype": "user",<br />
"itemuserid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"itemuserlogin: "Петров",<br />
"itemnumbers": "403, 472"<br />
}<br />
]<br />
</pre><br />
<pre><br />
/* "itemtype": "line",<br />
/* "itemlineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",<br />
/* "itemlinenumber": "17004"<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getmainpbxnumberforitem'''</span><br />
<br />
Запрос из CRM в Oktell на возврат основного несистемного внутреннего номера, по которому возможен вызов объекта системы (пользователя/линии), указанного в суб-параметре.<br />
<br />
<pre><br />
[<br />
"getmainpbxnumberforitem",<br />
{<br />
"qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B"<br />
"itemtype": "user",<br />
"itemuserid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"itemuserlogin: "Петров"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getmainpbxnumberforitemresult'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает основной несистемный внутренний номер, по которому возможен вызов объекта системы (пользователя/линии), указанного в суб-параметре запроса.<br />
<br />
<pre><br />
[<br />
"getmainpbxnumberforitemresult",<br />
{<br />
"qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"itemtype": "user",<br />
"itemuserid": "8232C52D-ACFF-4DC9-B33A-C2A3CD2FC002",<br />
"itemuserlogin: "Петров",<br />
"itemnumber": "472"<br />
}<br />
]<br />
</pre><br />
<pre><br />
/* "itemtype": "line",<br />
/* "itemlineid": "9F93FE9C-0B80-4242-BD24-D338BE8E4FC0",<br />
/* "itemlinenumber": "17004"<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getpbxnumbers'''</span><br />
<br />
Запрос из CRM в Oktell на возврат всех внутренних номеров системы. <br />
Не требует указания авторизованного пользователя, так как может исполняться по инициативе сервера WebCRM.<br />
В примере приведен запрос для формирования ответа с перечнем номеров в простом виде.<br />
<br />
<pre><br />
[<br />
"getpbxnumbers",<br />
{<br />
"qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",<br />
"mode": "simple"<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* mode: simple, full (простой вид, полный вид).<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getpbxnumbersresult'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает список всех внутренних номеров системы. <br />
В примере приведен ответ на запрос с перечнем номеров в простом виде.<br />
<br />
<pre><br />
[<br />
"getpbxnumbersresult",<br />
{<br />
"qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"mode": "simple",<br />
"numbers": [<br />
"401",<br />
"402",<br />
"403",<br />
"404",<br />
"405",<br />
"471",<br />
"472",<br />
"473"<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
В следующем примере приведен ответ на запрос с перечнем номеров в полном виде со всеми описаниями и состояниями.<br />
<br />
<pre><br />
[<br />
"getpbxnumbersresult",<br />
{<br />
"qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"mode": "full",<br />
"numbers": [<br />
{<br />
"id": "9079E514-FECF-4DFD-BF48-5EDE4241E3A1",<br />
"number": "472",<br />
"type": 0,<br />
"typestr": "intRule",<br />
"isgroup": false,<br />
"caption": "Петров",<br />
"state": 5,<br />
"statestr": "usFullbusy",<br />
"department": "Руководство"<br />
},<br />
{...},<br />
{...}<br />
]<br />
}<br />
]<br />
</pre><br />
<pre><br />
/* number:type - intRule(0), intFast(2), intIVR(3), intEmergency(4)<br />
/* number:state - usDisconnected(0), usReady(1), usLunch(2), usOff(3), usFullbusy(5),<br />
usReserved(6), usWOPhone(7), usError(100), usRinging(201)<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getallusernumbers'''</span><br />
<br />
Запрос из CRM в Oktell на возврат списка всех пользователей, содержащего актуальную информацию по их прямым, основным и групповым номерам.<br />
<br />
<pre><br />
[<br />
"getallusernumbers",<br />
{<br />
"qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"fillsubordinates": true<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* fillsubordinates: true|false. По умолчанию false.<br />
Включать ли информацию о подчиненных (добавляет каждому пользователю поле "sub":true|false)<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getallusernumbersresult'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает список всех пользователей, содержащий актуальную информацию по их прямым, основным и групповым номерам.<br />
<br />
<pre><br />
[<br />
"getallusernumbersresult",<br />
{<br />
"qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"users": [<br />
{"id": "47A8B3A0-0B33-41BB-9D08-1D9EB0D6F09B",<br />
"name: "Петров",<br />
"sub": true,<br />
"main: "14",<br />
"nums": "14, 625, 773"<br />
},<br />
{"id": "5A84368D-5ED3-434B-8EB2-41AE86E1566A",<br />
"name: "Иванов",<br />
"sub": false<br />
},<br />
...<br />
]<br />
}<br />
]<br />
</pre><br />
<pre><br />
/* users:main - основной прямой номер,<br />
/* users:nums - перечень номеров, в которых участвует пользователь или его текущая линия. <br />
Порядок следования от главного к групповым, затем от главного к групповым с участием линии.<br />
/* users:sub - является ли подчиненным пользователем (в соответствии с правами авторизованного пользователя)<br />
Включается только если в запросе установлен флаг fillsubordinates.<br />
</pre><br />
<br />
<br />
<br />
<br />
==== Управление задачами call-центра ====<br />
<br />
-------------------------------------------------------------------<br />
<div id="attachcalltotask"></div><br />
<span style="color:green"><<< '''cc_attachcalltotask'''</span><br />
<br />
Запрос из CRM в Oktell на привязку текущего звонка пользователя к задаче.<br />
Позволяет указать задачу ключом - идентификатор, название, код. <br />
При необходимости звонок может быть привязан к конкретному абоненту из таблицы абонентов, прикрепленной к задаче (по его числовому идентификатору). В противном случае в таблицу добавляется новая строчка, даже если набираемый номер уже присутствовал в ней. Подробнее о прикреплении звонка к задаче в разделе [[Голосовые задачи#ManualCall|«Call-центр. Голосовые задачи»]].<br />
<br />
<br />
<pre><br />
[<br />
"cc_attachcalltotask",<br />
{<br />
"qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"taskkey": "EDFE9A1F-E27E-4693-A427-A392C919F8B0",<br />
"idinlist": 183<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''cc_attachcalltotaskresult'''</span><br />
<br />
Ответ от Oktell в CRM. Возвращает результат привязки звонка к задаче, дополнительно сообщая номер абонента в списке. В случае неудачи содержит причину.<br />
<br />
<pre><br />
[<br />
"cc_attachcalltotaskresult",<br />
{<br />
"qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"result": 1,<br />
"idinlist": 183,<br />
"errormsg": ""<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<div id="settaskactive"></div><br />
<span style="color:green"><<< '''cc_settaskactive'''</span><br />
<br />
Запрос из CRM в Oktell на активацию/деактивацию задачи.<br />
Позволяет указать задачу ключом - идентификатор, название или код. Тип задачи - ''call'' (по умолчанию) или ''text''.<br />
Метод доступен с версии 2.8.130909.<br />
<br />
<br />
<pre><br />
[<br />
"cc_settaskactive",<br />
{<br />
"qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"tasktype": "call",<br />
"taskkey": "EDFE9A1F-E27E-4693-A427-A392C919F8B0",<br />
"active": true<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''cc_settaskactiveresult'''</span><br />
<br />
Ответ от Oktell в CRM. Возвращает результат активации/деактивации задачи.<br />
<br />
<pre><br />
[<br />
"cc_settaskactiveresult",<br />
{<br />
"qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"result": 1<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<div id="addoperatortotask"></div><br />
<span style="color:green"><<< '''cc_addoperatortotask'''</span><br />
<br />
Запрос из CRM в Oktell на добавление оператора к задаче.<br />
Операция доступна супервизорам задачи, а также самому оператору. Более глубокие фильтры необходимо организовывать на клиентской стороне.<br />
Позволяет указать задачу ключом - идентификатор, название или код. Позволяет указать оператора ключом - идентификатор, логин, имя.<br />
Метод доступен с версии 2.8.130909.<br />
<br />
<br />
<pre><br />
[<br />
"cc_addoperatortotask",<br />
{<br />
"qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"taskkey": "EDFE9A1F-E27E-4693-A427-A392C919F8B0",<br />
"operatorkey": "BD252256-08DE-4693-9A31-FC02B600E609"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''cc_addoperatortotaskresult'''</span><br />
<br />
Ответ от Oktell в CRM. Возвращает результат процедуры добавления оператора в задачу. Неудача возможна при невозможности обнаружить указанного оператора или указанную задачу, а также при отсутствии прав управления задачей.<br />
<br />
<pre><br />
[<br />
"cc_addoperatortotaskresult",<br />
{<br />
"qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"result": 1<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<div id="removeoperatorfromtask"></div><br />
<span style="color:green"><<< '''cc_removeoperatorfromtask'''</span><br />
<br />
Запрос из CRM в Oktell на удаление оператора из задачи.<br />
Операция доступна супервизорам задачи, а также самому оператору. Более глубокие фильтры необходимо организовывать на клиентской стороне.<br />
Позволяет указать задачу ключом - идентификатор, название или код. Позволяет указать оператора ключом - идентификатор, логин, имя.<br />
Метод доступен с версии 2.8.130909.<br />
<br />
<pre><br />
[<br />
"cc_removeoperatorfromtask",<br />
{<br />
"qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"taskkey": "EDFE9A1F-E27E-4693-A427-A392C919F8B0",<br />
"operatorkey": "BD252256-08DE-4693-9A31-FC02B600E609"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''cc_removeoperatorfromtaskresult'''</span><br />
<br />
Ответ от Oktell в CRM. Возвращает результат процедуры удаления оператора из задачи. Неудача возможна при невозможности обнаружить указанного оператора или указанную задачу, а также при отсутствии прав управления задачей.<br />
<br />
<pre><br />
[<br />
"cc_removeoperatorfromtaskresult",<br />
{<br />
"qid": "0423AABC-F20D-4A94-BF2B-94EEEAB1FE40",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"result": 1<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<br />
<br />
====Преобразования====<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getuserbyline'''</span><br />
<br />
Запрос из CRM в Oktell на возврат информации о связанном пользователе по ключу линии. Ключом линии традиционно является идентификатор или номер линии.<br />
<br />
<pre><br />
[<br />
"getuserbyline",<br />
{<br />
"qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"linekey": "17002"<br />
}<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getuserbylineresult'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает системный внутренний номер указанного в суб-параметре пользователя. <br />
<br />
<pre><br />
[<br />
"getuserbylineresult",<br />
{<br />
"qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"founduser": {<br />
"userid": "BE6A252A-D7E7-4D15-8D75-385A210DF997",<br />
"userlogin": "john",<br />
"username": "John Smith"<br />
}<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* founduser - информация о связанном с указанной линии пользователе - его идентификатор, логин, имя.<br />
Если линия указана неверно или к ней в данный момент не привязан пользователь - null.<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getlinebyuser'''</span><br />
<br />
Запрос из CRM в Oktell на возврат информации о связанной линии по ключу пользователя. Ключом пользователя традиционно является идентификатор, логин или имя.<br />
<br />
<pre><br />
[<br />
"getlinebyuser",<br />
{<br />
"qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"userkey": "ivanov"<br />
}<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getlinebyuserresult'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает системный внутренний номер указанного в суб-параметре пользователя.<br />
<br />
<pre><br />
[<br />
"getlinebyuserresult",<br />
{<br />
"qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"foundline": {<br />
"lineid": "FA86E75A-6383-42B7-873C-37A0654B18EF",<br />
"linenum": "17002"<br />
}<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* foundline - информация о связанной с указанным авторизованным пользователем линии - ее идентификатор, номер.<br />
Если пользователь указана неверно, или не авторизован - null.<br />
''Пользователь по умолчанию'' считается авторизованным.<br />
</pre><br />
<br />
<br />
<br />
<br />
====Служебные методы====<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getversion'''</span><br />
<br />
Запрос из CRM в Oktell на возврат информации о версии сервера Oktell.<br />
<br />
<pre><br />
[<br />
"getversion",<br />
{<br />
"qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"showalloweddbstoredprocs": 1<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* showalloweddbstoredprocs: true|false. Отображать ли список доступных хранимых процедур БД.<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getversionresult'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает системный внутренний номер указанного в суб-параметре пользователя.<br />
<br />
<pre><br />
[<br />
"getversionresult",<br />
{<br />
"qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"version": {<br />
"text": "Версия программы: 2.7.110808(4237.32979). Версия БД: 110713.",<br />
"dated": "110808",<br />
"build": "2.7.4237.32979",<br />
"datedhal": "110808",<br />
"buildhal": "2.15.3.2871",<br />
"webserverport": 80,<br />
"webservertls": false<br />
}<br />
"alloweddbstoredprocs": {<br />
"w_favoritegetbyuser": 1,<br />
"w_favoritesavebyuser": 1,<br />
"w_favoritedeletebyuser": 1,<br />
"w_clientsget": 1,<br />
"w_clientgroupsget": 1<br />
}<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* version - информация о версии сервера логики и HAL.<br />
//* version:webserverport - номер порта [[Серверный_HTTP_интерфейс|HTTP веб-сервера oktell]].<br />
//* version:webservertls - true|false - защищенный ли канал на указанном порте (http или https).<br />
//* alloweddbstoredprocs - перечень хранимых процедур, доступных для исполнения в БД Oktell <br />
посредством метода <span style="color:green">''execpredefineddbstoredproc''</span> <br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''gettemphttppass'''</span><br />
<br />
Запрос из CRM в Oktell. Генерирует и возвращает временный пароль на доступ к [[Веб-интерфейс|HTTP веб-серверу]] без авторизации.<br />
Временный пароль живет не более 10 секунд до первого обращения к HTTP с указанием этого пароля среди параметров запроса.<br />
Пароль привязывается к IP адресу дополнительно. <br />
После этого вне зависимости от способа авторизации, установленного для HTTP веб-сервера Oktell, однократный вызов любого [[Серверный_HTTP_интерфейс|метода серверного веб-интерфейса]] возможен без авторизации с указанием среди параметров дополнительного служебного параметра ''temppass=A'', где A - выданный временный пароль.<br />
<br />
Доступно для [[#Arch2|схемы интеграции 2]] и [[#Arch3|схемы интеграции 3]] в рамках индивидуальных подключений.<br />
<br />
<pre><br />
[<br />
"gettemphttppass",<br />
{<br />
"qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"responsetowebsock": true<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''gettemphttppassresult'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает системный внутренний номер указанного в суб-параметре пользователя.<br />
<br />
<pre><br />
[<br />
"gettemphttppassresult",<br />
{<br />
"qid": "21D38282-DFB7-4DEF-8C76-BFB338A80947",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"password": "6f3200ac"<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* password - временный пароль для подстановки в качестве значения параметра temppass <br />
при осуществлении GET или POST запроса к HTTP веб-серверу Oktell.<br />
Следует иметь в виду, что даже в случае POST запроса со специальным контентом<br />
указание параметра-пароля возможно в теле самой страницы (по аналогии с GET запросом).<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''triggercustomevent'''</span><br />
<br />
Запрос из CRM в Oktell на генерацию пользовательского произвольного события всем или только указанным пользователям.<br />
Может быть использовано в [[#Arch2|схеме интеграции 2]] и [[#Arch3|схеме интеграции 3]] в рамках индивидуальных подключений.<br />
Производит массовую рассылку указанного события. Точно также как и все остальные события требует подписки.<br />
<br />
<pre><br />
[<br />
"triggercustomevent",<br />
{<br />
"qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"eventname": "newClientCategoryAdded",<br />
"eventparam": "строка"<br />
"sendback": 1, // отправлять мне самому или нет<br />
}<br />
]<br />
</pre><br />
<pre><br />
[<br />
"triggercustomevent",<br />
{<br />
"qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"eventname": "newClientCategoryAdded",<br />
"eventparam": "строка",<br />
"recipients": [<br />
"Петров",<br />
"Сидоров"<br />
]<br />
}<br />
]<br />
</pre><br />
<pre><br />
[<br />
"triggercustomevent",<br />
{<br />
"qid": "C13CE714-A502-4699-BE1A-9C4DB28BB70A",<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"eventname": "newClientCategoryAdded",<br />
"eventparam": { "param1": "123", "p2": { "asdfasd": "sdfgsdf" } , ... },<br />
"recipients": [<br />
"C45D4911-BDE2-40C0-8D11-A4AFF1F160CC",<br />
"BA2C4BAC-7A7C-4959-B1A7-2F63C248DF3D"<br />
]<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* recipients - список идентификаторов/логинов получателей сообщений. <br />
Может не быть указанным, тогда отправка производится всем.<br />
//* sendback - генерировать ли событие для самого отправителя. Имеет смысл, поскольку<br />
в случае использования нескольких вкладок в браузере, каждое из подключений<br />
получит событие независимо.<br />
//* eventname - название пользовательского события.<br />
//* eventparam - параметр пользовательского события. Переходит в сгенерированное сообщение без изменений.<br />
Может содержать строку, набор, массив, словарь - все что угодно.<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''gettemphttppassresult'''</span><br />
<br />
Событие из Oktell пользователям CRM. Отправляется всем пользователям, указанным при запросе на рассылку события.<br />
<br />
<pre><br />
[<br />
"customevent",<br />
{<br />
"qid":"aaa3f5c9-bcd5-4bf9-aef9-0b4ee735170d",<br />
"userlogin": "Петров",<br />
"userid": "C45D4911-BDE2-40C0-8D11-A4AFF1F160CC",<br />
"eventname": "newClientCategoryAdded",<br />
"triggereduserid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"triggereduserlogin": "Иванов",<br />
"eventparam": { "param1": "123", "p2": { "asdfasd": "sdfgsdf" } , ... }<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* eventname - название пользовательского события.<br />
//* eventparam - параметр пользовательского события в неизменном виде, как в запросе.<br />
//* triggereduserid - идентификатор пользователя-рассыльщика.<br />
//* triggereduserlogin - логин пользователя-рассыльщика.<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span id="execpredefineddbstoredproc" style="color:green"><<< '''execpredefineddbstoredproc'''</span><br />
<br />
Запрос из CRM в Oktell. Исполняет указанную хранимую процедуру в БД Oktell и возвращает данные всех сформированных в ходе выполнения наборов.<br />
Доступные для исполнения процедуры содержатся в конфигурационном файле ''websocket.config'', а также могут быть возвращены методом ''getversion''.<br />
<br />
Существует специальный параметр @authorizeduserid, значение которого перед исполнением заменяется на идентификатор авторизованного пользователя. Такие процедуры нельзя исполнять от имени CRM.<br />
<br />
Не требует указания пользователя.<br />
<br />
<pre><br />
[<br />
"execpredefineddbstoredproc",<br />
{<br />
"qid": "7198D943-7BA9-443D-B283-55812BC82AFB",<br />
"procedure": "T_GetFavorites",<br />
"inputparams": {<br />
"param1": "XXX", <br />
"param2": 10<br />
}<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* procedure - название процедуры из разрешенного списка. <br />
//* inputparams - значения параметров процедуры. Имена параметров могут содержать в начале символ ''@'',<br />
В случае его отсутствия он добавляется автоматически.<br />
Если в списке присутствует параметр ''authorizeduserid'', его значение будет принудительно заменено<br />
на идентификатор текущего авторизованного пользователя в Oktell. Этим можно пользоваться для<br />
создания в БД процедур, учитывающих инициатора исполнения.<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''execpredefineddbstoredprocresult'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает результат исполнения хранимой процедуры в БД Oktell. Перечисляет все выходные наборы данных.<br />
<br />
<pre><br />
[<br />
"execpredefineddbstoredprocresult",<br />
{<br />
"qid": "7198D943-7BA9-443D-B283-55812BC82AFB",<br />
"result": 1,<br />
"errorcode": 0,<br />
"errorstr": "",<br />
"dataset": [<br />
[<br />
["column1", "column2", "column3"],<br />
["row1val1", "row1val2", "row1val3" ],<br />
["row2val1", "row2val2", "row2val3" ],<br />
...<br />
],<br />
[<br />
["column1", "column2"]<br />
],<br />
...<br />
]<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* result - 1 или 0. Успешно или неудачно проведена операция.<br />
//* errorcode - код ошибки. 50044 - служебное значение, в случае запрета или исключения при исполнении, <br />
не связанного с ошибкой SQL<br />
//* errorstr - описание ошибки. <br />
//* dataset - наборы данных по порядку выдачи в ходе исполнения хранимой процедуры.<br />
Набор - это список строк, каждая из которых - список значений по ячейкам.<br />
Первая строка в наборе - всегда содержит названия столбцов набора.<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span id="execpluginmethod" style="color:green"><<< '''execpluginmethod'''</span><br />
<br />
Запрос из CRM в Oktell. Исполняет указанный метод в [[Встраиваемые_plugin-модули|серверном плагине]], передавая в него параметры и возвращая результат с выходными параметрами.<br />
<br />
Не требует обязательного указания пользователя. Однако если вызов осуществляется в рамках подключения из браузера к серверу Oktell, то пользователь проставляется автоматически перед исполнением метода.<br />
<br />
<pre><br />
[<br />
"execpluginmethod",<br />
{<br />
"qid": "7198D943-7BA9-443D-B283-55812BC82AFB",<br />
"pluginid": "44710EF2-9C5E-489E-B6CC-FD4ED34C13FE",<br />
"formid": "44710EF2-9C5E-489E-B6CC-FD4ED34C13FE",<br />
"inputparams": {<br />
"param1": "...",<br />
"param2": "...",<br />
...<br />
}<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* pluginid - идентификатор плагина. <br />
//* formid - идентификатор одной из заявленных форм (методов) плагина.<br />
//* inputparams - список значений для заявленных плагином входных параметров выбранной формы (метода). <br />
В качестве значений параметров могут быть json структуры <br />
(октелл осуществляет преобразование в строку самостоятельно).<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''execpluginmethodresult'''</span><br />
<br />
Ответ из Oktell в CRM. Возвращает результат исполнения метода в серверном плагине.<br />
<br />
<pre><br />
[<br />
"execpluginmethodresult",<br />
{<br />
"qid": "7198D943-7BA9-443D-B283-55812BC82AFB",<br />
"result": 1,<br />
"error": 0,<br />
"errormsg": "",<br />
"outputparams": {<br />
"outputdata": "...",<br />
...<br />
}<br />
}<br />
]<br />
</pre><br />
<pre><br />
//* outputparams - список значений заявленных плагином выходных переменных выбранной формы (метода).<br />
В качестве значений параметров могут быть json структуры.<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''ping'''</span><br />
<br />
Запрос из CRM в Oktell. Периодически пробивает канал связи, напоминая о жизнеспособности подключения. Требуется для [[#Arch2|Схемы интеграции 2]] и [[#Arch3|Схемы интеграции 3]] в рамках индивидуальных подключений. Для [[#Arch1|Схемы интеграции 1]] необязательно.<br />
<br />
Не требует указания пользователя.<br />
<br />
<pre><br />
[<br />
"ping",<br />
{<br />
"qid": "DDA55585-F598-4F8C-B605-E6E186E6D859"<br />
}<br />
]<br />
</pre> <br />
<br />
<br />
<span style="color:green">>>> '''pong'''</span><br />
<br />
Ответ от Oktell в CRM на запрос ''ping''.<br />
<br />
<pre><br />
[<br />
"pong",<br />
{<br />
"qid": "DDA55585-F598-4F8C-B605-E6E186E6D859"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''subscribeevent'''</span>, <br />
<span style="color:green">'''unsubscribeevent'''</span><br />
<br />
Запрос из CRM в Oktell. Производит соответственно подписку и отписку на указанные события.<br />
<br />
Доступно и требуется только для [[#Arch2|схемы интеграции 2]] и [[#Arch3|схемы интеграции 3]] в рамках индивидуальных подключений.<br />
<br />
В [[#Arch1|схеме интеграции 1]] события поступают в полном объеме, часть из них объединяются и отправляются на сервер WebCRM без привязки к пользователю; ожидается, что сервер WebCRM самостоятельно размножит их. К таким событиям относятся, например ''pbxnumberstatechanged'', ''conflistchanged'' и им подобные. Остальные же направляются с привязкой к пользователю и только в случае, когда пользователь авторизован из-под CRM.<br />
<br />
<pre><br />
[<br />
"subscribeevent",<br />
{<br />
"qid": "DDA55585-F598-4F8C-B605-E6E186E6D859"<br />
"eventmethod": "userstatechanged", <br />
}<br />
]<br />
</pre> <br />
<pre><br />
[<br />
"subscribeevent",<br />
{<br />
"qid": "DDA55585-F598-4F8C-B605-E6E186E6D859"<br />
"eventmethod": [<br />
"userstatechanged",<br />
"pbxnumberstatechanged"<br />
]<br />
}<br />
]<br />
</pre><br />
<pre><br />
[<br />
"unsubscribeevent",<br />
{<br />
"qid": "DDA55585-F598-4F8C-B605-E6E186E6D859"<br />
"eventmethod": "userstatechanged", <br />
}<br />
]<br />
</pre> <br />
<br />
События, требующие подписки:<br />
:* pbxnumberstatechanged<br />
:* pbxnumberlistmodified<br />
:* shownotifymessage<br />
:* voicemailreceived<br />
:* usertextmessagereceived<br />
:* usertextmessageviewed<br />
:* chatcreated<br />
:* chatnamechanged<br />
:* chatmemberadded<br />
:* chatmemberremoved<br />
:* chatmessage<br />
:* chatmessageviewed<br />
:* chat (совокупность всех методов ''chat*'')<br />
:* userstatechanged<br />
:* linestatechanged<br />
:* chainstatechanged<br />
:* flashstatechanged <br />
:* phoneevent_acmcallstarted<br />
:* phoneevent_acmcallstopped<br />
:* phoneevent_ringstarted<br />
:* phoneevent_ringstopped<br />
:* phoneevent_ivrstarted<br />
:* phoneevent_ivrstopped<br />
:* phoneevent_commstarted<br />
:* phoneevent_commstopped<br />
:* phoneevent_faxstarted<br />
:* phoneevent_faxstopped<br />
:* phoneevent_faxreceived<br />
:* phoneevent (совокупность всех методов ''phoneevent_*'')<br />
:* conferenceevent<br />
:* conflistchanged<br />
:* confparamschanged<br />
:* confcompositionchanged<br />
:* confcompetitorstatechanged<br />
:* confentrancedenied<br />
:* confentrancepermitted<br />
:* confentrancerequest<br />
:* confnotifyinvite<br />
:* confpossiblecompetitorstatechanged<br />
:* conference (совокупность всех методов ''conf*'')<br />
:* dynamic (совокупность методов executemethod, cancelmethod, showform, closeform)<br />
:* dynamicwaitabort (совокупность методов executemethodwaitaborted, showformwaitaborted)<br />
:* dlgcard_showreserve<br />
:* dlgcard_showconfirm<br />
:* dlgcard_showformstop<br />
:* dlgcard_showformdialog<br />
:* dlgcard_closeall<br />
:* dlgcard_closereserve<br />
:* dlgcard_closeformreturnvalues<br />
:* dlgcard_closeformreturncomment<br />
:* dlgcard (совокупность методов dlgcard_*)<br />
:* customevent<br />
<br />
<br />
<span style="color:green">>>> '''subscribeeventresult'''</span>, <br />
<span style="color:green"> '''unsubscribeeventresult'''</span><br />
<br />
Ответ от Oktell в CRM на запросы ''subscribeeventresult'' и ''unsubscribeeventresult'' соответственно.<br />
<br />
<pre><br />
[<br />
"subscribeeventresult",<br />
{<br />
"qid": "DDA55585-F598-4F8C-B605-E6E186E6D859"<br />
"result": 1<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''wp_setuserstate'''</span><br />
<br />
Запрос на установку состояния указанному пользователю. Исполняется от имени сервера, даже если пользователь подключен с помощью другого подключения или из толстого клиента. Ответ не возвращается, в случае удачи отправляется событие ''userstatechanged''. Пользователь задается с помощью одного из ключей (wp - рабочее место, line - линия, user - пользователь).<br />
<br />
<pre><br />
[<br />
"wp_setuserstate",<br />
{<br />
"qid": "2A45010A-8EEA-4876-90CB-F062459D4BE2",<br />
"wp": "...",<br />
"line": "...",<br />
"user": "...",<br />
"userstateid": 2,<br />
"onredirect": false,<br />
"lunchreasonid": 120,<br />
"lunchreasonmsg": ""<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''wp_getuserstate'''</span><br />
<br />
Запрос от сервера CRM на возврат состояния указанного пользователя. Исполняется от имени сервера, даже если пользователь подключен с помощью другого подключения или из толстого клиента. Пользователь задается с помощью одного из ключей (wp - рабочее место, line - линия, user - пользователь).<br />
<br />
<pre><br />
[<br />
"wp_getuserstate",<br />
{<br />
"qid": "2A45010A-8EEA-4876-90CB-F062459D4BE2",<br />
"wp": "...",<br />
"line": "...",<br />
"user": "..."<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''wp_getuserstateresult'''</span><br />
<br />
Ответ на запрос ''wp_getuserstateresult''.<br />
<br />
<pre><br />
[<br />
"wp_getuserstateresult",<br />
{<br />
"qid": "2A45010A-8EEA-4876-90CB-F062459D4BE2",<br />
"wp": "...",<br />
"line": "...",<br />
"user": "...",<br />
"found": true,<br />
"userid": "BDB8519F-AE77-4E33-81DB-41EE8E7D4E33",<br />
"stateid": 5,<br />
"statestr": "usFullBusy",<br />
"onredirect": false,<br />
"onlunch": true,<br />
"oncc": true,<br />
"onccmanual": false<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''getalluserstates'''</span><br />
<br />
Запрос от сервера CRM на получение состояний всех пользователей в системе вне зависимости от того, где они авторизованы и авторизованы ли вообще.<br />
<br />
<pre><br />
[<br />
"getalluserstates",<br />
{<br />
"qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''getalluserstatesresult'''</span><br />
<br />
Ответ на запрос ''getalluserstates''.<br />
<br />
<pre><br />
[<br />
"getalluserstatesresult",<br />
{<br />
"qid": "F19E223C-3EF3-4002-B1D6-B756DF8E978F",<br />
"users":[<br />
{<br />
"userlogin": "Иванов",<br />
"userid": "3357F4D2-B37C-4809-9A1A-E4D64808DE1B",<br />
"userstate": 5,<br />
"userstateid": 5,<br />
"userstatestr": "usFullbusy",<br />
"onredirect": true,<br />
"onlunch": false,<br />
"oncallcenter": false,<br />
"onccmanual": false<br />
},<br />
...<br />
]<br />
}<br />
]<br />
</pre><br />
<br />
<br />
-------------------------------------------------------------------<br />
<span style="color:green"><<< '''closecallbychain'''</span><br />
<br />
Запрос от сервера CRM на завершение коммутаций, принадлежащих указанной сессии (цепочке коммутаций). Исполняется от имени сервера, даже если пользователь подключен с помощью другого подключения или из толстого клиента<br />
<br />
<pre><br />
[<br />
"closecallbychain",<br />
{<br />
"qid": "2A45010A-8EEA-4876-90CB-F062459D4BE2",<br />
"idchain": "A7623B51-41F5-42E6-A2AE-1063C52D010A"<br />
}<br />
]<br />
</pre><br />
<br />
<br />
<span style="color:green">>>> '''closecallbychainresult'''</span><br />
<br />
Ответ на запрос ''closecallbychain''.<br />
<br />
<pre><br />
[<br />
"closecallbychainresult",<br />
{<br />
"qid": "2A45010A-8EEA-4876-90CB-F062459D4BE2",<br />
"found": true<br />
}<br />
]<br />
</pre><br />
<br />
====Прочие====<br />
<br />
Существует также набор методов и событий для рабочего места оператора и отображения диалоговых форм. <br />
Их реализация осуществлена в web-клиенте Oktell и нетривиальна, поскольку требует от клиентского модуля четкого исполнения требований по логическому взаимодействию с менеджером задач сервера Oktell. В частности именно на клиентскую часть возлагается работа по решению вопроса о множественном отображении диалоговой формы и о предоставлении серверу данных по ее заполнению, кэширование метаданных диалоговых форм, подтверждения получения и исполнения запросов и т.д.<br />
<br />
Запросы, команды и события от CRM к Oktell:<br />
* cc_getcallstates (ответ cc_getcallstatesresult)<br />
* cc_getuserresults (ответ cc_getuserresultsresult)<br />
* cc_getlunchtypes (ответ cc_getlunchtypesresult)<br />
* dlgcard_setsupported (ответ dlgcard_setsupportedresult)<br />
* dlgcard_confirmgot<br />
* dlgcard_confirmresult<br />
* dlgcard_showformdone<br />
* dlgcard_getmetadata (ответ dlgcard_getmetadataresult)<br />
* dlgcard_getcachedvalues (ответ dlgcard_getcachedvaluesresult)<br />
* dlgcard_setvaluesonclose<br />
* dlgcard_setcontrolvalue<br />
* dlgcard_setresultonnext<br />
* dlgcard_setresultonstop<br />
* dlgcard_setstopformresult<br />
<br />
События из Oktell в CRM:<br />
* dlgcard_showreserve<br />
* dlgcard_showconfirm<br />
* dlgcard_showformstop<br />
* dlgcard_showformdialog<br />
* dlgcard_closeall<br />
* dlgcard_closereserve<br />
* dlgcard_closeformreturnvalues<br />
* dlgcard_closeformreturncomment</div>Peter%D0%A1%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BD%D0%BE%D0%B5_%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BE%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B5Сервисное взаимодействие2014-06-30T11:37:30Z<p>Peter: </p>
<hr />
<div>{|cellpadding="10" cellspacing="0" border="0"<br />
| [[Встраиваемые_plugin-модули|Наверх]]<br />
| [[Описание базовых элементов интерфейса|Описание базовых элементов интерфейса<<<]]<br />
| [[Сервисное взаимодействие]]<br />
| [[Рекомендации разработчику|>>>Рекомендации разработчику]]<br />
|-<br />
|}<br />
<br />
__TOC__<br />
<br />
<br />
Методы и события данного раздела служат для осуществления плотного взаимодействия plugin-программы и клиентского приложения Oktell. XML-содержимое описывает не только параметры, но и само действие (действия в общем случае). Не изменяя интерфейса подключения plugin-программ при помощи этих методов будут расширяться возможности взаимодействия, добавляться новые сервисы в клиентское приложение Oktell для использования в plugin-программах.<br />
<br />
==Событие OnQuery==<br />
<br />
Общее описание метода приведено в статье «[[Описание_базовых_элементов_интерфейса#Сервисное взаимодействие|Базовые элементы интерфейса. OnQuery]]». В текущем разделе приводится формат параметров при обмене сообщениями в контексте метода.<br />
<br />
<br />
===Параметр (запрос от plugin-программы к приложению Oktell)===<br />
<br />
Все запросы определяются передаваемым в метод параметром. Ответ может отсутствовать, если выполняется команда, не предусматривающая возвращаемого значения, однако параметр должен присутствовать всегда.<br />
<br />
Для простоты и однотипности организации кода приложение Oktell всегда возвращает ответ (в простейшем случае - единственное свойство <span style="color:green">resultcode</span>).<br />
<br />
В общем виде запрос состоит из нескольких независимых подзапросов, исполняемых поочередно. Каждый запрос в теле XML-структуры установленного образца имеет вид элемента property_set первого уровня (вложенного в основную коллекцию). Тип запроса определяется строковым кодом (значением атрибута <span style="color:green">name</span>) элемента <span style="color:green">property_set</span>. Все необходимые для исполнения запроса параметры составляют свойства элемента. В отдельных случаях элемент может иметь сложную структуру, содержать коллекцию вложенных элементов.<br />
<br />
<u>Структура параметра-запроса:</u><br />
<br />
<?xml version="1.0" encoding="utf-16"?><br />
<oktellxmlmapper version="80710"><br />
<data name="query" count="..."><br />
<property_set name="..." id="..."><br />
...<br />
</property_set><br />
<span style="color:blue">...........................................</span><br />
<span style="color:blue">...........................................</span><br />
<span style="color:blue">...........................................</span><br />
<property_set name="..." id="..."><br />
<span style="color:blue">...</span><br />
</property_set> <br />
</data><br />
</oktellxmlmapper><br />
<br />
<br />
В частном наиболее употребимом случае запрос состоит из одной команды (одного блока <span style="color:green">property_set</span>). Соответствующий ему ответ также состоит из одного блока, куда в качестве атрибутов главного тэга копируются атрибуты тэга запроса. Атрибут id не является обязательным и в приложении Oktell не анализируется.<br />
<br />
<br />
===Возвращаемое значение (ответ приложения Oktell на запрос plugin-программы)===<br />
<br />
<br />
<u>Структура ответа:</u><br />
<br />
<?xml version="1.0" encoding="utf-16"?><br />
<oktellxmlmapper version="80710"><br />
<data name="queryresult" count="..."><br />
<property_set name="..." id="..."><br />
<property_simple key="resultcode" value="..." name="..." /><br />
<property_cdata key="resultdescription"><![CDATA[...]]></property_cdata><br />
...<br />
</property_set><br />
<span style="color:blue">...........................................</span><br />
<span style="color:blue">...........................................</span><br />
<span style="color:blue">...........................................</span><br />
<property_set name="..." id="..."><br />
<property_simple key="resultcode" value="..." name="..." /><br />
<property_cdata key="resultdescription"><![CDATA[...]]></property_cdata><br />
<span style="color:blue">...</span><br />
</property_set> <br />
</data><br />
</oktellxmlmapper><br />
<br />
<br />
Каждый элемент <span style="color:green">property_set</span> в базовой коллекции соответствует элементу в запросе. Может быть выполнена часть запросов, а некоторые (например из-за содержащихся в параметрах запроса ошибок) будут иметь неудачный код возврата.<br />
<br />
В частном наиболее употребимом случае запрос состоит из одной команды (одного блока <span style="color:green">property_set</span>). Соответствующий ему ответ также состоит из одного блока.<br />
<br />
Существует единственный случай, когда ответ не имеет сопоставления с запросом - если строка XML имеет некорректный вид или нестандартный для интерфейса формат. В этом случае ответ будет возвращен в виде:<br />
<br />
<?xml version="1.0" encoding="utf-16"?><br />
<oktellxmlmapper version="80710"><br />
<data name="queryresult" count="1"><br />
<property_set name="commonresult"><br />
<property_simple key="resultcode" value="105" name="ErrorInputXml" /><br />
<property_cdata key="resultdescription"><![CDATA[Неверный формат XML-запроса]]></property_cdata> <br />
</property_set><br />
</data><br />
</oktellxmlmapper><br />
<br />
<br />
Возможные коды результатов (могут пополняться вместе с функционалом сервисного взаимодействия) представлены перечислением:<br />
<br />
<span style="color:blue">private enum</span> EQueryResult<br />
{<br />
Success = 100, <span style="color:darkviolet">//Запрос успешно выполнен </span><br />
Exception = 101, <span style="color:darkviolet">//При выполнении запроса возникло исключение (текст в блоке resultdescription)</span> <br />
UnknownCommand = 102, <span style="color:darkviolet">//Неизвестный тип запроса </span><br />
IncorrectParameter = 103, <span style="color:darkviolet">//Не задан или некорректно задан необходимый параметр </span><br />
Error = 104, <span style="color:darkviolet">//Общая ошибка </span><br />
ErrorInputXml = 105, <span style="color:darkviolet">//Ошибка при разборе XML-содержимого запроса </span><br />
}<br />
<br />
<br />
===Допустимые типы запросов===<br />
<br />
:*[[Сервисное взаимодействие#db|db]]<br />
:*[[Сервисное взаимодействие#dbdataset|dbdataset]]<br />
:*[[Сервисное взаимодействие#dbarbitrarydataset|dbarbitrarydataset]]<br />
:*[[Сервисное взаимодействие#dbtransaction|dbtransaction]]<br />
:*[[Сервисное взаимодействие#callnumber|callnumber]]<br />
:*[[Сервисное взаимодействие#switchnumber|switchnumber]]<br />
:*[[Сервисное взаимодействие#callabort|callabort]]<br />
:*[[Сервисное взаимодействие#log|log]]<br />
:*[[Сервисное взаимодействие#notify|notify]]<br />
:*[[Сервисное взаимодействие#tabs|tabs]]<br />
:*[[Сервисное взаимодействие#tabindex|tabindex]]<br />
:*[[Сервисное взаимодействие#headertext|headertext]]<br />
:*[[Сервисное взаимодействие#headercolor|headercolor]]<br />
:*[[Сервисное взаимодействие#faxsend|faxsend]]<br />
:*[[Сервисное взаимодействие#faxabort|faxabort]]<br />
:*[[Сервисное взаимодействие#downloadrecordbyid|downloadrecordbyid]]<br />
:*[[Сервисное взаимодействие#downloadrecordsbychain|downloadrecordsbychain]]<br />
:*[[Сервисное взаимодействие#uploadfiletoserver|uploadfiletoserver]]<br />
:*[[Сервисное взаимодействие#downloadfilefromserver|downloadfilefromserver]]<br />
:*[[Сервисное взаимодействие#deletefilefromserver|deletefilefromserver]]<br />
:*[[Сервисное взаимодействие#showdirectoryonserver|showdirectoryonserver]]<br />
:*[[Сервисное взаимодействие#sethandleevent|sethandleevent]]<br />
:*[[Сервисное взаимодействие#svcscriptstart|svcscriptstart]]<br />
:*[[Сервисное взаимодействие#headsetcommand|headsetcommand]]<br />
:*[[Сервисное взаимодействие#headsetcheckstate|headsetcheckstate]]<br />
:*[[Сервисное взаимодействие#getallusersfullinfo|getallusersfullinfo]]<br />
:*[[Сервисное взаимодействие#getspecifieduserfullinfo|getspecifieduserfullinfo]]<br />
:*[[Сервисное взаимодействие#getkeyid|getkeyid]]<br />
:*[[Сервисное взаимодействие#getqueueitems|getqueueitems]]<br />
:*[[Сервисное взаимодействие#interaction|interaction]]<br />
<br />
<br />
*<h4>db</h4><br />
<br />
Осуществляет запрос к БД средствами Oktell. <br />
<br />
В теле элемента <span style="color:green">property_set</span> должно быть указано свойство <span style="color:green">sqltext</span>. Текст запроса должен иметь полностью сформированный вид и будет передан без дополнительных параметров на сервер, а затем в БД. Запрос должен представлять из себя один batch-блок, и может иметь любую сложность (содержать переменные, курсоры, вести обработку в цикле и т.д.). При необходимости текст запроса может быть преобразован в Base64 (предварительное преобразование в Unicode) и передан через поле <span style="color:green">sqltextb64</span>. Присутствие одного из них обязательно.<br />
<br />
Возвращаемое значение (одиночный набор) будет преобразовано в XML-структуру и возвращено в plugin-программу в виде ответа (в соответствующем разделе полного запроса).<br />
<br />
При корректном парсинге параметров и отправке запроса на сервер в любом случае в свойство <span style="color:green">resultcode</span> будет занесен успешный результат. Однако свойство <span style="color:green">sqlresultcode</span> будет содержать код результата исполнения запроса в БД, который может отличаться от успешного.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="db" id="..."><br />
<property_cdata key="sqltext"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
<u>Структура ответа в случае успешного выполнения:</u><br />
<br />
<property_set name="db" id="..."><br />
<span style="color:green"><nowiki><!--##### Общие свойства #####--></nowiki></span><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_simple key="sqlresultcode" value="0" name="qrSuccess" /><br />
<property_cdata key="sqlresultdescription"><![CDATA[qrSuccess]]></property_cdata><br />
<span style="color:green"><nowiki><!--##### Возвращаемый набор #####--></nowiki></span><br />
<property_collection name="table" count="..."><br />
<span style="color:green"><nowiki><!--##### Описание столбцов #####--></nowiki></span><br />
<property_set name="tableheader"><br />
<property_collection name="columns" count="..."><br />
<span style="color:green"><nowiki><!--##### Один столбец: индекс, название, тип и полное название типа #####--></nowiki></span><br />
<property_set name="columninfo" id="0"><br />
<property_simple key="index" value="0" /><br />
<property_simple key="name" value="Id" /><br />
<property_simple key="typename" value="Guid" /><br />
<property_cdata key="typefullname"><![CDATA[System.Guid]]></property_cdata><br />
</property_set><br />
<property_set name="columninfo" id="2"><br />
<property_simple key="index" value="1" /><br />
<property_simple key="name" value="Name" /><br />
<property_simple key="typename" value="String" /><br />
<property_cdata key="typefullname"><![CDATA[System.String]]></property_cdata><br />
</property_set><br />
<span style="color:blue">...............</span><br />
</property_collection><br />
</property_set><br />
<span style="color:green"><nowiki><!--##### Раздел с данными #####--></nowiki></span><br />
<property_set name="tabledata"><br />
<property_collection name="rows" count="2"><br />
<span style="color:green"><nowiki><!--##### Одна строка: индекс строки, коллекция ячеек (значений) #####--></nowiki></span><br />
<property_set name="row" id="0"><br />
<span style="color:green"><nowiki><!--##### Все ячейки #####--></nowiki></span><br />
<property_collection name="cells" count="2"><br />
<span style="color:green"><nowiki><!--##### Одна ячейка: индекс столбца, значение #####--></nowiki></span><br />
<property_set name="cell" id="0"><br />
<property_simple key="cellvalue" value="17e640e1-1d55-4e45-a193-0469cbcd2dce" /><br />
</property_set><br />
<property_set name="cell" id="1"><br />
<property_cdata key="cellvalue"><![CDATA[Максим]]></property_cdata><br />
</property_set><br />
</property_collection><br />
</property_set><br />
<property_set name="row" id="1"><br />
<property_collection name="cells" count="2"><br />
<property_set name="cell" id="0"><br />
<property_simple key="cellvalue" value="309a147f-6248-4fbd-8b28-09b679c8297a" /><br />
</property_set><br />
<property_set name="cell" id="1"><br />
<property_simple key="cellvalue" value="z08" /><br />
</property_set><br />
</property_collection><br />
</property_set><br />
</property_collection><br />
</property_set><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>dbdataset </h4><br />
<br />
Осуществляет запрос к БД средствами Oktell. В отличие от метода [[Сервисное_взаимодействие#db|«db»]] структуру, получаемую на сервере, загружает в DataSet и формирует на ее базе стандартную XML строку, преобразованную в Base64. <br />
<br />
Для обратного преобразования необходимо полученную из поля CDATA строку подвергнуть обработке следующим кодом (C#):<br />
<br />
DataSet ds = <span style="color:blue">new</span> DataSet();<br />
MemoryStream ms = <span style="color:blue">new</span> MemoryStream ( Convert.FromBase64String ( dsxml ) );<br />
ds.ReadXml ( ms );<br />
<br />
В поле <span style="color:green">sqltext</span> передается текст запроса SQL. Текст запроса должен иметь полностью сформированный вид и будет передан без дополнительных параметров на сервер, а затем в БД. Запрос должен представлять из себя один batch-блок, и может иметь любую сложность (содержать переменные, курсоры, вести обработку в цикле и т.д.). При необходимости текст запроса может быть преобразован в Base64 (предварительное преобразование в Unicode) и передан через поле <span style="color:green">sqltextb64</span>. Присутствие одного из них обязательно.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="dbdataset" id="..."><br />
<property_cdata key="sqltext"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
<u>Структура ответа в случае успешного выполнения:</u><br />
<br />
<property_set name="db" id="..."><br />
<span style="color:green"><nowiki><!--##### Общие свойства #####--></nowiki></span><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_simple key="sqlresultcode" value="0" name="qrSuccess" /><br />
<property_cdata key="sqlresultdescription"><![CDATA[qrSuccess]]></property_cdata><br />
<span style="color:green"><nowiki><!--##### Возвращаемый набор #####--></nowiki></span><br />
<property_collection name="dataset" count="1"><br />
<span style="color:green"><nowiki><!--##### Описание столбцов #####--></nowiki></span><br />
<property_set name="datasetxmlb64"><br />
<property_cdata key="xmlb64"><![CDATA[.....Base64......]]></property_cdata><br />
</property_set><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>dbarbitrarydataset</h4><br />
<br />
Осуществляет запрос к БД средствами Oktell. В отличие от методов [[Сервисное_взаимодействие#db|«db»]] и [[Сервисное_взаимодействие#dbdataset|«dbdataset»]] позволяет подключаться к различным БД посредством ADO, OLE, ODBC, Oracle. Cтруктуру, получаемую на сервере, загружает в DataSet и формирует на ее базе XML строку, преобразованную в Base64. <br />
<br />
Для обратного преобразования необходимо полученную из поля CDATA строку подвергнуть обработке следующим кодом (C#):<br />
<br />
DataSet ds = <span style="color:blue">new</span> DataSet();<br />
MemoryStream ms = <span style="color:blue">new</span> MemoryStream ( Convert.FromBase64String ( dsxml ) );<br />
ds.ReadXml ( ms );<br />
<br />
<br />
Передаваемый параметр должен содержать указание направления (поле <span style="color:green">direction</span>) числовым значением из следующего набора:<br />
<br />
SQLServerSelf = 1 <span style="color:darkviolet">//Подключение к БД Oktell</span><br />
SQLServerOther = 2 <span style="color:darkviolet">//Подключение к сторонней базе MS SQL</span><br />
OLE = 3 <span style="color:darkviolet">//Подключение к OLE-драйверу</span><br />
Oracle = 4 <span style="color:darkviolet">//Подключение к Oracle-драйверу</span><br />
Odbc = 5 <span style="color:darkviolet">//Подключение к ODBC драйверу</span><br />
<br />
Если требуется подключение к собственной БД Oktell, поле direction можно не указывать.<br />
<br />
Для подключения к сторонним БД необходимо указание строки подключения к БД (поле <span style="color:green">connectionstring</span>). Если осуществляется подключение к собственной БД Oktell, строка подключения игнорируется. <br />
<br />
В поле <span style="color:green">sqltext</span> передается текст запроса SQL. Текст запроса должен иметь полностью сформированный вид и будет передан без дополнительных параметров на сервер, а затем в БД. Запрос должен представлять из себя один batch-блок, и может иметь любую сложность (содержать переменные, курсоры, вести обработку в цикле и т.д.). При необходимости текст запроса может быть преобразован в Base64 (предварительное преобразование в Unicode) и передан через поле <span style="color:green">sqltextb64</span>. Присутствие одного из них обязательно.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="dbarbitrarydataset" id="..."><br />
<property_cdata key="direction" value="3"/><br />
<property_cdata key="connectionstring"><![CDATA[Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Base; Extended Properties=dBase IV]]><br />
</property_cdata><br />
<property_cdata key="sqltext"><![CDATA[...]]></property_cdata><br />
<property_cdata key="sqltextb64"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
Если при выполнении запроса возникает ошибка или исключение, то конкретный код исключения возвращается в поле sqlresultcode, а коллекция dataset отсутствует. В случае успешного выполнения код возврата равен 0.<br />
<br />
Структура ответа в случае успешного выполнения:<br />
<br />
<property_set name="dbarbitrarydataset" id="..."><br />
<!--##### Общие свойства #####--><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_simple key="sqlresultcode" value="0" /><br />
<!--##### Возвращаемый набор #####--><br />
<property_collection name="dataset" count="1"><br />
<!--##### Описание столбцов #####--><br />
<property_set name="datasetxmlb64"><br />
<property_cdata key="xmlb64"><![CDATA[.....Base64......]]></property_cdata><br />
</property_set><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>dbtransaction</h4><br />
<br />
Осуществляет запрос к БД средствами Oktell. Работает в транзакции. Работа с помощью метода состоит из нескольких этапов: создание подключения и транзакции, поочередное выполнение одного или нескольких запросов с возвратом результата выполнения в виде DataSet, и применении или откате транзакции. Поле mode параметра определяет режим работы (этап): <br />
<br />
Сreate = 1 <span style="color:darkviolet">//Подключение к БД, создание транзакции</span><br />
Query = 2 <span style="color:darkviolet">//Выполнение запроса в существующей транзакции</span><br />
Commit = 3 <span style="color:darkviolet">//Подтверждение и применение изменений</span><br />
Rollback = 4 <span style="color:darkviolet">//Откат транзакции к прежнему состоянию</span><br />
<br />
<br />
Режим <span style="color:darkorange">Create</span> осуществляет подключение к БД и создает транзакцию. Подключение и транзакция сохраняются на сервере до момента выполнения метода '''OnQuery.dbtransaction''' в режиме '''Commit''' или '''Rollback'''. Транзакция автоматически откатывается и подключение закрывается в случае выхода пользователя из системы, но этого режима лучше избегать, так как активная транзакция может парализовать работу других служб. Передаваемый параметр должен содержать указание направления (поле <span style="color:green">direction</span>) числовым значением из следующего набора:<br />
<br />
SQLServerSelf = 1 <span style="color:darkviolet">//Подключение к БД Oktell</span><br />
SQLServerOther = 2 <span style="color:darkviolet">//Подключение к сторонней базе MS SQL</span><br />
OLE = 3 <span style="color:darkviolet">//Подключение к OLE-драйверу</span><br />
Oracle = 4 <span style="color:darkviolet">//Подключение к Oracle-драйверу</span><br />
Odbc = 5 <span style="color:darkviolet">//Подключение к ODBC драйверу</span><br />
<br />
<br />
Если требуется подключение к собственной БД Oktell, поле direction можно не указывать. Для подключения к сторонним БД необходимо указание строки подключения к БД (поле <span style="color:green">connectionstring</span>). Если осуществляется подключение к собственной БД Oktell, строка подключения игнорируется. Необходимо также определить поле checkcode, являющееся произвольным числовым значением, которое будет гарантировать доступ к транзакции только исполнителю. На каждом последующем режиме работы с транзакцией требуется указание того <span style="color:green">checkcode</span>, который был определен при создании подключения. В противном случае метод не будет выполнен и будет возвращен код соответствующей ошибки (50045). Для создания новой транзакции необходимо сначала дождаться окончания выполнения предыдущей, или закрыть ее принудительно (методами '''Commit''' или '''Rollback''' с совпадающим кодом checkcode). Если в момент создания уже существует активная транзакция, будет возвращен код ошибки 50047.<br />
<br />
Режим <span style="color:darkorange">Query</span> осуществляет запрос через ранее созданное подключение и активную транзакцию. Cтруктуру, получаемую на сервере, загружает в DataSet и формирует на ее базе XML строку, преобразованную в Base64. Для обратного преобразования необходимо полученную из поля CDATA строку подвергнуть обработке следующим кодом (C#):<br />
<br />
DataSet ds = <span style="color:blue">new</span> DataSet();<br />
MemoryStream ms = <span style="color:blue">new</span> MemoryStream ( Convert.FromBase64String ( dsxml ) );<br />
ds.ReadXml ( ms );<br />
<br />
<br />
В поле <span style="color:green">sqltext</span> передается текст запроса SQL. Текст запроса должен иметь полностью сформированный вид и будет передан без дополнительных параметров на сервер, а затем в БД. Запрос должен представлять из себя один batch-блок, и может иметь любую сложность (содержать переменные, курсоры, вести обработку в цикле и т.д.). При необходимости текст запроса может быть преобразован в Base64 (предварительное преобразование в Unicode) и передан через поле <span style="color:green">sqltextb64</span>. Присутствие одного из них обязательно. Также для выполнения запроса в транзакции требуется обязательное указание поля <span style="color:green">checkcode</span>, которое должно соответствовать значению, определенному при создании подключения и транзакции. В противном случае будет возвращаться код соответствующей ошибки (50045 в случае, если код не совпадает, 50046 в случае, если транзакция не существует).<br />
<br />
Режим <span style="color:darkorange">Commit</span> завершает транзакцию с применением изменений, а также закрывает подключение. После выполнения метода следующее обращение должно вновь создать подключение (возможно к другой БД). Для корректного выполнения метода требуется обязательное указание поля <span style="color:green">checkcode</span>, значение которого должно соответствовать значению, определенному при создании подключения и транзакции. В противном случае метод не будет выполнен и будет возвращен код соответствующей ошибки.<br />
<br />
Режим <span style="color:darkorange">Rollback</span> завершает транзакцию с откатом изменений, а также закрывает подключение. После выполнения метода следующее обращение должно вновь создать подключение (возможно к другой БД). Для корректного выполнения метода требуется обязательное указание поля <span style="color:green">checkcode</span>, значение которого должно соответствовать значению, определенному при создании подключения и транзакции. В противном случае метод не будет выполнен и будет возвращен код соответствующей ошибки.<br />
<br />
<u>Возможные коды ошибок:</u><br />
<br />
:*'''50043''' - Ошибка выполнения запроса<br />
:*'''50044''' - Ошибка при подключении к указанной БД<br />
:*'''50045''' - Переданный код транзакции не соответствует реальному<br />
:*'''50046''' - Не обнаружена активная транзакция<br />
:*'''50047''' - Транзакция уже существует<br />
:*Прочие коды совпадают с кодами ошибок соответствующих драйверов подключения.<br />
<br />
<br />
'''Примеры запросов'''<br />
<br />
<u>Создание транзакции:</u><br />
<br />
<property_set name="dbtransaction" id="..."><br />
<property_cdata key="mode" value="1"/><br />
<property_cdata key="direction" value="3"/><br />
<property_cdata key="connectionstring"><![CDATA[Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Base; Extended Properties=dBase IV]]><br />
</property_cdata><br />
<property_cdata key="checkcode" value="42556232"/><br />
</property_set><br />
<br />
<br />
<u>Выполнение запроса:</u><br />
<br />
<property_set name="dbtransaction" id="..."><br />
<property_cdata key="mode" value="2"/><br />
<property_cdata key="checkcode" value="42556232"/><br />
<property_cdata key="sqltext"><![CDATA[...]]></property_cdata><br />
<property_cdata key="sqltextb64"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
<u>Применение (откат) транзакции:</u><br />
<br />
<property_set name="dbtransaction" id="..."><br />
<property_cdata key="mode" value="3"/><br />
<property_cdata key="checkcode" value="42556232"/><br />
</property_set><br />
<br />
<br />
Если при выполнении запроса возникает ошибка или исключение, то конкретный код исключения возвращается в поле <span style="color:green">sqlresultcode</span>, а коллекция <span style="color:green">dataset</span> отсутствует. В случае успешного выполнения код возврата равен 0.<br />
<br />
<br />
Структура ответа в случае успешного выполнения:<br />
<br />
<property_set name="dbtransaction" id="..."><br />
<span style="color:green"><nowiki><!--##### Общие свойства #####--></nowiki></span><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_simple key="sqlresultcode" value="0" /><br />
<span style="color:green"><nowiki><!--##### Возвращаемый набор #####--></nowiki></span><br />
<property_collection name="dataset" count="1"><br />
<span style="color:green"><nowiki><!--##### Описание столбцов #####--></nowiki></span><br />
<property_set name="datasetxmlb64"><br />
<property_cdata key="xmlb64"><![CDATA[.....Base64......]]></property_cdata><br />
</property_set><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>callnumber</h4><br />
<br />
Осуществляет запрос к серверу на совершение вызова средствами менеджера автодозвона. <br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="callnumber" id="..."><br />
<property_simple key="number" value="..." /><br />
<property_simple key="direction" value="..." /><br />
</property_set><br />
<br />
<br />
Свойство '''number''' содержит номер, вызов которого необходимо осуществить. Свойство '''direction''' может принимать значения "pbx" или "city" и определяет направление вызова - во внутренний номерной план или во внешние линии соответственно. Если свойство не будет указано или будет указано неверно, то вызов будет осуществляться во внутренний номерной план, если в нем зарегистрирован указанный номер, и на внешние линии иначе.<br />
<br />
<u>Структура ответа:</u><br />
<br />
<property_set name="callnumber" id="..."><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_simple key="resultdescription" value="Success" /><br />
<property_simple key="acmresultcode" value="0" name="cntStartedSuccessfully" /><br />
</property_set><br />
<br />
<br />
Свойство '''acmresultcode''' может принимать значения из перечисления:<br />
<br />
<span style="color:blue">public enum</span> EACMAnswer<br />
{<br />
cntStartedSuccessfully = 0, <span style="color:darkviolet">//Звонок успешно взят в реализацию </span><br />
cntUserNotReady = 1, <span style="color:darkviolet">//У осуществляющего вызов пользователя не найдены линии, готовые линии, или состояние кривое </span><br />
cntBusy = 2, <span style="color:darkviolet">//При звонке на внутренний номер - признак занятости. В очереди и сам повисеть может </span><br />
<span style="color:darkviolet">//(в дальнейшем реализуем как раз ожидание в очереди...) </span><br />
cntExtLineNotFound = 3, <span style="color:darkviolet">//Не найдены готовые внешние линии после длительного ожидания и нескольких попыток <br />
</span> <br />
cntError = 4, <span style="color:darkviolet">//Прочие ошибки, исключения </span><br />
cntControlNotReady = 5, <span style="color:darkviolet">//Режим не реализован</span> <br />
cntNumberNotFound = 6, <span style="color:darkviolet">//Внутренний номер не найден (если сервер самостоятельно определяет направление звонка, то это не задействовано) </span><br />
}<br />
<br />
*<h4>switchnumber</h4><br />
<br />
Осуществляет запрос к серверу на совершение переключения (flash-буферизации текущего абонента и последующего вызова указанного номера). <br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="switchnumber" id="..."><br />
<property_simple key="number" value="..." /><br />
<property_simple key="direction" value="..." /><br />
</property_set><br />
<br />
<br />
Свойство '''number''' содержит номер, вызов которого необходимо осуществить. Свойство '''direction''' может принимать значения "pbx" или "city" и определяет направление вызова - во внутренний номерной план или во внешние линии соответственно. Если свойство не будет указано или будет указано неверно, то вызов будет осуществляться во внутренний номерной план, если в нем зарегистрирован указанный номер, и на внешние линии иначе.<br />
<br />
Структура ответа совпадает с ответом команды [[Сервисное_взаимодействие#callnumber|callnumber]].<br />
<br />
<br />
*<h4>callabort</h4><br />
<br />
Осуществляет запрос к серверу на отмену предварительно запущенной процедуры вызова средствами автодозвона. Может вызываться в любое время - в случае обнаружения активной сессии автодозвона отменит ее, в противном случае просто вернет управление.<br />
<br />
<br />
<y>Структура запроса:</u><br />
<br />
<property_set name="callabort" id="..." /><br />
<br />
<br />
Ответ содержит только стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
<br />
*<h4>log</h4><br />
<br />
Осуществляет вывод текстовой информации в стандартный лог-журнал Plugin клиентского приложения Oktell. Текст логируемой строки может быть указан явно (поле <span style="color:green">logstring</span>) или в виде base64, преобразованного из unicode-кодировки (поле logstringb64).<br />
<br />
Указанием поля <span style="color:green">type</span> можно достичь вывода текстовой строки в лог-журнал Exception (значение "1") или Common (значение "2") клиентского приложения.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="log" id="..."><br />
<property_simple key="type" value="..." /> ("0" - plugin, "1" - exception, "2" - common)<br />
<property_cdata key="logstring"><![CDATA[...]]></property_cdata><br />
<property_cdata key="logstringb64"><![CDATA[.....base64.....]]></property_cdata><br />
</property_set><br />
<br />
<br />
Ответ содержит только стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
<br />
*<h4>notify</h4><br />
<br />
Осуществляет вывод текстовой информации в режиме всплывающего уведомления для текущего пользователя. В структуре запроса любые свойства могут быть пропущены.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="notify" id="..."><br />
<property_simple key="type" value="..." /> ("info", "warn", "err", "color")<br />
<property_simple key="autohide" value="..." /> ("1", "0")<br />
<property_simple key="savedb" value="..." /> ("1", "0")<br />
<property_simple key="color" value="..." /> ("White", "LightRed", "Green", "Azure", "DarkKhaki", ...)<br />
<property_cdata key="sender"><![CDATA[...]]></property_cdata><br />
<property_cdata key="text"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
:Варианты значений для свойства '''type''': info, warn, err, color.<br />
:Варианты значений для свойства '''autohide''': 0, 1.<br />
:Варианты значений для свойства '''savedb''': 0, 1.<br />
:Варианты значений для свойства '''color''': White, LightRed, Green, Azure, DarkKhaki, .... Названия всех цветов FrameWork.<br />
<br />
Ответ содержит только стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
<br />
*<h4>tabs</h4><br />
<br />
В случае использования формы в режиме отображения среди внешних модулей осуществляет отображение указанных вкладок стандартном заголовке модуля. Это может понадобиться для реализации усложненных модулей с различными интерфейсными действиями внутри одной стартовой формы.<br />
<br />
<br />
[[Файл:Сервисное взаимодействие 001.png|center]]<br />
<br />
<br />
Для корректного применения в структуре параметров команды необходимо указание формы ('''idform''') и уникального идентификатора, передаваемого из приложения Oktell при ее создании ('''idshow''').<br />
<br />
Каждый последующий вызов будет уничтожать существующие на данный момент вкладки и создавать их по новой согласно параметру.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="tabs" id="..."><br />
<property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="idform" value="a69f5237-77ef-47fd-97d7-64e0da1c0457" /><br />
<property_simple key="idshow" value="f489439b-12f3-4425-91b5-d03e89101665" /><br />
<property_simple key="activeindex" value="2" /><br />
<property_collection name="tabs" count="..."><br />
<property_set name="tabinfo"><br />
<property_simple key="index" value="1" /><br />
<property_cdata key="name"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<property_set name="tabinfo"><br />
<property_simple key="index" value="2" /><br />
<property_cdata key="name"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<span style="color:blue">...</span><br />
</property_collection><br />
</property_set><br />
<br />
<br />
Свойство '''activeindex''' устанавливает индекс вкладки (согласно индексам, определенных в коллекции-перечислении), которая должна стать активной после отображения.<br />
<br />
Коллекция описателей вкладок - элементы <span style="color:green">property_set</span>, вложенные в базовый элемент команды - содержит описание каждой вкладки набором {index, name}, который определяет код вкладки при обмене событийными сообщениями по части вкладок между приложением и plugin-программой, а также отображаемое в панели заголовка название.<br />
<br />
Ответ содержит только стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
<br />
*<h4>tabindex</h4><br />
<br />
В случае использования формы в режиме отображения среди внешних модулей осуществляет смену активной вкладки по инициативе plugin-программы. <br />
<br />
Для корректного применения в структуре параметров команды необходимо указание формы ('''idform''') и уникального идентификатора, передаваемого из приложения Oktell при ее создании ('''idshow''').<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="tabs" id="..."><br />
<property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="idform" value="a69f5237-77ef-47fd-97d7-64e0da1c0457" /><br />
<property_simple key="idshow" value="f489439b-12f3-4425-91b5-d03e89101665" /><br />
<property_simple key="activeindex" value="..." /> <br />
</property_set><br />
<br />
<br />
Свойство '''activeindex''' устанавливает индекс вкладки (согласно индексам, определенных в коллекции-перечислении), которая должна стать активной. Индекс вкладки определяется при генерации события на отображение вкладок [[Сервисное_взаимодействие#tabs|tabs]].<br />
<br />
Ответ содержит только стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
<br />
*<h4>headertext</h4><br />
<br />
В случае использования формы в режиме отображения среди внешних модулей осуществляет смену текста заголовка модуля в главном окне приложения Oktell по инициативе plugin-программы. <br />
<br />
Для корректного применения в структуре параметров команды необходимо указание формы (idform) и уникального идентификатора, передаваемого из приложения Oktell при ее создании (idshow). Свойство text определяет новое значение заголовка.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="headertext" id="..."><br />
<property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="idform" value="a69f5237-77ef-47fd-97d7-64e0da1c0457" /><br />
<property_simple key="idshow" value="f489439b-12f3-4425-91b5-d03e89101665" /><br />
<property_cdata key="text"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
Ответ содержит только стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
<br />
*<h4>headercolor</h4><br />
<br />
В случае использования формы в режиме отображения среди внешних модулей осуществляет смену цвета заголовка модуля в главном окне приложения Oktell по инициативе plugin-программы. <br />
<br />
Для корректного применения в структуре параметров команды необходимо указание формы ('''idform''') и уникального идентификатора, передаваемого из приложения Oktell при ее создании ('''idshow'''). Свойство '''color''' определяет новое значение цвета в числовом формате (int argb). В приведенном примере указан десятичный эквивалент числа 0x00FF0000 - красный цвет.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="headercolor" id="..."><br />
<property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="idform" value="a69f5237-77ef-47fd-97d7-64e0da1c0457" /><br />
<property_simple key="idshow" value="f489439b-12f3-4425-91b5-d03e89101665" /><br />
<property_cdata key="color" value="16711680"/><br />
</property_set><br />
<br />
<br />
Ответ содержит только стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
<br />
*<h4>faxsend</h4><br />
<br />
В момент активной коммутации выполняет команду на переключение в режим отправки факса через оппозитный канал (функция аналогичная команде "Отправка факса" модуля "Телефон" клиентского приложения Oktell). Функции по работе с факсом приложения и plugin-программы взаимозаменяемы и взаимодополняемы.<br />
<br />
Свойство '''filepath''' определяет полный путь на клиентском компьютере к файлу-изображению для отправки через факс по оппозитному каналу.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="faxsend" id="..."><br />
<property_cdata key="filepath"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription''', а также поле '''faxsendresult''' с результатом выполнения команды на отправку. В нем "0" указывает на обрыв выполнения команды из-за несоответствия условий, например, если на оппозитном канале отсутствует функция факса.<br />
<br />
<br />
*<h4>faxabort</h4><br />
<br />
<br />
В момент активного сеанса передачи факса через оппозитный канал (ручной режим передачи) выполняет обрыв и переход в коммутацию с оппозитным каналом (функция аналогичная команде "Отмена факса" модуля "Телефон" клиентского приложения Oktell). Функции по работе с факсом приложения и plugin-программы взаимозаменяемы и взаимодополняемы.<br />
<br />
Свойство '''filepath''' определяет полный путь на клиентском компьютере к файлу-изображению для отправки через факс по оппозитному каналу.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="faxabort" id="..."><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription''', а также поле '''faxabortresult''' с результатом выполнения команды на обрыв факса. В нем "0" указывает на то, что факс-передача не осуществлялась, и команда на обрыв была пропущена.<br />
<br />
<br />
*<h4>downloadrecordbyid</h4><br />
<br />
Осуществляет запрос к серверу на закачку файла записи разговора (коммутации) из хранилища записей на сервере на клиентский компьютер в указанное место. В случае, если на сервере файлы записи каналов одного разговора еще не микшированы, производится моментальное микширование и пересылка одного файла. <br />
<br />
Свойство '''idconn''' определяет код (Guid) коммутации, запись которой требуется скачать, в формате "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX". Свойство '''filepath''' определяет полный путь на клиентском компьютере к итоговому файлу, куда будет сохранена запись.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="downloadrecordbyid" id="..."><br />
<property_cdata key="idconn"><![CDATA[...]]></property_cdata><br />
<property_cdata key="filepath"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля resultcode и resultdescription, а также поле downloadresult с результатом выполнения команды на загрузку файлов. В нем "1" указывает на успешное завершение операции, "0" - файлы не найдены и не загружены.<br />
<br />
<br />
*<h4>downloadrecordsbychain</h4><br />
<br />
Осуществляет запрос к серверу на закачку всех файлов записей разговоров для указанной цепочки коммутаций из хранилища на сервере на клиентский компьютер в указанную папку. В случае, если на сервере файлы записи каналов одного разговора еще не микшированы, производится моментальное микширование и пересылка единого файла для каждой коммутации. <br />
<br />
Свойство '''idchain''' определяет код (Guid) цепочки, записи разговоров которой требуется скачать, в формате "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX". Свойство '''folderpath''' определяет полный путь на клиентском компьютере к каталогу, куда будут сохранены записи с исходными именами файлов.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="downloadrecordsbychain" id="..."><br />
<property_cdata key="idchain"><![CDATA[...]]></property_cdata><br />
<property_cdata key="folderpath"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription''', а также поле '''downloadresult''' с результатом выполнения команды на загрузку файлов. В нем «1» указывает на успешное завершение операции, «0» - файлы не найдены и не загружены.<br />
<br />
Поле '''downloadcount''' в ответе появляется в случае успешной загрузки хотя бы одного файла и содержит общее количество загруженных файлов. Также в ответе перечислены полные пути на клиентском компьютере ко всем загруженным файлам.<br />
<br />
<br />
<u>Структура ответа:</u><br />
<br />
<property_set name="downloadrecordsbychain" id="..."><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_simple key="resultdescription" value="Success" /><br />
<property_simple key="downloadresult" value="1" name="success" /><br />
<property_simple key="downloadcount" value="2" /><br />
<property_collection name="filepaths" count="2"><br />
<property_set id="0"><br />
<property_simple key="index" value="0" /><br />
<property_cdata key="filepath"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<property_set id="1"><br />
<property_simple key="index" value="1" /><br />
<property_cdata key="filepath"><![CDATA[...]]></property_cdata><br />
</property_set><br />
................<br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>uploadfiletoserver</h4><br />
<br />
Осуществляет запрос к серверу на закачку одного файла с клиента на сервер. Размещение осуществляется в указанном месте на сервере. Файл должен существовать в указанном месте клиентского компьютера. <br />
<br />
Свойство '''localpath''' определяет абсолютный путь к файлу на клиентском компьютере. Свойство '''serverpath''' определяет путь на сервере, куда требуется загрузить файл. Может быть задан абсолютный путь или относительный (от каталога серверной службы) - в этом случае поле '''isrelative''' должно быть указано и иметь значение "1". Может быть указан полный путь к файлу (тогда исходное имя файла при сохранении теряется в пользу указанного), либо может быть указан путь к каталогу (тогда файл сохранится с исходным именем) - в этом случае поле '''isfolder''' должно быть указано и иметь значение "1".<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="uploadfiletoserver" id="..."><br />
<property_cdata key="localpath"><![CDATA[...]]></property_cdata><br />
<property_cdata key="serverpath"><![CDATA[...]]></property_cdata><br />
<property_simple key="isrelative" value="0" /><br />
<property_simple key="isfolder" value="0" /><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription''', а также поле '''serverfilepath''' - возвращает полный путь к загруженному файлу на сервере (может быть необходим plugin-программе в случае, если используется загрузка по относительному пути).<br />
<br />
<br />
*<h4>downloadfilefromserver</h4><br />
<br />
Осуществляет запрос к серверу на скачивание одного файла с сервера на клиентский компьютер. Размещение осуществляется в указанном месте на локальной машине. Файл должен существовать в указанном месте серверного компьютера. <br />
<br />
Свойство '''localpath''' определяет абсолютный путь к файлу на клиентском компьютере, куда следует разместить файл после загрузки с сервера. Свойство '''serverpath''' определяет путь на сервере, откуда требуется скачать файл. Может быть задан абсолютный путь или относительный (от каталога серверной службы) - в этом случае поле '''isrelative''' должно быть указано и иметь значение "1".<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="downloadfilefromserver" id="..."><br />
<property_cdata key="localpath"><![CDATA[...]]></property_cdata><br />
<property_cdata key="serverpath"><![CDATA[...]]></property_cdata><br />
<property_simple key="isrelative" value="0" /><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription''', а также поле '''downloadresult''' - «1» в случае успешного закачивания файла, «0» в случае не обнаружения файла в указанном месте сервера.<br />
<br />
<br />
*<h4>deletefilefromserver</h4><br />
<br />
Осуществляет запрос к серверу на удаление одного файла с сервера. Файл должен существовать в указанном месте серверного компьютера. <br />
<br />
Свойство '''serverpath''' определяет путь на сервере, откуда требуется скачать файл. Может быть задан абсолютный путь или относительный (от каталога серверной службы) - в этом случае поле '''isrelative''' должно быть указано и иметь значение "1".<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="deletefilefromserver" id="..."><br />
<property_cdata key="serverpath"><![CDATA[...]]></property_cdata><br />
<property_simple key="isrelative" value="0" /><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription''', а также поле '''deleteresult''' - «1» в случае успешного удаления файла, «0» в случае не обнаружения файла в указанном месте сервера или запрета на удаление.<br />
<br />
<br />
*<h4>showdirectoryonserver</h4><br />
<br />
Осуществляет запрос к серверу на получение структуры указанного каталога. <br />
<br />
Свойство '''serverpath''' определяет путь на сервере к исследуемому каталогу, структуру которого требуется получить. Может быть задан абсолютный путь или относительный (от каталога серверной службы) - в этом случае поле '''isrelative''' должно быть указано и иметь значение "1". Установленные поля '''showfiles''' и '''showdirs''' определяют соответственно перечисление файлов и подкаталогов. Поле '''pattern''' определяет маску выборки элементов (например *.txt).<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="showdirectoryonserver" id="..."><br />
<property_cdata key="serverpath"><![CDATA[...]]></property_cdata><br />
<property_simple key="isrelative" value="0" /><br />
<property_simple key="showfiles" value="1" /><br />
<property_simple key="showdirs" value="0" /><br />
<property_cdata key="pattern"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription''', а также поле '''showdirectoryresult''' - «0» в случае отсутствия каталога по указанному пути, и «1» в случае успешного выполнения операции. Раздел '''consistence''' содержит перечисление обнаруженных элементов.<br />
<br />
<br />
<u>Структура ответа:</u><br />
<br />
<property_set name="showdirectoryonserver" id="..."><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_simple key="resultdescription" value="Success" /><br />
<property_simple key="showdirectoryresult" value="1" name="success" /><br />
<property_collection name="consistence" count="2"><br />
<property_set name="directories"><br />
<property_cdata key="dir" value="0"><![CDATA[Subdir1]]></property_cdata> <br />
<property_cdata key="dir" value="1"><![CDATA[Subdir2]]></property_cdata> <br />
<property_cdata key="dir" value="2"><![CDATA[Subdir3]]></property_cdata> <br />
<property_cdata key="dir" value="3"><![CDATA[Subdir4]]></property_cdata> <br />
</property_set><br />
<property_set name="files"><br />
<property_cdata key="file" value="0"><![CDATA[1.txt]]></property_cdata><br />
</property_set><br />
<span style="color:blue"> ................</span><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>sethandleevent</h4><br />
<br />
Осуществляет подписку на указанные события приложения (сервера или клиентского модуля) или отписку от них.<br />
<br />
Сервер и клиентское приложение генерируют множество событий, не все из которых могут быть интересны plugin-программе (лишние события это всегда затрата лишних ресурсов и времени на пустую обработку). Соответственно события разбиты на группы, и плагины осуществляют таким образом подписку на группы. Строка-значение свойства '''eventtype''' определяет текстовый код направления подписки. Свойство '''handle''' со значением «1» подписывает указанный плагин на событийное направление, со значением «0» напротив отписывает. Для проведения подписки/отписки должен быть задан идентификатор плагин-программы.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="sethandleevent" id="..."><br />
<property_cdata key="idplugin"><![CDATA[...]]></property_cdata><br />
<property_simple key="handle" value="1" /><br />
<property_simple key="eventtype" value="phoneevent" /><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
События, генерируемые приложением, будут поступать после подписки на соответствующее направление в plugin-программу путем вызова метода [[Сервисное_взаимодействие#.D0.9C.D0.B5.D1.82.D0.BE.D0.B4_DoQuery|Метод DoQuery]]. В параметре будет указан тип и код направления, тип и код события, а также дополнительные параметры конкретного события. При этом событийные направления определяют [[Допустимые типы запросов DoQuery|допустимые типы запросов]] с кодами 203**.<br />
<br />
<br />
Доступные направления:<br />
<br />
:*'''phoneevent''' - события аппаратного модуля и логики АТС по управлению каналом, связанным с рабочим местом, на котором исполняется plugin-программа. <br />
<br />
<br />
*<h4>svcscriptstart</h4><br />
<br />
Осуществляет запрос к серверу на запуск служебного сценария по инициативе плагин-программы. Запуск может производиться в синхронном режиме с ожиданием исполнения и возвратом значения из служебной переменной сценария по завершению исполнения (в этом случае поток приложения блокируется до завершения или до таймаута). Также запуск может производиться в асинхронном режиме (без ожидания выполнения).<br />
<br />
Свойство '''scriptname''' определяет имя сценария. Полный путь вычисляется на сервере, сценарий загружается из папки общих служебных сценариев. Свойство '''startparam''' устанавливает при необходимости начальный стартовый параметр, передаваемый в компонент «Старт» сценария. Свойства '''startparam2''' и '''startparam3''' при необходимости устанавливают дополнительные стартовые параметры, доступные в служебном сценарии в разделе функций аргумента (функции «Входной параметр 2» и «Входной параметр 3»). Свойство '''startmode''' определяет режим запуска служебного сценария: «1» - асинхронный (только запуск), «2» - синхронный с ожиданием завершения исполнения и возвратом значения из служебной переменной «Возвращаемое значение». По умолчанию при отсутствии параметра выставляется синхронный режим. В синхронном режиме может быть задано свойство '''timeout''', определяющее в секундах максимальное время ожидания завершения работы сценария, по истечению которого сценарий продолжит выполнение, но управление вернется в плагин без ожидания возвращаемого значения.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="svcscriptstart" id="..."><br />
<property_cdata key="scriptname"><![CDATA[...]]></property_cdata><br />
<property_simple key="startparam" value="" /><br />
<property_simple key="startparam2" value="" /><br />
<property_simple key="startparam3" value="" /><br />
<property_simple key="startmode" value="2" /><br />
<property_simple key="timeout" value="1" /><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. Дополнительно возвращаются также несколько служебных значений. Поле '''started''' - «1» в случае успешного запуска сценария, «0» в случае, если сценарий не стартовал по какой-либо причине. Поле startresult - «0» в случае успешного исполнения команды, «10» в случае не обнаружения сценария, «11» в случае сбоя при запуске, «12» в случае таймаута ожидания в синхронном режиме. Поле '''returnvalue''' присутствует только в синхронном режиме и возвращает значение служебной переменной «Возвращаемое значение».<br />
<br />
<br />
*<h4>headsetcommand</h4><br />
<br />
Отправляет команду локальному модулю HAL, управляющему локальным устройством типа гарнитуры. Допускаются команды DTMF, Поднять трубку, Положить трубку, Генерировать флэш, Проиграть звуковой файл установленного формата (Oktell сам использует только для тестов, но функция доступна). Может потребоваться для организации в plugin-программе модуля, аналогичного встроенному софт-телефону приложения Oktell.<br />
<br />
Для устройств, не являющихся локально управляемыми гарнитурами, в общем случае метод бессмысленен. Однако его функционал незначительно расширен, так, например, вызов FLASH и DTMF достигают АТС в любом случае при наличии какого-либо устройства. Дополнительно, вызов HOOKDOWN для устройств, отличных от гарнитур, обрывает текущий сеанс коммутации, а также производит остановку сервиса автодозвона, если он был запущен.<br />
<br />
<br />
<u>Коды команд:</u><br />
<br />
hookup = 0 <span style="color:darkviolet">//поднять трубку или ответить на вызов </span><br />
hookdown = 1 <span style="color:darkviolet">//положить трубку или разорвать коммутацию </span><br />
flash = 2 <span style="color:darkviolet">//генерировать flash </span><br />
dtmf = 3 <span style="color:darkviolet">//отправить dtmf символы с канала на сервер </span><br />
playfile = 4 <span style="color:darkviolet">//воспроизвести мелодию в канал </span><br />
mute = 5 <span style="color:darkviolet">//включить/отключить исходящий звук </span><br />
<br />
<br />
Свойство '''command''' определяет требуемую к исполнению команду. В качестве значения могут быть заданы числовые коды или имена. В случае сложных команд, требующих указания параметра, ожидается наличие свойства '''data''', содержащего его значение (в случае команды dtmf в качестве параметра ожидается конкретный символ, в случае playfile - путь к файлу).<br />
<br />
<br />
<u>Структура запроса на примерах</u><br />
<br />
'''1.'''<br />
<property_set name="headsetcommand" id="..."><br />
<property_simple key="command" value="2" /><br />
</property_set><br />
<br />
<br />
'''2.'''<br />
<property_set name="headsetcommand" id="..."><br />
<property_simple key="command" value="3"/><br />
<span style="color:green"><nowiki><!-- (генерируемый символ dtmf) --></nowiki></span><br />
<property_simple key="data" value="*"/><br />
</property_set><br />
<br />
'''3.'''<br />
<property_set name="headsetcommand" id="..."><br />
<property_simple key="command" value="mute"/><br />
<span style="color:green"><nowiki><!-- (0-включить звук, 1-отключить звук) --></nowiki></span><br />
<property_simple key="data" value="1"/> <br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. Дополнительно возвращается также поле '''commandresult''', указывающее на результат исполнения.<br />
<br />
<br />
*<h4>headsetcheckstate</h4><br />
<br />
Производит запрос указанного в параметре состояния локального устройства (гарнитуры).<br />
<br />
<br />
<u>Коды команд:</u><br />
<br />
hookup = 1 <span style="color:darkviolet">//снята ли трубка </span><br />
ringing = 2 <span style="color:darkviolet">//осуществляется ли вызов устройства (звонок) </span><br />
connected = 3 <span style="color:darkviolet">//подключено/обнаружено ли устройство </span><br />
registered = 4 <span style="color:darkviolet">//зарегистрирован ли канал на сервере </span><br />
muted = 5 <span style="color:darkviolet">//отключен ли исходящий звук </span><br />
<br />
<br />
Свойство '''command''' определяет требуемое для определения состояние. В качестве значения могут быть заданы числовые коды или имена.<br />
<br />
<br />
<u>Структура запроса на примерах:</u><br />
<br />
<property_set name="headsetcheckstate" id="..."><br />
<property_simple key="command" value="2" /><br />
</property_set><br />
<br />
<br />
или<br />
<br />
<property_set name="headsetcheckstate" id="..."><br />
<property_simple key="command" value="ringing"/><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. Дополнительно возвращается также поле '''commandresult''', в котором содержится результат исполнения: «1» - состояние активно, «0» - состояние неактивно.<br />
<br />
<br />
*<h4>getallusersfullinfo</h4><br />
<br />
Осуществляет запрос к серверу на получение списка всех пользователей системы с их текущими состояниями.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="getallusersfullinfo" id="..."><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. В коллекции ответа содержится список всех пользователей с перечнем свойств. В разделе XML-структуры, соответствующей записи пользователя, содержатся такие значения как id, имя, признак оператора, принадлежность к отделу, состояние, присутствие в call-центре, перерыв, переадресация, информация о текущей привязанной линии: идентификатор, номер, код, тип, состояние. Запрашиваемая информация возвращается с сервера состояний и не использует обращения к БД.<br />
<br />
<br />
<u>Структура ответа:</u><br />
<br />
<property_set name="getallusersfullinfo" id="..."><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_collection name="usersstates" count="..."><br />
<property_set name="user" id="da803f01-ea77-40fa-bc9d-e2efb36fd5a8"><br />
<property_cdata key="id"><![CDATA[da803f01-ea77-40fa-bc9d-e2efb36fd5a8]]></property_cdata><br />
<property_cdata key="name"><![CDATA[Букашин Петр Александрович]]></property_cdata><br />
<property_simple key="isoperator" value="1" /><br />
<property_cdata key="groupid"><![CDATA[f42c8dd4-6e6b-4033-9349-5d51971fb251]]></property_cdata><br />
<property_cdata key="groupname"><![CDATA[Техническое управление]]></property_cdata><br />
<property_simple key="userstate" value="1" name="usReady" /><br />
<property_simple key="iscc" value="1" /><br />
<property_simple key="islunch" value="0" /><br />
<property_simple key="isredirect" value="0" /><br />
<property_cdata key="lineid"><![CDATA[cf8330f4-a0bf-4779-9539-ab8ea6c49df7]]></property_cdata><br />
<property_simple key="linenum" value="16016" name="Success" /><br />
<property_simple key="linecode" value="usb16" /><br />
<property_simple key="linetype" value="4" name="ltIntUSB" /><br />
<property_simple key="linestate" value="4" name="lsReady" /><br />
</property_set><br />
...<br />
<property_set name="user" id="..."><br />
...<br />
</property_set><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>getspecifieduserfullinfo</h4><br />
<br />
Осуществляет запрос к серверу на получение информации об указанном пользователе системы и его текущих состояний.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="getspecifieduserfullinfo" id="..."><br />
<property_set name="user"><br />
<property_cdata key="id"><![CDATA[xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx]]></property_cdata><br />
<property_simple key="login" value="..." /><br />
<property_simple key="name" value="..." /><br />
</property_set><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. В коллекции ответа содержится набор данных по одному (запрошенному) пользователю с перечнем свойств. В разделе XML-структуры, соответствующей записи пользователя, содержатся такие значения как id, имя, признак оператора, принадлежность к отделу, состояние, присутствие в call-центре, перерыв, переадресация, информация о текущей привязанной линии: идентификатор, номер, код, тип, состояние. Запрашиваемая информация возвращается с сервера состояний и не использует обращения к БД.<br />
<br />
<br />
<u>Структура ответа:</u><br />
<br />
<property_set name="getspecifieduserfullinfo" id="..."><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_collection name="usersstates" count="1"><br />
<property_set name="user" id="da803f01-ea77-40fa-bc9d-e2efb36fd5a8"><br />
<property_cdata key="id"><![CDATA[da803f01-ea77-40fa-bc9d-e2efb36fd5a8]]></property_cdata><br />
<property_cdata key="name"><![CDATA[Букашин Петр Александрович]]></property_cdata><br />
<property_simple key="isoperator" value="1" /><br />
<property_cdata key="groupid"><![CDATA[f42c8dd4-6e6b-4033-9349-5d51971fb251]]></property_cdata><br />
<property_cdata key="groupname"><![CDATA[Техническое управление]]></property_cdata><br />
<property_simple key="userstate" value="1" name="usReady" /><br />
<property_simple key="iscc" value="1" /><br />
<property_simple key="islunch" value="0" /><br />
<property_simple key="isredirect" value="0" /><br />
<property_cdata key="lineid"><![CDATA[cf8330f4-a0bf-4779-9539-ab8ea6c49df7]]></property_cdata><br />
<property_simple key="linenum" value="16016" name="Success" /><br />
<property_simple key="linecode" value="usb16" /><br />
<property_simple key="linetype" value="4" name="ltIntUSB" /><br />
<property_simple key="linestate" value="4" name="lsReady" /><br />
</property_set><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>getkeyid</h4><br />
<br />
Осуществляет запрос к серверу для определения текущего регистрационного номера. Возвращает 7-значный номер или 0, если лицензия не обнаружена или неверна.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="getkeyid" id="..."><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. Также в структуре ответа содержится поле '''keyid''', содержащее 7-значный регистрационный номер.<br />
<br />
<br />
<u>Структура ответа:</u><br />
<br />
<property_set name="getkeyid" id="..."><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_simple key="keyid" value="8378376" /><br />
</property_set><br />
<br />
<br />
*<h4>getqueueitems</h4> <br />
<br />
Осуществляет запрос к серверу для получения текущего списка элементов в очереди ожидания.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="getqueueitems" id="..."><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. Также в ответе содержится структура '''currentqueue''' c информацией о всех элементах в очереди на момент запроса. Поля описания каждого элемента очереди аналогичны соответствующим значениям возвращаемого значения функции '''Queue_GetCurrentItems''' раздела [[Работа с логикой АТС#Методы для работы с логикой АТС: очередь ожидания|«Oktell в других проектах. Методы для работы с АТС: очередь ожидания»]].<br />
<br />
<br />
<u>Структура ответа на примере:</u><br />
<br />
<property_set name="getqueueitems"><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_collection name="currentqueue" count="2"><br />
<property_set name="queueitem"><br />
<property_simple key="dateformat" value="dd.MM.yyyy HH:mm:ss" /><br />
<property_simple key="managedlineid" value="9fe668ff-0822-4b8d-aa0a-71fbbaad0c67" /><br />
<property_simple key="objecttype" value="0" name="qotQueueLogic" /><br />
<property_cdata key="username"><![CDATA[Замятин Олег Васильевич]]></property_cdata><br />
<property_simple key="lenqueue" value="137000" /><br />
<property_simple key="srcelementid" value="a00a7a08-b3f7-44f3-8b2c-64ef11d4a2c5" /><br />
<property_simple key="queuesource" value="1" name="qsLineLogic" /><br />
<property_cdata key="department"><![CDATA[Руководство]]></property_cdata><br />
<property_simple key="calledid" value="14" /><br />
<property_simple key="callerid" value="21" /><br />
<property_simple key="idobject" value="12345678-1234-1234-1234-12345678123a" /><br />
<property_simple key="userid" value="ba0a387e-815a-434d-8ace-1a1840916761" /><br />
<property_simple key="managedlinenum" value="1525" /><br />
<property_simple key="startqueuetime" value="02.11.2009 10:43:36" /><br />
<property_simple key="queuepriority" value="10" /><br />
</property_set><br />
<property_set name="queueitem"><br />
<property_simple key="dateformat" value="dd.MM.yyyy HH:mm:ss" /><br />
<property_simple key="tasklistid" value="-1" /><br />
<property_simple key="idobject" value="12345678-1234-1234-1234-12345678123b" /><br />
<property_simple key="taskisoutput" value="0" /><br />
<property_simple key="managedlinenum" value="1001" /><br />
<property_simple key="userid" value="00000000-0000-0000-0000-000000000000" /><br />
<property_cdata key="taskname"><![CDATA[Прием входящих]]></property_cdata><br />
<property_simple key="calledid" value="5109940" /><br />
<property_simple key="srcelementid" value="cf82a296-2b27-43c8-a607-1579c83d0b8f" /><br />
<property_simple key="username" value="" /><br />
<property_simple key="startqueuetime" value="02.11.2009 10:43:36" /><br />
<property_simple key="objecttype" value="0" name="qotQueueLogic" /><br />
<property_simple key="lenqueue" value="277000" /><br />
<property_simple key="callerid" value="89050213951" /><br />
<property_simple key="queuepriority" value="10" /><br />
<property_simple key="managedlineid" value="d2d2bd39-d5a3-4d83-b78f-d6ac25cb2733" /><br />
<property_simple key="department" value="" /><br />
<property_simple key="taskid" value="79f0627c-3372-474c-9d9a-8fc3627a3ed8" /><br />
<property_simple key="queuesource" value="5" name="qsIncomingTask" /><br />
</property_set><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>interaction</h4><br />
<br />
Осуществляет отправку команды в другой экземпляр plugin-программы, расположенной на другом рабочем месте. Реализует механизм взаимодействия различных экземпляров plugin-программ.<br />
<br />
Структура взаимодействия представляет собой цепочку:<br />
<br />
'''Client1.Plugin''' -> '''Server''' -> '''Client2.Plugin''' -> '''Server''' -> '''Client1.Plugin''' <br />
<br />
<br />
Plugin-программа на первом клиентском рабочем месте инициирует событие OnQuery.interaction, передавая в параметре информацию о пользователе (<span style="color:green">destinationuserid</span>) или рабочем месте (<span style="color:green">destinationwpid</span>), куда необходимо передать информацию, код plugin-программы, которая должна обработать запрос (destinationpluginid), а также текстовые данные, подлежащие передаче (<span style="color:green">data</span>). Запрос отправляется на сервер, и в случае обнаружения запрошенного клиентского места осуществляется вызов метода [[Сервисное_взаимодействие#DoQuery.interaction|DoQuery.interaction]] в указанной plugin-программе, работающей на втором клиентском рабочем месте. <br />
<br />
При необходимости возврата ответа (любой информации, запакованной в текстовый вид), экземпляр plugin-программы при обработке вызова DoQuery.interaction может инициировать аналогичный вызов OnQuery.interaction для полностью аналогичной схемы доведения информации в ответ. В качестве адресата указывается пользователь-отправитель, а также plugin-отправитель, коды которых присутствуют в параметре при вызове DoQuery.interaction (<span style="color:green">senderuserid</span> и <span style="color:green">senderpluginid</span>). Это асинхронный режим взаимодействия. Вне зависимости от того как долго будет выполняться DoQuery, в какой момент времени будет отправлен асинхронный ответ, управление из вызова OnQuery.interaction в плагине-инициаторе будет возвращено незамедлительно после отправки команды серверу.<br />
<br />
В синхронном режиме взаимодействия плагин-инициатор не получает возврата управления из вызова OnQuery.interaction вплоть до возврата управления из метода DoQuery.interaction в плагине-адресате. При этом возвращаемое из DoQuery.interaction значение будет размещено в ответе, подготавливаемом для плагина-инициатора. Для активации синхронного режима в параметре запроса OnQuery.interaction должен быть указан флаг <span style="color:green">waitrespond</span> со значением «1». В этом случае может быть указан таймаут (<span style="color:green">timeout</span>), по истечении которого ожидание будет прервано и управление возвращено в инициирующий плагин. Таймаут указывается целым числом в миллисекундах.<br />
<br />
Поиск экземпляра plugin-программы, которая должна обработать запрос, осуществляется в следующей очередности:<br />
<br />
Если указан идентификатор пользователя (<span style="color:green">destinationuserid</span>), выбирается рабочее место, на котором он авторизован. В противном случае исследуется идентификатор рабочего места (<span style="color:green">destinationwpid</span>). <br />
<br />
Если клиентское рабочее место обнаружено, происходит отправка запроса на него. <br />
<br />
Выполнением запроса занимается плагин, указанный параметром <span style="color:green">destinationpluginid</span>. Если параметр не указан, выполнение передается плагину-отправителю (экземпляру, расположенному на стороннем клиентском рабочем месте).<br />
<br />
Следует иметь в виду, что данные необходимо упаковывать (например в Base64), если они обладают произвольной и/или достаточно сложной структурой. В противном случае их невозможно будет вставить в XML документ.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="interaction" id="..."><br />
<property_simple key="destinationuserid" value="2" /><br />
<property_cdata key="data"><![CDATA[...произвольные текстовые данные...]]></property_cdata><br />
<property_simple key="waitrespond" value="1" /><br />
<property_simple key="timeout" value="3000" /><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. В ответе содержится параметр '''interactionresult''', представляющий собой код результата выполнения запроса. Его значения из набора:<br />
<br />
Sent = 1 <span style="color:darkviolet">//Операция успешно завершена</span><br />
DestinationNotSpecified = 101 <span style="color:darkviolet">//Не указаны параметры клиентского места - назначения</span><br />
DestinationClientNotFound = 102 <span style="color:darkviolet">//Клиентское место не найдено</span><br />
DestinationClientNotLoaded = 103 <span style="color:darkviolet">//Клиенское место не загружено (пользователь не авторизован)</span><br />
DestinationPluginNotFound = 104 <span style="color:darkviolet">//Плагин не найден</span><br />
DestinationPluginLoadError = 105 <span style="color:darkviolet">//Плагин не загружен</span><br />
DestinationClientNotHandled = 107 <span style="color:darkviolet">//Клиентское место не поддерживает механизм взаимодействия</span><br />
QueryTimeout = 108 <span style="color:darkviolet">//Таймаут ожидания ответа</span><br />
QueryNoAnswer = 109 <span style="color:darkviolet">//Запрос отправлен, но ответ не может быть предоставлен</span><br />
<br />
и параметр '''resultdata''', имеющий значение в случае успешного ожидания выполнения в ходе синхронного запроса. В него подставляется полностью результат выполнения метода DoQuery в плагине-адресате.<br />
<br />
<br />
<u>Структура ответа:</u><br />
<br />
<property_set name="interaction" id="..."><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_simple key="interactionresult" value="1" name="Sent" /><br />
<property_cdata key="resultdata"><![CDATA[...текстовые данные - результат выполнения...]]></property_cdata><br />
</property_set><br />
<br />
<br />
*<h4>getpath</h4><br />
<br />
Доступно только для серверных плагинов.<br />
Возвращает пути на сервере: рабочий каталог, временный каталог, каталог с веб-документами, и т.д.<br />
<br />
*<h4>getconfigvalue</h4><br />
<br />
Доступно только для серверных плагинов.<br />
Возвращает значение параметра из конфигурационного файла сервера.<br />
<br />
*<h4>getversion</h4><br />
<br />
Доступно только для серверных плагинов.<br />
Возвращает информацию о версии сервера.<br />
<br />
*<h4>reloadpbxss</h4><br />
<br />
Доступно только для серверных плагинов.<br />
Инициирует перезапуск сервера состояний.<br />
<br />
*<h4>updatehttpsession</h4><br />
<br />
Доступно только для серверных плагинов.<br />
Обновляет/создает http-сессию на веб-сервере Oktell.<br />
<br />
*<h4>removehttpsession</h4><br />
<br />
Доступно только для серверных плагинов.<br />
Удаляет http-сессию на веб-сервере Oktell.<br />
<br />
*<h4>updateplugin</h4><br />
<br />
Доступно только для серверных плагинов.<br />
Инициирует обновление плагина<br />
<br />
*<h4>getcurrentlanguage</h4><br />
<br />
Доступно только для серверных плагинов.<br />
Возвращает используемый сервером язык.<br />
<br />
*<h4>getlicense</h4><br />
<br />
Доступно только для серверных плагинов.<br />
Возвращает информацию о регистрации и список лицензий сервера. В зависимости от параметров может возвращать только сущностную информацию, исключая описания и дополнительные сведения, также может возвращать информацию только по запрошенным кодам продуктов, и с фильтрацией удаленных, заблокированных и просроченных временных лицензий.<br />
<br />
<br />
<br />
Список возможных сервисных команд будет пополняться. В случае, если вам необходимо получить дополнительный функционал, обращайтесь с предложениями на сайт компании [http://oktell.ru/ Телефонные системы].<br />
<br />
<br />
==Метод DoQuery==<br />
<br />
Общее описание метода приведено в статье [[Описание_базовых_элементов_интерфейса#Сервисное взаимодействие|«Базовые элементы интерфейса. DoQuery»]]. В текущем разделе приводится формат параметров при обмене сообщениями в контексте метода.<br />
<br />
<br />
===Параметр (запрос от приложения Oktell к plugin-программе)===<br />
<br />
Все запросы определяются передаваемым в метод параметром. В версии 2.5-90101 не существует команд, обязательных для реализации в plugin-программе, и ответ в некоем корректном виде вовсе может отсутствовать. В дальнейшем возможно появление обязательных для реализации команд, предполагающих корректный и выверенный ответ plugin-программы.<br />
<br />
Запросы всегда состоят из одного элемента property_set, определяющим действие и содержащим необходимые для него параметры. Тип запроса определяется строковым кодом (значением атрибута <span style="color:green">name</span>) и/или дублирующим числовым кодом (значением атрибута <span style="color:green">id</span>) элемента <span style="color:green">property_set</span>. Значения этих атрибутов всегда соответствуют друг другу. Все необходимые для исполнения запроса параметры составляют свойства элемента. В отдельных случаях элемент может иметь сложную структуру, содержать коллекцию вложенных элементов.<br />
<br />
<br />
<u>Структура параметра-запроса:</u><br />
<br />
<?xml version="1.0" encoding="utf-16"?><br />
<oktellxmlmapper version="80710"><br />
<data name="action" count="1"><br />
<property_set name="..." id="..."><br />
...<br />
</property_set><br />
</data><br />
</oktellxmlmapper><br />
<br />
<br />
===Возвращаемое значение (ответ plugin-программы на запрос приложения Oktell)===<br />
<br />
В версии 2.5-90101 не существует команд, обязательных для реализации в plugin-программе. А все исполняемые сервисные действия носят характер информационных пересылок в plugin.<br />
<br />
При появлении в дальнейшем обязательных команд-действий структура ответа должна соответствовать приведенному виду, где в теле элемента property_set содержится контекстно-зависимое содержимое.<br />
<br />
<?xml version="1.0" encoding="utf-16"?><br />
<oktellxmlmapper version="80710"><br />
<data name="actionresult" count="1"><br />
<property_set name="..." id="..."><br />
...<br />
</property_set><br />
</data><br />
</oktellxmlmapper><br />
<br />
<br />
===Допустимые типы запросов===<br />
<br />
:*[[Сервисное_взаимодействие#tabchange|tabchange (20101)]]<br />
:*[[Сервисное_взаимодействие#formshow|formshow (20201)]]<br />
:*[[Сервисное_взаимодействие#formhide|formhide (20202)]]<br />
:*[[Сервисное_взаимодействие#phoneevent|phoneevent (20301)]]<br />
:*[[Сервисное_взаимодействие#pluginloaded|pluginloaded (20401)]]<br />
:*[[Сервисное_взаимодействие#pluginstarted|pluginstarted (20402)]]<br />
:*[[Сервисное_взаимодействие#pluginunload|pluginunload (20403)]]<br />
:*[[Сервисное_взаимодействие#DoQuery.interaction|interaction (20501)]]<br />
<br />
<br />
*<h4>tabchange</h4><br />
<br />
Код 20101. Переводит событие о смене вкладки в заголовке управляющего отображением модуля в plugin-программу. Вызывается только с указанием кода экземпляра формы и только в режиме отображения внешних модулей.<br />
<br />
<br />
<u>Структура передаваемого запроса:</u><br />
<br />
<property_set name="tabchange" id="20101"><br />
<property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="idform" value="817d77a7-5d0e-4783-9304-e310c2ac3443" /><br />
<property_simple key="idshow" value="2e2d8ff0-de47-415f-ab68-9bddcd09952b" /><br />
<property_simple key="actiontype" value="20101" name="TabChange" /><br />
<property_simple key="activeindex" value="3" /><br />
</property_set><br />
<br />
<br />
Параметры '''idplugin''', '''idform''', '''idshow''' указывают управляющему объекту plugin-программы на конкретный экземпляр отображаемой формы, '''activeindex''' указывает индекс вкладки (согласно индексам, определенных в коллекции-перечислении), которая стала активной после действий пользователя (щелчка мышью). Индекс вкладки определяется при генерации события [[Сервисное взаимодействие#tabs|tabs]] на отображение вкладок обратного метода OnQuery. <br />
<br />
<br />
*<h4>formshow</h4><br />
<br />
Код 20201. Переводит событие о начале визуальной работы с формой в plugin-программу. Генерируется каждый раз, когда пользователь открывает модуль из состояния скрытых. Вызывается только с указанием кода экземпляра формы и только в режиме отображения внешних модулей. При смене отображения сначала открываемый модуль создается, затем управляющий объект получает команду formshow, лишь затем генерируется formhide для скрываемого модуля.<br />
<br />
<property_set name="formshow" id="20201"><br />
<property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="idform" value="817d77a7-5d0e-4783-9304-e310c2ac3443" /><br />
<property_simple key="idshow" value="2e2d8ff0-de47-415f-ab68-9bddcd09952b" /><br />
<property_simple key="actiontype" value="20201" name="FormShow" /><br />
</property_set> <br />
<br />
<br />
Параметры '''idplugin''', '''idform''', '''idshow''' указывают управляющему объекту plugin-программы на конкретный экземпляр отображаемой формы<br />
<br />
<br />
*<h4>formhide</h4><br />
<br />
Код 20202. Переводит событие о завершении визуальной работы с формой в plugin-программу. Генерируется каждый раз, когда пользователь проводит в приложении Oktell действия, вызывающие скрытие указанного модуля (перевод в невидимые). Вызывается только с указанием кода экземпляра формы и только в режиме отображения внешних модулей. При смене отображения сначала открываемый модуль создается, затем управляющий объект получает команду formshow, лишь затем генерируется formhide для скрываемого модуля.<br />
<br />
<property_set name="formhide" id="20202"><br />
<property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="idform" value="817d77a7-5d0e-4783-9304-e310c2ac3443" /><br />
<property_simple key="idshow" value="2e2d8ff0-de47-415f-ab68-9bddcd09952b" /><br />
<property_simple key="actiontype" value="20201" name="FormHide" /><br />
</property_set><br />
<br />
<br />
Параметры '''idplugin''', '''idform''', '''idshow''' указывают управляющему объекту plugin-программы на конкретный экземпляр отображаемой формы<br />
<br />
<br />
*<h4>phoneevent</h4><br />
<br />
Код 20301. Событийное направление, подлежащее подписке. То есть передается в плагин-программу только тогда, когда она предварительно запросила подписку на направление путем вызова [[Сервисное_взаимодействие#Событие OnQuery|OnQuery]]-метода [[Сервисное_взаимодействие#sethandleevent|sethandleevent]].<br />
<br />
К данному направлению относится ряд событий аппаратного модуля и логики АТС по управлению каналом, связанным с рабочим местом, на котором исполняется plugin-программа.<br />
<br />
<br />
<u>Типы событий:</u><br />
<br />
HALSrvRegSuccess = 201 <span style="color:darkviolet">//подключение устройства к серверу</span><br />
HALSrvRegTimeout = 202 <span style="color:darkviolet">//таймаут или неудача регистрации устройства на сервере</span><br />
HALDeviceFound = 203 <span style="color:darkviolet">//подключение нового устройства</span><br />
HALDeviceLost = 204 <span style="color:darkviolet">//потеря текущего устройства</span><br />
HALHeadsetParams = 212 <span style="color:darkviolet">//смена состояния гарнитуры (ishookup, isringing)</span><br />
<br />
CommutationStarted = 231 <span style="color:darkviolet">//начало коммутации с участием канала</span><br />
CommutationStopped = 232 <span style="color:darkviolet">//завершение коммутации с участием канала</span><br />
FaxStarted = 233 <span style="color:darkviolet">//начало факс-сеанса на оппозитном канале</span><br />
FaxStopped = 234 <span style="color:darkviolet">//завершение факс-сеанса на оппозитном канале</span><br />
FaxFilesReceived = 235 <span style="color:darkviolet">//получение файлов по встроенному факсу</span><br />
RingStarted = 236 <span style="color:darkviolet">//начало вызова канала</span><br />
RingFinished = 237 <span style="color:darkviolet">//прекращение вызова канала</span><br />
ACMStarted = 238 <span style="color:darkviolet">//начало сеанса автодозвона</span><br />
ACMFinished = 239 <span style="color:darkviolet">//завершение сеанса автодозвона</span><br />
FlashHoldAction = 240 <span style="color:darkviolet">//смена состояния flash-буфера</span><br />
ChainStateChange = 241 <span style="color:darkviolet">//смена состояния текущей цепочки коммутаций</span><br />
LineStateChange = 242 <span style="color:darkviolet">//смена состояния канала</span><br />
<br />
<br />
Коды и параметры событий соответствуют идентичным событиям сервисного оповещения COM-интеграции (разделы [[Сервисное оповещение|«Сервисное оповещение»]] и более подробно [[Работа с логикой АТС#События АТС по линии пользователя|«Работа с логикой АТС. События АТС по линии пользователя»]]).<br />
<br />
Пример параметра для события CommutationStarted о начале коммутации канала пользователя с каналом другого абонента или IVR:<br />
<br />
<property_set name="phoneevent" id="20301"><br />
<property_simple key="actiontype" value="20301" name="PhoneEvent" /><br />
<property_simple key="event" value="231" name="CommutationStarted" /><br />
<property_simple key="idchain" value="abcdef12-abcd-abcd-1234-1234567890ab" /><br />
<property_simple key="idconnection" value="12345678-1234-1234-1234-abcdef123456" /><br />
<property_simple key="canfax" value="1" /><br />
<property_simple key="opponentdescription" value="Иванов Сергей" /><br />
<property_simple key="opponentname" value="Иванов Сергей" /><br />
<property_simple key="opponentnumber" value="" /><br />
<property_simple key="opponentlineid" value="cf8330f4-a0bf-4779-9539-ab8ea6c49df7" /><br />
<property_simple key="opponentlinenumber" value="" /><br />
</property_set><br />
<br />
<br />
*<h4>pluginloaded</h4> <br />
<br />
Код 20401. Вызывается после создания и загрузки plugin-программ, стартующих в режиме без визаулизации вместе с запуском клиентского приложения (устанавливается администратором при регистрации plugin-программы в Oktell). Метод не вызывается при тестовых загрузках администратором, а также если загрузка происходит по первому обращению. В случае динамического обновления метод будет вызван сразу после загрузки обновленной plugin-программы, если для нее установлен момент запуска «При запуске клиентского приложения» или «При запуске главного окна».<br />
<br />
<property_set name="pluginloaded" id="20401"><br />
<property_simple key="actiontype" value="20401" name="PluginLoaded" /><br />
</property_set><br />
<br />
<br />
*<h4>pluginstarted</h4><br />
<br />
Код 20402. Вызывается после загрузки всех plugin-программ. Не вызывается после фиктивной загрузки в режимах администрирования и наладки в сценариях. Может применяться и рекомендуется к применению для создания всех внутренних объектов, инициализации визуальных форм, запуска различных процессов, требуемых только в реальной деятельности плагина, и лишних в режиме информационного обмена в административных целях. Рекомендуется именно здесь проводить действия, которые понаитию размещаются в конструкторе управляющего объекта.<br />
<br />
<property_set name="pluginstarted" id="20402"><br />
<property_simple key="actiontype" value="20402" name="PluginStarted" /><br />
</property_set><br />
<br />
<br />
*<h4>pluginunload</h4><br />
<br />
Код 20403. Вызывается непосредственно перед выгрузкой plugin-программы в потоке, осуществляющем выгрузку. Ожидается, что plugin-программа осуществит завершение всех активных операций. В случае, если программа подгружена в домен основного приложения, она останется в памяти до его полной выгрузки/перезагрузки. В то же время параллельно может быть загружен новый экземпляр этой же plugin-программы. Необходимо обеспечить освобождение монопольных ресурсов, остановку активных потоков, и другие операции, поддерживаемые в активной фазе работы подпрограммы.<br />
<br />
<br />
<property_set name="pluginunload" id="20403"><br />
<property_simple key="actiontype" value="20403" name="PluginUnload" /><br />
</property_set><br />
<br />
<br />
<div id="DoQuery.interaction"></div><br />
*<h4>interaction</h4><br />
<br />
Код 20501. Вызывается по инициативе другой plugin-программы или другого экземпляра этой plugin-программы с передачей произвольной текстовой информации. Может вызываться из экземпляров, запущенных на других клиентских рабочих местах. <br />
<br />
Служит для организации схем взаимодействия экземпляров plugin-программ, запущенных разными пользователями на разных компьютерах.<br />
<br />
Подробнее о механизме в описании инициирующего метода [[Сервисное взаимодействие#interaction|OnQuery.interaction]].<br />
<br />
Следует иметь в виду, что серверное событие, инициирующее вызов этого метода, не производит загрузки соответствующей plugin-программы, а лишь подключение к уже загруженной. Таким образом необходимо гарантировать предварительную загрузку плагина. Это можно организовать принудительной установкой свойства «Момент загрузки» при регистрации plugin-программы в Oktell (значения свойства «При запуске клиентского приложения» или «При запуске главного окна»).<br />
<br />
<property_set name="interaction" id="20501"><br />
<property_simple key="actiontype" value="20501" name="Interaction" /><br />
<property_simple key="senderuserid" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="senderpluginid" value="817d77a7-5d0e-4783-9304-e310c2ac3443" /><br />
<property_cdata key="data"><![CDATA[...текстовые данные - запрос...]]></property_cdata><br />
</property_set><br />
<br />
<br />
В случае наладки синхронного взаимодействия метод должен возвращать значение, которое затем подставляется в ответ (поле resultdata) на вызов OnQuery.interaction.<br />
<br />
Список возможных сервисных команд будет пополняться. В случае, если вам необходимо получить дополнительный функционал, обращайтесь с предложениями на [http://oktell.ru/ сайт компании Телефонные системы]<br />
<br />
{|cellpadding="10" cellspacing="0" border="0"<br />
| [[Встраиваемые_plugin-модули|Наверх]]<br />
| [[Описание базовых элементов интерфейса|Описание базовых элементов интерфейса<<<]]<br />
| [[Сервисное взаимодействие]]<br />
| [[Рекомендации разработчику|>>>Рекомендации разработчику]]<br />
|-<br />
|}</div>Peter%D0%A1%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BD%D0%BE%D0%B5_%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BE%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B5Сервисное взаимодействие2014-06-30T11:36:23Z<p>Peter: </p>
<hr />
<div>{|cellpadding="10" cellspacing="0" border="0"<br />
| [[Встраиваемые_plugin-модули|Наверх]]<br />
| [[Описание базовых элементов интерфейса|Описание базовых элементов интерфейса<<<]]<br />
| [[Сервисное взаимодействие]]<br />
| [[Рекомендации разработчику|>>>Рекомендации разработчику]]<br />
|-<br />
|}<br />
<br />
__TOC__<br />
<br />
<br />
Методы и события данного раздела служат для осуществления плотного взаимодействия plugin-программы и клиентского приложения Oktell. XML-содержимое описывает не только параметры, но и само действие (действия в общем случае). Не изменяя интерфейса подключения plugin-программ при помощи этих методов будут расширяться возможности взаимодействия, добавляться новые сервисы в клиентское приложение Oktell для использования в plugin-программах.<br />
<br />
==Событие OnQuery==<br />
<br />
Общее описание метода приведено в статье «[[Описание_базовых_элементов_интерфейса#Сервисное взаимодействие|Базовые элементы интерфейса. OnQuery]]». В текущем разделе приводится формат параметров при обмене сообщениями в контексте метода.<br />
<br />
<br />
===Параметр (запрос от plugin-программы к приложению Oktell)===<br />
<br />
Все запросы определяются передаваемым в метод параметром. Ответ может отсутствовать, если выполняется команда, не предусматривающая возвращаемого значения, однако параметр должен присутствовать всегда.<br />
<br />
Для простоты и однотипности организации кода приложение Oktell всегда возвращает ответ (в простейшем случае - единственное свойство <span style="color:green">resultcode</span>).<br />
<br />
В общем виде запрос состоит из нескольких независимых подзапросов, исполняемых поочередно. Каждый запрос в теле XML-структуры установленного образца имеет вид элемента property_set первого уровня (вложенного в основную коллекцию). Тип запроса определяется строковым кодом (значением атрибута <span style="color:green">name</span>) элемента <span style="color:green">property_set</span>. Все необходимые для исполнения запроса параметры составляют свойства элемента. В отдельных случаях элемент может иметь сложную структуру, содержать коллекцию вложенных элементов.<br />
<br />
<u>Структура параметра-запроса:</u><br />
<br />
<?xml version="1.0" encoding="utf-16"?><br />
<oktellxmlmapper version="80710"><br />
<data name="query" count="..."><br />
<property_set name="..." id="..."><br />
...<br />
</property_set><br />
<span style="color:blue">...........................................</span><br />
<span style="color:blue">...........................................</span><br />
<span style="color:blue">...........................................</span><br />
<property_set name="..." id="..."><br />
<span style="color:blue">...</span><br />
</property_set> <br />
</data><br />
</oktellxmlmapper><br />
<br />
<br />
В частном наиболее употребимом случае запрос состоит из одной команды (одного блока <span style="color:green">property_set</span>). Соответствующий ему ответ также состоит из одного блока, куда в качестве атрибутов главного тэга копируются атрибуты тэга запроса. Атрибут id не является обязательным и в приложении Oktell не анализируется.<br />
<br />
<br />
===Возвращаемое значение (ответ приложения Oktell на запрос plugin-программы)===<br />
<br />
<br />
<u>Структура ответа:</u><br />
<br />
<?xml version="1.0" encoding="utf-16"?><br />
<oktellxmlmapper version="80710"><br />
<data name="queryresult" count="..."><br />
<property_set name="..." id="..."><br />
<property_simple key="resultcode" value="..." name="..." /><br />
<property_cdata key="resultdescription"><![CDATA[...]]></property_cdata><br />
...<br />
</property_set><br />
<span style="color:blue">...........................................</span><br />
<span style="color:blue">...........................................</span><br />
<span style="color:blue">...........................................</span><br />
<property_set name="..." id="..."><br />
<property_simple key="resultcode" value="..." name="..." /><br />
<property_cdata key="resultdescription"><![CDATA[...]]></property_cdata><br />
<span style="color:blue">...</span><br />
</property_set> <br />
</data><br />
</oktellxmlmapper><br />
<br />
<br />
Каждый элемент <span style="color:green">property_set</span> в базовой коллекции соответствует элементу в запросе. Может быть выполнена часть запросов, а некоторые (например из-за содержащихся в параметрах запроса ошибок) будут иметь неудачный код возврата.<br />
<br />
В частном наиболее употребимом случае запрос состоит из одной команды (одного блока <span style="color:green">property_set</span>). Соответствующий ему ответ также состоит из одного блока.<br />
<br />
Существует единственный случай, когда ответ не имеет сопоставления с запросом - если строка XML имеет некорректный вид или нестандартный для интерфейса формат. В этом случае ответ будет возвращен в виде:<br />
<br />
<?xml version="1.0" encoding="utf-16"?><br />
<oktellxmlmapper version="80710"><br />
<data name="queryresult" count="1"><br />
<property_set name="commonresult"><br />
<property_simple key="resultcode" value="105" name="ErrorInputXml" /><br />
<property_cdata key="resultdescription"><![CDATA[Неверный формат XML-запроса]]></property_cdata> <br />
</property_set><br />
</data><br />
</oktellxmlmapper><br />
<br />
<br />
Возможные коды результатов (могут пополняться вместе с функционалом сервисного взаимодействия) представлены перечислением:<br />
<br />
<span style="color:blue">private enum</span> EQueryResult<br />
{<br />
Success = 100, <span style="color:darkviolet">//Запрос успешно выполнен </span><br />
Exception = 101, <span style="color:darkviolet">//При выполнении запроса возникло исключение (текст в блоке resultdescription)</span> <br />
UnknownCommand = 102, <span style="color:darkviolet">//Неизвестный тип запроса </span><br />
IncorrectParameter = 103, <span style="color:darkviolet">//Не задан или некорректно задан необходимый параметр </span><br />
Error = 104, <span style="color:darkviolet">//Общая ошибка </span><br />
ErrorInputXml = 105, <span style="color:darkviolet">//Ошибка при разборе XML-содержимого запроса </span><br />
}<br />
<br />
<br />
===Допустимые типы запросов===<br />
<br />
:*[[Сервисное взаимодействие#db|db]]<br />
:*[[Сервисное взаимодействие#dbdataset|dbdataset]]<br />
:*[[Сервисное взаимодействие#dbarbitrarydataset|dbarbitrarydataset]]<br />
:*[[Сервисное взаимодействие#dbtransaction|dbtransaction]]<br />
:*[[Сервисное взаимодействие#callnumber|callnumber]]<br />
:*[[Сервисное взаимодействие#switchnumber|switchnumber]]<br />
:*[[Сервисное взаимодействие#callabort|callabort]]<br />
:*[[Сервисное взаимодействие#log|log]]<br />
:*[[Сервисное взаимодействие#notify|notify]]<br />
:*[[Сервисное взаимодействие#tabs|tabs]]<br />
:*[[Сервисное взаимодействие#tabindex|tabindex]]<br />
:*[[Сервисное взаимодействие#headertext|headertext]]<br />
:*[[Сервисное взаимодействие#headercolor|headercolor]]<br />
:*[[Сервисное взаимодействие#faxsend|faxsend]]<br />
:*[[Сервисное взаимодействие#faxabort|faxabort]]<br />
:*[[Сервисное взаимодействие#downloadrecordbyid|downloadrecordbyid]]<br />
:*[[Сервисное взаимодействие#downloadrecordsbychain|downloadrecordsbychain]]<br />
:*[[Сервисное взаимодействие#uploadfiletoserver|uploadfiletoserver]]<br />
:*[[Сервисное взаимодействие#downloadfilefromserver|downloadfilefromserver]]<br />
:*[[Сервисное взаимодействие#deletefilefromserver|deletefilefromserver]]<br />
:*[[Сервисное взаимодействие#showdirectoryonserver|showdirectoryonserver]]<br />
:*[[Сервисное взаимодействие#sethandleevent|sethandleevent]]<br />
:*[[Сервисное взаимодействие#svcscriptstart|svcscriptstart]]<br />
:*[[Сервисное взаимодействие#headsetcommand|headsetcommand]]<br />
:*[[Сервисное взаимодействие#headsetcheckstate|headsetcheckstate]]<br />
:*[[Сервисное взаимодействие#getallusersfullinfo|getallusersfullinfo]]<br />
:*[[Сервисное взаимодействие#getspecifieduserfullinfo|getspecifieduserfullinfo]]<br />
:*[[Сервисное взаимодействие#getkeyid|getkeyid]]<br />
:*[[Сервисное взаимодействие#getqueueitems|getqueueitems]]<br />
:*[[Сервисное взаимодействие#interaction|interaction]]<br />
<br />
<br />
*<h4>db</h4><br />
<br />
Осуществляет запрос к БД средствами Oktell. <br />
<br />
В теле элемента <span style="color:green">property_set</span> должно быть указано свойство <span style="color:green">sqltext</span>. Текст запроса должен иметь полностью сформированный вид и будет передан без дополнительных параметров на сервер, а затем в БД. Запрос должен представлять из себя один batch-блок, и может иметь любую сложность (содержать переменные, курсоры, вести обработку в цикле и т.д.). При необходимости текст запроса может быть преобразован в Base64 (предварительное преобразование в Unicode) и передан через поле <span style="color:green">sqltextb64</span>. Присутствие одного из них обязательно.<br />
<br />
Возвращаемое значение (одиночный набор) будет преобразовано в XML-структуру и возвращено в plugin-программу в виде ответа (в соответствующем разделе полного запроса).<br />
<br />
При корректном парсинге параметров и отправке запроса на сервер в любом случае в свойство <span style="color:green">resultcode</span> будет занесен успешный результат. Однако свойство <span style="color:green">sqlresultcode</span> будет содержать код результата исполнения запроса в БД, который может отличаться от успешного.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="db" id="..."><br />
<property_cdata key="sqltext"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
<u>Структура ответа в случае успешного выполнения:</u><br />
<br />
<property_set name="db" id="..."><br />
<span style="color:green"><nowiki><!--##### Общие свойства #####--></nowiki></span><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_simple key="sqlresultcode" value="0" name="qrSuccess" /><br />
<property_cdata key="sqlresultdescription"><![CDATA[qrSuccess]]></property_cdata><br />
<span style="color:green"><nowiki><!--##### Возвращаемый набор #####--></nowiki></span><br />
<property_collection name="table" count="..."><br />
<span style="color:green"><nowiki><!--##### Описание столбцов #####--></nowiki></span><br />
<property_set name="tableheader"><br />
<property_collection name="columns" count="..."><br />
<span style="color:green"><nowiki><!--##### Один столбец: индекс, название, тип и полное название типа #####--></nowiki></span><br />
<property_set name="columninfo" id="0"><br />
<property_simple key="index" value="0" /><br />
<property_simple key="name" value="Id" /><br />
<property_simple key="typename" value="Guid" /><br />
<property_cdata key="typefullname"><![CDATA[System.Guid]]></property_cdata><br />
</property_set><br />
<property_set name="columninfo" id="2"><br />
<property_simple key="index" value="1" /><br />
<property_simple key="name" value="Name" /><br />
<property_simple key="typename" value="String" /><br />
<property_cdata key="typefullname"><![CDATA[System.String]]></property_cdata><br />
</property_set><br />
<span style="color:blue">...............</span><br />
</property_collection><br />
</property_set><br />
<span style="color:green"><nowiki><!--##### Раздел с данными #####--></nowiki></span><br />
<property_set name="tabledata"><br />
<property_collection name="rows" count="2"><br />
<span style="color:green"><nowiki><!--##### Одна строка: индекс строки, коллекция ячеек (значений) #####--></nowiki></span><br />
<property_set name="row" id="0"><br />
<span style="color:green"><nowiki><!--##### Все ячейки #####--></nowiki></span><br />
<property_collection name="cells" count="2"><br />
<span style="color:green"><nowiki><!--##### Одна ячейка: индекс столбца, значение #####--></nowiki></span><br />
<property_set name="cell" id="0"><br />
<property_simple key="cellvalue" value="17e640e1-1d55-4e45-a193-0469cbcd2dce" /><br />
</property_set><br />
<property_set name="cell" id="1"><br />
<property_cdata key="cellvalue"><![CDATA[Максим]]></property_cdata><br />
</property_set><br />
</property_collection><br />
</property_set><br />
<property_set name="row" id="1"><br />
<property_collection name="cells" count="2"><br />
<property_set name="cell" id="0"><br />
<property_simple key="cellvalue" value="309a147f-6248-4fbd-8b28-09b679c8297a" /><br />
</property_set><br />
<property_set name="cell" id="1"><br />
<property_simple key="cellvalue" value="z08" /><br />
</property_set><br />
</property_collection><br />
</property_set><br />
</property_collection><br />
</property_set><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>dbdataset </h4><br />
<br />
Осуществляет запрос к БД средствами Oktell. В отличие от метода [[Сервисное_взаимодействие#db|«db»]] структуру, получаемую на сервере, загружает в DataSet и формирует на ее базе стандартную XML строку, преобразованную в Base64. <br />
<br />
Для обратного преобразования необходимо полученную из поля CDATA строку подвергнуть обработке следующим кодом (C#):<br />
<br />
DataSet ds = <span style="color:blue">new</span> DataSet();<br />
MemoryStream ms = <span style="color:blue">new</span> MemoryStream ( Convert.FromBase64String ( dsxml ) );<br />
ds.ReadXml ( ms );<br />
<br />
В поле <span style="color:green">sqltext</span> передается текст запроса SQL. Текст запроса должен иметь полностью сформированный вид и будет передан без дополнительных параметров на сервер, а затем в БД. Запрос должен представлять из себя один batch-блок, и может иметь любую сложность (содержать переменные, курсоры, вести обработку в цикле и т.д.). При необходимости текст запроса может быть преобразован в Base64 (предварительное преобразование в Unicode) и передан через поле <span style="color:green">sqltextb64</span>. Присутствие одного из них обязательно.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="dbdataset" id="..."><br />
<property_cdata key="sqltext"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
<u>Структура ответа в случае успешного выполнения:</u><br />
<br />
<property_set name="db" id="..."><br />
<span style="color:green"><nowiki><!--##### Общие свойства #####--></nowiki></span><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_simple key="sqlresultcode" value="0" name="qrSuccess" /><br />
<property_cdata key="sqlresultdescription"><![CDATA[qrSuccess]]></property_cdata><br />
<span style="color:green"><nowiki><!--##### Возвращаемый набор #####--></nowiki></span><br />
<property_collection name="dataset" count="1"><br />
<span style="color:green"><nowiki><!--##### Описание столбцов #####--></nowiki></span><br />
<property_set name="datasetxmlb64"><br />
<property_cdata key="xmlb64"><![CDATA[.....Base64......]]></property_cdata><br />
</property_set><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>dbarbitrarydataset</h4><br />
<br />
Осуществляет запрос к БД средствами Oktell. В отличие от методов [[Сервисное_взаимодействие#db|«db»]] и [[Сервисное_взаимодействие#dbdataset|«dbdataset»]] позволяет подключаться к различным БД посредством ADO, OLE, ODBC, Oracle. Cтруктуру, получаемую на сервере, загружает в DataSet и формирует на ее базе XML строку, преобразованную в Base64. <br />
<br />
Для обратного преобразования необходимо полученную из поля CDATA строку подвергнуть обработке следующим кодом (C#):<br />
<br />
DataSet ds = <span style="color:blue">new</span> DataSet();<br />
MemoryStream ms = <span style="color:blue">new</span> MemoryStream ( Convert.FromBase64String ( dsxml ) );<br />
ds.ReadXml ( ms );<br />
<br />
<br />
Передаваемый параметр должен содержать указание направления (поле <span style="color:green">direction</span>) числовым значением из следующего набора:<br />
<br />
SQLServerSelf = 1 <span style="color:darkviolet">//Подключение к БД Oktell</span><br />
SQLServerOther = 2 <span style="color:darkviolet">//Подключение к сторонней базе MS SQL</span><br />
OLE = 3 <span style="color:darkviolet">//Подключение к OLE-драйверу</span><br />
Oracle = 4 <span style="color:darkviolet">//Подключение к Oracle-драйверу</span><br />
Odbc = 5 <span style="color:darkviolet">//Подключение к ODBC драйверу</span><br />
<br />
Если требуется подключение к собственной БД Oktell, поле direction можно не указывать.<br />
<br />
Для подключения к сторонним БД необходимо указание строки подключения к БД (поле <span style="color:green">connectionstring</span>). Если осуществляется подключение к собственной БД Oktell, строка подключения игнорируется. <br />
<br />
В поле <span style="color:green">sqltext</span> передается текст запроса SQL. Текст запроса должен иметь полностью сформированный вид и будет передан без дополнительных параметров на сервер, а затем в БД. Запрос должен представлять из себя один batch-блок, и может иметь любую сложность (содержать переменные, курсоры, вести обработку в цикле и т.д.). При необходимости текст запроса может быть преобразован в Base64 (предварительное преобразование в Unicode) и передан через поле <span style="color:green">sqltextb64</span>. Присутствие одного из них обязательно.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="dbarbitrarydataset" id="..."><br />
<property_cdata key="direction" value="3"/><br />
<property_cdata key="connectionstring"><![CDATA[Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Base; Extended Properties=dBase IV]]><br />
</property_cdata><br />
<property_cdata key="sqltext"><![CDATA[...]]></property_cdata><br />
<property_cdata key="sqltextb64"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
Если при выполнении запроса возникает ошибка или исключение, то конкретный код исключения возвращается в поле sqlresultcode, а коллекция dataset отсутствует. В случае успешного выполнения код возврата равен 0.<br />
<br />
Структура ответа в случае успешного выполнения:<br />
<br />
<property_set name="dbarbitrarydataset" id="..."><br />
<!--##### Общие свойства #####--><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_simple key="sqlresultcode" value="0" /><br />
<!--##### Возвращаемый набор #####--><br />
<property_collection name="dataset" count="1"><br />
<!--##### Описание столбцов #####--><br />
<property_set name="datasetxmlb64"><br />
<property_cdata key="xmlb64"><![CDATA[.....Base64......]]></property_cdata><br />
</property_set><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>dbtransaction</h4><br />
<br />
Осуществляет запрос к БД средствами Oktell. Работает в транзакции. Работа с помощью метода состоит из нескольких этапов: создание подключения и транзакции, поочередное выполнение одного или нескольких запросов с возвратом результата выполнения в виде DataSet, и применении или откате транзакции. Поле mode параметра определяет режим работы (этап): <br />
<br />
Сreate = 1 <span style="color:darkviolet">//Подключение к БД, создание транзакции</span><br />
Query = 2 <span style="color:darkviolet">//Выполнение запроса в существующей транзакции</span><br />
Commit = 3 <span style="color:darkviolet">//Подтверждение и применение изменений</span><br />
Rollback = 4 <span style="color:darkviolet">//Откат транзакции к прежнему состоянию</span><br />
<br />
<br />
Режим <span style="color:darkorange">Create</span> осуществляет подключение к БД и создает транзакцию. Подключение и транзакция сохраняются на сервере до момента выполнения метода '''OnQuery.dbtransaction''' в режиме '''Commit''' или '''Rollback'''. Транзакция автоматически откатывается и подключение закрывается в случае выхода пользователя из системы, но этого режима лучше избегать, так как активная транзакция может парализовать работу других служб. Передаваемый параметр должен содержать указание направления (поле <span style="color:green">direction</span>) числовым значением из следующего набора:<br />
<br />
SQLServerSelf = 1 <span style="color:darkviolet">//Подключение к БД Oktell</span><br />
SQLServerOther = 2 <span style="color:darkviolet">//Подключение к сторонней базе MS SQL</span><br />
OLE = 3 <span style="color:darkviolet">//Подключение к OLE-драйверу</span><br />
Oracle = 4 <span style="color:darkviolet">//Подключение к Oracle-драйверу</span><br />
Odbc = 5 <span style="color:darkviolet">//Подключение к ODBC драйверу</span><br />
<br />
<br />
Если требуется подключение к собственной БД Oktell, поле direction можно не указывать. Для подключения к сторонним БД необходимо указание строки подключения к БД (поле <span style="color:green">connectionstring</span>). Если осуществляется подключение к собственной БД Oktell, строка подключения игнорируется. Необходимо также определить поле checkcode, являющееся произвольным числовым значением, которое будет гарантировать доступ к транзакции только исполнителю. На каждом последующем режиме работы с транзакцией требуется указание того <span style="color:green">checkcode</span>, который был определен при создании подключения. В противном случае метод не будет выполнен и будет возвращен код соответствующей ошибки (50045). Для создания новой транзакции необходимо сначала дождаться окончания выполнения предыдущей, или закрыть ее принудительно (методами '''Commit''' или '''Rollback''' с совпадающим кодом checkcode). Если в момент создания уже существует активная транзакция, будет возвращен код ошибки 50047.<br />
<br />
Режим <span style="color:darkorange">Query</span> осуществляет запрос через ранее созданное подключение и активную транзакцию. Cтруктуру, получаемую на сервере, загружает в DataSet и формирует на ее базе XML строку, преобразованную в Base64. Для обратного преобразования необходимо полученную из поля CDATA строку подвергнуть обработке следующим кодом (C#):<br />
<br />
DataSet ds = <span style="color:blue">new</span> DataSet();<br />
MemoryStream ms = <span style="color:blue">new</span> MemoryStream ( Convert.FromBase64String ( dsxml ) );<br />
ds.ReadXml ( ms );<br />
<br />
<br />
В поле <span style="color:green">sqltext</span> передается текст запроса SQL. Текст запроса должен иметь полностью сформированный вид и будет передан без дополнительных параметров на сервер, а затем в БД. Запрос должен представлять из себя один batch-блок, и может иметь любую сложность (содержать переменные, курсоры, вести обработку в цикле и т.д.). При необходимости текст запроса может быть преобразован в Base64 (предварительное преобразование в Unicode) и передан через поле <span style="color:green">sqltextb64</span>. Присутствие одного из них обязательно. Также для выполнения запроса в транзакции требуется обязательное указание поля <span style="color:green">checkcode</span>, которое должно соответствовать значению, определенному при создании подключения и транзакции. В противном случае будет возвращаться код соответствующей ошибки (50045 в случае, если код не совпадает, 50046 в случае, если транзакция не существует).<br />
<br />
Режим <span style="color:darkorange">Commit</span> завершает транзакцию с применением изменений, а также закрывает подключение. После выполнения метода следующее обращение должно вновь создать подключение (возможно к другой БД). Для корректного выполнения метода требуется обязательное указание поля <span style="color:green">checkcode</span>, значение которого должно соответствовать значению, определенному при создании подключения и транзакции. В противном случае метод не будет выполнен и будет возвращен код соответствующей ошибки.<br />
<br />
Режим <span style="color:darkorange">Rollback</span> завершает транзакцию с откатом изменений, а также закрывает подключение. После выполнения метода следующее обращение должно вновь создать подключение (возможно к другой БД). Для корректного выполнения метода требуется обязательное указание поля <span style="color:green">checkcode</span>, значение которого должно соответствовать значению, определенному при создании подключения и транзакции. В противном случае метод не будет выполнен и будет возвращен код соответствующей ошибки.<br />
<br />
<u>Возможные коды ошибок:</u><br />
<br />
:*'''50043''' - Ошибка выполнения запроса<br />
:*'''50044''' - Ошибка при подключении к указанной БД<br />
:*'''50045''' - Переданный код транзакции не соответствует реальному<br />
:*'''50046''' - Не обнаружена активная транзакция<br />
:*'''50047''' - Транзакция уже существует<br />
:*Прочие коды совпадают с кодами ошибок соответствующих драйверов подключения.<br />
<br />
<br />
'''Примеры запросов'''<br />
<br />
<u>Создание транзакции:</u><br />
<br />
<property_set name="dbtransaction" id="..."><br />
<property_cdata key="mode" value="1"/><br />
<property_cdata key="direction" value="3"/><br />
<property_cdata key="connectionstring"><![CDATA[Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Base; Extended Properties=dBase IV]]><br />
</property_cdata><br />
<property_cdata key="checkcode" value="42556232"/><br />
</property_set><br />
<br />
<br />
<u>Выполнение запроса:</u><br />
<br />
<property_set name="dbtransaction" id="..."><br />
<property_cdata key="mode" value="2"/><br />
<property_cdata key="checkcode" value="42556232"/><br />
<property_cdata key="sqltext"><![CDATA[...]]></property_cdata><br />
<property_cdata key="sqltextb64"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
<u>Применение (откат) транзакции:</u><br />
<br />
<property_set name="dbtransaction" id="..."><br />
<property_cdata key="mode" value="3"/><br />
<property_cdata key="checkcode" value="42556232"/><br />
</property_set><br />
<br />
<br />
Если при выполнении запроса возникает ошибка или исключение, то конкретный код исключения возвращается в поле <span style="color:green">sqlresultcode</span>, а коллекция <span style="color:green">dataset</span> отсутствует. В случае успешного выполнения код возврата равен 0.<br />
<br />
<br />
Структура ответа в случае успешного выполнения:<br />
<br />
<property_set name="dbtransaction" id="..."><br />
<span style="color:green"><nowiki><!--##### Общие свойства #####--></nowiki></span><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_simple key="sqlresultcode" value="0" /><br />
<span style="color:green"><nowiki><!--##### Возвращаемый набор #####--></nowiki></span><br />
<property_collection name="dataset" count="1"><br />
<span style="color:green"><nowiki><!--##### Описание столбцов #####--></nowiki></span><br />
<property_set name="datasetxmlb64"><br />
<property_cdata key="xmlb64"><![CDATA[.....Base64......]]></property_cdata><br />
</property_set><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>callnumber</h4><br />
<br />
Осуществляет запрос к серверу на совершение вызова средствами менеджера автодозвона. <br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="callnumber" id="..."><br />
<property_simple key="number" value="..." /><br />
<property_simple key="direction" value="..." /><br />
</property_set><br />
<br />
<br />
Свойство '''number''' содержит номер, вызов которого необходимо осуществить. Свойство '''direction''' может принимать значения "pbx" или "city" и определяет направление вызова - во внутренний номерной план или во внешние линии соответственно. Если свойство не будет указано или будет указано неверно, то вызов будет осуществляться во внутренний номерной план, если в нем зарегистрирован указанный номер, и на внешние линии иначе.<br />
<br />
<u>Структура ответа:</u><br />
<br />
<property_set name="callnumber" id="..."><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_simple key="resultdescription" value="Success" /><br />
<property_simple key="acmresultcode" value="0" name="cntStartedSuccessfully" /><br />
</property_set><br />
<br />
<br />
Свойство '''acmresultcode''' может принимать значения из перечисления:<br />
<br />
<span style="color:blue">public enum</span> EACMAnswer<br />
{<br />
cntStartedSuccessfully = 0, <span style="color:darkviolet">//Звонок успешно взят в реализацию </span><br />
cntUserNotReady = 1, <span style="color:darkviolet">//У осуществляющего вызов пользователя не найдены линии, готовые линии, или состояние кривое </span><br />
cntBusy = 2, <span style="color:darkviolet">//При звонке на внутренний номер - признак занятости. В очереди и сам повисеть может </span><br />
<span style="color:darkviolet">//(в дальнейшем реализуем как раз ожидание в очереди...) </span><br />
cntExtLineNotFound = 3, <span style="color:darkviolet">//Не найдены готовые внешние линии после длительного ожидания и нескольких попыток <br />
</span> <br />
cntError = 4, <span style="color:darkviolet">//Прочие ошибки, исключения </span><br />
cntControlNotReady = 5, <span style="color:darkviolet">//Режим не реализован</span> <br />
cntNumberNotFound = 6, <span style="color:darkviolet">//Внутренний номер не найден (если сервер самостоятельно определяет направление звонка, то это не задействовано) </span><br />
}<br />
<br />
*<h4>switchnumber</h4><br />
<br />
Осуществляет запрос к серверу на совершение переключения (flash-буферизации текущего абонента и последующего вызова указанного номера). <br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="switchnumber" id="..."><br />
<property_simple key="number" value="..." /><br />
<property_simple key="direction" value="..." /><br />
</property_set><br />
<br />
<br />
Свойство '''number''' содержит номер, вызов которого необходимо осуществить. Свойство '''direction''' может принимать значения "pbx" или "city" и определяет направление вызова - во внутренний номерной план или во внешние линии соответственно. Если свойство не будет указано или будет указано неверно, то вызов будет осуществляться во внутренний номерной план, если в нем зарегистрирован указанный номер, и на внешние линии иначе.<br />
<br />
Структура ответа совпадает с ответом команды [[Сервисное_взаимодействие#callnumber|callnumber]].<br />
<br />
<br />
*<h4>callabort</h4><br />
<br />
Осуществляет запрос к серверу на отмену предварительно запущенной процедуры вызова средствами автодозвона. Может вызываться в любое время - в случае обнаружения активной сессии автодозвона отменит ее, в противном случае просто вернет управление.<br />
<br />
<br />
<y>Структура запроса:</u><br />
<br />
<property_set name="callabort" id="..." /><br />
<br />
<br />
Ответ содержит только стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
<br />
*<h4>log</h4><br />
<br />
Осуществляет вывод текстовой информации в стандартный лог-журнал Plugin клиентского приложения Oktell. Текст логируемой строки может быть указан явно (поле <span style="color:green">logstring</span>) или в виде base64, преобразованного из unicode-кодировки (поле logstringb64).<br />
<br />
Указанием поля <span style="color:green">type</span> можно достичь вывода текстовой строки в лог-журнал Exception (значение "1") или Common (значение "2") клиентского приложения.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="log" id="..."><br />
<property_simple key="type" value="..." /> ("0" - plugin, "1" - exception, "2" - common)<br />
<property_cdata key="logstring"><![CDATA[...]]></property_cdata><br />
<property_cdata key="logstringb64"><![CDATA[.....base64.....]]></property_cdata><br />
</property_set><br />
<br />
<br />
Ответ содержит только стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
<br />
*<h4>notify</h4><br />
<br />
Осуществляет вывод текстовой информации в режиме всплывающего уведомления для текущего пользователя. В структуре запроса любые свойства могут быть пропущены.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="notify" id="..."><br />
<property_simple key="type" value="..." /> ("info", "warn", "err", "color")<br />
<property_simple key="autohide" value="..." /> ("1", "0")<br />
<property_simple key="savedb" value="..." /> ("1", "0")<br />
<property_simple key="color" value="..." /> ("White", "LightRed", "Green", "Azure", "DarkKhaki", ...)<br />
<property_cdata key="sender"><![CDATA[...]]></property_cdata><br />
<property_cdata key="text"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
:Варианты значений для свойства '''type''': info, warn, err, color.<br />
:Варианты значений для свойства '''autohide''': 0, 1.<br />
:Варианты значений для свойства '''savedb''': 0, 1.<br />
:Варианты значений для свойства '''color''': White, LightRed, Green, Azure, DarkKhaki, .... Названия всех цветов FrameWork.<br />
<br />
Ответ содержит только стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
<br />
*<h4>tabs</h4><br />
<br />
В случае использования формы в режиме отображения среди внешних модулей осуществляет отображение указанных вкладок стандартном заголовке модуля. Это может понадобиться для реализации усложненных модулей с различными интерфейсными действиями внутри одной стартовой формы.<br />
<br />
<br />
[[Файл:Сервисное взаимодействие 001.png|center]]<br />
<br />
<br />
Для корректного применения в структуре параметров команды необходимо указание формы ('''idform''') и уникального идентификатора, передаваемого из приложения Oktell при ее создании ('''idshow''').<br />
<br />
Каждый последующий вызов будет уничтожать существующие на данный момент вкладки и создавать их по новой согласно параметру.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="tabs" id="..."><br />
<property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="idform" value="a69f5237-77ef-47fd-97d7-64e0da1c0457" /><br />
<property_simple key="idshow" value="f489439b-12f3-4425-91b5-d03e89101665" /><br />
<property_simple key="activeindex" value="2" /><br />
<property_collection name="tabs" count="..."><br />
<property_set name="tabinfo"><br />
<property_simple key="index" value="1" /><br />
<property_cdata key="name"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<property_set name="tabinfo"><br />
<property_simple key="index" value="2" /><br />
<property_cdata key="name"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<span style="color:blue">...</span><br />
</property_collection><br />
</property_set><br />
<br />
<br />
Свойство '''activeindex''' устанавливает индекс вкладки (согласно индексам, определенных в коллекции-перечислении), которая должна стать активной после отображения.<br />
<br />
Коллекция описателей вкладок - элементы <span style="color:green">property_set</span>, вложенные в базовый элемент команды - содержит описание каждой вкладки набором {index, name}, который определяет код вкладки при обмене событийными сообщениями по части вкладок между приложением и plugin-программой, а также отображаемое в панели заголовка название.<br />
<br />
Ответ содержит только стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
<br />
*<h4>tabindex</h4><br />
<br />
В случае использования формы в режиме отображения среди внешних модулей осуществляет смену активной вкладки по инициативе plugin-программы. <br />
<br />
Для корректного применения в структуре параметров команды необходимо указание формы ('''idform''') и уникального идентификатора, передаваемого из приложения Oktell при ее создании ('''idshow''').<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="tabs" id="..."><br />
<property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="idform" value="a69f5237-77ef-47fd-97d7-64e0da1c0457" /><br />
<property_simple key="idshow" value="f489439b-12f3-4425-91b5-d03e89101665" /><br />
<property_simple key="activeindex" value="..." /> <br />
</property_set><br />
<br />
<br />
Свойство '''activeindex''' устанавливает индекс вкладки (согласно индексам, определенных в коллекции-перечислении), которая должна стать активной. Индекс вкладки определяется при генерации события на отображение вкладок [[Сервисное_взаимодействие#tabs|tabs]].<br />
<br />
Ответ содержит только стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
<br />
*<h4>headertext</h4><br />
<br />
В случае использования формы в режиме отображения среди внешних модулей осуществляет смену текста заголовка модуля в главном окне приложения Oktell по инициативе plugin-программы. <br />
<br />
Для корректного применения в структуре параметров команды необходимо указание формы (idform) и уникального идентификатора, передаваемого из приложения Oktell при ее создании (idshow). Свойство text определяет новое значение заголовка.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="headertext" id="..."><br />
<property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="idform" value="a69f5237-77ef-47fd-97d7-64e0da1c0457" /><br />
<property_simple key="idshow" value="f489439b-12f3-4425-91b5-d03e89101665" /><br />
<property_cdata key="text"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
Ответ содержит только стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
<br />
*<h4>headercolor</h4><br />
<br />
В случае использования формы в режиме отображения среди внешних модулей осуществляет смену цвета заголовка модуля в главном окне приложения Oktell по инициативе plugin-программы. <br />
<br />
Для корректного применения в структуре параметров команды необходимо указание формы ('''idform''') и уникального идентификатора, передаваемого из приложения Oktell при ее создании ('''idshow'''). Свойство '''color''' определяет новое значение цвета в числовом формате (int argb). В приведенном примере указан десятичный эквивалент числа 0x00FF0000 - красный цвет.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="headercolor" id="..."><br />
<property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="idform" value="a69f5237-77ef-47fd-97d7-64e0da1c0457" /><br />
<property_simple key="idshow" value="f489439b-12f3-4425-91b5-d03e89101665" /><br />
<property_cdata key="color" value="16711680"/><br />
</property_set><br />
<br />
<br />
Ответ содержит только стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
<br />
*<h4>faxsend</h4><br />
<br />
В момент активной коммутации выполняет команду на переключение в режим отправки факса через оппозитный канал (функция аналогичная команде "Отправка факса" модуля "Телефон" клиентского приложения Oktell). Функции по работе с факсом приложения и plugin-программы взаимозаменяемы и взаимодополняемы.<br />
<br />
Свойство '''filepath''' определяет полный путь на клиентском компьютере к файлу-изображению для отправки через факс по оппозитному каналу.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="faxsend" id="..."><br />
<property_cdata key="filepath"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription''', а также поле '''faxsendresult''' с результатом выполнения команды на отправку. В нем "0" указывает на обрыв выполнения команды из-за несоответствия условий, например, если на оппозитном канале отсутствует функция факса.<br />
<br />
<br />
*<h4>faxabort</h4><br />
<br />
<br />
В момент активного сеанса передачи факса через оппозитный канал (ручной режим передачи) выполняет обрыв и переход в коммутацию с оппозитным каналом (функция аналогичная команде "Отмена факса" модуля "Телефон" клиентского приложения Oktell). Функции по работе с факсом приложения и plugin-программы взаимозаменяемы и взаимодополняемы.<br />
<br />
Свойство '''filepath''' определяет полный путь на клиентском компьютере к файлу-изображению для отправки через факс по оппозитному каналу.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="faxabort" id="..."><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription''', а также поле '''faxabortresult''' с результатом выполнения команды на обрыв факса. В нем "0" указывает на то, что факс-передача не осуществлялась, и команда на обрыв была пропущена.<br />
<br />
<br />
*<h4>downloadrecordbyid</h4><br />
<br />
Осуществляет запрос к серверу на закачку файла записи разговора (коммутации) из хранилища записей на сервере на клиентский компьютер в указанное место. В случае, если на сервере файлы записи каналов одного разговора еще не микшированы, производится моментальное микширование и пересылка одного файла. <br />
<br />
Свойство '''idconn''' определяет код (Guid) коммутации, запись которой требуется скачать, в формате "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX". Свойство '''filepath''' определяет полный путь на клиентском компьютере к итоговому файлу, куда будет сохранена запись.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="downloadrecordbyid" id="..."><br />
<property_cdata key="idconn"><![CDATA[...]]></property_cdata><br />
<property_cdata key="filepath"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля resultcode и resultdescription, а также поле downloadresult с результатом выполнения команды на загрузку файлов. В нем "1" указывает на успешное завершение операции, "0" - файлы не найдены и не загружены.<br />
<br />
<br />
*<h4>downloadrecordsbychain</h4><br />
<br />
Осуществляет запрос к серверу на закачку всех файлов записей разговоров для указанной цепочки коммутаций из хранилища на сервере на клиентский компьютер в указанную папку. В случае, если на сервере файлы записи каналов одного разговора еще не микшированы, производится моментальное микширование и пересылка единого файла для каждой коммутации. <br />
<br />
Свойство '''idchain''' определяет код (Guid) цепочки, записи разговоров которой требуется скачать, в формате "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX". Свойство '''folderpath''' определяет полный путь на клиентском компьютере к каталогу, куда будут сохранены записи с исходными именами файлов.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="downloadrecordsbychain" id="..."><br />
<property_cdata key="idchain"><![CDATA[...]]></property_cdata><br />
<property_cdata key="folderpath"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription''', а также поле '''downloadresult''' с результатом выполнения команды на загрузку файлов. В нем «1» указывает на успешное завершение операции, «0» - файлы не найдены и не загружены.<br />
<br />
Поле '''downloadcount''' в ответе появляется в случае успешной загрузки хотя бы одного файла и содержит общее количество загруженных файлов. Также в ответе перечислены полные пути на клиентском компьютере ко всем загруженным файлам.<br />
<br />
<br />
<u>Структура ответа:</u><br />
<br />
<property_set name="downloadrecordsbychain" id="..."><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_simple key="resultdescription" value="Success" /><br />
<property_simple key="downloadresult" value="1" name="success" /><br />
<property_simple key="downloadcount" value="2" /><br />
<property_collection name="filepaths" count="2"><br />
<property_set id="0"><br />
<property_simple key="index" value="0" /><br />
<property_cdata key="filepath"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<property_set id="1"><br />
<property_simple key="index" value="1" /><br />
<property_cdata key="filepath"><![CDATA[...]]></property_cdata><br />
</property_set><br />
................<br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>uploadfiletoserver</h4><br />
<br />
Осуществляет запрос к серверу на закачку одного файла с клиента на сервер. Размещение осуществляется в указанном месте на сервере. Файл должен существовать в указанном месте клиентского компьютера. <br />
<br />
Свойство '''localpath''' определяет абсолютный путь к файлу на клиентском компьютере. Свойство '''serverpath''' определяет путь на сервере, куда требуется загрузить файл. Может быть задан абсолютный путь или относительный (от каталога серверной службы) - в этом случае поле '''isrelative''' должно быть указано и иметь значение "1". Может быть указан полный путь к файлу (тогда исходное имя файла при сохранении теряется в пользу указанного), либо может быть указан путь к каталогу (тогда файл сохранится с исходным именем) - в этом случае поле '''isfolder''' должно быть указано и иметь значение "1".<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="uploadfiletoserver" id="..."><br />
<property_cdata key="localpath"><![CDATA[...]]></property_cdata><br />
<property_cdata key="serverpath"><![CDATA[...]]></property_cdata><br />
<property_simple key="isrelative" value="0" /><br />
<property_simple key="isfolder" value="0" /><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription''', а также поле '''serverfilepath''' - возвращает полный путь к загруженному файлу на сервере (может быть необходим plugin-программе в случае, если используется загрузка по относительному пути).<br />
<br />
<br />
*<h4>downloadfilefromserver</h4><br />
<br />
Осуществляет запрос к серверу на скачивание одного файла с сервера на клиентский компьютер. Размещение осуществляется в указанном месте на локальной машине. Файл должен существовать в указанном месте серверного компьютера. <br />
<br />
Свойство '''localpath''' определяет абсолютный путь к файлу на клиентском компьютере, куда следует разместить файл после загрузки с сервера. Свойство '''serverpath''' определяет путь на сервере, откуда требуется скачать файл. Может быть задан абсолютный путь или относительный (от каталога серверной службы) - в этом случае поле '''isrelative''' должно быть указано и иметь значение "1".<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="downloadfilefromserver" id="..."><br />
<property_cdata key="localpath"><![CDATA[...]]></property_cdata><br />
<property_cdata key="serverpath"><![CDATA[...]]></property_cdata><br />
<property_simple key="isrelative" value="0" /><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription''', а также поле '''downloadresult''' - «1» в случае успешного закачивания файла, «0» в случае не обнаружения файла в указанном месте сервера.<br />
<br />
<br />
*<h4>deletefilefromserver</h4><br />
<br />
Осуществляет запрос к серверу на удаление одного файла с сервера. Файл должен существовать в указанном месте серверного компьютера. <br />
<br />
Свойство '''serverpath''' определяет путь на сервере, откуда требуется скачать файл. Может быть задан абсолютный путь или относительный (от каталога серверной службы) - в этом случае поле '''isrelative''' должно быть указано и иметь значение "1".<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="deletefilefromserver" id="..."><br />
<property_cdata key="serverpath"><![CDATA[...]]></property_cdata><br />
<property_simple key="isrelative" value="0" /><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription''', а также поле '''deleteresult''' - «1» в случае успешного удаления файла, «0» в случае не обнаружения файла в указанном месте сервера или запрета на удаление.<br />
<br />
<br />
*<h4>showdirectoryonserver</h4><br />
<br />
Осуществляет запрос к серверу на получение структуры указанного каталога. <br />
<br />
Свойство '''serverpath''' определяет путь на сервере к исследуемому каталогу, структуру которого требуется получить. Может быть задан абсолютный путь или относительный (от каталога серверной службы) - в этом случае поле '''isrelative''' должно быть указано и иметь значение "1". Установленные поля '''showfiles''' и '''showdirs''' определяют соответственно перечисление файлов и подкаталогов. Поле '''pattern''' определяет маску выборки элементов (например *.txt).<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="showdirectoryonserver" id="..."><br />
<property_cdata key="serverpath"><![CDATA[...]]></property_cdata><br />
<property_simple key="isrelative" value="0" /><br />
<property_simple key="showfiles" value="1" /><br />
<property_simple key="showdirs" value="0" /><br />
<property_cdata key="pattern"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription''', а также поле '''showdirectoryresult''' - «0» в случае отсутствия каталога по указанному пути, и «1» в случае успешного выполнения операции. Раздел '''consistence''' содержит перечисление обнаруженных элементов.<br />
<br />
<br />
<u>Структура ответа:</u><br />
<br />
<property_set name="showdirectoryonserver" id="..."><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_simple key="resultdescription" value="Success" /><br />
<property_simple key="showdirectoryresult" value="1" name="success" /><br />
<property_collection name="consistence" count="2"><br />
<property_set name="directories"><br />
<property_cdata key="dir" value="0"><![CDATA[Subdir1]]></property_cdata> <br />
<property_cdata key="dir" value="1"><![CDATA[Subdir2]]></property_cdata> <br />
<property_cdata key="dir" value="2"><![CDATA[Subdir3]]></property_cdata> <br />
<property_cdata key="dir" value="3"><![CDATA[Subdir4]]></property_cdata> <br />
</property_set><br />
<property_set name="files"><br />
<property_cdata key="file" value="0"><![CDATA[1.txt]]></property_cdata><br />
</property_set><br />
<span style="color:blue"> ................</span><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>sethandleevent</h4><br />
<br />
Осуществляет подписку на указанные события приложения (сервера или клиентского модуля) или отписку от них.<br />
<br />
Сервер и клиентское приложение генерируют множество событий, не все из которых могут быть интересны plugin-программе (лишние события это всегда затрата лишних ресурсов и времени на пустую обработку). Соответственно события разбиты на группы, и плагины осуществляют таким образом подписку на группы. Строка-значение свойства '''eventtype''' определяет текстовый код направления подписки. Свойство '''handle''' со значением «1» подписывает указанный плагин на событийное направление, со значением «0» напротив отписывает. Для проведения подписки/отписки должен быть задан идентификатор плагин-программы.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="sethandleevent" id="..."><br />
<property_cdata key="idplugin"><![CDATA[...]]></property_cdata><br />
<property_simple key="handle" value="1" /><br />
<property_simple key="eventtype" value="phoneevent" /><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
События, генерируемые приложением, будут поступать после подписки на соответствующее направление в plugin-программу путем вызова метода [[Сервисное_взаимодействие#.D0.9C.D0.B5.D1.82.D0.BE.D0.B4_DoQuery|Метод DoQuery]]. В параметре будет указан тип и код направления, тип и код события, а также дополнительные параметры конкретного события. При этом событийные направления определяют [[Допустимые типы запросов DoQuery|допустимые типы запросов]] с кодами 203**.<br />
<br />
<br />
Доступные направления:<br />
<br />
:*'''phoneevent''' - события аппаратного модуля и логики АТС по управлению каналом, связанным с рабочим местом, на котором исполняется plugin-программа. <br />
<br />
<br />
*<h4>svcscriptstart</h4><br />
<br />
Осуществляет запрос к серверу на запуск служебного сценария по инициативе плагин-программы. Запуск может производиться в синхронном режиме с ожиданием исполнения и возвратом значения из служебной переменной сценария по завершению исполнения (в этом случае поток приложения блокируется до завершения или до таймаута). Также запуск может производиться в асинхронном режиме (без ожидания выполнения).<br />
<br />
Свойство '''scriptname''' определяет имя сценария. Полный путь вычисляется на сервере, сценарий загружается из папки общих служебных сценариев. Свойство '''startparam''' устанавливает при необходимости начальный стартовый параметр, передаваемый в компонент «Старт» сценария. Свойства '''startparam2''' и '''startparam3''' при необходимости устанавливают дополнительные стартовые параметры, доступные в служебном сценарии в разделе функций аргумента (функции «Входной параметр 2» и «Входной параметр 3»). Свойство '''startmode''' определяет режим запуска служебного сценария: «1» - асинхронный (только запуск), «2» - синхронный с ожиданием завершения исполнения и возвратом значения из служебной переменной «Возвращаемое значение». По умолчанию при отсутствии параметра выставляется синхронный режим. В синхронном режиме может быть задано свойство '''timeout''', определяющее в секундах максимальное время ожидания завершения работы сценария, по истечению которого сценарий продолжит выполнение, но управление вернется в плагин без ожидания возвращаемого значения.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="svcscriptstart" id="..."><br />
<property_cdata key="scriptname"><![CDATA[...]]></property_cdata><br />
<property_simple key="startparam" value="" /><br />
<property_simple key="startparam2" value="" /><br />
<property_simple key="startparam3" value="" /><br />
<property_simple key="startmode" value="2" /><br />
<property_simple key="timeout" value="1" /><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. Дополнительно возвращаются также несколько служебных значений. Поле '''started''' - «1» в случае успешного запуска сценария, «0» в случае, если сценарий не стартовал по какой-либо причине. Поле startresult - «0» в случае успешного исполнения команды, «10» в случае не обнаружения сценария, «11» в случае сбоя при запуске, «12» в случае таймаута ожидания в синхронном режиме. Поле '''returnvalue''' присутствует только в синхронном режиме и возвращает значение служебной переменной «Возвращаемое значение».<br />
<br />
<br />
*<h4>headsetcommand</h4><br />
<br />
Отправляет команду локальному модулю HAL, управляющему локальным устройством типа гарнитуры. Допускаются команды DTMF, Поднять трубку, Положить трубку, Генерировать флэш, Проиграть звуковой файл установленного формата (Oktell сам использует только для тестов, но функция доступна). Может потребоваться для организации в plugin-программе модуля, аналогичного встроенному софт-телефону приложения Oktell.<br />
<br />
Для устройств, не являющихся локально управляемыми гарнитурами, в общем случае метод бессмысленен. Однако его функционал незначительно расширен, так, например, вызов FLASH и DTMF достигают АТС в любом случае при наличии какого-либо устройства. Дополнительно, вызов HOOKDOWN для устройств, отличных от гарнитур, обрывает текущий сеанс коммутации, а также производит остановку сервиса автодозвона, если он был запущен.<br />
<br />
<br />
<u>Коды команд:</u><br />
<br />
hookup = 0 <span style="color:darkviolet">//поднять трубку или ответить на вызов </span><br />
hookdown = 1 <span style="color:darkviolet">//положить трубку или разорвать коммутацию </span><br />
flash = 2 <span style="color:darkviolet">//генерировать flash </span><br />
dtmf = 3 <span style="color:darkviolet">//отправить dtmf символы с канала на сервер </span><br />
playfile = 4 <span style="color:darkviolet">//воспроизвести мелодию в канал </span><br />
mute = 5 <span style="color:darkviolet">//включить/отключить исходящий звук </span><br />
<br />
<br />
Свойство '''command''' определяет требуемую к исполнению команду. В качестве значения могут быть заданы числовые коды или имена. В случае сложных команд, требующих указания параметра, ожидается наличие свойства '''data''', содержащего его значение (в случае команды dtmf в качестве параметра ожидается конкретный символ, в случае playfile - путь к файлу).<br />
<br />
<br />
<u>Структура запроса на примерах</u><br />
<br />
'''1.'''<br />
<property_set name="headsetcommand" id="..."><br />
<property_simple key="command" value="2" /><br />
</property_set><br />
<br />
<br />
'''2.'''<br />
<property_set name="headsetcommand" id="..."><br />
<property_simple key="command" value="3"/><br />
<span style="color:green"><nowiki><!-- (генерируемый символ dtmf) --></nowiki></span><br />
<property_simple key="data" value="*"/><br />
</property_set><br />
<br />
'''3.'''<br />
<property_set name="headsetcommand" id="..."><br />
<property_simple key="command" value="mute"/><br />
<span style="color:green"><nowiki><!-- (0-включить звук, 1-отключить звук) --></nowiki></span><br />
<property_simple key="data" value="1"/> <br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. Дополнительно возвращается также поле '''commandresult''', указывающее на результат исполнения.<br />
<br />
<br />
*<h4>headsetcheckstate</h4><br />
<br />
Производит запрос указанного в параметре состояния локального устройства (гарнитуры).<br />
<br />
<br />
<u>Коды команд:</u><br />
<br />
hookup = 1 <span style="color:darkviolet">//снята ли трубка </span><br />
ringing = 2 <span style="color:darkviolet">//осуществляется ли вызов устройства (звонок) </span><br />
connected = 3 <span style="color:darkviolet">//подключено/обнаружено ли устройство </span><br />
registered = 4 <span style="color:darkviolet">//зарегистрирован ли канал на сервере </span><br />
muted = 5 <span style="color:darkviolet">//отключен ли исходящий звук </span><br />
<br />
<br />
Свойство '''command''' определяет требуемое для определения состояние. В качестве значения могут быть заданы числовые коды или имена.<br />
<br />
<br />
<u>Структура запроса на примерах:</u><br />
<br />
<property_set name="headsetcheckstate" id="..."><br />
<property_simple key="command" value="2" /><br />
</property_set><br />
<br />
<br />
или<br />
<br />
<property_set name="headsetcheckstate" id="..."><br />
<property_simple key="command" value="ringing"/><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. Дополнительно возвращается также поле '''commandresult''', в котором содержится результат исполнения: «1» - состояние активно, «0» - состояние неактивно.<br />
<br />
<br />
*<h4>getallusersfullinfo</h4><br />
<br />
Осуществляет запрос к серверу на получение списка всех пользователей системы с их текущими состояниями.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="getallusersfullinfo" id="..."><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. В коллекции ответа содержится список всех пользователей с перечнем свойств. В разделе XML-структуры, соответствующей записи пользователя, содержатся такие значения как id, имя, признак оператора, принадлежность к отделу, состояние, присутствие в call-центре, перерыв, переадресация, информация о текущей привязанной линии: идентификатор, номер, код, тип, состояние. Запрашиваемая информация возвращается с сервера состояний и не использует обращения к БД.<br />
<br />
<br />
<u>Структура ответа:</u><br />
<br />
<property_set name="getallusersfullinfo" id="..."><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_collection name="usersstates" count="..."><br />
<property_set name="user" id="da803f01-ea77-40fa-bc9d-e2efb36fd5a8"><br />
<property_cdata key="id"><![CDATA[da803f01-ea77-40fa-bc9d-e2efb36fd5a8]]></property_cdata><br />
<property_cdata key="name"><![CDATA[Букашин Петр Александрович]]></property_cdata><br />
<property_simple key="isoperator" value="1" /><br />
<property_cdata key="groupid"><![CDATA[f42c8dd4-6e6b-4033-9349-5d51971fb251]]></property_cdata><br />
<property_cdata key="groupname"><![CDATA[Техническое управление]]></property_cdata><br />
<property_simple key="userstate" value="1" name="usReady" /><br />
<property_simple key="iscc" value="1" /><br />
<property_simple key="islunch" value="0" /><br />
<property_simple key="isredirect" value="0" /><br />
<property_cdata key="lineid"><![CDATA[cf8330f4-a0bf-4779-9539-ab8ea6c49df7]]></property_cdata><br />
<property_simple key="linenum" value="16016" name="Success" /><br />
<property_simple key="linecode" value="usb16" /><br />
<property_simple key="linetype" value="4" name="ltIntUSB" /><br />
<property_simple key="linestate" value="4" name="lsReady" /><br />
</property_set><br />
...<br />
<property_set name="user" id="..."><br />
...<br />
</property_set><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>getspecifieduserfullinfo</h4><br />
<br />
Осуществляет запрос к серверу на получение информации об указанном пользователе системы и его текущих состояний.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="getspecifieduserfullinfo" id="..."><br />
<property_set name="user"><br />
<property_cdata key="id"><![CDATA[xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx]]></property_cdata><br />
<property_simple key="login" value="..." /><br />
<property_simple key="name" value="..." /><br />
</property_set><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. В коллекции ответа содержится набор данных по одному (запрошенному) пользователю с перечнем свойств. В разделе XML-структуры, соответствующей записи пользователя, содержатся такие значения как id, имя, признак оператора, принадлежность к отделу, состояние, присутствие в call-центре, перерыв, переадресация, информация о текущей привязанной линии: идентификатор, номер, код, тип, состояние. Запрашиваемая информация возвращается с сервера состояний и не использует обращения к БД.<br />
<br />
<br />
<u>Структура ответа:</u><br />
<br />
<property_set name="getspecifieduserfullinfo" id="..."><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_collection name="usersstates" count="1"><br />
<property_set name="user" id="da803f01-ea77-40fa-bc9d-e2efb36fd5a8"><br />
<property_cdata key="id"><![CDATA[da803f01-ea77-40fa-bc9d-e2efb36fd5a8]]></property_cdata><br />
<property_cdata key="name"><![CDATA[Букашин Петр Александрович]]></property_cdata><br />
<property_simple key="isoperator" value="1" /><br />
<property_cdata key="groupid"><![CDATA[f42c8dd4-6e6b-4033-9349-5d51971fb251]]></property_cdata><br />
<property_cdata key="groupname"><![CDATA[Техническое управление]]></property_cdata><br />
<property_simple key="userstate" value="1" name="usReady" /><br />
<property_simple key="iscc" value="1" /><br />
<property_simple key="islunch" value="0" /><br />
<property_simple key="isredirect" value="0" /><br />
<property_cdata key="lineid"><![CDATA[cf8330f4-a0bf-4779-9539-ab8ea6c49df7]]></property_cdata><br />
<property_simple key="linenum" value="16016" name="Success" /><br />
<property_simple key="linecode" value="usb16" /><br />
<property_simple key="linetype" value="4" name="ltIntUSB" /><br />
<property_simple key="linestate" value="4" name="lsReady" /><br />
</property_set><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>getkeyid</h4><br />
<br />
Осуществляет запрос к серверу для определения текущего регистрационного номера. Возвращает 7-значный номер или 0, если лицензия не обнаружена или неверна.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="getkeyid" id="..."><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. Также в структуре ответа содержится поле '''keyid''', содержащее 7-значный регистрационный номер.<br />
<br />
<br />
<u>Структура ответа:</u><br />
<br />
<property_set name="getkeyid" id="..."><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_simple key="keyid" value="8378376" /><br />
</property_set><br />
<br />
<br />
*<h4>getqueueitems</h4> <br />
<br />
Осуществляет запрос к серверу для получения текущего списка элементов в очереди ожидания.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="getqueueitems" id="..."><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. Также в ответе содержится структура '''currentqueue''' c информацией о всех элементах в очереди на момент запроса. Поля описания каждого элемента очереди аналогичны соответствующим значениям возвращаемого значения функции '''Queue_GetCurrentItems''' раздела [[Работа с логикой АТС#Методы для работы с логикой АТС: очередь ожидания|«Oktell в других проектах. Методы для работы с АТС: очередь ожидания»]].<br />
<br />
<br />
<u>Структура ответа на примере:</u><br />
<br />
<property_set name="getqueueitems"><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_collection name="currentqueue" count="2"><br />
<property_set name="queueitem"><br />
<property_simple key="dateformat" value="dd.MM.yyyy HH:mm:ss" /><br />
<property_simple key="managedlineid" value="9fe668ff-0822-4b8d-aa0a-71fbbaad0c67" /><br />
<property_simple key="objecttype" value="0" name="qotQueueLogic" /><br />
<property_cdata key="username"><![CDATA[Замятин Олег Васильевич]]></property_cdata><br />
<property_simple key="lenqueue" value="137000" /><br />
<property_simple key="srcelementid" value="a00a7a08-b3f7-44f3-8b2c-64ef11d4a2c5" /><br />
<property_simple key="queuesource" value="1" name="qsLineLogic" /><br />
<property_cdata key="department"><![CDATA[Руководство]]></property_cdata><br />
<property_simple key="calledid" value="14" /><br />
<property_simple key="callerid" value="21" /><br />
<property_simple key="idobject" value="12345678-1234-1234-1234-12345678123a" /><br />
<property_simple key="userid" value="ba0a387e-815a-434d-8ace-1a1840916761" /><br />
<property_simple key="managedlinenum" value="1525" /><br />
<property_simple key="startqueuetime" value="02.11.2009 10:43:36" /><br />
<property_simple key="queuepriority" value="10" /><br />
</property_set><br />
<property_set name="queueitem"><br />
<property_simple key="dateformat" value="dd.MM.yyyy HH:mm:ss" /><br />
<property_simple key="tasklistid" value="-1" /><br />
<property_simple key="idobject" value="12345678-1234-1234-1234-12345678123b" /><br />
<property_simple key="taskisoutput" value="0" /><br />
<property_simple key="managedlinenum" value="1001" /><br />
<property_simple key="userid" value="00000000-0000-0000-0000-000000000000" /><br />
<property_cdata key="taskname"><![CDATA[Прием входящих]]></property_cdata><br />
<property_simple key="calledid" value="5109940" /><br />
<property_simple key="srcelementid" value="cf82a296-2b27-43c8-a607-1579c83d0b8f" /><br />
<property_simple key="username" value="" /><br />
<property_simple key="startqueuetime" value="02.11.2009 10:43:36" /><br />
<property_simple key="objecttype" value="0" name="qotQueueLogic" /><br />
<property_simple key="lenqueue" value="277000" /><br />
<property_simple key="callerid" value="89050213951" /><br />
<property_simple key="queuepriority" value="10" /><br />
<property_simple key="managedlineid" value="d2d2bd39-d5a3-4d83-b78f-d6ac25cb2733" /><br />
<property_simple key="department" value="" /><br />
<property_simple key="taskid" value="79f0627c-3372-474c-9d9a-8fc3627a3ed8" /><br />
<property_simple key="queuesource" value="5" name="qsIncomingTask" /><br />
</property_set><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>interaction</h4><br />
<br />
Осуществляет отправку команды в другой экземпляр plugin-программы, расположенной на другом рабочем месте. Реализует механизм взаимодействия различных экземпляров plugin-программ.<br />
<br />
Структура взаимодействия представляет собой цепочку:<br />
<br />
'''Client1.Plugin''' -> '''Server''' -> '''Client2.Plugin''' -> '''Server''' -> '''Client1.Plugin''' <br />
<br />
<br />
Plugin-программа на первом клиентском рабочем месте инициирует событие OnQuery.interaction, передавая в параметре информацию о пользователе (<span style="color:green">destinationuserid</span>) или рабочем месте (<span style="color:green">destinationwpid</span>), куда необходимо передать информацию, код plugin-программы, которая должна обработать запрос (destinationpluginid), а также текстовые данные, подлежащие передаче (<span style="color:green">data</span>). Запрос отправляется на сервер, и в случае обнаружения запрошенного клиентского места осуществляется вызов метода [[Сервисное_взаимодействие#DoQuery.interaction|DoQuery.interaction]] в указанной plugin-программе, работающей на втором клиентском рабочем месте. <br />
<br />
При необходимости возврата ответа (любой информации, запакованной в текстовый вид), экземпляр plugin-программы при обработке вызова DoQuery.interaction может инициировать аналогичный вызов OnQuery.interaction для полностью аналогичной схемы доведения информации в ответ. В качестве адресата указывается пользователь-отправитель, а также plugin-отправитель, коды которых присутствуют в параметре при вызове DoQuery.interaction (<span style="color:green">senderuserid</span> и <span style="color:green">senderpluginid</span>). Это асинхронный режим взаимодействия. Вне зависимости от того как долго будет выполняться DoQuery, в какой момент времени будет отправлен асинхронный ответ, управление из вызова OnQuery.interaction в плагине-инициаторе будет возвращено незамедлительно после отправки команды серверу.<br />
<br />
В синхронном режиме взаимодействия плагин-инициатор не получает возврата управления из вызова OnQuery.interaction вплоть до возврата управления из метода DoQuery.interaction в плагине-адресате. При этом возвращаемое из DoQuery.interaction значение будет размещено в ответе, подготавливаемом для плагина-инициатора. Для активации синхронного режима в параметре запроса OnQuery.interaction должен быть указан флаг <span style="color:green">waitrespond</span> со значением «1». В этом случае может быть указан таймаут (<span style="color:green">timeout</span>), по истечении которого ожидание будет прервано и управление возвращено в инициирующий плагин. Таймаут указывается целым числом в миллисекундах.<br />
<br />
Поиск экземпляра plugin-программы, которая должна обработать запрос, осуществляется в следующей очередности:<br />
<br />
Если указан идентификатор пользователя (<span style="color:green">destinationuserid</span>), выбирается рабочее место, на котором он авторизован. В противном случае исследуется идентификатор рабочего места (<span style="color:green">destinationwpid</span>). <br />
<br />
Если клиентское рабочее место обнаружено, происходит отправка запроса на него. <br />
<br />
Выполнением запроса занимается плагин, указанный параметром <span style="color:green">destinationpluginid</span>. Если параметр не указан, выполнение передается плагину-отправителю (экземпляру, расположенному на стороннем клиентском рабочем месте).<br />
<br />
Следует иметь в виду, что данные необходимо упаковывать (например в Base64), если они обладают произвольной и/или достаточно сложной структурой. В противном случае их невозможно будет вставить в XML документ.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="interaction" id="..."><br />
<property_simple key="destinationuserid" value="2" /><br />
<property_cdata key="data"><![CDATA[...произвольные текстовые данные...]]></property_cdata><br />
<property_simple key="waitrespond" value="1" /><br />
<property_simple key="timeout" value="3000" /><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. В ответе содержится параметр '''interactionresult''', представляющий собой код результата выполнения запроса. Его значения из набора:<br />
<br />
Sent = 1 <span style="color:darkviolet">//Операция успешно завершена</span><br />
DestinationNotSpecified = 101 <span style="color:darkviolet">//Не указаны параметры клиентского места - назначения</span><br />
DestinationClientNotFound = 102 <span style="color:darkviolet">//Клиентское место не найдено</span><br />
DestinationClientNotLoaded = 103 <span style="color:darkviolet">//Клиенское место не загружено (пользователь не авторизован)</span><br />
DestinationPluginNotFound = 104 <span style="color:darkviolet">//Плагин не найден</span><br />
DestinationPluginLoadError = 105 <span style="color:darkviolet">//Плагин не загружен</span><br />
DestinationClientNotHandled = 107 <span style="color:darkviolet">//Клиентское место не поддерживает механизм взаимодействия</span><br />
QueryTimeout = 108 <span style="color:darkviolet">//Таймаут ожидания ответа</span><br />
QueryNoAnswer = 109 <span style="color:darkviolet">//Запрос отправлен, но ответ не может быть предоставлен</span><br />
<br />
и параметр '''resultdata''', имеющий значение в случае успешного ожидания выполнения в ходе синхронного запроса. В него подставляется полностью результат выполнения метода DoQuery в плагине-адресате.<br />
<br />
<br />
<u>Структура ответа:</u><br />
<br />
<property_set name="interaction" id="..."><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_simple key="interactionresult" value="1" name="Sent" /><br />
<property_cdata key="resultdata"><![CDATA[...текстовые данные - результат выполнения...]]></property_cdata><br />
</property_set><br />
<br />
<br />
*<h4>getpath</h4><br />
<br />
*<h4>getconfigvalue</h4><br />
<br />
Доступно только для серверных плагинов.<br />
Возвращает значение параметра из конфигурационного файла сервера.<br />
<br />
*<h4>getversion</h4><br />
<br />
Доступно только для серверных плагинов.<br />
Возвращает информацию о версии сервера.<br />
<br />
*<h4>reloadpbxss</h4><br />
<br />
Доступно только для серверных плагинов.<br />
Инициирует перезапуск сервера состояний.<br />
<br />
*<h4>updatehttpsession</h4><br />
<br />
Доступно только для серверных плагинов.<br />
Обновляет/создает http-сессию на веб-сервере Oktell.<br />
<br />
*<h4>removehttpsession</h4><br />
<br />
Доступно только для серверных плагинов.<br />
Удаляет http-сессию на веб-сервере Oktell.<br />
<br />
*<h4>updateplugin</h4><br />
<br />
Доступно только для серверных плагинов.<br />
Инициирует обновление плагина<br />
<br />
*<h4>getcurrentlanguage</h4><br />
<br />
Доступно только для серверных плагинов.<br />
Возвращает используемый сервером язык.<br />
<br />
*<h4>getlicense</h4><br />
<br />
Доступно только для серверных плагинов.<br />
Возвращает информацию о регистрации и список лицензий сервера. В зависимости от параметров может возвращать только сущностную информацию, исключая описания и дополнительные сведения, также может возвращать информацию только по запрошенным кодам продуктов, и с фильтрацией удаленных, заблокированных и просроченных временных лицензий.<br />
<br />
<br />
<br />
Список возможных сервисных команд будет пополняться. В случае, если вам необходимо получить дополнительный функционал, обращайтесь с предложениями на сайт компании [http://oktell.ru/ Телефонные системы].<br />
<br />
<br />
==Метод DoQuery==<br />
<br />
Общее описание метода приведено в статье [[Описание_базовых_элементов_интерфейса#Сервисное взаимодействие|«Базовые элементы интерфейса. DoQuery»]]. В текущем разделе приводится формат параметров при обмене сообщениями в контексте метода.<br />
<br />
<br />
===Параметр (запрос от приложения Oktell к plugin-программе)===<br />
<br />
Все запросы определяются передаваемым в метод параметром. В версии 2.5-90101 не существует команд, обязательных для реализации в plugin-программе, и ответ в некоем корректном виде вовсе может отсутствовать. В дальнейшем возможно появление обязательных для реализации команд, предполагающих корректный и выверенный ответ plugin-программы.<br />
<br />
Запросы всегда состоят из одного элемента property_set, определяющим действие и содержащим необходимые для него параметры. Тип запроса определяется строковым кодом (значением атрибута <span style="color:green">name</span>) и/или дублирующим числовым кодом (значением атрибута <span style="color:green">id</span>) элемента <span style="color:green">property_set</span>. Значения этих атрибутов всегда соответствуют друг другу. Все необходимые для исполнения запроса параметры составляют свойства элемента. В отдельных случаях элемент может иметь сложную структуру, содержать коллекцию вложенных элементов.<br />
<br />
<br />
<u>Структура параметра-запроса:</u><br />
<br />
<?xml version="1.0" encoding="utf-16"?><br />
<oktellxmlmapper version="80710"><br />
<data name="action" count="1"><br />
<property_set name="..." id="..."><br />
...<br />
</property_set><br />
</data><br />
</oktellxmlmapper><br />
<br />
<br />
===Возвращаемое значение (ответ plugin-программы на запрос приложения Oktell)===<br />
<br />
В версии 2.5-90101 не существует команд, обязательных для реализации в plugin-программе. А все исполняемые сервисные действия носят характер информационных пересылок в plugin.<br />
<br />
При появлении в дальнейшем обязательных команд-действий структура ответа должна соответствовать приведенному виду, где в теле элемента property_set содержится контекстно-зависимое содержимое.<br />
<br />
<?xml version="1.0" encoding="utf-16"?><br />
<oktellxmlmapper version="80710"><br />
<data name="actionresult" count="1"><br />
<property_set name="..." id="..."><br />
...<br />
</property_set><br />
</data><br />
</oktellxmlmapper><br />
<br />
<br />
===Допустимые типы запросов===<br />
<br />
:*[[Сервисное_взаимодействие#tabchange|tabchange (20101)]]<br />
:*[[Сервисное_взаимодействие#formshow|formshow (20201)]]<br />
:*[[Сервисное_взаимодействие#formhide|formhide (20202)]]<br />
:*[[Сервисное_взаимодействие#phoneevent|phoneevent (20301)]]<br />
:*[[Сервисное_взаимодействие#pluginloaded|pluginloaded (20401)]]<br />
:*[[Сервисное_взаимодействие#pluginstarted|pluginstarted (20402)]]<br />
:*[[Сервисное_взаимодействие#pluginunload|pluginunload (20403)]]<br />
:*[[Сервисное_взаимодействие#DoQuery.interaction|interaction (20501)]]<br />
<br />
<br />
*<h4>tabchange</h4><br />
<br />
Код 20101. Переводит событие о смене вкладки в заголовке управляющего отображением модуля в plugin-программу. Вызывается только с указанием кода экземпляра формы и только в режиме отображения внешних модулей.<br />
<br />
<br />
<u>Структура передаваемого запроса:</u><br />
<br />
<property_set name="tabchange" id="20101"><br />
<property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="idform" value="817d77a7-5d0e-4783-9304-e310c2ac3443" /><br />
<property_simple key="idshow" value="2e2d8ff0-de47-415f-ab68-9bddcd09952b" /><br />
<property_simple key="actiontype" value="20101" name="TabChange" /><br />
<property_simple key="activeindex" value="3" /><br />
</property_set><br />
<br />
<br />
Параметры '''idplugin''', '''idform''', '''idshow''' указывают управляющему объекту plugin-программы на конкретный экземпляр отображаемой формы, '''activeindex''' указывает индекс вкладки (согласно индексам, определенных в коллекции-перечислении), которая стала активной после действий пользователя (щелчка мышью). Индекс вкладки определяется при генерации события [[Сервисное взаимодействие#tabs|tabs]] на отображение вкладок обратного метода OnQuery. <br />
<br />
<br />
*<h4>formshow</h4><br />
<br />
Код 20201. Переводит событие о начале визуальной работы с формой в plugin-программу. Генерируется каждый раз, когда пользователь открывает модуль из состояния скрытых. Вызывается только с указанием кода экземпляра формы и только в режиме отображения внешних модулей. При смене отображения сначала открываемый модуль создается, затем управляющий объект получает команду formshow, лишь затем генерируется formhide для скрываемого модуля.<br />
<br />
<property_set name="formshow" id="20201"><br />
<property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="idform" value="817d77a7-5d0e-4783-9304-e310c2ac3443" /><br />
<property_simple key="idshow" value="2e2d8ff0-de47-415f-ab68-9bddcd09952b" /><br />
<property_simple key="actiontype" value="20201" name="FormShow" /><br />
</property_set> <br />
<br />
<br />
Параметры '''idplugin''', '''idform''', '''idshow''' указывают управляющему объекту plugin-программы на конкретный экземпляр отображаемой формы<br />
<br />
<br />
*<h4>formhide</h4><br />
<br />
Код 20202. Переводит событие о завершении визуальной работы с формой в plugin-программу. Генерируется каждый раз, когда пользователь проводит в приложении Oktell действия, вызывающие скрытие указанного модуля (перевод в невидимые). Вызывается только с указанием кода экземпляра формы и только в режиме отображения внешних модулей. При смене отображения сначала открываемый модуль создается, затем управляющий объект получает команду formshow, лишь затем генерируется formhide для скрываемого модуля.<br />
<br />
<property_set name="formhide" id="20202"><br />
<property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="idform" value="817d77a7-5d0e-4783-9304-e310c2ac3443" /><br />
<property_simple key="idshow" value="2e2d8ff0-de47-415f-ab68-9bddcd09952b" /><br />
<property_simple key="actiontype" value="20201" name="FormHide" /><br />
</property_set><br />
<br />
<br />
Параметры '''idplugin''', '''idform''', '''idshow''' указывают управляющему объекту plugin-программы на конкретный экземпляр отображаемой формы<br />
<br />
<br />
*<h4>phoneevent</h4><br />
<br />
Код 20301. Событийное направление, подлежащее подписке. То есть передается в плагин-программу только тогда, когда она предварительно запросила подписку на направление путем вызова [[Сервисное_взаимодействие#Событие OnQuery|OnQuery]]-метода [[Сервисное_взаимодействие#sethandleevent|sethandleevent]].<br />
<br />
К данному направлению относится ряд событий аппаратного модуля и логики АТС по управлению каналом, связанным с рабочим местом, на котором исполняется plugin-программа.<br />
<br />
<br />
<u>Типы событий:</u><br />
<br />
HALSrvRegSuccess = 201 <span style="color:darkviolet">//подключение устройства к серверу</span><br />
HALSrvRegTimeout = 202 <span style="color:darkviolet">//таймаут или неудача регистрации устройства на сервере</span><br />
HALDeviceFound = 203 <span style="color:darkviolet">//подключение нового устройства</span><br />
HALDeviceLost = 204 <span style="color:darkviolet">//потеря текущего устройства</span><br />
HALHeadsetParams = 212 <span style="color:darkviolet">//смена состояния гарнитуры (ishookup, isringing)</span><br />
<br />
CommutationStarted = 231 <span style="color:darkviolet">//начало коммутации с участием канала</span><br />
CommutationStopped = 232 <span style="color:darkviolet">//завершение коммутации с участием канала</span><br />
FaxStarted = 233 <span style="color:darkviolet">//начало факс-сеанса на оппозитном канале</span><br />
FaxStopped = 234 <span style="color:darkviolet">//завершение факс-сеанса на оппозитном канале</span><br />
FaxFilesReceived = 235 <span style="color:darkviolet">//получение файлов по встроенному факсу</span><br />
RingStarted = 236 <span style="color:darkviolet">//начало вызова канала</span><br />
RingFinished = 237 <span style="color:darkviolet">//прекращение вызова канала</span><br />
ACMStarted = 238 <span style="color:darkviolet">//начало сеанса автодозвона</span><br />
ACMFinished = 239 <span style="color:darkviolet">//завершение сеанса автодозвона</span><br />
FlashHoldAction = 240 <span style="color:darkviolet">//смена состояния flash-буфера</span><br />
ChainStateChange = 241 <span style="color:darkviolet">//смена состояния текущей цепочки коммутаций</span><br />
LineStateChange = 242 <span style="color:darkviolet">//смена состояния канала</span><br />
<br />
<br />
Коды и параметры событий соответствуют идентичным событиям сервисного оповещения COM-интеграции (разделы [[Сервисное оповещение|«Сервисное оповещение»]] и более подробно [[Работа с логикой АТС#События АТС по линии пользователя|«Работа с логикой АТС. События АТС по линии пользователя»]]).<br />
<br />
Пример параметра для события CommutationStarted о начале коммутации канала пользователя с каналом другого абонента или IVR:<br />
<br />
<property_set name="phoneevent" id="20301"><br />
<property_simple key="actiontype" value="20301" name="PhoneEvent" /><br />
<property_simple key="event" value="231" name="CommutationStarted" /><br />
<property_simple key="idchain" value="abcdef12-abcd-abcd-1234-1234567890ab" /><br />
<property_simple key="idconnection" value="12345678-1234-1234-1234-abcdef123456" /><br />
<property_simple key="canfax" value="1" /><br />
<property_simple key="opponentdescription" value="Иванов Сергей" /><br />
<property_simple key="opponentname" value="Иванов Сергей" /><br />
<property_simple key="opponentnumber" value="" /><br />
<property_simple key="opponentlineid" value="cf8330f4-a0bf-4779-9539-ab8ea6c49df7" /><br />
<property_simple key="opponentlinenumber" value="" /><br />
</property_set><br />
<br />
<br />
*<h4>pluginloaded</h4> <br />
<br />
Код 20401. Вызывается после создания и загрузки plugin-программ, стартующих в режиме без визаулизации вместе с запуском клиентского приложения (устанавливается администратором при регистрации plugin-программы в Oktell). Метод не вызывается при тестовых загрузках администратором, а также если загрузка происходит по первому обращению. В случае динамического обновления метод будет вызван сразу после загрузки обновленной plugin-программы, если для нее установлен момент запуска «При запуске клиентского приложения» или «При запуске главного окна».<br />
<br />
<property_set name="pluginloaded" id="20401"><br />
<property_simple key="actiontype" value="20401" name="PluginLoaded" /><br />
</property_set><br />
<br />
<br />
*<h4>pluginstarted</h4><br />
<br />
Код 20402. Вызывается после загрузки всех plugin-программ. Не вызывается после фиктивной загрузки в режимах администрирования и наладки в сценариях. Может применяться и рекомендуется к применению для создания всех внутренних объектов, инициализации визуальных форм, запуска различных процессов, требуемых только в реальной деятельности плагина, и лишних в режиме информационного обмена в административных целях. Рекомендуется именно здесь проводить действия, которые понаитию размещаются в конструкторе управляющего объекта.<br />
<br />
<property_set name="pluginstarted" id="20402"><br />
<property_simple key="actiontype" value="20402" name="PluginStarted" /><br />
</property_set><br />
<br />
<br />
*<h4>pluginunload</h4><br />
<br />
Код 20403. Вызывается непосредственно перед выгрузкой plugin-программы в потоке, осуществляющем выгрузку. Ожидается, что plugin-программа осуществит завершение всех активных операций. В случае, если программа подгружена в домен основного приложения, она останется в памяти до его полной выгрузки/перезагрузки. В то же время параллельно может быть загружен новый экземпляр этой же plugin-программы. Необходимо обеспечить освобождение монопольных ресурсов, остановку активных потоков, и другие операции, поддерживаемые в активной фазе работы подпрограммы.<br />
<br />
<br />
<property_set name="pluginunload" id="20403"><br />
<property_simple key="actiontype" value="20403" name="PluginUnload" /><br />
</property_set><br />
<br />
<br />
<div id="DoQuery.interaction"></div><br />
*<h4>interaction</h4><br />
<br />
Код 20501. Вызывается по инициативе другой plugin-программы или другого экземпляра этой plugin-программы с передачей произвольной текстовой информации. Может вызываться из экземпляров, запущенных на других клиентских рабочих местах. <br />
<br />
Служит для организации схем взаимодействия экземпляров plugin-программ, запущенных разными пользователями на разных компьютерах.<br />
<br />
Подробнее о механизме в описании инициирующего метода [[Сервисное взаимодействие#interaction|OnQuery.interaction]].<br />
<br />
Следует иметь в виду, что серверное событие, инициирующее вызов этого метода, не производит загрузки соответствующей plugin-программы, а лишь подключение к уже загруженной. Таким образом необходимо гарантировать предварительную загрузку плагина. Это можно организовать принудительной установкой свойства «Момент загрузки» при регистрации plugin-программы в Oktell (значения свойства «При запуске клиентского приложения» или «При запуске главного окна»).<br />
<br />
<property_set name="interaction" id="20501"><br />
<property_simple key="actiontype" value="20501" name="Interaction" /><br />
<property_simple key="senderuserid" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="senderpluginid" value="817d77a7-5d0e-4783-9304-e310c2ac3443" /><br />
<property_cdata key="data"><![CDATA[...текстовые данные - запрос...]]></property_cdata><br />
</property_set><br />
<br />
<br />
В случае наладки синхронного взаимодействия метод должен возвращать значение, которое затем подставляется в ответ (поле resultdata) на вызов OnQuery.interaction.<br />
<br />
Список возможных сервисных команд будет пополняться. В случае, если вам необходимо получить дополнительный функционал, обращайтесь с предложениями на [http://oktell.ru/ сайт компании Телефонные системы]<br />
<br />
{|cellpadding="10" cellspacing="0" border="0"<br />
| [[Встраиваемые_plugin-модули|Наверх]]<br />
| [[Описание базовых элементов интерфейса|Описание базовых элементов интерфейса<<<]]<br />
| [[Сервисное взаимодействие]]<br />
| [[Рекомендации разработчику|>>>Рекомендации разработчику]]<br />
|-<br />
|}</div>Peter%D0%A1%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BD%D0%BE%D0%B5_%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BE%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B5Сервисное взаимодействие2014-06-30T09:34:54Z<p>Peter: </p>
<hr />
<div>{|cellpadding="10" cellspacing="0" border="0"<br />
| [[Встраиваемые_plugin-модули|Наверх]]<br />
| [[Описание базовых элементов интерфейса|Описание базовых элементов интерфейса<<<]]<br />
| [[Сервисное взаимодействие]]<br />
| [[Рекомендации разработчику|>>>Рекомендации разработчику]]<br />
|-<br />
|}<br />
<br />
__TOC__<br />
<br />
<br />
Методы и события данного раздела служат для осуществления плотного взаимодействия plugin-программы и клиентского приложения Oktell. XML-содержимое описывает не только параметры, но и само действие (действия в общем случае). Не изменяя интерфейса подключения plugin-программ при помощи этих методов будут расширяться возможности взаимодействия, добавляться новые сервисы в клиентское приложение Oktell для использования в plugin-программах.<br />
<br />
==Событие OnQuery==<br />
<br />
Общее описание метода приведено в статье «[[Описание_базовых_элементов_интерфейса#Сервисное взаимодействие|Базовые элементы интерфейса. OnQuery]]». В текущем разделе приводится формат параметров при обмене сообщениями в контексте метода.<br />
<br />
<br />
===Параметр (запрос от plugin-программы к приложению Oktell)===<br />
<br />
Все запросы определяются передаваемым в метод параметром. Ответ может отсутствовать, если выполняется команда, не предусматривающая возвращаемого значения, однако параметр должен присутствовать всегда.<br />
<br />
Для простоты и однотипности организации кода приложение Oktell всегда возвращает ответ (в простейшем случае - единственное свойство <span style="color:green">resultcode</span>).<br />
<br />
В общем виде запрос состоит из нескольких независимых подзапросов, исполняемых поочередно. Каждый запрос в теле XML-структуры установленного образца имеет вид элемента property_set первого уровня (вложенного в основную коллекцию). Тип запроса определяется строковым кодом (значением атрибута <span style="color:green">name</span>) элемента <span style="color:green">property_set</span>. Все необходимые для исполнения запроса параметры составляют свойства элемента. В отдельных случаях элемент может иметь сложную структуру, содержать коллекцию вложенных элементов.<br />
<br />
<u>Структура параметра-запроса:</u><br />
<br />
<?xml version="1.0" encoding="utf-16"?><br />
<oktellxmlmapper version="80710"><br />
<data name="query" count="..."><br />
<property_set name="..." id="..."><br />
...<br />
</property_set><br />
<span style="color:blue">...........................................</span><br />
<span style="color:blue">...........................................</span><br />
<span style="color:blue">...........................................</span><br />
<property_set name="..." id="..."><br />
<span style="color:blue">...</span><br />
</property_set> <br />
</data><br />
</oktellxmlmapper><br />
<br />
<br />
В частном наиболее употребимом случае запрос состоит из одной команды (одного блока <span style="color:green">property_set</span>). Соответствующий ему ответ также состоит из одного блока, куда в качестве атрибутов главного тэга копируются атрибуты тэга запроса. Атрибут id не является обязательным и в приложении Oktell не анализируется.<br />
<br />
<br />
===Возвращаемое значение (ответ приложения Oktell на запрос plugin-программы)===<br />
<br />
<br />
<u>Структура ответа:</u><br />
<br />
<?xml version="1.0" encoding="utf-16"?><br />
<oktellxmlmapper version="80710"><br />
<data name="queryresult" count="..."><br />
<property_set name="..." id="..."><br />
<property_simple key="resultcode" value="..." name="..." /><br />
<property_cdata key="resultdescription"><![CDATA[...]]></property_cdata><br />
...<br />
</property_set><br />
<span style="color:blue">...........................................</span><br />
<span style="color:blue">...........................................</span><br />
<span style="color:blue">...........................................</span><br />
<property_set name="..." id="..."><br />
<property_simple key="resultcode" value="..." name="..." /><br />
<property_cdata key="resultdescription"><![CDATA[...]]></property_cdata><br />
<span style="color:blue">...</span><br />
</property_set> <br />
</data><br />
</oktellxmlmapper><br />
<br />
<br />
Каждый элемент <span style="color:green">property_set</span> в базовой коллекции соответствует элементу в запросе. Может быть выполнена часть запросов, а некоторые (например из-за содержащихся в параметрах запроса ошибок) будут иметь неудачный код возврата.<br />
<br />
В частном наиболее употребимом случае запрос состоит из одной команды (одного блока <span style="color:green">property_set</span>). Соответствующий ему ответ также состоит из одного блока.<br />
<br />
Существует единственный случай, когда ответ не имеет сопоставления с запросом - если строка XML имеет некорректный вид или нестандартный для интерфейса формат. В этом случае ответ будет возвращен в виде:<br />
<br />
<?xml version="1.0" encoding="utf-16"?><br />
<oktellxmlmapper version="80710"><br />
<data name="queryresult" count="1"><br />
<property_set name="commonresult"><br />
<property_simple key="resultcode" value="105" name="ErrorInputXml" /><br />
<property_cdata key="resultdescription"><![CDATA[Неверный формат XML-запроса]]></property_cdata> <br />
</property_set><br />
</data><br />
</oktellxmlmapper><br />
<br />
<br />
Возможные коды результатов (могут пополняться вместе с функционалом сервисного взаимодействия) представлены перечислением:<br />
<br />
<span style="color:blue">private enum</span> EQueryResult<br />
{<br />
Success = 100, <span style="color:darkviolet">//Запрос успешно выполнен </span><br />
Exception = 101, <span style="color:darkviolet">//При выполнении запроса возникло исключение (текст в блоке resultdescription)</span> <br />
UnknownCommand = 102, <span style="color:darkviolet">//Неизвестный тип запроса </span><br />
IncorrectParameter = 103, <span style="color:darkviolet">//Не задан или некорректно задан необходимый параметр </span><br />
Error = 104, <span style="color:darkviolet">//Общая ошибка </span><br />
ErrorInputXml = 105, <span style="color:darkviolet">//Ошибка при разборе XML-содержимого запроса </span><br />
}<br />
<br />
<br />
===Допустимые типы запросов===<br />
<br />
:*[[Сервисное взаимодействие#db|db]]<br />
:*[[Сервисное взаимодействие#dbdataset|dbdataset]]<br />
:*[[Сервисное взаимодействие#dbarbitrarydataset|dbarbitrarydataset]]<br />
:*[[Сервисное взаимодействие#dbtransaction|dbtransaction]]<br />
:*[[Сервисное взаимодействие#callnumber|callnumber]]<br />
:*[[Сервисное взаимодействие#switchnumber|switchnumber]]<br />
:*[[Сервисное взаимодействие#callabort|callabort]]<br />
:*[[Сервисное взаимодействие#log|log]]<br />
:*[[Сервисное взаимодействие#notify|notify]]<br />
:*[[Сервисное взаимодействие#tabs|tabs]]<br />
:*[[Сервисное взаимодействие#tabindex|tabindex]]<br />
:*[[Сервисное взаимодействие#headertext|headertext]]<br />
:*[[Сервисное взаимодействие#headercolor|headercolor]]<br />
:*[[Сервисное взаимодействие#faxsend|faxsend]]<br />
:*[[Сервисное взаимодействие#faxabort|faxabort]]<br />
:*[[Сервисное взаимодействие#downloadrecordbyid|downloadrecordbyid]]<br />
:*[[Сервисное взаимодействие#downloadrecordsbychain|downloadrecordsbychain]]<br />
:*[[Сервисное взаимодействие#uploadfiletoserver|uploadfiletoserver]]<br />
:*[[Сервисное взаимодействие#downloadfilefromserver|downloadfilefromserver]]<br />
:*[[Сервисное взаимодействие#deletefilefromserver|deletefilefromserver]]<br />
:*[[Сервисное взаимодействие#showdirectoryonserver|showdirectoryonserver]]<br />
:*[[Сервисное взаимодействие#sethandleevent|sethandleevent]]<br />
:*[[Сервисное взаимодействие#svcscriptstart|svcscriptstart]]<br />
:*[[Сервисное взаимодействие#headsetcommand|headsetcommand]]<br />
:*[[Сервисное взаимодействие#headsetcheckstate|headsetcheckstate]]<br />
:*[[Сервисное взаимодействие#getallusersfullinfo|getallusersfullinfo]]<br />
:*[[Сервисное взаимодействие#getspecifieduserfullinfo|getspecifieduserfullinfo]]<br />
:*[[Сервисное взаимодействие#getkeyid|getkeyid]]<br />
:*[[Сервисное взаимодействие#getqueueitems|getqueueitems]]<br />
:*[[Сервисное взаимодействие#interaction|interaction]]<br />
<br />
<br />
*<h4>db</h4><br />
<br />
Осуществляет запрос к БД средствами Oktell. <br />
<br />
В теле элемента <span style="color:green">property_set</span> должно быть указано свойство <span style="color:green">sqltext</span>. Текст запроса должен иметь полностью сформированный вид и будет передан без дополнительных параметров на сервер, а затем в БД. Запрос должен представлять из себя один batch-блок, и может иметь любую сложность (содержать переменные, курсоры, вести обработку в цикле и т.д.). При необходимости текст запроса может быть преобразован в Base64 (предварительное преобразование в Unicode) и передан через поле <span style="color:green">sqltextb64</span>. Присутствие одного из них обязательно.<br />
<br />
Возвращаемое значение (одиночный набор) будет преобразовано в XML-структуру и возвращено в plugin-программу в виде ответа (в соответствующем разделе полного запроса).<br />
<br />
При корректном парсинге параметров и отправке запроса на сервер в любом случае в свойство <span style="color:green">resultcode</span> будет занесен успешный результат. Однако свойство <span style="color:green">sqlresultcode</span> будет содержать код результата исполнения запроса в БД, который может отличаться от успешного.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="db" id="..."><br />
<property_cdata key="sqltext"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
<u>Структура ответа в случае успешного выполнения:</u><br />
<br />
<property_set name="db" id="..."><br />
<span style="color:green"><nowiki><!--##### Общие свойства #####--></nowiki></span><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_simple key="sqlresultcode" value="0" name="qrSuccess" /><br />
<property_cdata key="sqlresultdescription"><![CDATA[qrSuccess]]></property_cdata><br />
<span style="color:green"><nowiki><!--##### Возвращаемый набор #####--></nowiki></span><br />
<property_collection name="table" count="..."><br />
<span style="color:green"><nowiki><!--##### Описание столбцов #####--></nowiki></span><br />
<property_set name="tableheader"><br />
<property_collection name="columns" count="..."><br />
<span style="color:green"><nowiki><!--##### Один столбец: индекс, название, тип и полное название типа #####--></nowiki></span><br />
<property_set name="columninfo" id="0"><br />
<property_simple key="index" value="0" /><br />
<property_simple key="name" value="Id" /><br />
<property_simple key="typename" value="Guid" /><br />
<property_cdata key="typefullname"><![CDATA[System.Guid]]></property_cdata><br />
</property_set><br />
<property_set name="columninfo" id="2"><br />
<property_simple key="index" value="1" /><br />
<property_simple key="name" value="Name" /><br />
<property_simple key="typename" value="String" /><br />
<property_cdata key="typefullname"><![CDATA[System.String]]></property_cdata><br />
</property_set><br />
<span style="color:blue">...............</span><br />
</property_collection><br />
</property_set><br />
<span style="color:green"><nowiki><!--##### Раздел с данными #####--></nowiki></span><br />
<property_set name="tabledata"><br />
<property_collection name="rows" count="2"><br />
<span style="color:green"><nowiki><!--##### Одна строка: индекс строки, коллекция ячеек (значений) #####--></nowiki></span><br />
<property_set name="row" id="0"><br />
<span style="color:green"><nowiki><!--##### Все ячейки #####--></nowiki></span><br />
<property_collection name="cells" count="2"><br />
<span style="color:green"><nowiki><!--##### Одна ячейка: индекс столбца, значение #####--></nowiki></span><br />
<property_set name="cell" id="0"><br />
<property_simple key="cellvalue" value="17e640e1-1d55-4e45-a193-0469cbcd2dce" /><br />
</property_set><br />
<property_set name="cell" id="1"><br />
<property_cdata key="cellvalue"><![CDATA[Максим]]></property_cdata><br />
</property_set><br />
</property_collection><br />
</property_set><br />
<property_set name="row" id="1"><br />
<property_collection name="cells" count="2"><br />
<property_set name="cell" id="0"><br />
<property_simple key="cellvalue" value="309a147f-6248-4fbd-8b28-09b679c8297a" /><br />
</property_set><br />
<property_set name="cell" id="1"><br />
<property_simple key="cellvalue" value="z08" /><br />
</property_set><br />
</property_collection><br />
</property_set><br />
</property_collection><br />
</property_set><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>dbdataset </h4><br />
<br />
Осуществляет запрос к БД средствами Oktell. В отличие от метода [[Сервисное_взаимодействие#db|«db»]] структуру, получаемую на сервере, загружает в DataSet и формирует на ее базе стандартную XML строку, преобразованную в Base64. <br />
<br />
Для обратного преобразования необходимо полученную из поля CDATA строку подвергнуть обработке следующим кодом (C#):<br />
<br />
DataSet ds = <span style="color:blue">new</span> DataSet();<br />
MemoryStream ms = <span style="color:blue">new</span> MemoryStream ( Convert.FromBase64String ( dsxml ) );<br />
ds.ReadXml ( ms );<br />
<br />
В поле <span style="color:green">sqltext</span> передается текст запроса SQL. Текст запроса должен иметь полностью сформированный вид и будет передан без дополнительных параметров на сервер, а затем в БД. Запрос должен представлять из себя один batch-блок, и может иметь любую сложность (содержать переменные, курсоры, вести обработку в цикле и т.д.). При необходимости текст запроса может быть преобразован в Base64 (предварительное преобразование в Unicode) и передан через поле <span style="color:green">sqltextb64</span>. Присутствие одного из них обязательно.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="dbdataset" id="..."><br />
<property_cdata key="sqltext"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
<u>Структура ответа в случае успешного выполнения:</u><br />
<br />
<property_set name="db" id="..."><br />
<span style="color:green"><nowiki><!--##### Общие свойства #####--></nowiki></span><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_simple key="sqlresultcode" value="0" name="qrSuccess" /><br />
<property_cdata key="sqlresultdescription"><![CDATA[qrSuccess]]></property_cdata><br />
<span style="color:green"><nowiki><!--##### Возвращаемый набор #####--></nowiki></span><br />
<property_collection name="dataset" count="1"><br />
<span style="color:green"><nowiki><!--##### Описание столбцов #####--></nowiki></span><br />
<property_set name="datasetxmlb64"><br />
<property_cdata key="xmlb64"><![CDATA[.....Base64......]]></property_cdata><br />
</property_set><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>dbarbitrarydataset</h4><br />
<br />
Осуществляет запрос к БД средствами Oktell. В отличие от методов [[Сервисное_взаимодействие#db|«db»]] и [[Сервисное_взаимодействие#dbdataset|«dbdataset»]] позволяет подключаться к различным БД посредством ADO, OLE, ODBC, Oracle. Cтруктуру, получаемую на сервере, загружает в DataSet и формирует на ее базе XML строку, преобразованную в Base64. <br />
<br />
Для обратного преобразования необходимо полученную из поля CDATA строку подвергнуть обработке следующим кодом (C#):<br />
<br />
DataSet ds = <span style="color:blue">new</span> DataSet();<br />
MemoryStream ms = <span style="color:blue">new</span> MemoryStream ( Convert.FromBase64String ( dsxml ) );<br />
ds.ReadXml ( ms );<br />
<br />
<br />
Передаваемый параметр должен содержать указание направления (поле <span style="color:green">direction</span>) числовым значением из следующего набора:<br />
<br />
SQLServerSelf = 1 <span style="color:darkviolet">//Подключение к БД Oktell</span><br />
SQLServerOther = 2 <span style="color:darkviolet">//Подключение к сторонней базе MS SQL</span><br />
OLE = 3 <span style="color:darkviolet">//Подключение к OLE-драйверу</span><br />
Oracle = 4 <span style="color:darkviolet">//Подключение к Oracle-драйверу</span><br />
Odbc = 5 <span style="color:darkviolet">//Подключение к ODBC драйверу</span><br />
<br />
Если требуется подключение к собственной БД Oktell, поле direction можно не указывать.<br />
<br />
Для подключения к сторонним БД необходимо указание строки подключения к БД (поле <span style="color:green">connectionstring</span>). Если осуществляется подключение к собственной БД Oktell, строка подключения игнорируется. <br />
<br />
В поле <span style="color:green">sqltext</span> передается текст запроса SQL. Текст запроса должен иметь полностью сформированный вид и будет передан без дополнительных параметров на сервер, а затем в БД. Запрос должен представлять из себя один batch-блок, и может иметь любую сложность (содержать переменные, курсоры, вести обработку в цикле и т.д.). При необходимости текст запроса может быть преобразован в Base64 (предварительное преобразование в Unicode) и передан через поле <span style="color:green">sqltextb64</span>. Присутствие одного из них обязательно.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="dbarbitrarydataset" id="..."><br />
<property_cdata key="direction" value="3"/><br />
<property_cdata key="connectionstring"><![CDATA[Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Base; Extended Properties=dBase IV]]><br />
</property_cdata><br />
<property_cdata key="sqltext"><![CDATA[...]]></property_cdata><br />
<property_cdata key="sqltextb64"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
Если при выполнении запроса возникает ошибка или исключение, то конкретный код исключения возвращается в поле sqlresultcode, а коллекция dataset отсутствует. В случае успешного выполнения код возврата равен 0.<br />
<br />
Структура ответа в случае успешного выполнения:<br />
<br />
<property_set name="dbarbitrarydataset" id="..."><br />
<!--##### Общие свойства #####--><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_simple key="sqlresultcode" value="0" /><br />
<!--##### Возвращаемый набор #####--><br />
<property_collection name="dataset" count="1"><br />
<!--##### Описание столбцов #####--><br />
<property_set name="datasetxmlb64"><br />
<property_cdata key="xmlb64"><![CDATA[.....Base64......]]></property_cdata><br />
</property_set><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>dbtransaction</h4><br />
<br />
Осуществляет запрос к БД средствами Oktell. Работает в транзакции. Работа с помощью метода состоит из нескольких этапов: создание подключения и транзакции, поочередное выполнение одного или нескольких запросов с возвратом результата выполнения в виде DataSet, и применении или откате транзакции. Поле mode параметра определяет режим работы (этап): <br />
<br />
Сreate = 1 <span style="color:darkviolet">//Подключение к БД, создание транзакции</span><br />
Query = 2 <span style="color:darkviolet">//Выполнение запроса в существующей транзакции</span><br />
Commit = 3 <span style="color:darkviolet">//Подтверждение и применение изменений</span><br />
Rollback = 4 <span style="color:darkviolet">//Откат транзакции к прежнему состоянию</span><br />
<br />
<br />
Режим <span style="color:darkorange">Create</span> осуществляет подключение к БД и создает транзакцию. Подключение и транзакция сохраняются на сервере до момента выполнения метода '''OnQuery.dbtransaction''' в режиме '''Commit''' или '''Rollback'''. Транзакция автоматически откатывается и подключение закрывается в случае выхода пользователя из системы, но этого режима лучше избегать, так как активная транзакция может парализовать работу других служб. Передаваемый параметр должен содержать указание направления (поле <span style="color:green">direction</span>) числовым значением из следующего набора:<br />
<br />
SQLServerSelf = 1 <span style="color:darkviolet">//Подключение к БД Oktell</span><br />
SQLServerOther = 2 <span style="color:darkviolet">//Подключение к сторонней базе MS SQL</span><br />
OLE = 3 <span style="color:darkviolet">//Подключение к OLE-драйверу</span><br />
Oracle = 4 <span style="color:darkviolet">//Подключение к Oracle-драйверу</span><br />
Odbc = 5 <span style="color:darkviolet">//Подключение к ODBC драйверу</span><br />
<br />
<br />
Если требуется подключение к собственной БД Oktell, поле direction можно не указывать. Для подключения к сторонним БД необходимо указание строки подключения к БД (поле <span style="color:green">connectionstring</span>). Если осуществляется подключение к собственной БД Oktell, строка подключения игнорируется. Необходимо также определить поле checkcode, являющееся произвольным числовым значением, которое будет гарантировать доступ к транзакции только исполнителю. На каждом последующем режиме работы с транзакцией требуется указание того <span style="color:green">checkcode</span>, который был определен при создании подключения. В противном случае метод не будет выполнен и будет возвращен код соответствующей ошибки (50045). Для создания новой транзакции необходимо сначала дождаться окончания выполнения предыдущей, или закрыть ее принудительно (методами '''Commit''' или '''Rollback''' с совпадающим кодом checkcode). Если в момент создания уже существует активная транзакция, будет возвращен код ошибки 50047.<br />
<br />
Режим <span style="color:darkorange">Query</span> осуществляет запрос через ранее созданное подключение и активную транзакцию. Cтруктуру, получаемую на сервере, загружает в DataSet и формирует на ее базе XML строку, преобразованную в Base64. Для обратного преобразования необходимо полученную из поля CDATA строку подвергнуть обработке следующим кодом (C#):<br />
<br />
DataSet ds = <span style="color:blue">new</span> DataSet();<br />
MemoryStream ms = <span style="color:blue">new</span> MemoryStream ( Convert.FromBase64String ( dsxml ) );<br />
ds.ReadXml ( ms );<br />
<br />
<br />
В поле <span style="color:green">sqltext</span> передается текст запроса SQL. Текст запроса должен иметь полностью сформированный вид и будет передан без дополнительных параметров на сервер, а затем в БД. Запрос должен представлять из себя один batch-блок, и может иметь любую сложность (содержать переменные, курсоры, вести обработку в цикле и т.д.). При необходимости текст запроса может быть преобразован в Base64 (предварительное преобразование в Unicode) и передан через поле <span style="color:green">sqltextb64</span>. Присутствие одного из них обязательно. Также для выполнения запроса в транзакции требуется обязательное указание поля <span style="color:green">checkcode</span>, которое должно соответствовать значению, определенному при создании подключения и транзакции. В противном случае будет возвращаться код соответствующей ошибки (50045 в случае, если код не совпадает, 50046 в случае, если транзакция не существует).<br />
<br />
Режим <span style="color:darkorange">Commit</span> завершает транзакцию с применением изменений, а также закрывает подключение. После выполнения метода следующее обращение должно вновь создать подключение (возможно к другой БД). Для корректного выполнения метода требуется обязательное указание поля <span style="color:green">checkcode</span>, значение которого должно соответствовать значению, определенному при создании подключения и транзакции. В противном случае метод не будет выполнен и будет возвращен код соответствующей ошибки.<br />
<br />
Режим <span style="color:darkorange">Rollback</span> завершает транзакцию с откатом изменений, а также закрывает подключение. После выполнения метода следующее обращение должно вновь создать подключение (возможно к другой БД). Для корректного выполнения метода требуется обязательное указание поля <span style="color:green">checkcode</span>, значение которого должно соответствовать значению, определенному при создании подключения и транзакции. В противном случае метод не будет выполнен и будет возвращен код соответствующей ошибки.<br />
<br />
<u>Возможные коды ошибок:</u><br />
<br />
:*'''50043''' - Ошибка выполнения запроса<br />
:*'''50044''' - Ошибка при подключении к указанной БД<br />
:*'''50045''' - Переданный код транзакции не соответствует реальному<br />
:*'''50046''' - Не обнаружена активная транзакция<br />
:*'''50047''' - Транзакция уже существует<br />
:*Прочие коды совпадают с кодами ошибок соответствующих драйверов подключения.<br />
<br />
<br />
'''Примеры запросов'''<br />
<br />
<u>Создание транзакции:</u><br />
<br />
<property_set name="dbtransaction" id="..."><br />
<property_cdata key="mode" value="1"/><br />
<property_cdata key="direction" value="3"/><br />
<property_cdata key="connectionstring"><![CDATA[Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Base; Extended Properties=dBase IV]]><br />
</property_cdata><br />
<property_cdata key="checkcode" value="42556232"/><br />
</property_set><br />
<br />
<br />
<u>Выполнение запроса:</u><br />
<br />
<property_set name="dbtransaction" id="..."><br />
<property_cdata key="mode" value="2"/><br />
<property_cdata key="checkcode" value="42556232"/><br />
<property_cdata key="sqltext"><![CDATA[...]]></property_cdata><br />
<property_cdata key="sqltextb64"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
<u>Применение (откат) транзакции:</u><br />
<br />
<property_set name="dbtransaction" id="..."><br />
<property_cdata key="mode" value="3"/><br />
<property_cdata key="checkcode" value="42556232"/><br />
</property_set><br />
<br />
<br />
Если при выполнении запроса возникает ошибка или исключение, то конкретный код исключения возвращается в поле <span style="color:green">sqlresultcode</span>, а коллекция <span style="color:green">dataset</span> отсутствует. В случае успешного выполнения код возврата равен 0.<br />
<br />
<br />
Структура ответа в случае успешного выполнения:<br />
<br />
<property_set name="dbtransaction" id="..."><br />
<span style="color:green"><nowiki><!--##### Общие свойства #####--></nowiki></span><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_simple key="sqlresultcode" value="0" /><br />
<span style="color:green"><nowiki><!--##### Возвращаемый набор #####--></nowiki></span><br />
<property_collection name="dataset" count="1"><br />
<span style="color:green"><nowiki><!--##### Описание столбцов #####--></nowiki></span><br />
<property_set name="datasetxmlb64"><br />
<property_cdata key="xmlb64"><![CDATA[.....Base64......]]></property_cdata><br />
</property_set><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>callnumber</h4><br />
<br />
Осуществляет запрос к серверу на совершение вызова средствами менеджера автодозвона. <br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="callnumber" id="..."><br />
<property_simple key="number" value="..." /><br />
<property_simple key="direction" value="..." /><br />
</property_set><br />
<br />
<br />
Свойство '''number''' содержит номер, вызов которого необходимо осуществить. Свойство '''direction''' может принимать значения "pbx" или "city" и определяет направление вызова - во внутренний номерной план или во внешние линии соответственно. Если свойство не будет указано или будет указано неверно, то вызов будет осуществляться во внутренний номерной план, если в нем зарегистрирован указанный номер, и на внешние линии иначе.<br />
<br />
<u>Структура ответа:</u><br />
<br />
<property_set name="callnumber" id="..."><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_simple key="resultdescription" value="Success" /><br />
<property_simple key="acmresultcode" value="0" name="cntStartedSuccessfully" /><br />
</property_set><br />
<br />
<br />
Свойство '''acmresultcode''' может принимать значения из перечисления:<br />
<br />
<span style="color:blue">public enum</span> EACMAnswer<br />
{<br />
cntStartedSuccessfully = 0, <span style="color:darkviolet">//Звонок успешно взят в реализацию </span><br />
cntUserNotReady = 1, <span style="color:darkviolet">//У осуществляющего вызов пользователя не найдены линии, готовые линии, или состояние кривое </span><br />
cntBusy = 2, <span style="color:darkviolet">//При звонке на внутренний номер - признак занятости. В очереди и сам повисеть может </span><br />
<span style="color:darkviolet">//(в дальнейшем реализуем как раз ожидание в очереди...) </span><br />
cntExtLineNotFound = 3, <span style="color:darkviolet">//Не найдены готовые внешние линии после длительного ожидания и нескольких попыток <br />
</span> <br />
cntError = 4, <span style="color:darkviolet">//Прочие ошибки, исключения </span><br />
cntControlNotReady = 5, <span style="color:darkviolet">//Режим не реализован</span> <br />
cntNumberNotFound = 6, <span style="color:darkviolet">//Внутренний номер не найден (если сервер самостоятельно определяет направление звонка, то это не задействовано) </span><br />
}<br />
<br />
*<h4>switchnumber</h4><br />
<br />
Осуществляет запрос к серверу на совершение переключения (flash-буферизации текущего абонента и последующего вызова указанного номера). <br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="switchnumber" id="..."><br />
<property_simple key="number" value="..." /><br />
<property_simple key="direction" value="..." /><br />
</property_set><br />
<br />
<br />
Свойство '''number''' содержит номер, вызов которого необходимо осуществить. Свойство '''direction''' может принимать значения "pbx" или "city" и определяет направление вызова - во внутренний номерной план или во внешние линии соответственно. Если свойство не будет указано или будет указано неверно, то вызов будет осуществляться во внутренний номерной план, если в нем зарегистрирован указанный номер, и на внешние линии иначе.<br />
<br />
Структура ответа совпадает с ответом команды [[Сервисное_взаимодействие#callnumber|callnumber]].<br />
<br />
<br />
*<h4>callabort</h4><br />
<br />
Осуществляет запрос к серверу на отмену предварительно запущенной процедуры вызова средствами автодозвона. Может вызываться в любое время - в случае обнаружения активной сессии автодозвона отменит ее, в противном случае просто вернет управление.<br />
<br />
<br />
<y>Структура запроса:</u><br />
<br />
<property_set name="callabort" id="..." /><br />
<br />
<br />
Ответ содержит только стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
<br />
*<h4>log</h4><br />
<br />
Осуществляет вывод текстовой информации в стандартный лог-журнал Plugin клиентского приложения Oktell. Текст логируемой строки может быть указан явно (поле <span style="color:green">logstring</span>) или в виде base64, преобразованного из unicode-кодировки (поле logstringb64).<br />
<br />
Указанием поля <span style="color:green">type</span> можно достичь вывода текстовой строки в лог-журнал Exception (значение "1") или Common (значение "2") клиентского приложения.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="log" id="..."><br />
<property_simple key="type" value="..." /> ("0" - plugin, "1" - exception, "2" - common)<br />
<property_cdata key="logstring"><![CDATA[...]]></property_cdata><br />
<property_cdata key="logstringb64"><![CDATA[.....base64.....]]></property_cdata><br />
</property_set><br />
<br />
<br />
Ответ содержит только стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
<br />
*<h4>notify</h4><br />
<br />
Осуществляет вывод текстовой информации в режиме всплывающего уведомления для текущего пользователя. В структуре запроса любые свойства могут быть пропущены.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="notify" id="..."><br />
<property_simple key="type" value="..." /> ("info", "warn", "err", "color")<br />
<property_simple key="autohide" value="..." /> ("1", "0")<br />
<property_simple key="savedb" value="..." /> ("1", "0")<br />
<property_simple key="color" value="..." /> ("White", "LightRed", "Green", "Azure", "DarkKhaki", ...)<br />
<property_cdata key="sender"><![CDATA[...]]></property_cdata><br />
<property_cdata key="text"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
:Варианты значений для свойства '''type''': info, warn, err, color.<br />
:Варианты значений для свойства '''autohide''': 0, 1.<br />
:Варианты значений для свойства '''savedb''': 0, 1.<br />
:Варианты значений для свойства '''color''': White, LightRed, Green, Azure, DarkKhaki, .... Названия всех цветов FrameWork.<br />
<br />
Ответ содержит только стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
<br />
*<h4>tabs</h4><br />
<br />
В случае использования формы в режиме отображения среди внешних модулей осуществляет отображение указанных вкладок стандартном заголовке модуля. Это может понадобиться для реализации усложненных модулей с различными интерфейсными действиями внутри одной стартовой формы.<br />
<br />
<br />
[[Файл:Сервисное взаимодействие 001.png|center]]<br />
<br />
<br />
Для корректного применения в структуре параметров команды необходимо указание формы ('''idform''') и уникального идентификатора, передаваемого из приложения Oktell при ее создании ('''idshow''').<br />
<br />
Каждый последующий вызов будет уничтожать существующие на данный момент вкладки и создавать их по новой согласно параметру.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="tabs" id="..."><br />
<property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="idform" value="a69f5237-77ef-47fd-97d7-64e0da1c0457" /><br />
<property_simple key="idshow" value="f489439b-12f3-4425-91b5-d03e89101665" /><br />
<property_simple key="activeindex" value="2" /><br />
<property_collection name="tabs" count="..."><br />
<property_set name="tabinfo"><br />
<property_simple key="index" value="1" /><br />
<property_cdata key="name"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<property_set name="tabinfo"><br />
<property_simple key="index" value="2" /><br />
<property_cdata key="name"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<span style="color:blue">...</span><br />
</property_collection><br />
</property_set><br />
<br />
<br />
Свойство '''activeindex''' устанавливает индекс вкладки (согласно индексам, определенных в коллекции-перечислении), которая должна стать активной после отображения.<br />
<br />
Коллекция описателей вкладок - элементы <span style="color:green">property_set</span>, вложенные в базовый элемент команды - содержит описание каждой вкладки набором {index, name}, который определяет код вкладки при обмене событийными сообщениями по части вкладок между приложением и plugin-программой, а также отображаемое в панели заголовка название.<br />
<br />
Ответ содержит только стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
<br />
*<h4>tabindex</h4><br />
<br />
В случае использования формы в режиме отображения среди внешних модулей осуществляет смену активной вкладки по инициативе plugin-программы. <br />
<br />
Для корректного применения в структуре параметров команды необходимо указание формы ('''idform''') и уникального идентификатора, передаваемого из приложения Oktell при ее создании ('''idshow''').<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="tabs" id="..."><br />
<property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="idform" value="a69f5237-77ef-47fd-97d7-64e0da1c0457" /><br />
<property_simple key="idshow" value="f489439b-12f3-4425-91b5-d03e89101665" /><br />
<property_simple key="activeindex" value="..." /> <br />
</property_set><br />
<br />
<br />
Свойство '''activeindex''' устанавливает индекс вкладки (согласно индексам, определенных в коллекции-перечислении), которая должна стать активной. Индекс вкладки определяется при генерации события на отображение вкладок [[Сервисное_взаимодействие#tabs|tabs]].<br />
<br />
Ответ содержит только стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
<br />
*<h4>headertext</h4><br />
<br />
В случае использования формы в режиме отображения среди внешних модулей осуществляет смену текста заголовка модуля в главном окне приложения Oktell по инициативе plugin-программы. <br />
<br />
Для корректного применения в структуре параметров команды необходимо указание формы (idform) и уникального идентификатора, передаваемого из приложения Oktell при ее создании (idshow). Свойство text определяет новое значение заголовка.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="headertext" id="..."><br />
<property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="idform" value="a69f5237-77ef-47fd-97d7-64e0da1c0457" /><br />
<property_simple key="idshow" value="f489439b-12f3-4425-91b5-d03e89101665" /><br />
<property_cdata key="text"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
Ответ содержит только стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
<br />
*<h4>headercolor</h4><br />
<br />
В случае использования формы в режиме отображения среди внешних модулей осуществляет смену цвета заголовка модуля в главном окне приложения Oktell по инициативе plugin-программы. <br />
<br />
Для корректного применения в структуре параметров команды необходимо указание формы ('''idform''') и уникального идентификатора, передаваемого из приложения Oktell при ее создании ('''idshow'''). Свойство '''color''' определяет новое значение цвета в числовом формате (int argb). В приведенном примере указан десятичный эквивалент числа 0x00FF0000 - красный цвет.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="headercolor" id="..."><br />
<property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="idform" value="a69f5237-77ef-47fd-97d7-64e0da1c0457" /><br />
<property_simple key="idshow" value="f489439b-12f3-4425-91b5-d03e89101665" /><br />
<property_cdata key="color" value="16711680"/><br />
</property_set><br />
<br />
<br />
Ответ содержит только стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
<br />
*<h4>faxsend</h4><br />
<br />
В момент активной коммутации выполняет команду на переключение в режим отправки факса через оппозитный канал (функция аналогичная команде "Отправка факса" модуля "Телефон" клиентского приложения Oktell). Функции по работе с факсом приложения и plugin-программы взаимозаменяемы и взаимодополняемы.<br />
<br />
Свойство '''filepath''' определяет полный путь на клиентском компьютере к файлу-изображению для отправки через факс по оппозитному каналу.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="faxsend" id="..."><br />
<property_cdata key="filepath"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription''', а также поле '''faxsendresult''' с результатом выполнения команды на отправку. В нем "0" указывает на обрыв выполнения команды из-за несоответствия условий, например, если на оппозитном канале отсутствует функция факса.<br />
<br />
<br />
*<h4>faxabort</h4><br />
<br />
<br />
В момент активного сеанса передачи факса через оппозитный канал (ручной режим передачи) выполняет обрыв и переход в коммутацию с оппозитным каналом (функция аналогичная команде "Отмена факса" модуля "Телефон" клиентского приложения Oktell). Функции по работе с факсом приложения и plugin-программы взаимозаменяемы и взаимодополняемы.<br />
<br />
Свойство '''filepath''' определяет полный путь на клиентском компьютере к файлу-изображению для отправки через факс по оппозитному каналу.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="faxabort" id="..."><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription''', а также поле '''faxabortresult''' с результатом выполнения команды на обрыв факса. В нем "0" указывает на то, что факс-передача не осуществлялась, и команда на обрыв была пропущена.<br />
<br />
<br />
*<h4>downloadrecordbyid</h4><br />
<br />
Осуществляет запрос к серверу на закачку файла записи разговора (коммутации) из хранилища записей на сервере на клиентский компьютер в указанное место. В случае, если на сервере файлы записи каналов одного разговора еще не микшированы, производится моментальное микширование и пересылка одного файла. <br />
<br />
Свойство '''idconn''' определяет код (Guid) коммутации, запись которой требуется скачать, в формате "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX". Свойство '''filepath''' определяет полный путь на клиентском компьютере к итоговому файлу, куда будет сохранена запись.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="downloadrecordbyid" id="..."><br />
<property_cdata key="idconn"><![CDATA[...]]></property_cdata><br />
<property_cdata key="filepath"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля resultcode и resultdescription, а также поле downloadresult с результатом выполнения команды на загрузку файлов. В нем "1" указывает на успешное завершение операции, "0" - файлы не найдены и не загружены.<br />
<br />
<br />
*<h4>downloadrecordsbychain</h4><br />
<br />
Осуществляет запрос к серверу на закачку всех файлов записей разговоров для указанной цепочки коммутаций из хранилища на сервере на клиентский компьютер в указанную папку. В случае, если на сервере файлы записи каналов одного разговора еще не микшированы, производится моментальное микширование и пересылка единого файла для каждой коммутации. <br />
<br />
Свойство '''idchain''' определяет код (Guid) цепочки, записи разговоров которой требуется скачать, в формате "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX". Свойство '''folderpath''' определяет полный путь на клиентском компьютере к каталогу, куда будут сохранены записи с исходными именами файлов.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="downloadrecordsbychain" id="..."><br />
<property_cdata key="idchain"><![CDATA[...]]></property_cdata><br />
<property_cdata key="folderpath"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription''', а также поле '''downloadresult''' с результатом выполнения команды на загрузку файлов. В нем «1» указывает на успешное завершение операции, «0» - файлы не найдены и не загружены.<br />
<br />
Поле '''downloadcount''' в ответе появляется в случае успешной загрузки хотя бы одного файла и содержит общее количество загруженных файлов. Также в ответе перечислены полные пути на клиентском компьютере ко всем загруженным файлам.<br />
<br />
<br />
<u>Структура ответа:</u><br />
<br />
<property_set name="downloadrecordsbychain" id="..."><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_simple key="resultdescription" value="Success" /><br />
<property_simple key="downloadresult" value="1" name="success" /><br />
<property_simple key="downloadcount" value="2" /><br />
<property_collection name="filepaths" count="2"><br />
<property_set id="0"><br />
<property_simple key="index" value="0" /><br />
<property_cdata key="filepath"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<property_set id="1"><br />
<property_simple key="index" value="1" /><br />
<property_cdata key="filepath"><![CDATA[...]]></property_cdata><br />
</property_set><br />
................<br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>uploadfiletoserver</h4><br />
<br />
Осуществляет запрос к серверу на закачку одного файла с клиента на сервер. Размещение осуществляется в указанном месте на сервере. Файл должен существовать в указанном месте клиентского компьютера. <br />
<br />
Свойство '''localpath''' определяет абсолютный путь к файлу на клиентском компьютере. Свойство '''serverpath''' определяет путь на сервере, куда требуется загрузить файл. Может быть задан абсолютный путь или относительный (от каталога серверной службы) - в этом случае поле '''isrelative''' должно быть указано и иметь значение "1". Может быть указан полный путь к файлу (тогда исходное имя файла при сохранении теряется в пользу указанного), либо может быть указан путь к каталогу (тогда файл сохранится с исходным именем) - в этом случае поле '''isfolder''' должно быть указано и иметь значение "1".<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="uploadfiletoserver" id="..."><br />
<property_cdata key="localpath"><![CDATA[...]]></property_cdata><br />
<property_cdata key="serverpath"><![CDATA[...]]></property_cdata><br />
<property_simple key="isrelative" value="0" /><br />
<property_simple key="isfolder" value="0" /><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription''', а также поле '''serverfilepath''' - возвращает полный путь к загруженному файлу на сервере (может быть необходим plugin-программе в случае, если используется загрузка по относительному пути).<br />
<br />
<br />
*<h4>downloadfilefromserver</h4><br />
<br />
Осуществляет запрос к серверу на скачивание одного файла с сервера на клиентский компьютер. Размещение осуществляется в указанном месте на локальной машине. Файл должен существовать в указанном месте серверного компьютера. <br />
<br />
Свойство '''localpath''' определяет абсолютный путь к файлу на клиентском компьютере, куда следует разместить файл после загрузки с сервера. Свойство '''serverpath''' определяет путь на сервере, откуда требуется скачать файл. Может быть задан абсолютный путь или относительный (от каталога серверной службы) - в этом случае поле '''isrelative''' должно быть указано и иметь значение "1".<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="downloadfilefromserver" id="..."><br />
<property_cdata key="localpath"><![CDATA[...]]></property_cdata><br />
<property_cdata key="serverpath"><![CDATA[...]]></property_cdata><br />
<property_simple key="isrelative" value="0" /><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription''', а также поле '''downloadresult''' - «1» в случае успешного закачивания файла, «0» в случае не обнаружения файла в указанном месте сервера.<br />
<br />
<br />
*<h4>deletefilefromserver</h4><br />
<br />
Осуществляет запрос к серверу на удаление одного файла с сервера. Файл должен существовать в указанном месте серверного компьютера. <br />
<br />
Свойство '''serverpath''' определяет путь на сервере, откуда требуется скачать файл. Может быть задан абсолютный путь или относительный (от каталога серверной службы) - в этом случае поле '''isrelative''' должно быть указано и иметь значение "1".<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="deletefilefromserver" id="..."><br />
<property_cdata key="serverpath"><![CDATA[...]]></property_cdata><br />
<property_simple key="isrelative" value="0" /><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription''', а также поле '''deleteresult''' - «1» в случае успешного удаления файла, «0» в случае не обнаружения файла в указанном месте сервера или запрета на удаление.<br />
<br />
<br />
*<h4>showdirectoryonserver</h4><br />
<br />
Осуществляет запрос к серверу на получение структуры указанного каталога. <br />
<br />
Свойство '''serverpath''' определяет путь на сервере к исследуемому каталогу, структуру которого требуется получить. Может быть задан абсолютный путь или относительный (от каталога серверной службы) - в этом случае поле '''isrelative''' должно быть указано и иметь значение "1". Установленные поля '''showfiles''' и '''showdirs''' определяют соответственно перечисление файлов и подкаталогов. Поле '''pattern''' определяет маску выборки элементов (например *.txt).<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="showdirectoryonserver" id="..."><br />
<property_cdata key="serverpath"><![CDATA[...]]></property_cdata><br />
<property_simple key="isrelative" value="0" /><br />
<property_simple key="showfiles" value="1" /><br />
<property_simple key="showdirs" value="0" /><br />
<property_cdata key="pattern"><![CDATA[...]]></property_cdata><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription''', а также поле '''showdirectoryresult''' - «0» в случае отсутствия каталога по указанному пути, и «1» в случае успешного выполнения операции. Раздел '''consistence''' содержит перечисление обнаруженных элементов.<br />
<br />
<br />
<u>Структура ответа:</u><br />
<br />
<property_set name="showdirectoryonserver" id="..."><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_simple key="resultdescription" value="Success" /><br />
<property_simple key="showdirectoryresult" value="1" name="success" /><br />
<property_collection name="consistence" count="2"><br />
<property_set name="directories"><br />
<property_cdata key="dir" value="0"><![CDATA[Subdir1]]></property_cdata> <br />
<property_cdata key="dir" value="1"><![CDATA[Subdir2]]></property_cdata> <br />
<property_cdata key="dir" value="2"><![CDATA[Subdir3]]></property_cdata> <br />
<property_cdata key="dir" value="3"><![CDATA[Subdir4]]></property_cdata> <br />
</property_set><br />
<property_set name="files"><br />
<property_cdata key="file" value="0"><![CDATA[1.txt]]></property_cdata><br />
</property_set><br />
<span style="color:blue"> ................</span><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>sethandleevent</h4><br />
<br />
Осуществляет подписку на указанные события приложения (сервера или клиентского модуля) или отписку от них.<br />
<br />
Сервер и клиентское приложение генерируют множество событий, не все из которых могут быть интересны plugin-программе (лишние события это всегда затрата лишних ресурсов и времени на пустую обработку). Соответственно события разбиты на группы, и плагины осуществляют таким образом подписку на группы. Строка-значение свойства '''eventtype''' определяет текстовый код направления подписки. Свойство '''handle''' со значением «1» подписывает указанный плагин на событийное направление, со значением «0» напротив отписывает. Для проведения подписки/отписки должен быть задан идентификатор плагин-программы.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="sethandleevent" id="..."><br />
<property_cdata key="idplugin"><![CDATA[...]]></property_cdata><br />
<property_simple key="handle" value="1" /><br />
<property_simple key="eventtype" value="phoneevent" /><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''.<br />
<br />
События, генерируемые приложением, будут поступать после подписки на соответствующее направление в plugin-программу путем вызова метода [[Сервисное_взаимодействие#.D0.9C.D0.B5.D1.82.D0.BE.D0.B4_DoQuery|Метод DoQuery]]. В параметре будет указан тип и код направления, тип и код события, а также дополнительные параметры конкретного события. При этом событийные направления определяют [[Допустимые типы запросов DoQuery|допустимые типы запросов]] с кодами 203**.<br />
<br />
<br />
Доступные направления:<br />
<br />
:*'''phoneevent''' - события аппаратного модуля и логики АТС по управлению каналом, связанным с рабочим местом, на котором исполняется plugin-программа. <br />
<br />
<br />
*<h4>svcscriptstart</h4><br />
<br />
Осуществляет запрос к серверу на запуск служебного сценария по инициативе плагин-программы. Запуск может производиться в синхронном режиме с ожиданием исполнения и возвратом значения из служебной переменной сценария по завершению исполнения (в этом случае поток приложения блокируется до завершения или до таймаута). Также запуск может производиться в асинхронном режиме (без ожидания выполнения).<br />
<br />
Свойство '''scriptname''' определяет имя сценария. Полный путь вычисляется на сервере, сценарий загружается из папки общих служебных сценариев. Свойство '''startparam''' устанавливает при необходимости начальный стартовый параметр, передаваемый в компонент «Старт» сценария. Свойства '''startparam2''' и '''startparam3''' при необходимости устанавливают дополнительные стартовые параметры, доступные в служебном сценарии в разделе функций аргумента (функции «Входной параметр 2» и «Входной параметр 3»). Свойство '''startmode''' определяет режим запуска служебного сценария: «1» - асинхронный (только запуск), «2» - синхронный с ожиданием завершения исполнения и возвратом значения из служебной переменной «Возвращаемое значение». По умолчанию при отсутствии параметра выставляется синхронный режим. В синхронном режиме может быть задано свойство '''timeout''', определяющее в секундах максимальное время ожидания завершения работы сценария, по истечению которого сценарий продолжит выполнение, но управление вернется в плагин без ожидания возвращаемого значения.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="svcscriptstart" id="..."><br />
<property_cdata key="scriptname"><![CDATA[...]]></property_cdata><br />
<property_simple key="startparam" value="" /><br />
<property_simple key="startparam2" value="" /><br />
<property_simple key="startparam3" value="" /><br />
<property_simple key="startmode" value="2" /><br />
<property_simple key="timeout" value="1" /><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. Дополнительно возвращаются также несколько служебных значений. Поле '''started''' - «1» в случае успешного запуска сценария, «0» в случае, если сценарий не стартовал по какой-либо причине. Поле startresult - «0» в случае успешного исполнения команды, «10» в случае не обнаружения сценария, «11» в случае сбоя при запуске, «12» в случае таймаута ожидания в синхронном режиме. Поле '''returnvalue''' присутствует только в синхронном режиме и возвращает значение служебной переменной «Возвращаемое значение».<br />
<br />
<br />
*<h4>headsetcommand</h4><br />
<br />
Отправляет команду локальному модулю HAL, управляющему локальным устройством типа гарнитуры. Допускаются команды DTMF, Поднять трубку, Положить трубку, Генерировать флэш, Проиграть звуковой файл установленного формата (Oktell сам использует только для тестов, но функция доступна). Может потребоваться для организации в plugin-программе модуля, аналогичного встроенному софт-телефону приложения Oktell.<br />
<br />
Для устройств, не являющихся локально управляемыми гарнитурами, в общем случае метод бессмысленен. Однако его функционал незначительно расширен, так, например, вызов FLASH и DTMF достигают АТС в любом случае при наличии какого-либо устройства. Дополнительно, вызов HOOKDOWN для устройств, отличных от гарнитур, обрывает текущий сеанс коммутации, а также производит остановку сервиса автодозвона, если он был запущен.<br />
<br />
<br />
<u>Коды команд:</u><br />
<br />
hookup = 0 <span style="color:darkviolet">//поднять трубку или ответить на вызов </span><br />
hookdown = 1 <span style="color:darkviolet">//положить трубку или разорвать коммутацию </span><br />
flash = 2 <span style="color:darkviolet">//генерировать flash </span><br />
dtmf = 3 <span style="color:darkviolet">//отправить dtmf символы с канала на сервер </span><br />
playfile = 4 <span style="color:darkviolet">//воспроизвести мелодию в канал </span><br />
mute = 5 <span style="color:darkviolet">//включить/отключить исходящий звук </span><br />
<br />
<br />
Свойство '''command''' определяет требуемую к исполнению команду. В качестве значения могут быть заданы числовые коды или имена. В случае сложных команд, требующих указания параметра, ожидается наличие свойства '''data''', содержащего его значение (в случае команды dtmf в качестве параметра ожидается конкретный символ, в случае playfile - путь к файлу).<br />
<br />
<br />
<u>Структура запроса на примерах</u><br />
<br />
'''1.'''<br />
<property_set name="headsetcommand" id="..."><br />
<property_simple key="command" value="2" /><br />
</property_set><br />
<br />
<br />
'''2.'''<br />
<property_set name="headsetcommand" id="..."><br />
<property_simple key="command" value="3"/><br />
<span style="color:green"><nowiki><!-- (генерируемый символ dtmf) --></nowiki></span><br />
<property_simple key="data" value="*"/><br />
</property_set><br />
<br />
'''3.'''<br />
<property_set name="headsetcommand" id="..."><br />
<property_simple key="command" value="mute"/><br />
<span style="color:green"><nowiki><!-- (0-включить звук, 1-отключить звук) --></nowiki></span><br />
<property_simple key="data" value="1"/> <br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. Дополнительно возвращается также поле '''commandresult''', указывающее на результат исполнения.<br />
<br />
<br />
*<h4>headsetcheckstate</h4><br />
<br />
Производит запрос указанного в параметре состояния локального устройства (гарнитуры).<br />
<br />
<br />
<u>Коды команд:</u><br />
<br />
hookup = 1 <span style="color:darkviolet">//снята ли трубка </span><br />
ringing = 2 <span style="color:darkviolet">//осуществляется ли вызов устройства (звонок) </span><br />
connected = 3 <span style="color:darkviolet">//подключено/обнаружено ли устройство </span><br />
registered = 4 <span style="color:darkviolet">//зарегистрирован ли канал на сервере </span><br />
muted = 5 <span style="color:darkviolet">//отключен ли исходящий звук </span><br />
<br />
<br />
Свойство '''command''' определяет требуемое для определения состояние. В качестве значения могут быть заданы числовые коды или имена.<br />
<br />
<br />
<u>Структура запроса на примерах:</u><br />
<br />
<property_set name="headsetcheckstate" id="..."><br />
<property_simple key="command" value="2" /><br />
</property_set><br />
<br />
<br />
или<br />
<br />
<property_set name="headsetcheckstate" id="..."><br />
<property_simple key="command" value="ringing"/><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. Дополнительно возвращается также поле '''commandresult''', в котором содержится результат исполнения: «1» - состояние активно, «0» - состояние неактивно.<br />
<br />
<br />
*<h4>getallusersfullinfo</h4><br />
<br />
Осуществляет запрос к серверу на получение списка всех пользователей системы с их текущими состояниями.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="getallusersfullinfo" id="..."><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. В коллекции ответа содержится список всех пользователей с перечнем свойств. В разделе XML-структуры, соответствующей записи пользователя, содержатся такие значения как id, имя, признак оператора, принадлежность к отделу, состояние, присутствие в call-центре, перерыв, переадресация, информация о текущей привязанной линии: идентификатор, номер, код, тип, состояние. Запрашиваемая информация возвращается с сервера состояний и не использует обращения к БД.<br />
<br />
<br />
<u>Структура ответа:</u><br />
<br />
<property_set name="getallusersfullinfo" id="..."><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_collection name="usersstates" count="..."><br />
<property_set name="user" id="da803f01-ea77-40fa-bc9d-e2efb36fd5a8"><br />
<property_cdata key="id"><![CDATA[da803f01-ea77-40fa-bc9d-e2efb36fd5a8]]></property_cdata><br />
<property_cdata key="name"><![CDATA[Букашин Петр Александрович]]></property_cdata><br />
<property_simple key="isoperator" value="1" /><br />
<property_cdata key="groupid"><![CDATA[f42c8dd4-6e6b-4033-9349-5d51971fb251]]></property_cdata><br />
<property_cdata key="groupname"><![CDATA[Техническое управление]]></property_cdata><br />
<property_simple key="userstate" value="1" name="usReady" /><br />
<property_simple key="iscc" value="1" /><br />
<property_simple key="islunch" value="0" /><br />
<property_simple key="isredirect" value="0" /><br />
<property_cdata key="lineid"><![CDATA[cf8330f4-a0bf-4779-9539-ab8ea6c49df7]]></property_cdata><br />
<property_simple key="linenum" value="16016" name="Success" /><br />
<property_simple key="linecode" value="usb16" /><br />
<property_simple key="linetype" value="4" name="ltIntUSB" /><br />
<property_simple key="linestate" value="4" name="lsReady" /><br />
</property_set><br />
...<br />
<property_set name="user" id="..."><br />
...<br />
</property_set><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>getspecifieduserfullinfo</h4><br />
<br />
Осуществляет запрос к серверу на получение информации об указанном пользователе системы и его текущих состояний.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="getspecifieduserfullinfo" id="..."><br />
<property_set name="user"><br />
<property_cdata key="id"><![CDATA[xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx]]></property_cdata><br />
<property_simple key="login" value="..." /><br />
<property_simple key="name" value="..." /><br />
</property_set><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. В коллекции ответа содержится набор данных по одному (запрошенному) пользователю с перечнем свойств. В разделе XML-структуры, соответствующей записи пользователя, содержатся такие значения как id, имя, признак оператора, принадлежность к отделу, состояние, присутствие в call-центре, перерыв, переадресация, информация о текущей привязанной линии: идентификатор, номер, код, тип, состояние. Запрашиваемая информация возвращается с сервера состояний и не использует обращения к БД.<br />
<br />
<br />
<u>Структура ответа:</u><br />
<br />
<property_set name="getspecifieduserfullinfo" id="..."><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_collection name="usersstates" count="1"><br />
<property_set name="user" id="da803f01-ea77-40fa-bc9d-e2efb36fd5a8"><br />
<property_cdata key="id"><![CDATA[da803f01-ea77-40fa-bc9d-e2efb36fd5a8]]></property_cdata><br />
<property_cdata key="name"><![CDATA[Букашин Петр Александрович]]></property_cdata><br />
<property_simple key="isoperator" value="1" /><br />
<property_cdata key="groupid"><![CDATA[f42c8dd4-6e6b-4033-9349-5d51971fb251]]></property_cdata><br />
<property_cdata key="groupname"><![CDATA[Техническое управление]]></property_cdata><br />
<property_simple key="userstate" value="1" name="usReady" /><br />
<property_simple key="iscc" value="1" /><br />
<property_simple key="islunch" value="0" /><br />
<property_simple key="isredirect" value="0" /><br />
<property_cdata key="lineid"><![CDATA[cf8330f4-a0bf-4779-9539-ab8ea6c49df7]]></property_cdata><br />
<property_simple key="linenum" value="16016" name="Success" /><br />
<property_simple key="linecode" value="usb16" /><br />
<property_simple key="linetype" value="4" name="ltIntUSB" /><br />
<property_simple key="linestate" value="4" name="lsReady" /><br />
</property_set><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>getkeyid</h4><br />
<br />
Осуществляет запрос к серверу для определения текущего регистрационного номера. Возвращает 7-значный номер или 0, если лицензия не обнаружена или неверна.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="getkeyid" id="..."><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. Также в структуре ответа содержится поле '''keyid''', содержащее 7-значный регистрационный номер.<br />
<br />
<br />
<u>Структура ответа:</u><br />
<br />
<property_set name="getkeyid" id="..."><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_simple key="keyid" value="8378376" /><br />
</property_set><br />
<br />
<br />
*<h4>getqueueitems</h4> <br />
<br />
Осуществляет запрос к серверу для получения текущего списка элементов в очереди ожидания.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="getqueueitems" id="..."><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. Также в ответе содержится структура '''currentqueue''' c информацией о всех элементах в очереди на момент запроса. Поля описания каждого элемента очереди аналогичны соответствующим значениям возвращаемого значения функции '''Queue_GetCurrentItems''' раздела [[Работа с логикой АТС#Методы для работы с логикой АТС: очередь ожидания|«Oktell в других проектах. Методы для работы с АТС: очередь ожидания»]].<br />
<br />
<br />
<u>Структура ответа на примере:</u><br />
<br />
<property_set name="getqueueitems"><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_collection name="currentqueue" count="2"><br />
<property_set name="queueitem"><br />
<property_simple key="dateformat" value="dd.MM.yyyy HH:mm:ss" /><br />
<property_simple key="managedlineid" value="9fe668ff-0822-4b8d-aa0a-71fbbaad0c67" /><br />
<property_simple key="objecttype" value="0" name="qotQueueLogic" /><br />
<property_cdata key="username"><![CDATA[Замятин Олег Васильевич]]></property_cdata><br />
<property_simple key="lenqueue" value="137000" /><br />
<property_simple key="srcelementid" value="a00a7a08-b3f7-44f3-8b2c-64ef11d4a2c5" /><br />
<property_simple key="queuesource" value="1" name="qsLineLogic" /><br />
<property_cdata key="department"><![CDATA[Руководство]]></property_cdata><br />
<property_simple key="calledid" value="14" /><br />
<property_simple key="callerid" value="21" /><br />
<property_simple key="idobject" value="12345678-1234-1234-1234-12345678123a" /><br />
<property_simple key="userid" value="ba0a387e-815a-434d-8ace-1a1840916761" /><br />
<property_simple key="managedlinenum" value="1525" /><br />
<property_simple key="startqueuetime" value="02.11.2009 10:43:36" /><br />
<property_simple key="queuepriority" value="10" /><br />
</property_set><br />
<property_set name="queueitem"><br />
<property_simple key="dateformat" value="dd.MM.yyyy HH:mm:ss" /><br />
<property_simple key="tasklistid" value="-1" /><br />
<property_simple key="idobject" value="12345678-1234-1234-1234-12345678123b" /><br />
<property_simple key="taskisoutput" value="0" /><br />
<property_simple key="managedlinenum" value="1001" /><br />
<property_simple key="userid" value="00000000-0000-0000-0000-000000000000" /><br />
<property_cdata key="taskname"><![CDATA[Прием входящих]]></property_cdata><br />
<property_simple key="calledid" value="5109940" /><br />
<property_simple key="srcelementid" value="cf82a296-2b27-43c8-a607-1579c83d0b8f" /><br />
<property_simple key="username" value="" /><br />
<property_simple key="startqueuetime" value="02.11.2009 10:43:36" /><br />
<property_simple key="objecttype" value="0" name="qotQueueLogic" /><br />
<property_simple key="lenqueue" value="277000" /><br />
<property_simple key="callerid" value="89050213951" /><br />
<property_simple key="queuepriority" value="10" /><br />
<property_simple key="managedlineid" value="d2d2bd39-d5a3-4d83-b78f-d6ac25cb2733" /><br />
<property_simple key="department" value="" /><br />
<property_simple key="taskid" value="79f0627c-3372-474c-9d9a-8fc3627a3ed8" /><br />
<property_simple key="queuesource" value="5" name="qsIncomingTask" /><br />
</property_set><br />
</property_collection><br />
</property_set><br />
<br />
<br />
*<h4>interaction</h4><br />
<br />
Осуществляет отправку команды в другой экземпляр plugin-программы, расположенной на другом рабочем месте. Реализует механизм взаимодействия различных экземпляров plugin-программ.<br />
<br />
Структура взаимодействия представляет собой цепочку:<br />
<br />
'''Client1.Plugin''' -> '''Server''' -> '''Client2.Plugin''' -> '''Server''' -> '''Client1.Plugin''' <br />
<br />
<br />
Plugin-программа на первом клиентском рабочем месте инициирует событие OnQuery.interaction, передавая в параметре информацию о пользователе (<span style="color:green">destinationuserid</span>) или рабочем месте (<span style="color:green">destinationwpid</span>), куда необходимо передать информацию, код plugin-программы, которая должна обработать запрос (destinationpluginid), а также текстовые данные, подлежащие передаче (<span style="color:green">data</span>). Запрос отправляется на сервер, и в случае обнаружения запрошенного клиентского места осуществляется вызов метода [[Сервисное_взаимодействие#DoQuery.interaction|DoQuery.interaction]] в указанной plugin-программе, работающей на втором клиентском рабочем месте. <br />
<br />
При необходимости возврата ответа (любой информации, запакованной в текстовый вид), экземпляр plugin-программы при обработке вызова DoQuery.interaction может инициировать аналогичный вызов OnQuery.interaction для полностью аналогичной схемы доведения информации в ответ. В качестве адресата указывается пользователь-отправитель, а также plugin-отправитель, коды которых присутствуют в параметре при вызове DoQuery.interaction (<span style="color:green">senderuserid</span> и <span style="color:green">senderpluginid</span>). Это асинхронный режим взаимодействия. Вне зависимости от того как долго будет выполняться DoQuery, в какой момент времени будет отправлен асинхронный ответ, управление из вызова OnQuery.interaction в плагине-инициаторе будет возвращено незамедлительно после отправки команды серверу.<br />
<br />
В синхронном режиме взаимодействия плагин-инициатор не получает возврата управления из вызова OnQuery.interaction вплоть до возврата управления из метода DoQuery.interaction в плагине-адресате. При этом возвращаемое из DoQuery.interaction значение будет размещено в ответе, подготавливаемом для плагина-инициатора. Для активации синхронного режима в параметре запроса OnQuery.interaction должен быть указан флаг <span style="color:green">waitrespond</span> со значением «1». В этом случае может быть указан таймаут (<span style="color:green">timeout</span>), по истечении которого ожидание будет прервано и управление возвращено в инициирующий плагин. Таймаут указывается целым числом в миллисекундах.<br />
<br />
Поиск экземпляра plugin-программы, которая должна обработать запрос, осуществляется в следующей очередности:<br />
<br />
Если указан идентификатор пользователя (<span style="color:green">destinationuserid</span>), выбирается рабочее место, на котором он авторизован. В противном случае исследуется идентификатор рабочего места (<span style="color:green">destinationwpid</span>). <br />
<br />
Если клиентское рабочее место обнаружено, происходит отправка запроса на него. <br />
<br />
Выполнением запроса занимается плагин, указанный параметром <span style="color:green">destinationpluginid</span>. Если параметр не указан, выполнение передается плагину-отправителю (экземпляру, расположенному на стороннем клиентском рабочем месте).<br />
<br />
Следует иметь в виду, что данные необходимо упаковывать (например в Base64), если они обладают произвольной и/или достаточно сложной структурой. В противном случае их невозможно будет вставить в XML документ.<br />
<br />
<br />
<u>Структура запроса:</u><br />
<br />
<property_set name="interaction" id="..."><br />
<property_simple key="destinationuserid" value="2" /><br />
<property_cdata key="data"><![CDATA[...произвольные текстовые данные...]]></property_cdata><br />
<property_simple key="waitrespond" value="1" /><br />
<property_simple key="timeout" value="3000" /><br />
</property_set><br />
<br />
<br />
Ответ содержит стандартные поля '''resultcode''' и '''resultdescription'''. В ответе содержится параметр '''interactionresult''', представляющий собой код результата выполнения запроса. Его значения из набора:<br />
<br />
Sent = 1 <span style="color:darkviolet">//Операция успешно завершена</span><br />
DestinationNotSpecified = 101 <span style="color:darkviolet">//Не указаны параметры клиентского места - назначения</span><br />
DestinationClientNotFound = 102 <span style="color:darkviolet">//Клиентское место не найдено</span><br />
DestinationClientNotLoaded = 103 <span style="color:darkviolet">//Клиенское место не загружено (пользователь не авторизован)</span><br />
DestinationPluginNotFound = 104 <span style="color:darkviolet">//Плагин не найден</span><br />
DestinationPluginLoadError = 105 <span style="color:darkviolet">//Плагин не загружен</span><br />
DestinationClientNotHandled = 107 <span style="color:darkviolet">//Клиентское место не поддерживает механизм взаимодействия</span><br />
QueryTimeout = 108 <span style="color:darkviolet">//Таймаут ожидания ответа</span><br />
QueryNoAnswer = 109 <span style="color:darkviolet">//Запрос отправлен, но ответ не может быть предоставлен</span><br />
<br />
и параметр '''resultdata''', имеющий значение в случае успешного ожидания выполнения в ходе синхронного запроса. В него подставляется полностью результат выполнения метода DoQuery в плагине-адресате.<br />
<br />
<br />
<u>Структура ответа:</u><br />
<br />
<property_set name="interaction" id="..."><br />
<property_simple key="resultcode" value="100" name="Success" /><br />
<property_cdata key="resultdescription"><![CDATA[Success]]></property_cdata><br />
<property_simple key="interactionresult" value="1" name="Sent" /><br />
<property_cdata key="resultdata"><![CDATA[...текстовые данные - результат выполнения...]]></property_cdata><br />
</property_set><br />
<br />
<br />
Список возможных сервисных команд будет пополняться. В случае, если вам необходимо получить дополнительный функционал, обращайтесь с предложениями на сайт компании [http://oktell.ru/ Телефонные системы].<br />
<br />
<br />
==Метод DoQuery==<br />
<br />
Общее описание метода приведено в статье [[Описание_базовых_элементов_интерфейса#Сервисное взаимодействие|«Базовые элементы интерфейса. DoQuery»]]. В текущем разделе приводится формат параметров при обмене сообщениями в контексте метода.<br />
<br />
<br />
===Параметр (запрос от приложения Oktell к plugin-программе)===<br />
<br />
Все запросы определяются передаваемым в метод параметром. В версии 2.5-90101 не существует команд, обязательных для реализации в plugin-программе, и ответ в некоем корректном виде вовсе может отсутствовать. В дальнейшем возможно появление обязательных для реализации команд, предполагающих корректный и выверенный ответ plugin-программы.<br />
<br />
Запросы всегда состоят из одного элемента property_set, определяющим действие и содержащим необходимые для него параметры. Тип запроса определяется строковым кодом (значением атрибута <span style="color:green">name</span>) и/или дублирующим числовым кодом (значением атрибута <span style="color:green">id</span>) элемента <span style="color:green">property_set</span>. Значения этих атрибутов всегда соответствуют друг другу. Все необходимые для исполнения запроса параметры составляют свойства элемента. В отдельных случаях элемент может иметь сложную структуру, содержать коллекцию вложенных элементов.<br />
<br />
<br />
<u>Структура параметра-запроса:</u><br />
<br />
<?xml version="1.0" encoding="utf-16"?><br />
<oktellxmlmapper version="80710"><br />
<data name="action" count="1"><br />
<property_set name="..." id="..."><br />
...<br />
</property_set><br />
</data><br />
</oktellxmlmapper><br />
<br />
<br />
===Возвращаемое значение (ответ plugin-программы на запрос приложения Oktell)===<br />
<br />
В версии 2.5-90101 не существует команд, обязательных для реализации в plugin-программе. А все исполняемые сервисные действия носят характер информационных пересылок в plugin.<br />
<br />
При появлении в дальнейшем обязательных команд-действий структура ответа должна соответствовать приведенному виду, где в теле элемента property_set содержится контекстно-зависимое содержимое.<br />
<br />
<?xml version="1.0" encoding="utf-16"?><br />
<oktellxmlmapper version="80710"><br />
<data name="actionresult" count="1"><br />
<property_set name="..." id="..."><br />
...<br />
</property_set><br />
</data><br />
</oktellxmlmapper><br />
<br />
<br />
===Допустимые типы запросов===<br />
<br />
:*[[Сервисное_взаимодействие#tabchange|tabchange (20101)]]<br />
:*[[Сервисное_взаимодействие#formshow|formshow (20201)]]<br />
:*[[Сервисное_взаимодействие#formhide|formhide (20202)]]<br />
:*[[Сервисное_взаимодействие#phoneevent|phoneevent (20301)]]<br />
:*[[Сервисное_взаимодействие#pluginloaded|pluginloaded (20401)]]<br />
:*[[Сервисное_взаимодействие#pluginstarted|pluginstarted (20402)]]<br />
:*[[Сервисное_взаимодействие#pluginunload|pluginunload (20403)]]<br />
:*[[Сервисное_взаимодействие#DoQuery.interaction|interaction (20501)]]<br />
<br />
<br />
*<h4>tabchange</h4><br />
<br />
Код 20101. Переводит событие о смене вкладки в заголовке управляющего отображением модуля в plugin-программу. Вызывается только с указанием кода экземпляра формы и только в режиме отображения внешних модулей.<br />
<br />
<br />
<u>Структура передаваемого запроса:</u><br />
<br />
<property_set name="tabchange" id="20101"><br />
<property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="idform" value="817d77a7-5d0e-4783-9304-e310c2ac3443" /><br />
<property_simple key="idshow" value="2e2d8ff0-de47-415f-ab68-9bddcd09952b" /><br />
<property_simple key="actiontype" value="20101" name="TabChange" /><br />
<property_simple key="activeindex" value="3" /><br />
</property_set><br />
<br />
<br />
Параметры '''idplugin''', '''idform''', '''idshow''' указывают управляющему объекту plugin-программы на конкретный экземпляр отображаемой формы, '''activeindex''' указывает индекс вкладки (согласно индексам, определенных в коллекции-перечислении), которая стала активной после действий пользователя (щелчка мышью). Индекс вкладки определяется при генерации события [[Сервисное взаимодействие#tabs|tabs]] на отображение вкладок обратного метода OnQuery. <br />
<br />
<br />
*<h4>formshow</h4><br />
<br />
Код 20201. Переводит событие о начале визуальной работы с формой в plugin-программу. Генерируется каждый раз, когда пользователь открывает модуль из состояния скрытых. Вызывается только с указанием кода экземпляра формы и только в режиме отображения внешних модулей. При смене отображения сначала открываемый модуль создается, затем управляющий объект получает команду formshow, лишь затем генерируется formhide для скрываемого модуля.<br />
<br />
<property_set name="formshow" id="20201"><br />
<property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="idform" value="817d77a7-5d0e-4783-9304-e310c2ac3443" /><br />
<property_simple key="idshow" value="2e2d8ff0-de47-415f-ab68-9bddcd09952b" /><br />
<property_simple key="actiontype" value="20201" name="FormShow" /><br />
</property_set> <br />
<br />
<br />
Параметры '''idplugin''', '''idform''', '''idshow''' указывают управляющему объекту plugin-программы на конкретный экземпляр отображаемой формы<br />
<br />
<br />
*<h4>formhide</h4><br />
<br />
Код 20202. Переводит событие о завершении визуальной работы с формой в plugin-программу. Генерируется каждый раз, когда пользователь проводит в приложении Oktell действия, вызывающие скрытие указанного модуля (перевод в невидимые). Вызывается только с указанием кода экземпляра формы и только в режиме отображения внешних модулей. При смене отображения сначала открываемый модуль создается, затем управляющий объект получает команду formshow, лишь затем генерируется formhide для скрываемого модуля.<br />
<br />
<property_set name="formhide" id="20202"><br />
<property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="idform" value="817d77a7-5d0e-4783-9304-e310c2ac3443" /><br />
<property_simple key="idshow" value="2e2d8ff0-de47-415f-ab68-9bddcd09952b" /><br />
<property_simple key="actiontype" value="20201" name="FormHide" /><br />
</property_set><br />
<br />
<br />
Параметры '''idplugin''', '''idform''', '''idshow''' указывают управляющему объекту plugin-программы на конкретный экземпляр отображаемой формы<br />
<br />
<br />
*<h4>phoneevent</h4><br />
<br />
Код 20301. Событийное направление, подлежащее подписке. То есть передается в плагин-программу только тогда, когда она предварительно запросила подписку на направление путем вызова [[Сервисное_взаимодействие#Событие OnQuery|OnQuery]]-метода [[Сервисное_взаимодействие#sethandleevent|sethandleevent]].<br />
<br />
К данному направлению относится ряд событий аппаратного модуля и логики АТС по управлению каналом, связанным с рабочим местом, на котором исполняется plugin-программа.<br />
<br />
<br />
<u>Типы событий:</u><br />
<br />
HALSrvRegSuccess = 201 <span style="color:darkviolet">//подключение устройства к серверу</span><br />
HALSrvRegTimeout = 202 <span style="color:darkviolet">//таймаут или неудача регистрации устройства на сервере</span><br />
HALDeviceFound = 203 <span style="color:darkviolet">//подключение нового устройства</span><br />
HALDeviceLost = 204 <span style="color:darkviolet">//потеря текущего устройства</span><br />
HALHeadsetParams = 212 <span style="color:darkviolet">//смена состояния гарнитуры (ishookup, isringing)</span><br />
<br />
CommutationStarted = 231 <span style="color:darkviolet">//начало коммутации с участием канала</span><br />
CommutationStopped = 232 <span style="color:darkviolet">//завершение коммутации с участием канала</span><br />
FaxStarted = 233 <span style="color:darkviolet">//начало факс-сеанса на оппозитном канале</span><br />
FaxStopped = 234 <span style="color:darkviolet">//завершение факс-сеанса на оппозитном канале</span><br />
FaxFilesReceived = 235 <span style="color:darkviolet">//получение файлов по встроенному факсу</span><br />
RingStarted = 236 <span style="color:darkviolet">//начало вызова канала</span><br />
RingFinished = 237 <span style="color:darkviolet">//прекращение вызова канала</span><br />
ACMStarted = 238 <span style="color:darkviolet">//начало сеанса автодозвона</span><br />
ACMFinished = 239 <span style="color:darkviolet">//завершение сеанса автодозвона</span><br />
FlashHoldAction = 240 <span style="color:darkviolet">//смена состояния flash-буфера</span><br />
ChainStateChange = 241 <span style="color:darkviolet">//смена состояния текущей цепочки коммутаций</span><br />
LineStateChange = 242 <span style="color:darkviolet">//смена состояния канала</span><br />
<br />
<br />
Коды и параметры событий соответствуют идентичным событиям сервисного оповещения COM-интеграции (разделы [[Сервисное оповещение|«Сервисное оповещение»]] и более подробно [[Работа с логикой АТС#События АТС по линии пользователя|«Работа с логикой АТС. События АТС по линии пользователя»]]).<br />
<br />
Пример параметра для события CommutationStarted о начале коммутации канала пользователя с каналом другого абонента или IVR:<br />
<br />
<property_set name="phoneevent" id="20301"><br />
<property_simple key="actiontype" value="20301" name="PhoneEvent" /><br />
<property_simple key="event" value="231" name="CommutationStarted" /><br />
<property_simple key="idchain" value="abcdef12-abcd-abcd-1234-1234567890ab" /><br />
<property_simple key="idconnection" value="12345678-1234-1234-1234-abcdef123456" /><br />
<property_simple key="canfax" value="1" /><br />
<property_simple key="opponentdescription" value="Иванов Сергей" /><br />
<property_simple key="opponentname" value="Иванов Сергей" /><br />
<property_simple key="opponentnumber" value="" /><br />
<property_simple key="opponentlineid" value="cf8330f4-a0bf-4779-9539-ab8ea6c49df7" /><br />
<property_simple key="opponentlinenumber" value="" /><br />
</property_set><br />
<br />
<br />
*<h4>pluginloaded</h4> <br />
<br />
Код 20401. Вызывается после создания и загрузки plugin-программ, стартующих в режиме без визаулизации вместе с запуском клиентского приложения (устанавливается администратором при регистрации plugin-программы в Oktell). Метод не вызывается при тестовых загрузках администратором, а также если загрузка происходит по первому обращению. В случае динамического обновления метод будет вызван сразу после загрузки обновленной plugin-программы, если для нее установлен момент запуска «При запуске клиентского приложения» или «При запуске главного окна».<br />
<br />
<property_set name="pluginloaded" id="20401"><br />
<property_simple key="actiontype" value="20401" name="PluginLoaded" /><br />
</property_set><br />
<br />
<br />
*<h4>pluginstarted</h4><br />
<br />
Код 20402. Вызывается после загрузки всех plugin-программ. Не вызывается после фиктивной загрузки в режимах администрирования и наладки в сценариях. Может применяться и рекомендуется к применению для создания всех внутренних объектов, инициализации визуальных форм, запуска различных процессов, требуемых только в реальной деятельности плагина, и лишних в режиме информационного обмена в административных целях. Рекомендуется именно здесь проводить действия, которые понаитию размещаются в конструкторе управляющего объекта.<br />
<br />
<property_set name="pluginstarted" id="20402"><br />
<property_simple key="actiontype" value="20402" name="PluginStarted" /><br />
</property_set><br />
<br />
<br />
*<h4>pluginunload</h4><br />
<br />
Код 20403. Вызывается непосредственно перед выгрузкой plugin-программы в потоке, осуществляющем выгрузку. Ожидается, что plugin-программа осуществит завершение всех активных операций. В случае, если программа подгружена в домен основного приложения, она останется в памяти до его полной выгрузки/перезагрузки. В то же время параллельно может быть загружен новый экземпляр этой же plugin-программы. Необходимо обеспечить освобождение монопольных ресурсов, остановку активных потоков, и другие операции, поддерживаемые в активной фазе работы подпрограммы.<br />
<br />
<br />
<property_set name="pluginunload" id="20403"><br />
<property_simple key="actiontype" value="20403" name="PluginUnload" /><br />
</property_set><br />
<br />
<br />
<div id="DoQuery.interaction"></div><br />
*<h4>interaction</h4><br />
<br />
Код 20501. Вызывается по инициативе другой plugin-программы или другого экземпляра этой plugin-программы с передачей произвольной текстовой информации. Может вызываться из экземпляров, запущенных на других клиентских рабочих местах. <br />
<br />
Служит для организации схем взаимодействия экземпляров plugin-программ, запущенных разными пользователями на разных компьютерах.<br />
<br />
Подробнее о механизме в описании инициирующего метода [[Сервисное взаимодействие#interaction|OnQuery.interaction]].<br />
<br />
Следует иметь в виду, что серверное событие, инициирующее вызов этого метода, не производит загрузки соответствующей plugin-программы, а лишь подключение к уже загруженной. Таким образом необходимо гарантировать предварительную загрузку плагина. Это можно организовать принудительной установкой свойства «Момент загрузки» при регистрации plugin-программы в Oktell (значения свойства «При запуске клиентского приложения» или «При запуске главного окна»).<br />
<br />
<property_set name="interaction" id="20501"><br />
<property_simple key="actiontype" value="20501" name="Interaction" /><br />
<property_simple key="senderuserid" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" /><br />
<property_simple key="senderpluginid" value="817d77a7-5d0e-4783-9304-e310c2ac3443" /><br />
<property_cdata key="data"><![CDATA[...текстовые данные - запрос...]]></property_cdata><br />
</property_set><br />
<br />
<br />
В случае наладки синхронного взаимодействия метод должен возвращать значение, которое затем подставляется в ответ (поле resultdata) на вызов OnQuery.interaction.<br />
<br />
Список возможных сервисных команд будет пополняться. В случае, если вам необходимо получить дополнительный функционал, обращайтесь с предложениями на [http://oktell.ru/ сайт компании Телефонные системы]<br />
<br />
{|cellpadding="10" cellspacing="0" border="0"<br />
| [[Встраиваемые_plugin-модули|Наверх]]<br />
| [[Описание базовых элементов интерфейса|Описание базовых элементов интерфейса<<<]]<br />
| [[Сервисное взаимодействие]]<br />
| [[Рекомендации разработчику|>>>Рекомендации разработчику]]<br />
|-<br />
|}</div>Peter%D0%A4%D0%B0%D0%B9%D0%BB:Cl_cc_scr_i47.pngФайл:Cl cc scr i47.png2014-06-30T09:23:25Z<p>Peter: </p>
<hr />
<div></div>Peter%D0%9A%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D1%8B_%D1%81%D1%86%D0%B5%D0%BD%D0%B0%D1%80%D0%B8%D0%B5%D0%B2_IVRКомпоненты сценариев IVR2014-06-30T09:22:33Z<p>Peter: </p>
<hr />
<div>[[Сценарии_IVR|Наверх]]<br />
<br />
<br />
В данном разделе в справочном порядке приведены лишь узкоспециализированные компоненты, доступные только сценариям IVR. Наличие таких компонентов обусловлено тем, что в отличие от других типов сценариев, IVR управляет одной конкретной линией и имеет доступ к аппаратным ресурсам. Среди появляющихся в этой связи возможностей: Проигрывание звуков, запись звуков, прием нажатых клавиш, возможность снять/положить трубку, переключение звонка на указанный номер и пр. Остальные компоненты являются общими для всех типов сценариев и описаны выше в разделе [[Общие компоненты сценариев]].<br />
<br />
<br />
__TOC__<br />
<br />
<br />
===Поднять трубку===<br />
[[Файл:cl_cc_scr_i31.png|left]] <br />
<br />
<br />
Компонент дает команду АТС снять трубку на обрабатываемой линии. Имеет смысл для внешних линий, на которые поступает звонок. Между компонентами «Старт» и «Поднять трубку» можно вставить другие компоненты, позволяющие отклонить звонок, не снимая трубки, в зависимости от некоторых условий. <br />
<br />
Необходимо осуществлять подъем трубки перед компонентами, занимающимися интерактивным взаимодействием с абонентом: воспроизведение, запись, ввод dtmf, вход в задачу, переключения. Исключением может являться случай сквозного переключения, когда трубку требуется снять только после ответа удаленного или внутреннего абонента. В этом случае мелодии ожидания не воспроизводятся, внешний абонент слышит сигнал КПВ.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Команда<br />
|Режим ответа. Используется фактически только в главном (и/или зависимых от него) сценариях, когда на управляемой линии входящий вызов и реализация сценария начинается с компонента «Старт». Для SIP каналов позволяет установить требуемый режим ответа в линию:<br />
* 200 OK. Абонент ответил, медиа-канал организован, тарификация начата. <br />
* 180 Ringing. Абонент вызывается, вызывающему воспроизводятся длинные гудки. <br />
* 183 Session Progress. Абонент вызывается/вызов транслируется, медиа канал организован и вызывающему можно и следует начать воспроизводить в сценарии звуковые файлы. Тарификация еще не производится. <br />
<br />
Для SIP каналов возможны последовательные ответы в зависимости от специфики выстраиваемого алгоритма. <br />
<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Для CTI-каналов любое выбранный режим приводит к простому снятию трубки при входящем вызове.<br />
<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
[[Файл:cl_cc_scr_i32.png|left]] <br />
===Положить трубку===<br />
<br />
<br />
Осуществляет разрыв связи на обслуживаемой линии и производит завершение сценария. Компонент нельзя использовать после проведения успешного переключения (коммутации).<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="PlayFile"></div><br />
[[Файл:cl_cc_scr_i33.png|left]]<br />
===Воспроизведение звукового файла===<br />
<br />
<br />
Осуществляется проигрывание указанного звукового файла в линию абонента. <br />
<br />
<br />
Файл можно указать явно и по имени. В случае явного указания файл копируется и присоединяется к сценарию. В случае указания файла по имени – в соответствующей форме определяется принцип построения полного пути, состоящего из каталога и имени, определяющихся отдельно друг от друга. <br />
<br />
<br />
Проигрывание можно прервать одной из набора указанных последовательностей символов прерывания, при необходимости сохранив ее в буфер-переменную. Для длинного файла можно указать время, после которого прервать звучание, вне зависимости от того, завершился файл или нет. Таким образом завершение действия компонента осуществляется как только происходит одно из событий: <br />
* файл закончился; <br />
* сработал таймер установленного времени звучания; <br />
* набрана последовательность или символ прерывания. <br />
<br />
<br />
В некоторых случаях полезно использование дополнительной паузы после достижения конца файла. В любой момент возможно прерывание воспроизведения или последующей паузы одной из набора установленных последовательностей символов прерывания.<br />
<br />
<br />
Компонент может активировать фоновое воспроизведение при выборе соответствующего режима. Осуществляет запуск воспроизведения указанного файла и сразу передает управление на следующий элемент сценария. Таким образом все следующие компоненты работают на фоне воспроизводимого файла. Даже вся цепочка переключений и ожиданий в очередях будет происходить на стартовавшем ранее фоне. Только после достижения конца фонового файла компоненты переключений начнут осуществлять собственное воспроизведение в канал (мелодии ожидания). Остановка фонового воспроизведения производится при достижении конца файла, при обработке другого компонента Воспроизведение, при явной остановке фонового воспроизведения (режим Остановка фона), при коммутации с другим каналом или конференцией, а также при обрыве связи. <br />
<br />
<br />
У компонента в контекстном меню доступна команда «Воспроизвести». При использовании прикрепленного файла он будет открыт во встроенном проигрывателе.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Режим<br />
|Определяет режим проигрывания файла:<br />
* Файл полностью. <br />
* Предпрослушивание. <br />
* Файл + дополнительное время. <br />
* Фоновое воспроизведение. <br />
* Остановка фона.<br />
* Генерация DTMF<br />
|- <br />
|Файл<br />
|Окно ввода выбора проигрывающегося файла. <br />
Доступно для режимов воспроизведения файла.<br />
<br />
Файл может быть прикреплен к сценарию (выбран в момент редактирования и скопирован к сценарию), а также найден по сформированному пути в момент обработки сценария. Путь строится из составных частей: каталог и имя файла.<br />
Каталог, в котором лежит файл может быть задан<br />
* локальной категорией (в папке сценария); <br />
* глобальной категорией (в папке, где хранятся все сценарии); <br />
* абсолютным путем (C:\AAA\BBB); <br />
* пустота – в этом случае считается, что значение имени файла уже содержит весь путь. <br />
<br />
Имя файла берется из значения указанной переменной сценария.<br />
|- <br />
|Время предпрослушивания<br />
|Доступно только в режиме предпрослушивания.<br />
Числовой аргумент, опредляющий время в секундах, по истечении которого проигрывание прервется и управление перейдет к следующему компоненту.<br />
<br />
<br />
<span style="color:red;">ВНИМАНИЕ! В зависимости от значения (при наличии) ключа «EnableGuaranteePlayTimeout» в файле конфигурации сервера обработчик сценария может ждать или пропускать ожидание сигнала об окончании воспроизведения.<br />
<br />
|-<br />
|Дополнительное время<br />
|Доступно только в режиме «файл + дополнительное время».<br />
Числовой аргумент, определяющий дополнительную задержку после воспроизведения, в ходе которой воспроизводится тишина и производится аналогичное ожидание набора символов.<br />
|- <br />
|Символы прерывания<br />
|Недоступно в режиме фонового воспроизведения. <br />
Символы прерывания или их последовательности, разделенные запятыми или пробелами. При вводе с клавиатуры абонента указанной последовательности проигрывание прекращается, и управление переходит к следующему компоненту.<br />
|- <br />
|Буфер<br />
|Недоступно в режиме фонового воспроизведения. <br />
Переменная, в которую сохранится последовательность, прервавшая воспроизведение.<br />
|- <br />
|Очистить буфер<br />
|Недоступно в режиме фонового воспроизведения. <br />
Флаг, определяющий, будет ли последовательность дописана в конец к уже существующим в буфере данным, либо очистит их и запишется с начала.<br />
|- <br />
|DTMF-последовательность<br />
|Доступно только в режиме генерации DTMF.<br />
<br />
Один или несколько DTMF символов, подлежащих генерации в обслуживаемый канал. При необходимости генерации нескольких символов в нагруженных системах рекомендуется использовать несколько компонентов, разделенных паузами в 200-300 мс, либо использовать цикл, а не предоставлять эту работу самому компоненту.<br />
|- <br />
|Переход<br />
|Компонент, на который передается управление после завершения воспроизведения.<br />
|- <br />
|Переход, неудача<br />
|Недоступно в режиме фонового воспроизведения. <br />
Компонент, на который передается управление в случае, если по какой либо причине произошел сбой и файл не начал воспроизводиться. Например незаданное имя, отсутствие файла или доступа к нему, неверный формат и т.п.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="PlayNumber"></div> <br />
[[Файл:cl_cc_scr_i34.png|left]]<br />
===Проигрывание числа===<br />
<br />
<br />
Осуществляется проигрывание числа, определяемого аргументом (переменной, функцией, выражением, значением). Для проигрывания существуют несколько видов голосов, которые можно пополнять своими записями. Проигрывание производится по указанному формату (время, телефонный номер и т.д.), либо по указанной схеме (посимвольно, целиком).<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Число<br />
|Аргумент (значение, переменная, функция, значение), строковое представление которого в числовом формате нужно проговорить текстом.<br />
|-<br />
|Языковой алгоритм<br />
|Определяет алгоритм преобразования числа для воспроизведения с учетом выбранного языка. Так, число 123 при использовании русскоязычного алгоритма звучит как "Сто Двадцать Три", а при использовании англоязычного "One Hundred and Twenty Three". Помимо языкового алгоритма необходимо выбрать голос, в каталоге которого присутствуют файлы озвучивания числительных соответствующего языка. <br />
|-<br />
|Голос<br />
|Выбор голоса для воспроизведения. Каждый голос представляет собой папку с набором файлов, озвучивающих достаточно большой набор числительных и используемых дополнительных слов. Папки хранятся в каталоге со сценариями. В комплект входят 3 голоса. <br />
Перечень всех используемых файлов приведен в конце руководства в разделе [[Перечень файлов, необходимых для озвучивания числовых значений]].<br />
|- <br />
|Формат<br />
|Формат проигрываемого значения:<br />
* «ПО ФОРМАТУ» — определяет расширенную настройку типа воспроизводимого числа <br />
* Количество <br />
* Порядковое числительное <br />
* Телефонный номер <br />
* Дата <br />
* Время <br />
* Дата/время <br />
* День недели <br />
* Время без нулей в начале<br />
* Время без нулей в конце<br />
* Время в секундах <br />
* Деньги, USD <br />
* Деньги, EUR <br />
* Деньги, RUR <br />
* Деньги, UAH<br />
|-<br />
|Тип проигрывания<br />
|Используется, если формат задан «По формату»<br />
* Посимвольно (один ноль два три семь…) <br />
* По 2 символа (двадцать два сорок четыре…) <br />
* По 3 символа (триста пять двести тридцать четыре…) <br />
* Целиком (Двести тридцать четыре триллиона пятьсот двадцать…) <br />
* Буквы и числа посимвольно (один а б в X Y Z тире слэш.. ) <br />
* Слова и фразы (пожалуйста_введите_свой_код занято...). Ожидаются через любой пустой разделитель. В папке осуществляется поиск соответствующих файлов и их последовательное воспроизведение. <br />
<br />
Поле доступно только при выборе значения «По формату» в свойстве «Формат».<br />
|- <br />
|Род<br />
|Доступно только при выборе одного из значений «По формату», «Количество», «Порядковое числительное» в свойстве «Формат».<br />
* Мужской (один, двадцатитрехмиллионный) <br />
* Женский (одна, сто двадцать шестая) <br />
* Средний (одно, однотысячное)<br />
|-<br />
|Понижение тона<br />
|Осуществляет понижение тона в конце. Для этого в качестве последнего файла подставляется аналогичный с символом "_" в конце, озвученный как окончание речи. При его отсутствии берется обычный файл.<br />
|-<br />
|Символы прерывания<br />
|Недоступно в режиме фонового воспроизведения.<br />
Символы прерывания или их последовательности, разделенные запятыми или пробелами. При вводе с клавиатуры абонента указанной последовательности проигрывание прекращается, и управление переходит к следующему компоненту.<br />
|-<br />
|Буфер <br />
|Недоступно в режиме фонового воспроизведения.<br />
Переменная, в которую сохранится последовательность, прервавшая воспроизведение.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление после завершения воспроизведения.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="Input"></div><br />
[[Файл:cl_cc_scr_i35.png|left]]<br />
===Ввод числа===<br />
<br />
<br />
Ввод числа сопровождается тишиной в трубке. Принимает от пользователя число, набираемое с клавиатуры телефона, и сохраняет в буфер-переменную. Ввод прекращается, когда происходит одно из событий: сработал таймер назначенного времени ввода, набралось указанное количество символов, набрана последовательность или символ прерывания. При этом, в случае срабатывания таймера переход осуществляется по ветке «Время», имитируя неудавшийся ввод. В других случаях ввод считается успешным.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Символы прерывания<br />
|Символы прерывания или их последовательности, разделенные запятыми или пробелами. При вводе с клавиатуры абонента указанной последовательности проигрывание прекращается, и управление переходит к следующему компоненту.<br />
|-<br />
|Буфер<br />
|Переменная, в которую сохранится введенное значение. Последовательность прерывания сохранена не будет.<br />
|-<br />
|Очистить буфер<br />
|Флаг, определяющий, будет ли введенное значение дописано в конец к уже существующим в буфере данным, либо очистит их и запишется с начала.<br />
|-<br />
|Максимальное время<br />
|Аргумент, определяющий число - время ожидания ввода в секундах. По истечению времени введенное значение не сохраняется, и переход осуществляется по ветке «если время вышло». Если задан 0 – время не ограничивается.<br />
|-<br />
|Количество символов<br />
|Аргумент, определяющий количество символов, ввода которых будет ждать компонент. По приему указанного количества – сразу осуществляется переход. Если задан 0 – число не ограничено. Компонент ожидает ввода указанного количества символов безотносительно предварительного содержимого буфера (даже если он не очищается).<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление после успешного завершения ввода.<br />
|-<br />
|Переход, время<br />
|Компонент, на который передается управление, если отведенное время истечет.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="PlayInput"></div><br />
[[Файл:cl_cc_scr_i36.png|left]]<br />
===Воспроизведение звукового файла с преднабором===<br />
<br />
<br />
Объединение проигрывания файла и ввода. Компонент используется, если необходимо ввести данные, описав пользователю, что конкретно ему предстоит ввести. При этом пользователю предоставляется возможность не дослушивать звуковой файл до конца, и начать набирать в любом удобном ему месте. После набора первого символа звуковой файл прекращает звучать и запускается таймер времени ввода. Далее компонент действует также как [[#Ввод числа|Ввод числа]].<br />
<br />
<br />
У компонента в контекстном меню доступна команда «Воспроизвести». При использовании прикрепленного файла он будет открыт во встроенном проигрывателе.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Файл<br />
|Окно ввода выбора проигрывающегося файла.<br />
<br />
Файл может быть прикреплен к сценарию (выбран в момент редактирования и скопирован к сценарию), а также найден по сформированному пути в момент обработки сценария. Путь строится из составных частей: каталог и имя файла.<br />
Каталог, в котором лежит файл может быть задан<br />
* локальной категорией (в папке сценария); <br />
* глобальной категорией (в папке, где хранятся все сценарии); <br />
* абсолютным путем (C:\AAA\BBB); <br />
* пустота – в этом случае считается, что значение имени файла уже содержит весь путь. <br />
<br />
Имя файла берется из значения указанной переменной сценария.<br />
|- <br />
|Символы прерывания<br />
|Символы прерывания или их последовательности, разделенные запятыми или пробелами. При вводе с клавиатуры абонента указанной последовательности проигрывание прекращается, и управление переходит к следующему компоненту.<br />
|-<br />
|Буфер<br />
|Переменная, в которую сохранится введенное значение. Последовательность прерывания сохранена не будет.<br />
|-<br />
|Очистить буфер<br />
|Флаг, определяющий, будет ли введенное значение дописано в конец к уже существующим в буфере данным, либо очистит их предварительно.<br />
|-<br />
|Максимальное время<br />
|Аргумент, определяющий число, которое толкуется как время ожидания ввода в секундах. По истечению времени введенное значение не сохраняется, и переход осуществляется по ветке «если время вышло». Если задан 0 – время не ограничивается.<br />
Время засекается по набору первого символа, либо по завершению воспроизведения файла.<br />
|- <br />
|Количество символов<br />
|Аргумент, определяющий число, которое толкуется как количество символов будет ждать компонент. По приему указанного количества – сразу осуществляется переход. Если задан 0 – число не ограничено.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление после успешного завершения ввода.<br />
|-<br />
|Переход, время<br />
|Компонент, на который передается управление, если отведенное время истечет.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="Record"></div><br />
[[Файл:cl_cc_scr_i37.png|left]]<br />
===Запись звукового файла===<br />
<br />
<br />
Компонент позволяет записывать звуковые данные с микрофона абонента. Указывается составной путь к файлу (отдельно каталог и имя), в который нужно сохранить данные. Имя файла можно генерировать случайно, после чего сохранять в буфер-переменную для дальнейшего использования или сохранения в БД. Остановка записи производится при срабатывании одного из событий: набрана одна из заданных в компоненте последовательностей прерывания или установленное время записи вышло (переход осуществляется по ветке «Время вышло»).<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Файл<br />
|Окно ввода выбора пути к файлу для записи.<br />
Файл задается при помощи правила построения пути. Путь формируется из двух частей: каталог и имя файла.<br />
Каталог, в котором лежит файл<br />
* локальная категория (в папке сценария); <br />
* глобальная категория (в папке, где хранятся все сценарии); <br />
* абсолютный путь (C:\AAA\BBB); <br />
* не задан (в этом случае считается, что значение имени файла уже содержит весь путь). <br />
Имя файла<br />
* задается и фиксировано; <br />
* генерируется, и значение сгенерированное сохраняется в переменную; <br />
* из значения указанной переменной сценария. <br />
|- <br />
|Имя файла в переменную<br />
|Сохраняется имя файла, в который записали (используется, если имя генерируется).<br />
|- <br />
|Возвращать полный путь<br />
|Да/нет. Устанавливает формат возвращаемого имени файла. Только имя и расширение или полный путь к файлу с указанием диска.<br />
|-<br />
|Символы прерывания<br />
|Символы прерывания или их последовательности, разделенные запятыми или пробелами. При вводе с клавиатуры абонента указанной последовательности запись прекращается, и управление переходит к следующему компоненту, определенному веткой «Переход».<br />
|-<br />
|Буфер<br />
|Переменная, в которую сохранится последовательность прерывания.<br />
|-<br />
|Очистить буфер<br />
|Флаг, определяющий, будет ли введенная последовательность дописана в конец к уже существующим в буфере данным, либо очистит их предварительно.<br />
|-<br />
|Максимальное время<br />
|Аргумент, определяющий число, которое толкуется как время записи в секундах. По истечению времени введенное значение не сохраняется, и переход осуществляется по ветке «если время вышло».<br />
|-<br />
|Начинать новую папку<br />
|Определяет, вставлять ли между указанным именем файла и указанной папкой еще папку, и как часто их начинать. Возможные варианты:<br />
* Никогда <br />
* Каждый час <br />
* Каждый день <br />
* Каждую неделю <br />
* Каждый месяц <br />
* Каждые 3 месяца <br />
* Каждый год<br />
|-<br />
|Кодек<br />
|Определяет формат звукового файла.<br />
* PCM<br />
* G.711 a-law<br />
* G.711 u-law<br />
* GSM.610<br />
* MP3 8 Kb/s<br />
* MP3 16 Kb/s<br />
* MP3 24 Kb/s<br />
|- <br />
|Переход<br />
|Компонент, на который передается управление после успешного завершения ввода.<br />
|-<br />
|Переход, время<br />
|Компонент, на который передается управление, если отведенное время истечет.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="Recognize"></div><br />
[[Файл:cl_cc_scr_i47.png|left]]<br />
===Распознавание речи===<br />
<br />
<br />
Компонент осуществляет распознавание речи. Доступен в сценариях IVR и в служебных сценариях.<br />
Позволяет производить распознавание речи из указанного файла (при этом длительность распознавания сопоставима с оригинальной длительностью файла), либо из речи абонента в линии (только для сценариев IVR, при этом длительность распознавания минимальна).<br />
Остановка записи производится при срабатывании одного из событий: истекло время записи, набрана последовательность DTMF-символов прерывания, набрано установленное количество DTMF-символов. В случае выхода по непустому DTMF-результату (исключается случае прерывания записи символом прерывания, не фиксирующего значимых символов в буфере для DTMF) распознавание не производится и результатом является последовательность DTMF.<br />
<br />
Распознает с помощью сервиса [http://api.yandex.ru/speechkit/ Yandex.SpeechKit]. Требует [[Настройки распознавания|настройки]] ключа доступа к сервису.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Режим<br />
|Запись/файл.<br />
В сценариях IVR доступны оба варианта, в служебных сценариях возможно распознавание только готового файла.<br />
В режиме распознавания файла выбранный файл должен иметь формат PCM 16bit 8kHz Mono. Время на распознавание файла ориентировочно равно оригинальной длительности файла.<br />
В режиме записи в сценарии IVR осуществляется запись и параллельная одновременная отправка звука на распознавание в целях получения быстрого ответа, который в этом случае получается почти моментально.<br />
|- <br />
|Файл<br />
|Доступно только в режиме «Файл».<br />
Звуковой файл в формате PCM 16bit 8kHz Mono или его расположение на диске.<br />
|- <br />
|Символы прерывания<br />
|Доступно только в режиме «Запись».<br />
Сохраняется имя файла, в который записали (используется, если имя генерируется).<br />
|- <br />
|Буфер для DTMF<br />
|Доступно только в режиме «Запись».<br />
Переменная, в которую сохранится последовательность введенных символов, исключая символы прерывания.<br />
|-<br />
|Очистить буфер<br />
|Доступно только в режиме «Запись».<br />
Флаг, определяющий, будет ли введенная последовательность дописана в конец к уже существующим в буфере данным, либо очистит их предварительно.<br />
|-<br />
|Максимальное время записи<br />
|Доступно только в режиме «Запись».<br />
Аргумент, определяющий число, которое толкуется как время ожидания ввода в секундах. <br />
|-<br />
|Сигнал окончания записи<br />
|Доступно только в режиме «Запись».<br />
Звуковой файл или путь, определяющий его расположение, который будет воспроизведен по окончании записи, чтобы отделить дополнительное время распознавания.<br />
|-<br />
|Тема<br />
|Одна из поддерживаемых сервисом Yandex.SpeechKit тем для распознавания.<br />
* freeform - общие фразы.<br />
* general - поисковые запросы.<br />
* maps - карты.<br />
* music - музыкальные произведения.<br />
* Другая тема - позволяет задать отсутствующий в списке вариант.<br />
|-<br />
|Пользовательская тема<br />
|Аргумент, определяющий строку с индивидуальной темой, поддерживаемой сервисом Yandex.SpeechKit.<br />
|-<br />
|Предопределенные значения<br />
|Таблица предопределенных вариантов с возможностью проведения группировки. Используется для упрощения последующего разветвления по вариантам.<br />
Масштабные сценарии маршрутизации очевидно потребуют сравнения вариантов распознавания с базой данных, и группировку можно будет проводить также в БД, заодно сохраняя неизвестные новые варианты распознавания в списке с последующим проставлением им кодов.<br />
|-<br />
|Текст в переменную<br />
|Переменная, в которую заносится результат распознавания.<br />
|-<br />
|Код группировки в переменную<br />
|Переменная, в которую заносится код группировки, выявленный в ходе сравнения результата со списокм предопределенных значений.<br />
|-<br />
|Вероятность совпадения в переменную<br />
|Переменная, в которую заносится вероятность совпадения (от 0 до 1).<br />
|- <br />
|Переход<br />
|Компонент, на который передается управление после успешного завершения ввода.<br />
|-<br />
|Переход, ошибка<br />
|Компонент, на который передается управление, если распознавание завершилось неудачей.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="Switch"></div><br />
[[Файл:cl_cc_scr_i38.png|left]]<br />
===Переключение на номер===<br />
<br />
<br />
Переключение на номер позволяет коммутировать обслуживаемую линию с другой линией, на противоположном конце которой находится абонент с указанным номером. Переключение можно осуществлять как во внешнюю среду (город), так и во внутреннюю (внутри Oktell). <br />
<br />
<br />
В случае успеха коммутации переход осуществляется по ветке «Переход» и ожидается появление компонента [[Общие компоненты сценариев#Стоп|Стоп]], который прервет выполение сценария без разрыва коммутации и без возврата управления в родительские сценарии. Если номер занят – по ветке «Занято», если не отвечает – по ветке «Не отвечает». <br />
<br />
В ходе набора городского номера производится резервирование свободной и доступной по правам внешней линии, набор в нее номера и ожидание ответа в течение установленного интервала времени (по умолчанию 40 секунд). В ходе ожидания воспроизводится стандартная мелодия. При обработке сценария по внешней линии, или по внутренней линии, которая не связана с пользователем, выделение внешних линий производится в обратном порядке с самой последней.<br />
<br />
Для переключения на город (или на внешнюю АТС) существует также компонент [[#Переключение на внешний номер с указанием последовательности выделения линий|Переключение на внешний номер с указанием последовательности выделения внешних линий]], в котором явно устанавливается перечень и последовательность выделения внешних линий, а также существует возможность выбора воспроизводимой мелодии ожидания.<br />
<br />
<br />
Переключение внутри АТС может осуществляться на все типы внутренних номеров: <br />
*[[Внутренние номера#Стандартные номера|Стандартный номер]]. Производится попытка соединения абонента с одним из операторов или одной из внутренних линий, назначенных в номере. В случае, если все операторы/линии номера заняты возможно использование очереди ожидания.<br />
*[[Внутренние номера#Быстрые номера|Быстрый номер]]. Переключение осуществляется внутрь АТС, однако физически производится набор номера во внешнюю линию. В зависимости от типа быстрого номера (АТС/Город) производится выбор соответствующей внешней линии. Если свободных внешних линий не найдено, производится возврат управления по ветке «Занято». При успешном резервировании линии возврат происходит после получения ответа городской (или внешней) АТС по соответствующей ветке.<br />
*[[Внутренние номера#Запуск сценария IVR|Запуск IVR]]. Производится безвозвратный запуск назначенного в номере сценария. Текущий сценарий прекращает свое исполнение и дальнейший переход по веткам компонента не осуществляется.<br />
*[[Внутренние номера#Специальные номера|Служебный номер]]. Среди внутренних служебных номеров, на которые возможно переключение из компонента, доступны «Выход в город», «Выход в АТС» и «Перехват». В первых двух случаях при наборе номера осуществляется резервирование соответствующей служебному номеру внешней линии (или коммутация с ней в зависимости от установки способа набора в модуле [[Параметры АТС|Общие настройки. АТС]]). Если операция успешно выполнена, управление в сценарий возвращается по ветке «Переход», и ожидается завершение сценария компонентом [[Общие компоненты сценариев#Стоп|Стоп]]. Дальше абонент попадает в условия как если бы он на внутренней линии после снятия трубки набрал соответствующий служебный номер.Это дает возможность пользоваться соответствующими служебными номерами пользователям и абонентам, находящимся на внешних линиях системы. «Перехват» работает стандартным способом и в основном необходим только в случае использования сценария IVR исходящей маршрутизации ([[Параметры АТС|здесь]]). Переключение на номер «Перехват» возможно сразу с указанием номера-расширения (например *103, где * - служебный номер перехвата, а 103 - внутренний стандартный номер).<br />
В случае отсутствия в системе указанного номера или несоответствия его типа одному из описанных выше происходит возврат управления по ветке «Не отвечает».<br />
<br />
Возможна работа компонента при неснятой трубке на обслуживаемой внешней линии. В этом случае трубка будет автоматически снята после успешного ответа вызываемого компонентом абонента. Все время, пока производится ожидание, внешний абонент слышит сигнал КПВ взамен мелодии ожидания.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Назначение<br />
|Номер может быть городским (внешним) и внутренним АТС. <br />
Режим «Авто» позволяет установить автоматическое распознавание номера и в случае его наличия во внутреннем номерном плане производить переключение внутрь системы, в противном случае набирать номер в город.<br />
Назначение «Возврат к оператору» может быть использовано в call-центре для принудительного разрыва коммутации абонента, отбоя второго участника и возврата звонка на зарезервированного в этот момент оператора, который в задаче ожидает обратного соединения. Подробнее в разделе [[Голосовые задачи#Дополнительно|Голосовые задачи. Дополнительно. Поведение при переключении на IVR. Оставлять оператора ожидающим соединения]]. Также режим может использоваться для разрыва только что начавшейся коммутации по некоторому событию (истечению времени, набора команды DTMF, появления в БД некоторых данных и т.п.) и перевести его на дальнейшую полноценную обработку в сценарии IVR.<br />
|- <br />
|Номер<br />
|Аргумент, определяющий номер, по которому производить дозвон.<br />
|- <br />
|Тип вызова<br />
|Определяет в каком виде производить вызов на SIP устройства. Обычный режим или интерком-вызов. Последний имеет отличие, если функция поддерживается конечным устройством. В противном случае вызов будет происходить в обычном режиме. При интерком-вызове телефонное устройство снимает трубку автоматически сразу же после поступления звонка.<br />
|-<br />
|CallerId<br />
|Аргумент, определяющий номер дозванивающегося абонента, который будет отправлен в качестве caller-id. Если свойство не указано или определяет пустое значение, в качестве caller-id выступит стандартный, настроенный общим образом номер или определившийся при звонке из-вне, либо основной внутренний номер пользователя/линии в рамках текущей АТС при внутреннем звонке.<br />
Этот номер будет отображен также во всплывающем окне у вызываемого пользователя.<br />
|-<br />
|CallerName<br />
|Аргумент, определяющий имя дозванивающегося абонента, который будет принудительно отправлен в качестве caller-name в IP-канал. Если свойство не указано или определяет пустое значение при звонке внутри АТС, в качестве caller-name выступит имя абонента-инициатора.<br />
Этот номер будет отображен также во всплывающем окне у вызываемого пользователя.<br />
|- <br />
|Дополнительная информация об абоненте<br />
|Аргумент, задающий внешним образом некоторые дополнительные данные об абоненте. Эти данные попадают в окно уведомления о входящем вызове при звонке на внутреннего пользователя, а также в комментарий к осуществленной коммутации и доступный для просмотра и поиска в журналах звонков [[Статистика АТС#Журнал звонков|Статистики АТС]] и [[Мои звонки|Моих звонков]]. При осуществлении flash-переключения или flash-удержания последующие коммутации не будут содержать установленного значения в комментарии. При дальнейших переводах абонента при необходимости следует вновь указывать это же или иное значение.<br />
|- <br />
|Очередь ожидания<br />
|Активировать ли очередь ожидания для внутреннего переключения, в случае, если номер занят.<br />
Поле доступно только при выборе значения «Внутри АТС» в свойстве «Назначение».<br />
|- <br />
|Время ожидания<br />
|Определяет, сколько секунд необходимо ожидать соединения перед отбоем. <br />
<br />
<span style="color:red;">ВНИМАНИЕ! В случае набора стандартного внутреннего номера свойство применяется только в случае, если запрещено ожидание в очереди. В противном случае время ожидания не лимитируется.<br />
|-<br />
|Символы прерывания<br />
|Символы прерывания или их последовательности, разделенные запятыми или пробелами. При вводе с клавиатуры абонента указанной последовательности ожидание переключения прекращается, и управление переходит к следующему компоненту, определенному веткой «Переход, прервано».<br />
|-<br />
|Параметр команды<br />
|Свойство для служебных сценариев. Не используется в обычном режиме. Служит для передачи пароля пользователя и автоматической подстановки его в статистику в качестве инициатора звонка.<br />
Поле доступно только при выборе значения «В город» в свойстве «Назначение».<br />
|- <br />
|Запись разговора<br />
|Параметр, определяющий необходимость записи. По умолчанию выбран вариант «Согласно настройкам», при котором используется стандартная процедура поиска правил записи для звонка. Также доступны варианты «Записывать» и «Не записывать», производящие соответствующие безусловные действия.<br />
|- <br />
|Код отказа SIP в переменную<br />
|Переменная, куда записывается код отказа, если компонент прерван в силу получения неудачного ответа по SIP.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление в случае успешной коммутации<br />
|-<br />
|Переход, занято<br />
|Компонент, на который передается управление, если номер занят (для внутренних, если очередь ожидания не активирована).<br />
|-<br />
|Переход, не отвечает<br />
|Компонент, на который передается управление, если время ожидания истекло.<br />
|-<br />
|Переход, отсутствует<br />
|Компонент, на который передается управление, если номер не обнаружен, нет ни одного активного абонента, отсутствует внешняя линия при попытке набора быстрого номера.<br />
|- <br />
|Переход, прервано<br />
|Компонент, на который передается управление, если абонентом было прервано ожидание нажатием последовательности символов прерывания.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="SwitchExt"></div><br />
[[Файл:cl_cc_scr_i39.png|left]]<br />
===Переключение на внешний номер с указанием последовательности выделения линий===<br />
<br />
<br />
Переключение на номер позволяет коммутировать обслуживаемую линию с другой (внешней) линией, на противоположном конце которой находится абонент с указанным внешним (городским/АТС) номером.<br />
В ходе набора номера производится поиск свободной внешней линии в соответствии с установленным списком, резервирование, набор номера и ожидание ответа в течение установленного интервала времени (по умолчанию 40 секунд). В ходе ожидания воспроизводится выбранная мелодия. В зависимости от установленных свойств поведение компонента может меняться кардинальным образом.<br />
<br />
<br />
Возможна работа компонента при неснятой трубке на обслуживаемой внешней линии. В этом случае трубка будет автоматически снята после успешного ответа вызываемого компонентом абонента. Все время, пока производится ожидание, внешний абонент слышит сигнал КПВ взамен мелодии ожидания.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Номер<br />
|Аргумент, определяющий номер, по которому производить дозвон. <br />
В качестве номера может быть принята команда (строка, содержащая DTMF символы и командные спец. символы w, q, z, {, }). Подробнее о командах в разделе [[Линии#Направления|Администрирование. Направления]].<br />
<br />
При звонке через [[Свойства_компонентов#IP_шлюз|sip-шлюз без регистрации]] возможно указывать в качестве номера URI (sip:username@domain). В этом случае несмотря на настройки звонок будет отправлен на указанный в URI адрес. То же самое в обязательном порядке касается шлюзов межсерверного взаимодействия.<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Если номер пустой или не указан, то вместо набора номеров производится выход на одну из назначенных внешних линий, аналогичный служебному номеру «Выход в город» или «Выход в АТС». Выборка линий производится в установленной компонентом последовательности. Исключение составляет случай, когда значение свойства «Коммутировать сразу» - нет.<br />
|-<br />
|Тип команды<br />
|Определяет способ преобразования номера в команду, отсылаемую на набор. По умолчанию без преобразования.<br />
* Без преобразования. Отправляет номер как есть в зарезервированную линию. <br />
* Использовать команду направления. Если зарезервированная линия взята из [[Линии#Направления|направления]], и в нем настроено преобразование номера, то перед отправкой на набор номер будет преобразован в строку-команду по указанной в направлении схеме.[[Линии#Направления|Подробно здесь]]. <br />
В некоторых случаях преобразование номера в команду может быть произведено предварительно в самом сценарии, или вовсе команда как итог может быть указана в таблице абонентов (номер в чистом виде - частный случай команды). В этом случае дополнительно преобразовывать команду не следует, и стоит оставить режим "без преобразования". Конечный режим реализации зависит от задач и целей.<br />
|- <br />
|Тип вызова<br />
|Обычный / экстренный / интерком.<br />
Набор в экстренном режиме при отсутствии свободных линий среди назначенных будет производить разрыв активных коммутаций с целью освобождения внешней линии для совершения этого звонка.<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Значение «экстренный» следует выставлять в [[Параметры АТС|сценарии входа в АТС]] в случае набора экстренного номера в явном виде (без использования внутреннего номера с типом «[[Внутренние номера#Экстренные номера|экстренный]]»). В других случаях рекомендуется оставлять тип со значением по умолчанию «обычный». Возможны вариации, но их следует тщательно продумывать во избежание незапланированных разрывов.<br />
<br />
Подробно об экстренных номерах в разделах [[Внутренние номера#Экстренные номера|Администрирование. Внутренние номера. Экстренные]] и [[Экстренные номера|Администрирование. Общие настройки. Экстренные номера]].<br />
<br />
Интерком-вызов имеет отличие от обычного режима, если функция поддерживается конечным устройством. В противном случае вызов будет происходить в обычном режиме. При интерком-вызове телефонное устройство снимает трубку автоматически сразу же после поступления звонка.<br />
|- <br />
|Линии, направления<br />
|Осуществляет выбор линий и направлений для осуществления звонка.<br />
<br />
На вкладке «Список объектов» предоставляется возможность указать явно последовательность существующих в системе линий и [[Линии#Направления|направлений]] для осуществления звонка. Можно отключить использование некоторых элементов, а для выбранных установить последовательность поиска свободной линии. <br />
<br />
Поиск свободной будет осуществляться в соответствии с установленной последовательностью. По каждому направлению анализируются все линии, входящие в его состав. Если линия присутствует в нескольких направлениях, то при обнаружении ее свободной и установленном в компоненте режиме преобразования номера в соответствии с командой направления, будет применена команда того направления, которое в перечислении находится выше по приоритету.<br />
<br />
На вкладке «Аргумент» возможно динамическое указание линии через ее код или Guid-идентификатор в строковом представлении. Также здесь может быть указан идентификатор или код направления, потока или шлюза. В этом случае будут последовательно перебираться все линии указанного объекта до обнаружения свободной и готовой к совершению вызова. Режим введен для использования совместно со [[Свойства компонентов#IP шлюз|шлюзами с динамической регистрацией потоков]] и компонентом сценариев [[Общие компоненты сценариев#Регистрация|Регистрация потока]].<br />
|- <br />
|Фильтровать по правам<br />
|Да/нет. При задействовании режима в случае, если осуществляется обработка канала пользователя системы, может быть осуществлена дополнительная фильтрация перечисленных в компоненте линий в соответствии с настройками [[Права#Исходящие|прав выхода на внешние линии]] для пользователя. По умолчанию «Нет» - не фильтровать.<br />
|- <br />
|Идентификатор выбранной линии в переменную<br />
|Строковая переменная, в которую сохраняется GUID-идентификатор линии, осуществившей вызов.<br />
|- <br />
|CallerId<br />
|Подставляемый для звонка номер. При отсутствии или некорректном значении будет взят номер по умолчанию для канала.<br />
|-<br />
|CallerName<br />
|Подставляемое для звонка имя абонента (для IP каналов).<br />
|- <br />
|Время ожидания<br />
|Аргумент определяет, сколько секунд необходимо ожидать соединения перед отбоем.<br />
|-<br />
|Коммутировать сразу<br />
|Определяет поведение компонента. По умолчанию "нет, воспроизводить мелодию".<br />
* Да. <br />
После нахождения доступной внешней линии и начала набора в нее номера сразу производится ее коммутация с каналом, обслуживаемым в сценарии. Ожидание ответа внешнего абонента производится уже в коммутации, строка о разговоре в статистике появится даже при неответе абонента, а запись будет включать в себя КПВ-сигнал. Возврат из компонента осуществляется сразу же по стандартной ветке «Переход». Если происходит сбой при ожидании набора номера или при коммутации, то возврат происходит по ветке «Ошибка». При отсутствии доступной линии - возврат по ветке «Линий не найдено».<br />
<br />
<span style="color:red;">ВНИМАНИЕ! В случае, если одновременно с установкой значения «да» этому свойству в компоненте назначен пустой номер, то поведение CTI каналов (FXO, E1) меняется. После снятия трубки на внешнем канале производится его коммутация с обслуживаемым каналом. Необходимо крайне аккуратно пользоваться этим режимом в случае работы с потоками Е1, так как в общем случае без дополнительных устройств-преобразователей протокол не поддерживает посимвольного набора номера через звуковой интерфейс, и, следовательно, такая комбинация параметров повлечет невозможность дальнейшего набора номера и коммутации с абонентом. Также описанный режим небходимо осмотрительно использовать при назначении в компоненте последовательности линий из разных потоков, и тем более линий разного типа (E1, FXO, IP).<br />
<br />
<span style="color:red;">ВНИМАНИЕ! При переключении на SIP-каналы фактическая коммутация возможна только после получения SDP от удаленной стороны, поэтому фактическая коммутация и выход из компонента производятся отложенно (ответы 183 и 200). А в случае получения ответов серии 4xx коммутация не производится.<br />
<br />
* Нет, воспроизводить мелодию. <br />
Компонент осуществляет коммутацию только после ответа абонента. Компонент работает с ожиданием ответа абонента. Все время ожидания ответа (в рамках установленного максимального времени ожидания) в канал воспроизводится указанная мелодия ожидания. Возможны возвраты управления по веткам «Занято» и «Не отвечает». Если ранее в сценарии стартовало фоновое воспроизведения, то фон не прерывается.<br />
Если в компоненте не указан номер, то осуществляется [[Параметры АТС|резервирование внешней линии]] согласно общим принципам работы сервера АТС с возвратом управления сразу же по ветке «Переход».<br />
* Нет, прослушивать медиа-поток. <br />
Поведение аналогичное пункту «воспроизводить мелодию», однако вместо мелодии в канал воспроизводится сигнал, поступаемый с внешней линии, осуществляющей набор. Фактическая коммутация с размещением в статистике и записью разговора начинается только после ответа абонента. Фоновое воспроизведение прерывается. <br />
|-<br />
|Мелодия ожидания<br />
|Окно выбора мелодии ожидания, аналогичное выбору файла компонента [[#Воспроизведение звукового файла|Воспроизведение]]. Мелодия будет воспроизводиться вплоть до окончания работы компонента. Может быть выбрана непосредственно и прикреплена к сценарию, а также быть взята по сформированному пути на сервере.<br />
|-<br />
|Параметр команды<br />
|Свойство для служебных сценариев. Не используется в обычном режиме. Служит для передачи пароля пользователя и автоматической подстановки его в статистику в качестве инициатора звонка.<br />
|-<br />
|Символы прерывания<br />
|Символы прерывания или их последовательности, разделенные запятыми или пробелами. При вводе с клавиатуры абонента указанной последовательности ожидание переключения прекращается, и управление переходит к следующему компоненту, определенному веткой «Переход, прервано».<br />
|-<br />
|Запись разговора<br />
|Параметр, определяющий необходимость записи. По умолчанию выбран вариант «Согласно настройкам», при котором используется стандартная процедура поиска правил записи для звонка. Также доступны варианты «Записывать» и «Не записывать», производящие соответствующие безусловные действия.<br />
|-<br />
|Код отказа SIP в переменную<br />
|Переменная, куда сохраняется код отказа при переходе по ветке «Занято». Имеет смысл при осуществлении звонков через внешнии SIP-транки. Например «480 Temporarily not available, sip:12@192.168.0.1» или «486 Busy Here, sip:12@192.168.0.1». Полный список вариантов ответов доступен в документации по протоколу SIP (<nowiki>RFC 3261</nowiki>, http://www.ietf.org/rfc/rfc3261).<br />
Если переменная числовая, то в нее сохраняется только код ответа.<br />
|- <br />
|Переход<br />
|Компонент, на который передается управление в случае успешной коммутации. <br />
В случае, если установлен режим коммутирования сразу, успешной коммутацией считается момент соединения двух каналов (от абонента на внешней линии не получено никаких сигналов, в дальнейшем возможно получение КПВ, отбоя или ответа абонента).<br />
|- <br />
|Переход, занято<br />
|Компонент, на который передается управление, если номер занят (для внутренних, если очередь ожидания не активирована).<br />
Свойство доступно только если не установлен режим коммутирования сразу.<br />
|- <br />
|Переход, не отвечает<br />
|Компонент, на который передается управление, если время ожидания истекло.<br />
Свойство доступно только если не установлен режим коммутирования сразу.<br />
|- <br />
|Переход, линия не найдена<br />
|Компонент, на который передается управление, если не обнаружена доступная для совершения вызова внешняя линия из списка.<br />
|-<br />
|Переход, прервано<br />
|Компонент, на который передается управление, если абонентом было прервано ожидание нажатием последовательности символов прерывания.<br />
|-<br />
|Переход, ошибка<br />
|Компонент, на который передается управление, если в ходе проверки пароля, набора номера, ожидания событий или коммутации двух каналов возникла какая-либо ошибка.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="SwitchTask"></div><br />
[[Файл:cl_cc_scr_i40.png|left]]<br />
===Вход в задачу===<br />
<br />
<br />
Вход в задачу инициирует существующую в системе и указанную в сценарии задачу и осуществляет переключение на оператора . Оператор выбирается менеджером задач из списка свободных и назначенных на задачу операторов по заложенному в нее алгоритму. В случае если операторы все заняты, может быть задействована очередь ожидания, для этого установите свойство компонента «Очередь». В зависимости от текущего состояния задачи выход производится по одному из свойств перехода. Переключение также может осуществляться на входящую задачу автоматической обработки звонка. В этом случае производится переключение сценария с формированием записи в статистической БД. Вход в задачу может быть осуществлен как из основного сценария IVR, так и из принадлежащего проекту. В последнем случае в списке доступных задач отображаются только задачи текущего проекта.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Режим выбора задачи<br />
|Вариант указания задачи:<br />
* Из списка <br />
* По ключу (идентификатор, код, название)<br />
|- <br />
|Задача<br />
|Доступно только в случае режима «Из списка».<br />
Одна из списка входящих [[Голосовые задачи|голосовых задач]] системы Oktell или текущего проекта. Привязка осуществляется в момент создания сценария.<br />
|-<br />
|Ключ задачи<br />
|Доступно только в случае режима «По ключу».<br />
Аргумент, уникально определяющий задачу (идентификатор, код или название). Привязка осуществляется каждый раз в момент выполнения сценария. В случае, если зарегистрировано несколько задач с указанным ключом, будет взята произвольная из них.<br />
|- <br />
|Тип идентификации<br />
|Идентификацией является определение строки в [[Таблицы абонентов|таблице абонентов]],прикрепленной к запускаемой [[Голосовые задачи|задаче]]. Режим идентификации задействуется только если в запускаемой входящей голосовой задаче установлено свойство «Модифицировать записи». Противоположным режимом является создание новых записей при каждом звонке вне зависимости от того, найден или не найден абонент в таблице. Также возможно, совместно установив свойства «Модифицировать записи» в задаче и «Возврат, если абонент не найден» в текущем компоненте, задействовать режим входа в задачу только при успешном обнаружении абонента в таблице.<br />
<br />
<br />
Среди способов идентификации выделяются два: <br />
* По АОН среди полей таблицы, обозначенных типом «Телефон»; <br />
* По значению в указанном поле таблице (используются свойства «Идентификатор абонента» и «Поле идентификации» текущего компонента. <br />
<br />
В некоторых случаях, когда одного поля недостаточно, и нужна более серьезная проверка условий идентификации, можно использовать [[Общие компоненты сценариев#Запрос SQL в БД|Запрос в БД]] с произвольной проверкой условий и возвратом уникального значения строки в таблице с последующим входом в задачу и идентификацией по основному полю «Id», обозначенного в таблице абонентов как «Идентификатор».<br />
|-<br />
|Идентификатор абонента<br />
|Аргумент, значение которого берется для идентификации абонента. Ожидается, что значение уникально определяет абонента. Используется совместно со свойством «Поле идентификации».<br />
Поле доступно только при выборе значения «По столбцу» в свойстве «Тип идентификации».<br />
|-<br />
|Поле идентификации<br />
|Строковый аргумент, содержащий название столбца (поля) в прикрепленной [[Таблицы абонентов|таблице абонентов]], по которому будет осуществлен поиск на совпадение значений таблицы и передаваемого идентификатора абонента. В качестве поля для идентификации может быть взят любой существующий столбец в таблице абонентов.<br />
Поле доступно только при выборе значения «По столбцу» в свойстве «Тип идентификации».<br />
|- <br />
|Возврат, если абонент не найден<br />
|Да/Нет. Определяет способ запуска задачи с идентификацией абонентов. Имеет смысл только при входе в задачу с установленным свойством «Модифицировать записи прикрепленной таблицы». <br />
При установке значения «Да» в случае неудачного поиска абонента в таблице осуществляет возврат по ветке «Переход, абонент не найден». <br />
При установке значения «Нет» осуществляется стандартная процедура добавления новой записи в таблицу с установкой поля идентификаторов, по которому осуществлялся поиск.<br />
|-<br />
|Очередь ожидания<br />
|Активировать ли очередь ожидания в случае, если номер занят.<br />
|-<br />
|Идентификатор оператора в переменную<br />
|Строковая переменная, в которую сохраняется GUID-идентификатор оператора, получившего вызов на обслуживание.<br />
|-<br />
|Расширенная настройка<br />
|Да/нет. Открывает доступ к редактированию некоторых свойств задачи только для текущего звонка. Их изменение в рамках компонента приводит к обработке этого звонка в задаче согласно вновь выбранным значениям.<br />
|-<br />
|Запись<br />
|Доступно только при расширенной настройке компонента. Позволяет установить индивидуальные параметры записи коммутаций для текущего звонка в задаче (текущей сессии - цепочки коммутаций).<br />
* Согласно настройкам задачи <br />
* Записывать <br />
* Не записывать<br />
|- <br />
|Режим обхода операторов<br />
|Доступно только при расширенной настройке компонента. Позволяет установить индивидуальный режим выбора оператора для текущего звонка, вне зависимости от того, какой вариант обхода выбран в самой задаче. Список возможных вариантов можно посмотреть в [[Голосовые задачи#Ресурсы|соответствующем свойстве]] голосовой задачи на вкладке «Ресурсы».<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление в случае успешной коммутации с оператором. В случае успешного запуска сценария задачи автоматической обработки выполнение текущего сценария прекращается на этом компоненте.<br />
|-<br />
|Переход, превышено число подключений<br />
|Компонент, на который передается управление, если данным звонком превышено установленное в задаче максимальное число подключений (одновременных звонков во входящей задаче). Максимальное число задается в свойствах голосовой задачи на вкладке [[Голосовые задачи#Ресурсы|Ресурсы]].<br />
|-<br />
|Переход, задача не найдена<br />
|Компонент, на который передается управление, если задача не задана или указанная не найдена среди существующих в системе.<br />
|-<br />
|Переход, абонент не найден<br />
|Компонент, на который передается управление, если абонент не идентифицирован в прикрепленной таблице. Это может произойти в случае, если установлено свойство «Возврат, если абонент не найден» текущего компонента, а также в запускаемой задаче установлено свойство «Модифицировать записи прикрепленной таблицы».<br />
Поле доступно только при выборе значения «Да» в свойстве «Возврат, если абонент не найден».<br />
|- <br />
|Переход, вне расписания<br />
|Компонент, на который передается управление, если вход осуществляется во время, не установленное недельным графиком активности задачи.<br />
|-<br />
|Переход, вне периода активности<br />
|Компонент, на который передается управление, если вход осуществляется во время, находящееся за границами активации или деактивации задачи.<br />
|-<br />
|Переход, параметры не подходят<br />
|Компонент, на который передается управление, если задача неактивна, задача не является входящей или звонок осуществляется с линии, не поддерживающей обработку в задаче (внутренние линии или линии, подключенные к АТС).<br />
|-<br />
|Переход, превышено время в очереди<br />
|Компонент, на который передается управление, если абонент попал в очередь задачи и находился в ожидании более установленного времени (свойства задачи на вкладке [[Голосовые задачи#Дополнительно|Дополнительно]]).<br />
|-<br />
|Переход, занято<br />
|Компонент, на который передается управление, если все операторы заняты, и не включена очередь ожидания.<br />
|- <br />
|Переход, не отвечает<br />
|Компонент, на который передается управление, если не найдено ни одного оператора, либо время ожидания ответа последнего оператора истекло.<br />
|- <br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="SwitchProject"></div><br />
[[Файл:cl_cc_scr_i41.png|left]]<br />
<br />
===Вход в проект===<br />
<br />
<br />
Администратор комплекса, не владея информацией о задачах, может настроить переадресацию потока звонков на проект. Компонентом «Вход в проект» производится поиск и запуск главного сценария IVR указанного в свойстве проекта. Тот в свою очередь может иметь любую структуру: запускать задачи, ветвиться, запускать вложенные сценарии и пр. <br />
<br />
Непосредственно перед запуском осуществляется упаковка текущего сценария в стэк. Таким образом, обработка звонка продолжится по общему принципу, заложенному администратором, если главный сценарий проекта вернет управление (с помощью компонента [[Общие компоненты сценариев#Стоп|Стоп]] с установленным свойством «Возврат управления»). В случае успеха, или отсутствия необходимости возврата управления в основной сценарий, в сценарии проекта должен присутствовать компонент [[Общие компоненты сценариев#Стоп|Стоп]] с неустановленным свойством «Возврат управления» (в случае успешного переключения) или [[#Положить трубку|Положить трубку]].<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Режим выбора проекта<br />
|Вариант указания проекта:<br />
* Из списка <br />
* По ключу (идентификатор, название)<br />
|- <br />
|Проект<br />
|Доступно только в случае режима «Из списка».<br />
Один из списка существующих [[Проекты|проектов]] системы Oktell.<br />
|-<br />
|Ключ проекта<br />
|Доступно только в случае режима «По ключу».<br />
Аргумент, уникально определяющий проект (идентификатор или название). Привязка осуществляется каждый раз в момент выполнения сценария.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление в случае возврата управления из главного сценария запускаемого проекта (с помощью компонента [[Общие компоненты сценариев#Стоп|Стоп]] с установленным свойством «Возврат управления»).<br />
|-<br />
|Переход, проект не найдена<br />
|Компонент, на который передается управление, если проект не указан или не найден среди существующих в системе.<br />
|-<br />
|Переход, параметры не подходят<br />
|Компонент, на который передается управление, если в проекте не задан главный сценарий или не найден файл главного сценария.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|} <br />
<br />
<br />
<br />
<br />
<div id="Content"></div><br />
[[Файл:cl_cc_scr_i44.png|left]]<br />
===Управление контентом===<br />
<br />
<br />
Осуществляет чтение или изменение пользовательского поля выбранного контента. В ходе работы с каналом системой производится сбор и формирование контента. Это XML документ, который существует в памяти сервера и постоянно пополняется происходящими действиями в ходе обработки вызова. Контент линии существует только у внешних линий, формируется при поступлении или совершении звонка по каналу, и сбрасывается при завершении этого звонка. Может быть передан в служебный сценарий, запускаемый по окончании обработки вызова по внешнему каналу. Также существует контент цепочки коммутаций, который формируется пока существует обозначенная цепочка. При присоединении или отбое каналов из цепочки ее контент существует, наполняется и может быть обработан внешним образом.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Объект<br />
|Линия (канал) / цепочка коммутаций. <br />
Источник обрабатываемого контента (контент в системе двух видов - для канала и для цепочки коммутаций)<br />
|- <br />
|Элемент<br />
|Заголовок/коммутация.<br />
Пользовательское поле может быть взято в заголовке всего контента или в поле конкретной коммутации.<br />
|- <br />
|Действие<br />
|Получить/установить.<br />
Определяет действие, которое производится с пользовательским полем<br />
|- <br />
|Переменная/Аргумент<br />
|В зависимости от действия назначается либо аргумент (значение которого будет установлено в определенное пользовательское поле контента) или переменная, в которую будет размещено значение определенного пользовательского поля контента.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление после завершения работы.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="Conference"></div><br />
[[Файл:cl_cc_scr_i46.png|left]]<br />
===Вход в конференцию===<br />
<br />
<br />
Производит подключение канала к конференции. Подробно о конференц-связи и управлении в разделе [[Конференц-связь|Клиентское приложение. Телефон. Конференц-связь]]. <br />
<br />
Компонент предоставляет возможность доступа к конференциям для активных каналов, для реализации автоматического сбора конференций, а также для подключения к конференции при отсутствии клиентского интерфейса по инициативе пользователя системы.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Ключ конференции<br />
|Числовой или строковый аргумент, определяющий номер виртуальной комнаты, в которой проходит конференция, идентификатор конференции или числовой код идентификатора конференции. <br />
В каждый момент времени уникальным образом идентифицирует активную конференцию. Номера комнат могут повторяться в истории, однако в каждый момент времени не существует двух активных конференций с одним номером. Идентификаторы же конференций повторяться не должны.<br />
В случае обнаружения активной конференции с указанным номером производится подключение к ней (с проверкой прав). В противном случае в зависимости от установленных свойств производится ее создание, либо выход из компонента.<br />
|- <br />
|Определять участника<br />
|Да/нет. Активирует/деактивирует режим проверки уникальности и привязки к существующим участникам.<br />
|-<br />
|Ключ участника<br />
|Доступен только при активации режима определения участника.<br />
Числовой или строковый аргумент, идентифицирующий вновь подключаемого участника конференции. В случае, если в указанной конференции не существует участника с таким ключом (идентификатором или кодом идентификатора), происходит вход в конференцию, при этом указанный ключ регистрируется в качестве идентификатора. Если же существует активный участник с таким идентификатором, то вход блокируется во избежание дублирования. Исключением является участник конференции, находящийся в состоянии ожидания ответа - в этом случае происходит привязка вновь подключаемой линии к этому участнику без проверки на уровень доступа к конференции.<br />
Используется при организации внешних очередей, когда необходимо пригласить одного из нескольких абонентов. В этом случае используется сценарий набора внутреннего номера в конференции, в котором необходимо сохранить коды конференции и приглашаемого участника, а затем использовать их на входе. Проверка на уникальность является тем транзакционным механизмом, который предотвратит появление в конференции сразу нескольких абонентов.<br />
Если ключ не указан, для участника генерится новый уникальный и происходит стандартная процедура входа в конференцию.<br />
|- <br />
|Создать, если отсутствует<br />
|Да/нет. Определяет поведение компонента в случае, если конференции с указанным номером комнаты не существует на текущий момент. «Да» - производит создание конференции и подключается к ней, «Нет» - отклоняет вход и производит выход по ветке «Отсутствует».<br />
|-<br />
|Разрешать вход в закрытую<br />
|Да/нет. В случае «Да» вход будет разрешен и пройдет без запроса к управляющему при любой настройке типа доступа.<br />
|- <br />
|Таймаут ожидания разрешения, с<br />
|Время в секундах, в течение которого компонент будет ожидать ответа управляющего в случае, если конференция имеет режим входа с подтверждением.<br />
|-<br />
|Расширенная настройка<br />
|Доступно только если активирован режим создания в случае отсутствия конференции.<br />
Да/нет. Открывает для настройки ряд свойств создаваемой конференции.<br />
|- <br />
|Название конференции<br />
|Доступно при расширенной настройке и применяется, если конференция не существует, и компонентом производится ее создание. По умолчанию «Автоконференция номер дата/время».<br />
Название конференции для отображения в клиентском интерфейсе и в статистических модулях. <br />
|- <br />
|Описание конференции<br />
|Доступно при расширенной настройке и применяется, если конференция не существует, и компонентом производится ее создание. По умолчанию пустая строка.<br />
Строковая идентификация или описание конференции. Передается в клиентские модули и в сценарий обработки завершения конференции. <br />
|- <br />
|Запись<br />
|Доступно при расширенной настройке и применяется, если конференция не существует, и компонентом производится ее создание. По умолчанию запись активирована.<br />
Определяет будет ли производиться запись конференции. Применяется, если конференция не существует и компонентом производится ее создание. В случае наличия такой записи доступ к ее прослушиванию будет открыт для всех участников конференции, если иного не будет установлено создателем через клиентский интерфейс, пока конференция активна.<br />
|- <br />
|Вид<br />
|Доступно при расширенной настройке и применяется, если конференция не существует, и компонентом производится ее создание. По умолчанию создается неуправляемая конференция.<br />
* Неуправляемая конференция. <br />
* Селекторное совещание.<br />
|- <br />
|Тип доступа<br />
|Доступно при расширенной настройке и применяется, если конференция не существует, и компонентом производится ее создание. По умолчанию создается открытая конференция.<br />
* Открытое совещание. <br />
* Закрытое, с возможностью подать заявку на вход. <br />
* Закрытое, вход только по приглашениям.<br />
|- <br />
|Ключ управляющего<br />
|Доступно при расширенной настройке и применяется, если конференция не существует, и компонентом производится ее создание. По умолчанию управляющим назначается пользователь на обслуживаемой текущим сценарием линии.<br />
<br />
Аргумент, определяющий управляющего участника конференции.<br />
|- <br />
|Модель поведения<br />
|Доступно при расширенной настройке и применяется, если конференция не существует, и компонентом производится ее создание. По умолчанию устанавливается обычный режим.<br />
* Обычный режим. <br />
* Преобразовать в коммутацию. <br />
<br />
Режим преобразования в коммутацию ожидает появления второго участника конференции и сразу после его присоединения инициирует преобразование. Совместно с активацией воспроизведения первому участнику режим может использоваться для организации парковочных секций.<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Следует помнить, что в конференции у каждого участника своя уникальная сессия (идентификатор цепочки коммутаций), после преобразования в коммутацию сессия одного из участников наследуется другим.<br />
|- <br />
|Воспроизведение первому участнику<br />
|Доступно при расширенной настройке и применяется, если конференция не существует, и компонентом производится ее создание. Позволяет активировать воспроизведение установленного в общих настройках музыкального файла первому подключившемуся к конференции участнику.<br />
* Согласно общим настройкам. <br />
* Да. <br />
* Нет.<br />
|- <br />
|Сохранить идентификаторы<br />
|Да/нет. Осуществляет сохранение параметров обнаруженной/созданной конференции в указанных переменных.<br />
|- <br />
|Идентификатор в переменную<br />
|Доступно в режиме сохранения идентификаторов. Строковая переменная, в которую сохранится GUID-идентификатор обнаруженной/созданной конференции.<br />
|- <br />
|Код идентификатора в переменную<br />
|Доступно в режиме сохранения идентификаторов. Числовая/строковая переменная, в которую сохранится код GUID-идентификатора обнаруженной/созданной конференции. <br />
Код идентификатора - это функция от Guid-идентификатора, возвращающая довольно уникальное целое число.<br />
|- <br />
|Номер комнаты в переменную<br />
|Доступно в режиме сохранения идентификаторов. Числовая/строковая переменная, в которую сохранится номер комнаты обнаруженной/созданной конференции.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление после успешного входа в конференцию.<br />
|-<br />
|Переход, отсутствует<br />
|Компонент, на который передается управление в случае, если конференция не существует и заблокирован режим создания (свойством «Создать, если отсутствует» или не установленной привилегией пользователя на создание).<br />
|-<br />
|Переход, нет доступа<br />
|Компонент, на который передается управление в случае, если конференция существует, и доступ к конференции заблокирован (закрытая конференция или управляющий отклонил запрос на вход).<br />
|-<br />
|Переход, таймаут ожидания разрешения<br />
|Компонент, на который передается управление в случае, если при входе в конференцию требуется разрешение управляющего, реакции которого не последовало в течение установленного свойством «Таймаут» времени.<br />
|-<br />
|Переход, участник уже существует<br />
|Компонент, на который передается управление в случае, если установлен режим определения участника, указан ключ участника, и этот ключ обнаружен среди активных участников указанной конференции.<br />
|-<br />
|Переход, неудача<br />
|Компонент, на который передается управление после завершения работы в случае, если произошло исключение, сбой или любой другой непредвиденный результат, приведший к отклонению входа.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="FaxSend"></div><br />
[[Файл:cl_cc_scr_i42.png|left]]<br />
===Отправка факсимильного сообщения===<br />
<br />
<br />
Компонент открывает факс сеанс на линии и в случае успеха отправляет документы, определенные в параметрах. Для корректной работы необходимо наличие в текущей плате возможности работы с факсимильными сообщениями, наличие свободных портов для факс-сеансов. <br />
Для плат семейства Ольха-9 необходим ключ, лицензирующий работу с факсами.<br />
Для плат Synway необходимо наличие мезонина для работы с факсами.<br />
Каждое из семейств плат требует свои уникальные параметры для работы: ширина страницы в пикселях, режим многостраничности, высота страницы, способ формирования имен. Настройку компонента рекомендуется производить под конкретную плату.<br />
<br />
Компонент отправки предоставляет возможность автоматического преобразования изображения в необходимый формат. Однако в зависимости от используемых параметров (тип преобразования, размер исходного документа и т.д.) это может занять некоторое время. Поэтому настоятельно рекомендуется во избежание пауз готовить файлы в нужном формате.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Документ 1<br />
|Файл изображения для отправки. Окно выбора изображения. Допускаются статические файлы, хранящиеся вместе со сценариями, а также динамически прикрепляемые файлы, имя которых формируется в компоненте на этапе исполнения.<br />
|-<br />
|Документ 2<br />
|Аналогично свойству Документ 1.<br />
|-<br />
|Документ 3<br />
|Аналогично свойству Документ 1.<br />
|-<br />
|Тип преобразования к битовому изображению<br />
|Один из вариантов преобразования отправляемых изображений к битовому, поддерживаемому формату факсимильной передачи. <br />
<br />
Среди способов преобразования допускаются:<br />
* Без изменений. Файл будет передан в исходном виде. В случае если он не подходит, будет возвращена ошибка; <br />
* По фиксированной границе яркости. В соответствии с коэффициентом; <br />
* По границе яркости от крайних точек; <br />
* По проценту заполнения листа; <br />
* Случайный офсет.<br />
|- <br />
|Коэффициент границы контрастности<br />
|Аргумент, представляющий собой действительное число от 0 до 1, являющееся параметром для функции преобразования к битовому изображению. Например при выборе пункта "По фиксированной границе яркости" определяет уровень яркости, ниже которого производится преобразование к черному цвету, остальные к белому.<br />
|-<br />
|Приведение ширины<br />
|Для отправки факса в битовом изображении требуется строго фиксированная ширина. <br />
<br />
Среди способов преобразования допускаются:<br />
* Без изменений. Файл будет передан в исходном виде с исходной шириной. В случае, если он не подходит, будет возвращена ошибка. <br />
* Достраивать без изменения размера. Если изображение меньше требуемой ширины, его ширина будет увеличена за счет белых полос по краям. <br />
* Приводить по X. Ширина будет изменена до требуемой, высота останется без изменений. <br />
* Приводить по XY пропорционально. Ширина будет изменена до требуемой, высота будет изменена аналогично изменению ширины для сохранения пропорций. <br />
* Растягивать по X. Если изображение меньше требуемой ширины, ширина будет увеличена до необходимой, высота останется без изменений. <br />
* Растягивать по XY пропорционально. Если изображение меньше требуемой ширины, ширина будет увеличена до необходимой, высота будет изменена аналогично для сохранения пропорций. <br />
* Сужать по X. Если изображение больше требуемой ширины, ширина будет уменьшена до необходимой, высота останется без изменений. <br />
* Сужать по XY пропорционально. Если изображение больше требуемой ширины, ширина будет уменьшена до необходимой, высота будет уменьшена аналогично для сохранения пропорций.<br />
|- <br />
|Таймаут, с<br />
|Числовой аргумент, определяющий время в секундах до принудительного разрыва сеанса. Если не задан или равен нулю, ограничение снимается.<br />
|-<br />
|Код ошибки в переменную<br />
|Переменная, в которую будет записан числовой код ошибки.<br />
<br />
Коды возвращаемых ошибок:<br />
* 0 - Ошибок нет.<br />
* 1 - Канал не поддерживает факс сеанс.<br />
* 3 - Таймаут.<br />
* 4 - Исключение при вызове аппаратной функции.<br />
* 5 - Неверные параметры.<br />
* 65281 - Системная ошибка.<br />
* 65282 - Ошибка драйвера.<br />
* 65283 - Ошибка ввода-вывода устройства.<br />
* 65284 - Ошибка памяти.<br />
* 65285 - Факс сессия уже открыта.<br />
* 65288 - Ошибка файла.<br />
* 65289 - Страницы не обнаружены.<br />
* 65290 - Превышение количества строк.<br />
* 65292 - Несоответствие версии драйвера.<br />
* 65295 - Некорректная версия.<br />
|- <br />
|Переход, успех<br />
|Компонент, на который передается управление после успешно проведенной операции.<br />
|-<br />
|Переход, неудача<br />
|Компонент, на который передается управление, если отправка завершилась неудачей.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="FaxReceive"></div><br />
[[Файл:cl_cc_scr_i43.png|left]]<br />
===Прием факсимильного сообщения===<br />
<br />
<br />
Компонент открывает факс сеанс на линии и в случае успеха принимает факсимильные сообщения и сохраняет в определенное в параметрах место. Для корректной работы необходимо наличие в текущей плате возможности работы с факсимильными сообщениями, наличие свободных портов для факс-сеансов. <br />
Для плат семейства Ольха-9 необходим ключ, лицензирующий работу с факсами.<br />
Для плат Synway необходимо наличие мезонина для работы с факсами.<br />
Каждое из семейств плат требует свои уникальные параметры для работы: ширина страницы в пикселях, режим многостраничности, высота страницы, способ формирования имен. Настройку компонента рекомендуется производить под конкретную плату.<br />
<br />
<br />
В случае если принимается более одного документа, производится формирование нескольких файлов, с добавлением к имени исходного определенного в параметрах файла расширениях, например «_pageN».<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Файл<br />
|Файл изображения для отправки. Окно выбора изображения. Допускаются статические файлы, хранящиеся вместе со сценариями, а также динамически прикрепляемые файлы, имя которых формируется в компоненте на этапе исполнения.<br />
|-<br />
|Имя файла в переменную<br />
|Аналогично свойству Документ 1.<br />
|-<br />
|Возвращать полный путь<br />
|Аналогично свойству Документ 1.<br />
|-<br />
|Таймаут, с<br />
|Числовой аргумент, определяющий время в секундах до принудительного разрыва сеанса. Если не задан или равен нулю, ограничение снимается.<br />
|-<br />
|Код ошибки в переменную<br />
|Переменная, в которую будет записан числовой код ошибки.<br />
Перечень в\озможных ошибок см. в описании аналогичного свойства компонента [[#Отправка факсимильного сообщения|Отправка факсимильного сообщения]].<br />
|-<br />
|Переход, успех<br />
|Компонент, на который передается управление после успешно проведенной операции.<br />
|-<br />
|Переход, неудача<br />
|Компонент, на который передается управление, если прием завершился неудачей.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}</div>Peter%D0%9A%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D1%8B_%D1%81%D1%86%D0%B5%D0%BD%D0%B0%D1%80%D0%B8%D0%B5%D0%B2_IVRКомпоненты сценариев IVR2014-06-30T09:21:11Z<p>Peter: </p>
<hr />
<div>[[Сценарии_IVR|Наверх]]<br />
<br />
<br />
В данном разделе в справочном порядке приведены лишь узкоспециализированные компоненты, доступные только сценариям IVR. Наличие таких компонентов обусловлено тем, что в отличие от других типов сценариев, IVR управляет одной конкретной линией и имеет доступ к аппаратным ресурсам. Среди появляющихся в этой связи возможностей: Проигрывание звуков, запись звуков, прием нажатых клавиш, возможность снять/положить трубку, переключение звонка на указанный номер и пр. Остальные компоненты являются общими для всех типов сценариев и описаны выше в разделе [[Общие компоненты сценариев]].<br />
<br />
<br />
__TOC__<br />
<br />
<br />
===Поднять трубку===<br />
[[Файл:cl_cc_scr_i31.png|left]] <br />
<br />
<br />
Компонент дает команду АТС снять трубку на обрабатываемой линии. Имеет смысл для внешних линий, на которые поступает звонок. Между компонентами «Старт» и «Поднять трубку» можно вставить другие компоненты, позволяющие отклонить звонок, не снимая трубки, в зависимости от некоторых условий. <br />
<br />
Необходимо осуществлять подъем трубки перед компонентами, занимающимися интерактивным взаимодействием с абонентом: воспроизведение, запись, ввод dtmf, вход в задачу, переключения. Исключением может являться случай сквозного переключения, когда трубку требуется снять только после ответа удаленного или внутреннего абонента. В этом случае мелодии ожидания не воспроизводятся, внешний абонент слышит сигнал КПВ.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Команда<br />
|Режим ответа. Используется фактически только в главном (и/или зависимых от него) сценариях, когда на управляемой линии входящий вызов и реализация сценария начинается с компонента «Старт». Для SIP каналов позволяет установить требуемый режим ответа в линию:<br />
* 200 OK. Абонент ответил, медиа-канал организован, тарификация начата. <br />
* 180 Ringing. Абонент вызывается, вызывающему воспроизводятся длинные гудки. <br />
* 183 Session Progress. Абонент вызывается/вызов транслируется, медиа канал организован и вызывающему можно и следует начать воспроизводить в сценарии звуковые файлы. Тарификация еще не производится. <br />
<br />
Для SIP каналов возможны последовательные ответы в зависимости от специфики выстраиваемого алгоритма. <br />
<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Для CTI-каналов любое выбранный режим приводит к простому снятию трубки при входящем вызове.<br />
<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
[[Файл:cl_cc_scr_i32.png|left]] <br />
===Положить трубку===<br />
<br />
<br />
Осуществляет разрыв связи на обслуживаемой линии и производит завершение сценария. Компонент нельзя использовать после проведения успешного переключения (коммутации).<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="PlayFile"></div><br />
[[Файл:cl_cc_scr_i33.png|left]]<br />
===Воспроизведение звукового файла===<br />
<br />
<br />
Осуществляется проигрывание указанного звукового файла в линию абонента. <br />
<br />
<br />
Файл можно указать явно и по имени. В случае явного указания файл копируется и присоединяется к сценарию. В случае указания файла по имени – в соответствующей форме определяется принцип построения полного пути, состоящего из каталога и имени, определяющихся отдельно друг от друга. <br />
<br />
<br />
Проигрывание можно прервать одной из набора указанных последовательностей символов прерывания, при необходимости сохранив ее в буфер-переменную. Для длинного файла можно указать время, после которого прервать звучание, вне зависимости от того, завершился файл или нет. Таким образом завершение действия компонента осуществляется как только происходит одно из событий: <br />
* файл закончился; <br />
* сработал таймер установленного времени звучания; <br />
* набрана последовательность или символ прерывания. <br />
<br />
<br />
В некоторых случаях полезно использование дополнительной паузы после достижения конца файла. В любой момент возможно прерывание воспроизведения или последующей паузы одной из набора установленных последовательностей символов прерывания.<br />
<br />
<br />
Компонент может активировать фоновое воспроизведение при выборе соответствующего режима. Осуществляет запуск воспроизведения указанного файла и сразу передает управление на следующий элемент сценария. Таким образом все следующие компоненты работают на фоне воспроизводимого файла. Даже вся цепочка переключений и ожиданий в очередях будет происходить на стартовавшем ранее фоне. Только после достижения конца фонового файла компоненты переключений начнут осуществлять собственное воспроизведение в канал (мелодии ожидания). Остановка фонового воспроизведения производится при достижении конца файла, при обработке другого компонента Воспроизведение, при явной остановке фонового воспроизведения (режим Остановка фона), при коммутации с другим каналом или конференцией, а также при обрыве связи. <br />
<br />
<br />
У компонента в контекстном меню доступна команда «Воспроизвести». При использовании прикрепленного файла он будет открыт во встроенном проигрывателе.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Режим<br />
|Определяет режим проигрывания файла:<br />
* Файл полностью. <br />
* Предпрослушивание. <br />
* Файл + дополнительное время. <br />
* Фоновое воспроизведение. <br />
* Остановка фона.<br />
* Генерация DTMF<br />
|- <br />
|Файл<br />
|Окно ввода выбора проигрывающегося файла. <br />
Доступно для режимов воспроизведения файла.<br />
<br />
Файл может быть прикреплен к сценарию (выбран в момент редактирования и скопирован к сценарию), а также найден по сформированному пути в момент обработки сценария. Путь строится из составных частей: каталог и имя файла.<br />
Каталог, в котором лежит файл может быть задан<br />
* локальной категорией (в папке сценария); <br />
* глобальной категорией (в папке, где хранятся все сценарии); <br />
* абсолютным путем (C:\AAA\BBB); <br />
* пустота – в этом случае считается, что значение имени файла уже содержит весь путь. <br />
<br />
Имя файла берется из значения указанной переменной сценария.<br />
|- <br />
|Время предпрослушивания<br />
|Доступно только в режиме предпрослушивания.<br />
Числовой аргумент, опредляющий время в секундах, по истечении которого проигрывание прервется и управление перейдет к следующему компоненту.<br />
<br />
<br />
<span style="color:red;">ВНИМАНИЕ! В зависимости от значения (при наличии) ключа «EnableGuaranteePlayTimeout» в файле конфигурации сервера обработчик сценария может ждать или пропускать ожидание сигнала об окончании воспроизведения.<br />
<br />
|-<br />
|Дополнительное время<br />
|Доступно только в режиме «файл + дополнительное время».<br />
Числовой аргумент, определяющий дополнительную задержку после воспроизведения, в ходе которой воспроизводится тишина и производится аналогичное ожидание набора символов.<br />
|- <br />
|Символы прерывания<br />
|Недоступно в режиме фонового воспроизведения. <br />
Символы прерывания или их последовательности, разделенные запятыми или пробелами. При вводе с клавиатуры абонента указанной последовательности проигрывание прекращается, и управление переходит к следующему компоненту.<br />
|- <br />
|Буфер<br />
|Недоступно в режиме фонового воспроизведения. <br />
Переменная, в которую сохранится последовательность, прервавшая воспроизведение.<br />
|- <br />
|Очистить буфер<br />
|Недоступно в режиме фонового воспроизведения. <br />
Флаг, определяющий, будет ли последовательность дописана в конец к уже существующим в буфере данным, либо очистит их и запишется с начала.<br />
|- <br />
|DTMF-последовательность<br />
|Доступно только в режиме генерации DTMF.<br />
<br />
Один или несколько DTMF символов, подлежащих генерации в обслуживаемый канал. При необходимости генерации нескольких символов в нагруженных системах рекомендуется использовать несколько компонентов, разделенных паузами в 200-300 мс, либо использовать цикл, а не предоставлять эту работу самому компоненту.<br />
|- <br />
|Переход<br />
|Компонент, на который передается управление после завершения воспроизведения.<br />
|- <br />
|Переход, неудача<br />
|Недоступно в режиме фонового воспроизведения. <br />
Компонент, на который передается управление в случае, если по какой либо причине произошел сбой и файл не начал воспроизводиться. Например незаданное имя, отсутствие файла или доступа к нему, неверный формат и т.п.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="PlayNumber"></div> <br />
[[Файл:cl_cc_scr_i34.png|left]]<br />
===Проигрывание числа===<br />
<br />
<br />
Осуществляется проигрывание числа, определяемого аргументом (переменной, функцией, выражением, значением). Для проигрывания существуют несколько видов голосов, которые можно пополнять своими записями. Проигрывание производится по указанному формату (время, телефонный номер и т.д.), либо по указанной схеме (посимвольно, целиком).<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Число<br />
|Аргумент (значение, переменная, функция, значение), строковое представление которого в числовом формате нужно проговорить текстом.<br />
|-<br />
|Языковой алгоритм<br />
|Определяет алгоритм преобразования числа для воспроизведения с учетом выбранного языка. Так, число 123 при использовании русскоязычного алгоритма звучит как "Сто Двадцать Три", а при использовании англоязычного "One Hundred and Twenty Three". Помимо языкового алгоритма необходимо выбрать голос, в каталоге которого присутствуют файлы озвучивания числительных соответствующего языка. <br />
|-<br />
|Голос<br />
|Выбор голоса для воспроизведения. Каждый голос представляет собой папку с набором файлов, озвучивающих достаточно большой набор числительных и используемых дополнительных слов. Папки хранятся в каталоге со сценариями. В комплект входят 3 голоса. <br />
Перечень всех используемых файлов приведен в конце руководства в разделе [[Перечень файлов, необходимых для озвучивания числовых значений]].<br />
|- <br />
|Формат<br />
|Формат проигрываемого значения:<br />
* «ПО ФОРМАТУ» — определяет расширенную настройку типа воспроизводимого числа <br />
* Количество <br />
* Порядковое числительное <br />
* Телефонный номер <br />
* Дата <br />
* Время <br />
* Дата/время <br />
* День недели <br />
* Время без нулей в начале<br />
* Время без нулей в конце<br />
* Время в секундах <br />
* Деньги, USD <br />
* Деньги, EUR <br />
* Деньги, RUR <br />
* Деньги, UAH<br />
|-<br />
|Тип проигрывания<br />
|Используется, если формат задан «По формату»<br />
* Посимвольно (один ноль два три семь…) <br />
* По 2 символа (двадцать два сорок четыре…) <br />
* По 3 символа (триста пять двести тридцать четыре…) <br />
* Целиком (Двести тридцать четыре триллиона пятьсот двадцать…) <br />
* Буквы и числа посимвольно (один а б в X Y Z тире слэш.. ) <br />
* Слова и фразы (пожалуйста_введите_свой_код занято...). Ожидаются через любой пустой разделитель. В папке осуществляется поиск соответствующих файлов и их последовательное воспроизведение. <br />
<br />
Поле доступно только при выборе значения «По формату» в свойстве «Формат».<br />
|- <br />
|Род<br />
|Доступно только при выборе одного из значений «По формату», «Количество», «Порядковое числительное» в свойстве «Формат».<br />
* Мужской (один, двадцатитрехмиллионный) <br />
* Женский (одна, сто двадцать шестая) <br />
* Средний (одно, однотысячное)<br />
|-<br />
|Понижение тона<br />
|Осуществляет понижение тона в конце. Для этого в качестве последнего файла подставляется аналогичный с символом "_" в конце, озвученный как окончание речи. При его отсутствии берется обычный файл.<br />
|-<br />
|Символы прерывания<br />
|Недоступно в режиме фонового воспроизведения.<br />
Символы прерывания или их последовательности, разделенные запятыми или пробелами. При вводе с клавиатуры абонента указанной последовательности проигрывание прекращается, и управление переходит к следующему компоненту.<br />
|-<br />
|Буфер <br />
|Недоступно в режиме фонового воспроизведения.<br />
Переменная, в которую сохранится последовательность, прервавшая воспроизведение.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление после завершения воспроизведения.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="Input"></div><br />
[[Файл:cl_cc_scr_i35.png|left]]<br />
===Ввод числа===<br />
<br />
<br />
Ввод числа сопровождается тишиной в трубке. Принимает от пользователя число, набираемое с клавиатуры телефона, и сохраняет в буфер-переменную. Ввод прекращается, когда происходит одно из событий: сработал таймер назначенного времени ввода, набралось указанное количество символов, набрана последовательность или символ прерывания. При этом, в случае срабатывания таймера переход осуществляется по ветке «Время», имитируя неудавшийся ввод. В других случаях ввод считается успешным.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Символы прерывания<br />
|Символы прерывания или их последовательности, разделенные запятыми или пробелами. При вводе с клавиатуры абонента указанной последовательности проигрывание прекращается, и управление переходит к следующему компоненту.<br />
|-<br />
|Буфер<br />
|Переменная, в которую сохранится введенное значение. Последовательность прерывания сохранена не будет.<br />
|-<br />
|Очистить буфер<br />
|Флаг, определяющий, будет ли введенное значение дописано в конец к уже существующим в буфере данным, либо очистит их и запишется с начала.<br />
|-<br />
|Максимальное время<br />
|Аргумент, определяющий число - время ожидания ввода в секундах. По истечению времени введенное значение не сохраняется, и переход осуществляется по ветке «если время вышло». Если задан 0 – время не ограничивается.<br />
|-<br />
|Количество символов<br />
|Аргумент, определяющий количество символов, ввода которых будет ждать компонент. По приему указанного количества – сразу осуществляется переход. Если задан 0 – число не ограничено. Компонент ожидает ввода указанного количества символов безотносительно предварительного содержимого буфера (даже если он не очищается).<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление после успешного завершения ввода.<br />
|-<br />
|Переход, время<br />
|Компонент, на который передается управление, если отведенное время истечет.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="PlayInput"></div><br />
[[Файл:cl_cc_scr_i36.png|left]]<br />
===Воспроизведение звукового файла с преднабором===<br />
<br />
<br />
Объединение проигрывания файла и ввода. Компонент используется, если необходимо ввести данные, описав пользователю, что конкретно ему предстоит ввести. При этом пользователю предоставляется возможность не дослушивать звуковой файл до конца, и начать набирать в любом удобном ему месте. После набора первого символа звуковой файл прекращает звучать и запускается таймер времени ввода. Далее компонент действует также как [[#Ввод числа|Ввод числа]].<br />
<br />
<br />
У компонента в контекстном меню доступна команда «Воспроизвести». При использовании прикрепленного файла он будет открыт во встроенном проигрывателе.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Файл<br />
|Окно ввода выбора проигрывающегося файла.<br />
<br />
Файл может быть прикреплен к сценарию (выбран в момент редактирования и скопирован к сценарию), а также найден по сформированному пути в момент обработки сценария. Путь строится из составных частей: каталог и имя файла.<br />
Каталог, в котором лежит файл может быть задан<br />
* локальной категорией (в папке сценария); <br />
* глобальной категорией (в папке, где хранятся все сценарии); <br />
* абсолютным путем (C:\AAA\BBB); <br />
* пустота – в этом случае считается, что значение имени файла уже содержит весь путь. <br />
<br />
Имя файла берется из значения указанной переменной сценария.<br />
|- <br />
|Символы прерывания<br />
|Символы прерывания или их последовательности, разделенные запятыми или пробелами. При вводе с клавиатуры абонента указанной последовательности проигрывание прекращается, и управление переходит к следующему компоненту.<br />
|-<br />
|Буфер<br />
|Переменная, в которую сохранится введенное значение. Последовательность прерывания сохранена не будет.<br />
|-<br />
|Очистить буфер<br />
|Флаг, определяющий, будет ли введенное значение дописано в конец к уже существующим в буфере данным, либо очистит их предварительно.<br />
|-<br />
|Максимальное время<br />
|Аргумент, определяющий число, которое толкуется как время ожидания ввода в секундах. По истечению времени введенное значение не сохраняется, и переход осуществляется по ветке «если время вышло». Если задан 0 – время не ограничивается.<br />
Время засекается по набору первого символа, либо по завершению воспроизведения файла.<br />
|- <br />
|Количество символов<br />
|Аргумент, определяющий число, которое толкуется как количество символов будет ждать компонент. По приему указанного количества – сразу осуществляется переход. Если задан 0 – число не ограничено.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление после успешного завершения ввода.<br />
|-<br />
|Переход, время<br />
|Компонент, на который передается управление, если отведенное время истечет.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="Record"></div><br />
[[Файл:cl_cc_scr_i37.png|left]]<br />
===Запись звукового файла===<br />
<br />
<br />
Компонент позволяет записывать звуковые данные с микрофона абонента. Указывается составной путь к файлу (отдельно каталог и имя), в который нужно сохранить данные. Имя файла можно генерировать случайно, после чего сохранять в буфер-переменную для дальнейшего использования или сохранения в БД. Остановка записи производится при срабатывании одного из событий: набрана одна из заданных в компоненте последовательностей прерывания или установленное время записи вышло (переход осуществляется по ветке «Время вышло»).<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Файл<br />
|Окно ввода выбора пути к файлу для записи.<br />
Файл задается при помощи правила построения пути. Путь формируется из двух частей: каталог и имя файла.<br />
Каталог, в котором лежит файл<br />
* локальная категория (в папке сценария); <br />
* глобальная категория (в папке, где хранятся все сценарии); <br />
* абсолютный путь (C:\AAA\BBB); <br />
* не задан (в этом случае считается, что значение имени файла уже содержит весь путь). <br />
Имя файла<br />
* задается и фиксировано; <br />
* генерируется, и значение сгенерированное сохраняется в переменную; <br />
* из значения указанной переменной сценария. <br />
|- <br />
|Имя файла в переменную<br />
|Сохраняется имя файла, в который записали (используется, если имя генерируется).<br />
|- <br />
|Возвращать полный путь<br />
|Да/нет. Устанавливает формат возвращаемого имени файла. Только имя и расширение или полный путь к файлу с указанием диска.<br />
|-<br />
|Символы прерывания<br />
|Символы прерывания или их последовательности, разделенные запятыми или пробелами. При вводе с клавиатуры абонента указанной последовательности запись прекращается, и управление переходит к следующему компоненту, определенному веткой «Переход».<br />
|-<br />
|Буфер<br />
|Переменная, в которую сохранится последовательность прерывания.<br />
|-<br />
|Очистить буфер<br />
|Флаг, определяющий, будет ли введенная последовательность дописана в конец к уже существующим в буфере данным, либо очистит их предварительно.<br />
|-<br />
|Максимальное время<br />
|Аргумент, определяющий число, которое толкуется как время записи в секундах. По истечению времени введенное значение не сохраняется, и переход осуществляется по ветке «если время вышло».<br />
|-<br />
|Начинать новую папку<br />
|Определяет, вставлять ли между указанным именем файла и указанной папкой еще папку, и как часто их начинать. Возможные варианты:<br />
* Никогда <br />
* Каждый час <br />
* Каждый день <br />
* Каждую неделю <br />
* Каждый месяц <br />
* Каждые 3 месяца <br />
* Каждый год<br />
|-<br />
|Кодек<br />
|Определяет формат звукового файла.<br />
* PCM<br />
* G.711 a-law<br />
* G.711 u-law<br />
* GSM.610<br />
* MP3 8 Kb/s<br />
* MP3 16 Kb/s<br />
* MP3 24 Kb/s<br />
|- <br />
|Переход<br />
|Компонент, на который передается управление после успешного завершения ввода.<br />
|-<br />
|Переход, время<br />
|Компонент, на который передается управление, если отведенное время истечет.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="Recognize"></div><br />
[[Файл:cl_cc_scr_i45.png|left]]<br />
===Распознавание речи===<br />
<br />
<br />
Компонент осуществляет распознавание речи. Доступен в сценариях IVR и в служебных сценариях.<br />
Позволяет производить распознавание речи из указанного файла (при этом длительность распознавания сопоставима с оригинальной длительностью файла), либо из речи абонента в линии (только для сценариев IVR, при этом длительность распознавания минимальна).<br />
Остановка записи производится при срабатывании одного из событий: истекло время записи, набрана последовательность DTMF-символов прерывания, набрано установленное количество DTMF-символов. В случае выхода по непустому DTMF-результату (исключается случае прерывания записи символом прерывания, не фиксирующего значимых символов в буфере для DTMF) распознавание не производится и результатом является последовательность DTMF.<br />
<br />
Распознает с помощью сервиса [http://api.yandex.ru/speechkit/ Yandex.SpeechKit]. Требует [[Настройки распознавания|настройки]] ключа доступа к сервису.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Режим<br />
|Запись/файл.<br />
В сценариях IVR доступны оба варианта, в служебных сценариях возможно распознавание только готового файла.<br />
В режиме распознавания файла выбранный файл должен иметь формат PCM 16bit 8kHz Mono. Время на распознавание файла ориентировочно равно оригинальной длительности файла.<br />
В режиме записи в сценарии IVR осуществляется запись и параллельная одновременная отправка звука на распознавание в целях получения быстрого ответа, который в этом случае получается почти моментально.<br />
|- <br />
|Файл<br />
|Доступно только в режиме «Файл».<br />
Звуковой файл в формате PCM 16bit 8kHz Mono или его расположение на диске.<br />
|- <br />
|Символы прерывания<br />
|Доступно только в режиме «Запись».<br />
Сохраняется имя файла, в который записали (используется, если имя генерируется).<br />
|- <br />
|Буфер для DTMF<br />
|Доступно только в режиме «Запись».<br />
Переменная, в которую сохранится последовательность введенных символов, исключая символы прерывания.<br />
|-<br />
|Очистить буфер<br />
|Доступно только в режиме «Запись».<br />
Флаг, определяющий, будет ли введенная последовательность дописана в конец к уже существующим в буфере данным, либо очистит их предварительно.<br />
|-<br />
|Максимальное время записи<br />
|Доступно только в режиме «Запись».<br />
Аргумент, определяющий число, которое толкуется как время ожидания ввода в секундах. <br />
|-<br />
|Сигнал окончания записи<br />
|Доступно только в режиме «Запись».<br />
Звуковой файл или путь, определяющий его расположение, который будет воспроизведен по окончании записи, чтобы отделить дополнительное время распознавания.<br />
|-<br />
|Тема<br />
|Одна из поддерживаемых сервисом Yandex.SpeechKit тем для распознавания.<br />
* freeform - общие фразы.<br />
* general - поисковые запросы.<br />
* maps - карты.<br />
* music - музыкальные произведения.<br />
* Другая тема - позволяет задать отсутствующий в списке вариант.<br />
|-<br />
|Пользовательская тема<br />
|Аргумент, определяющий строку с индивидуальной темой, поддерживаемой сервисом Yandex.SpeechKit.<br />
|-<br />
|Предопределенные значения<br />
|Таблица предопределенных вариантов с возможностью проведения группировки. Используется для упрощения последующего разветвления по вариантам.<br />
Масштабные сценарии маршрутизации очевидно потребуют сравнения вариантов распознавания с базой данных, и группировку можно будет проводить также в БД, заодно сохраняя неизвестные новые варианты распознавания в списке с последующим проставлением им кодов.<br />
|-<br />
|Текст в переменную<br />
|Переменная, в которую заносится результат распознавания.<br />
|-<br />
|Код группировки в переменную<br />
|Переменная, в которую заносится код группировки, выявленный в ходе сравнения результата со списокм предопределенных значений.<br />
|-<br />
|Вероятность совпадения в переменную<br />
|Переменная, в которую заносится вероятность совпадения (от 0 до 1).<br />
|- <br />
|Переход<br />
|Компонент, на который передается управление после успешного завершения ввода.<br />
|-<br />
|Переход, ошибка<br />
|Компонент, на который передается управление, если распознавание завершилось неудачей.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="Switch"></div><br />
[[Файл:cl_cc_scr_i38.png|left]]<br />
===Переключение на номер===<br />
<br />
<br />
Переключение на номер позволяет коммутировать обслуживаемую линию с другой линией, на противоположном конце которой находится абонент с указанным номером. Переключение можно осуществлять как во внешнюю среду (город), так и во внутреннюю (внутри Oktell). <br />
<br />
<br />
В случае успеха коммутации переход осуществляется по ветке «Переход» и ожидается появление компонента [[Общие компоненты сценариев#Стоп|Стоп]], который прервет выполение сценария без разрыва коммутации и без возврата управления в родительские сценарии. Если номер занят – по ветке «Занято», если не отвечает – по ветке «Не отвечает». <br />
<br />
В ходе набора городского номера производится резервирование свободной и доступной по правам внешней линии, набор в нее номера и ожидание ответа в течение установленного интервала времени (по умолчанию 40 секунд). В ходе ожидания воспроизводится стандартная мелодия. При обработке сценария по внешней линии, или по внутренней линии, которая не связана с пользователем, выделение внешних линий производится в обратном порядке с самой последней.<br />
<br />
Для переключения на город (или на внешнюю АТС) существует также компонент [[#Переключение на внешний номер с указанием последовательности выделения линий|Переключение на внешний номер с указанием последовательности выделения внешних линий]], в котором явно устанавливается перечень и последовательность выделения внешних линий, а также существует возможность выбора воспроизводимой мелодии ожидания.<br />
<br />
<br />
Переключение внутри АТС может осуществляться на все типы внутренних номеров: <br />
*[[Внутренние номера#Стандартные номера|Стандартный номер]]. Производится попытка соединения абонента с одним из операторов или одной из внутренних линий, назначенных в номере. В случае, если все операторы/линии номера заняты возможно использование очереди ожидания.<br />
*[[Внутренние номера#Быстрые номера|Быстрый номер]]. Переключение осуществляется внутрь АТС, однако физически производится набор номера во внешнюю линию. В зависимости от типа быстрого номера (АТС/Город) производится выбор соответствующей внешней линии. Если свободных внешних линий не найдено, производится возврат управления по ветке «Занято». При успешном резервировании линии возврат происходит после получения ответа городской (или внешней) АТС по соответствующей ветке.<br />
*[[Внутренние номера#Запуск сценария IVR|Запуск IVR]]. Производится безвозвратный запуск назначенного в номере сценария. Текущий сценарий прекращает свое исполнение и дальнейший переход по веткам компонента не осуществляется.<br />
*[[Внутренние номера#Специальные номера|Служебный номер]]. Среди внутренних служебных номеров, на которые возможно переключение из компонента, доступны «Выход в город», «Выход в АТС» и «Перехват». В первых двух случаях при наборе номера осуществляется резервирование соответствующей служебному номеру внешней линии (или коммутация с ней в зависимости от установки способа набора в модуле [[Параметры АТС|Общие настройки. АТС]]). Если операция успешно выполнена, управление в сценарий возвращается по ветке «Переход», и ожидается завершение сценария компонентом [[Общие компоненты сценариев#Стоп|Стоп]]. Дальше абонент попадает в условия как если бы он на внутренней линии после снятия трубки набрал соответствующий служебный номер.Это дает возможность пользоваться соответствующими служебными номерами пользователям и абонентам, находящимся на внешних линиях системы. «Перехват» работает стандартным способом и в основном необходим только в случае использования сценария IVR исходящей маршрутизации ([[Параметры АТС|здесь]]). Переключение на номер «Перехват» возможно сразу с указанием номера-расширения (например *103, где * - служебный номер перехвата, а 103 - внутренний стандартный номер).<br />
В случае отсутствия в системе указанного номера или несоответствия его типа одному из описанных выше происходит возврат управления по ветке «Не отвечает».<br />
<br />
Возможна работа компонента при неснятой трубке на обслуживаемой внешней линии. В этом случае трубка будет автоматически снята после успешного ответа вызываемого компонентом абонента. Все время, пока производится ожидание, внешний абонент слышит сигнал КПВ взамен мелодии ожидания.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Назначение<br />
|Номер может быть городским (внешним) и внутренним АТС. <br />
Режим «Авто» позволяет установить автоматическое распознавание номера и в случае его наличия во внутреннем номерном плане производить переключение внутрь системы, в противном случае набирать номер в город.<br />
Назначение «Возврат к оператору» может быть использовано в call-центре для принудительного разрыва коммутации абонента, отбоя второго участника и возврата звонка на зарезервированного в этот момент оператора, который в задаче ожидает обратного соединения. Подробнее в разделе [[Голосовые задачи#Дополнительно|Голосовые задачи. Дополнительно. Поведение при переключении на IVR. Оставлять оператора ожидающим соединения]]. Также режим может использоваться для разрыва только что начавшейся коммутации по некоторому событию (истечению времени, набора команды DTMF, появления в БД некоторых данных и т.п.) и перевести его на дальнейшую полноценную обработку в сценарии IVR.<br />
|- <br />
|Номер<br />
|Аргумент, определяющий номер, по которому производить дозвон.<br />
|- <br />
|Тип вызова<br />
|Определяет в каком виде производить вызов на SIP устройства. Обычный режим или интерком-вызов. Последний имеет отличие, если функция поддерживается конечным устройством. В противном случае вызов будет происходить в обычном режиме. При интерком-вызове телефонное устройство снимает трубку автоматически сразу же после поступления звонка.<br />
|-<br />
|CallerId<br />
|Аргумент, определяющий номер дозванивающегося абонента, который будет отправлен в качестве caller-id. Если свойство не указано или определяет пустое значение, в качестве caller-id выступит стандартный, настроенный общим образом номер или определившийся при звонке из-вне, либо основной внутренний номер пользователя/линии в рамках текущей АТС при внутреннем звонке.<br />
Этот номер будет отображен также во всплывающем окне у вызываемого пользователя.<br />
|-<br />
|CallerName<br />
|Аргумент, определяющий имя дозванивающегося абонента, который будет принудительно отправлен в качестве caller-name в IP-канал. Если свойство не указано или определяет пустое значение при звонке внутри АТС, в качестве caller-name выступит имя абонента-инициатора.<br />
Этот номер будет отображен также во всплывающем окне у вызываемого пользователя.<br />
|- <br />
|Дополнительная информация об абоненте<br />
|Аргумент, задающий внешним образом некоторые дополнительные данные об абоненте. Эти данные попадают в окно уведомления о входящем вызове при звонке на внутреннего пользователя, а также в комментарий к осуществленной коммутации и доступный для просмотра и поиска в журналах звонков [[Статистика АТС#Журнал звонков|Статистики АТС]] и [[Мои звонки|Моих звонков]]. При осуществлении flash-переключения или flash-удержания последующие коммутации не будут содержать установленного значения в комментарии. При дальнейших переводах абонента при необходимости следует вновь указывать это же или иное значение.<br />
|- <br />
|Очередь ожидания<br />
|Активировать ли очередь ожидания для внутреннего переключения, в случае, если номер занят.<br />
Поле доступно только при выборе значения «Внутри АТС» в свойстве «Назначение».<br />
|- <br />
|Время ожидания<br />
|Определяет, сколько секунд необходимо ожидать соединения перед отбоем. <br />
<br />
<span style="color:red;">ВНИМАНИЕ! В случае набора стандартного внутреннего номера свойство применяется только в случае, если запрещено ожидание в очереди. В противном случае время ожидания не лимитируется.<br />
|-<br />
|Символы прерывания<br />
|Символы прерывания или их последовательности, разделенные запятыми или пробелами. При вводе с клавиатуры абонента указанной последовательности ожидание переключения прекращается, и управление переходит к следующему компоненту, определенному веткой «Переход, прервано».<br />
|-<br />
|Параметр команды<br />
|Свойство для служебных сценариев. Не используется в обычном режиме. Служит для передачи пароля пользователя и автоматической подстановки его в статистику в качестве инициатора звонка.<br />
Поле доступно только при выборе значения «В город» в свойстве «Назначение».<br />
|- <br />
|Запись разговора<br />
|Параметр, определяющий необходимость записи. По умолчанию выбран вариант «Согласно настройкам», при котором используется стандартная процедура поиска правил записи для звонка. Также доступны варианты «Записывать» и «Не записывать», производящие соответствующие безусловные действия.<br />
|- <br />
|Код отказа SIP в переменную<br />
|Переменная, куда записывается код отказа, если компонент прерван в силу получения неудачного ответа по SIP.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление в случае успешной коммутации<br />
|-<br />
|Переход, занято<br />
|Компонент, на который передается управление, если номер занят (для внутренних, если очередь ожидания не активирована).<br />
|-<br />
|Переход, не отвечает<br />
|Компонент, на который передается управление, если время ожидания истекло.<br />
|-<br />
|Переход, отсутствует<br />
|Компонент, на который передается управление, если номер не обнаружен, нет ни одного активного абонента, отсутствует внешняя линия при попытке набора быстрого номера.<br />
|- <br />
|Переход, прервано<br />
|Компонент, на который передается управление, если абонентом было прервано ожидание нажатием последовательности символов прерывания.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="SwitchExt"></div><br />
[[Файл:cl_cc_scr_i39.png|left]]<br />
===Переключение на внешний номер с указанием последовательности выделения линий===<br />
<br />
<br />
Переключение на номер позволяет коммутировать обслуживаемую линию с другой (внешней) линией, на противоположном конце которой находится абонент с указанным внешним (городским/АТС) номером.<br />
В ходе набора номера производится поиск свободной внешней линии в соответствии с установленным списком, резервирование, набор номера и ожидание ответа в течение установленного интервала времени (по умолчанию 40 секунд). В ходе ожидания воспроизводится выбранная мелодия. В зависимости от установленных свойств поведение компонента может меняться кардинальным образом.<br />
<br />
<br />
Возможна работа компонента при неснятой трубке на обслуживаемой внешней линии. В этом случае трубка будет автоматически снята после успешного ответа вызываемого компонентом абонента. Все время, пока производится ожидание, внешний абонент слышит сигнал КПВ взамен мелодии ожидания.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Номер<br />
|Аргумент, определяющий номер, по которому производить дозвон. <br />
В качестве номера может быть принята команда (строка, содержащая DTMF символы и командные спец. символы w, q, z, {, }). Подробнее о командах в разделе [[Линии#Направления|Администрирование. Направления]].<br />
<br />
При звонке через [[Свойства_компонентов#IP_шлюз|sip-шлюз без регистрации]] возможно указывать в качестве номера URI (sip:username@domain). В этом случае несмотря на настройки звонок будет отправлен на указанный в URI адрес. То же самое в обязательном порядке касается шлюзов межсерверного взаимодействия.<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Если номер пустой или не указан, то вместо набора номеров производится выход на одну из назначенных внешних линий, аналогичный служебному номеру «Выход в город» или «Выход в АТС». Выборка линий производится в установленной компонентом последовательности. Исключение составляет случай, когда значение свойства «Коммутировать сразу» - нет.<br />
|-<br />
|Тип команды<br />
|Определяет способ преобразования номера в команду, отсылаемую на набор. По умолчанию без преобразования.<br />
* Без преобразования. Отправляет номер как есть в зарезервированную линию. <br />
* Использовать команду направления. Если зарезервированная линия взята из [[Линии#Направления|направления]], и в нем настроено преобразование номера, то перед отправкой на набор номер будет преобразован в строку-команду по указанной в направлении схеме.[[Линии#Направления|Подробно здесь]]. <br />
В некоторых случаях преобразование номера в команду может быть произведено предварительно в самом сценарии, или вовсе команда как итог может быть указана в таблице абонентов (номер в чистом виде - частный случай команды). В этом случае дополнительно преобразовывать команду не следует, и стоит оставить режим "без преобразования". Конечный режим реализации зависит от задач и целей.<br />
|- <br />
|Тип вызова<br />
|Обычный / экстренный / интерком.<br />
Набор в экстренном режиме при отсутствии свободных линий среди назначенных будет производить разрыв активных коммутаций с целью освобождения внешней линии для совершения этого звонка.<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Значение «экстренный» следует выставлять в [[Параметры АТС|сценарии входа в АТС]] в случае набора экстренного номера в явном виде (без использования внутреннего номера с типом «[[Внутренние номера#Экстренные номера|экстренный]]»). В других случаях рекомендуется оставлять тип со значением по умолчанию «обычный». Возможны вариации, но их следует тщательно продумывать во избежание незапланированных разрывов.<br />
<br />
Подробно об экстренных номерах в разделах [[Внутренние номера#Экстренные номера|Администрирование. Внутренние номера. Экстренные]] и [[Экстренные номера|Администрирование. Общие настройки. Экстренные номера]].<br />
<br />
Интерком-вызов имеет отличие от обычного режима, если функция поддерживается конечным устройством. В противном случае вызов будет происходить в обычном режиме. При интерком-вызове телефонное устройство снимает трубку автоматически сразу же после поступления звонка.<br />
|- <br />
|Линии, направления<br />
|Осуществляет выбор линий и направлений для осуществления звонка.<br />
<br />
На вкладке «Список объектов» предоставляется возможность указать явно последовательность существующих в системе линий и [[Линии#Направления|направлений]] для осуществления звонка. Можно отключить использование некоторых элементов, а для выбранных установить последовательность поиска свободной линии. <br />
<br />
Поиск свободной будет осуществляться в соответствии с установленной последовательностью. По каждому направлению анализируются все линии, входящие в его состав. Если линия присутствует в нескольких направлениях, то при обнаружении ее свободной и установленном в компоненте режиме преобразования номера в соответствии с командой направления, будет применена команда того направления, которое в перечислении находится выше по приоритету.<br />
<br />
На вкладке «Аргумент» возможно динамическое указание линии через ее код или Guid-идентификатор в строковом представлении. Также здесь может быть указан идентификатор или код направления, потока или шлюза. В этом случае будут последовательно перебираться все линии указанного объекта до обнаружения свободной и готовой к совершению вызова. Режим введен для использования совместно со [[Свойства компонентов#IP шлюз|шлюзами с динамической регистрацией потоков]] и компонентом сценариев [[Общие компоненты сценариев#Регистрация|Регистрация потока]].<br />
|- <br />
|Фильтровать по правам<br />
|Да/нет. При задействовании режима в случае, если осуществляется обработка канала пользователя системы, может быть осуществлена дополнительная фильтрация перечисленных в компоненте линий в соответствии с настройками [[Права#Исходящие|прав выхода на внешние линии]] для пользователя. По умолчанию «Нет» - не фильтровать.<br />
|- <br />
|Идентификатор выбранной линии в переменную<br />
|Строковая переменная, в которую сохраняется GUID-идентификатор линии, осуществившей вызов.<br />
|- <br />
|CallerId<br />
|Подставляемый для звонка номер. При отсутствии или некорректном значении будет взят номер по умолчанию для канала.<br />
|-<br />
|CallerName<br />
|Подставляемое для звонка имя абонента (для IP каналов).<br />
|- <br />
|Время ожидания<br />
|Аргумент определяет, сколько секунд необходимо ожидать соединения перед отбоем.<br />
|-<br />
|Коммутировать сразу<br />
|Определяет поведение компонента. По умолчанию "нет, воспроизводить мелодию".<br />
* Да. <br />
После нахождения доступной внешней линии и начала набора в нее номера сразу производится ее коммутация с каналом, обслуживаемым в сценарии. Ожидание ответа внешнего абонента производится уже в коммутации, строка о разговоре в статистике появится даже при неответе абонента, а запись будет включать в себя КПВ-сигнал. Возврат из компонента осуществляется сразу же по стандартной ветке «Переход». Если происходит сбой при ожидании набора номера или при коммутации, то возврат происходит по ветке «Ошибка». При отсутствии доступной линии - возврат по ветке «Линий не найдено».<br />
<br />
<span style="color:red;">ВНИМАНИЕ! В случае, если одновременно с установкой значения «да» этому свойству в компоненте назначен пустой номер, то поведение CTI каналов (FXO, E1) меняется. После снятия трубки на внешнем канале производится его коммутация с обслуживаемым каналом. Необходимо крайне аккуратно пользоваться этим режимом в случае работы с потоками Е1, так как в общем случае без дополнительных устройств-преобразователей протокол не поддерживает посимвольного набора номера через звуковой интерфейс, и, следовательно, такая комбинация параметров повлечет невозможность дальнейшего набора номера и коммутации с абонентом. Также описанный режим небходимо осмотрительно использовать при назначении в компоненте последовательности линий из разных потоков, и тем более линий разного типа (E1, FXO, IP).<br />
<br />
<span style="color:red;">ВНИМАНИЕ! При переключении на SIP-каналы фактическая коммутация возможна только после получения SDP от удаленной стороны, поэтому фактическая коммутация и выход из компонента производятся отложенно (ответы 183 и 200). А в случае получения ответов серии 4xx коммутация не производится.<br />
<br />
* Нет, воспроизводить мелодию. <br />
Компонент осуществляет коммутацию только после ответа абонента. Компонент работает с ожиданием ответа абонента. Все время ожидания ответа (в рамках установленного максимального времени ожидания) в канал воспроизводится указанная мелодия ожидания. Возможны возвраты управления по веткам «Занято» и «Не отвечает». Если ранее в сценарии стартовало фоновое воспроизведения, то фон не прерывается.<br />
Если в компоненте не указан номер, то осуществляется [[Параметры АТС|резервирование внешней линии]] согласно общим принципам работы сервера АТС с возвратом управления сразу же по ветке «Переход».<br />
* Нет, прослушивать медиа-поток. <br />
Поведение аналогичное пункту «воспроизводить мелодию», однако вместо мелодии в канал воспроизводится сигнал, поступаемый с внешней линии, осуществляющей набор. Фактическая коммутация с размещением в статистике и записью разговора начинается только после ответа абонента. Фоновое воспроизведение прерывается. <br />
|-<br />
|Мелодия ожидания<br />
|Окно выбора мелодии ожидания, аналогичное выбору файла компонента [[#Воспроизведение звукового файла|Воспроизведение]]. Мелодия будет воспроизводиться вплоть до окончания работы компонента. Может быть выбрана непосредственно и прикреплена к сценарию, а также быть взята по сформированному пути на сервере.<br />
|-<br />
|Параметр команды<br />
|Свойство для служебных сценариев. Не используется в обычном режиме. Служит для передачи пароля пользователя и автоматической подстановки его в статистику в качестве инициатора звонка.<br />
|-<br />
|Символы прерывания<br />
|Символы прерывания или их последовательности, разделенные запятыми или пробелами. При вводе с клавиатуры абонента указанной последовательности ожидание переключения прекращается, и управление переходит к следующему компоненту, определенному веткой «Переход, прервано».<br />
|-<br />
|Запись разговора<br />
|Параметр, определяющий необходимость записи. По умолчанию выбран вариант «Согласно настройкам», при котором используется стандартная процедура поиска правил записи для звонка. Также доступны варианты «Записывать» и «Не записывать», производящие соответствующие безусловные действия.<br />
|-<br />
|Код отказа SIP в переменную<br />
|Переменная, куда сохраняется код отказа при переходе по ветке «Занято». Имеет смысл при осуществлении звонков через внешнии SIP-транки. Например «480 Temporarily not available, sip:12@192.168.0.1» или «486 Busy Here, sip:12@192.168.0.1». Полный список вариантов ответов доступен в документации по протоколу SIP (<nowiki>RFC 3261</nowiki>, http://www.ietf.org/rfc/rfc3261).<br />
Если переменная числовая, то в нее сохраняется только код ответа.<br />
|- <br />
|Переход<br />
|Компонент, на который передается управление в случае успешной коммутации. <br />
В случае, если установлен режим коммутирования сразу, успешной коммутацией считается момент соединения двух каналов (от абонента на внешней линии не получено никаких сигналов, в дальнейшем возможно получение КПВ, отбоя или ответа абонента).<br />
|- <br />
|Переход, занято<br />
|Компонент, на который передается управление, если номер занят (для внутренних, если очередь ожидания не активирована).<br />
Свойство доступно только если не установлен режим коммутирования сразу.<br />
|- <br />
|Переход, не отвечает<br />
|Компонент, на который передается управление, если время ожидания истекло.<br />
Свойство доступно только если не установлен режим коммутирования сразу.<br />
|- <br />
|Переход, линия не найдена<br />
|Компонент, на который передается управление, если не обнаружена доступная для совершения вызова внешняя линия из списка.<br />
|-<br />
|Переход, прервано<br />
|Компонент, на который передается управление, если абонентом было прервано ожидание нажатием последовательности символов прерывания.<br />
|-<br />
|Переход, ошибка<br />
|Компонент, на который передается управление, если в ходе проверки пароля, набора номера, ожидания событий или коммутации двух каналов возникла какая-либо ошибка.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="SwitchTask"></div><br />
[[Файл:cl_cc_scr_i40.png|left]]<br />
===Вход в задачу===<br />
<br />
<br />
Вход в задачу инициирует существующую в системе и указанную в сценарии задачу и осуществляет переключение на оператора . Оператор выбирается менеджером задач из списка свободных и назначенных на задачу операторов по заложенному в нее алгоритму. В случае если операторы все заняты, может быть задействована очередь ожидания, для этого установите свойство компонента «Очередь». В зависимости от текущего состояния задачи выход производится по одному из свойств перехода. Переключение также может осуществляться на входящую задачу автоматической обработки звонка. В этом случае производится переключение сценария с формированием записи в статистической БД. Вход в задачу может быть осуществлен как из основного сценария IVR, так и из принадлежащего проекту. В последнем случае в списке доступных задач отображаются только задачи текущего проекта.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Режим выбора задачи<br />
|Вариант указания задачи:<br />
* Из списка <br />
* По ключу (идентификатор, код, название)<br />
|- <br />
|Задача<br />
|Доступно только в случае режима «Из списка».<br />
Одна из списка входящих [[Голосовые задачи|голосовых задач]] системы Oktell или текущего проекта. Привязка осуществляется в момент создания сценария.<br />
|-<br />
|Ключ задачи<br />
|Доступно только в случае режима «По ключу».<br />
Аргумент, уникально определяющий задачу (идентификатор, код или название). Привязка осуществляется каждый раз в момент выполнения сценария. В случае, если зарегистрировано несколько задач с указанным ключом, будет взята произвольная из них.<br />
|- <br />
|Тип идентификации<br />
|Идентификацией является определение строки в [[Таблицы абонентов|таблице абонентов]],прикрепленной к запускаемой [[Голосовые задачи|задаче]]. Режим идентификации задействуется только если в запускаемой входящей голосовой задаче установлено свойство «Модифицировать записи». Противоположным режимом является создание новых записей при каждом звонке вне зависимости от того, найден или не найден абонент в таблице. Также возможно, совместно установив свойства «Модифицировать записи» в задаче и «Возврат, если абонент не найден» в текущем компоненте, задействовать режим входа в задачу только при успешном обнаружении абонента в таблице.<br />
<br />
<br />
Среди способов идентификации выделяются два: <br />
* По АОН среди полей таблицы, обозначенных типом «Телефон»; <br />
* По значению в указанном поле таблице (используются свойства «Идентификатор абонента» и «Поле идентификации» текущего компонента. <br />
<br />
В некоторых случаях, когда одного поля недостаточно, и нужна более серьезная проверка условий идентификации, можно использовать [[Общие компоненты сценариев#Запрос SQL в БД|Запрос в БД]] с произвольной проверкой условий и возвратом уникального значения строки в таблице с последующим входом в задачу и идентификацией по основному полю «Id», обозначенного в таблице абонентов как «Идентификатор».<br />
|-<br />
|Идентификатор абонента<br />
|Аргумент, значение которого берется для идентификации абонента. Ожидается, что значение уникально определяет абонента. Используется совместно со свойством «Поле идентификации».<br />
Поле доступно только при выборе значения «По столбцу» в свойстве «Тип идентификации».<br />
|-<br />
|Поле идентификации<br />
|Строковый аргумент, содержащий название столбца (поля) в прикрепленной [[Таблицы абонентов|таблице абонентов]], по которому будет осуществлен поиск на совпадение значений таблицы и передаваемого идентификатора абонента. В качестве поля для идентификации может быть взят любой существующий столбец в таблице абонентов.<br />
Поле доступно только при выборе значения «По столбцу» в свойстве «Тип идентификации».<br />
|- <br />
|Возврат, если абонент не найден<br />
|Да/Нет. Определяет способ запуска задачи с идентификацией абонентов. Имеет смысл только при входе в задачу с установленным свойством «Модифицировать записи прикрепленной таблицы». <br />
При установке значения «Да» в случае неудачного поиска абонента в таблице осуществляет возврат по ветке «Переход, абонент не найден». <br />
При установке значения «Нет» осуществляется стандартная процедура добавления новой записи в таблицу с установкой поля идентификаторов, по которому осуществлялся поиск.<br />
|-<br />
|Очередь ожидания<br />
|Активировать ли очередь ожидания в случае, если номер занят.<br />
|-<br />
|Идентификатор оператора в переменную<br />
|Строковая переменная, в которую сохраняется GUID-идентификатор оператора, получившего вызов на обслуживание.<br />
|-<br />
|Расширенная настройка<br />
|Да/нет. Открывает доступ к редактированию некоторых свойств задачи только для текущего звонка. Их изменение в рамках компонента приводит к обработке этого звонка в задаче согласно вновь выбранным значениям.<br />
|-<br />
|Запись<br />
|Доступно только при расширенной настройке компонента. Позволяет установить индивидуальные параметры записи коммутаций для текущего звонка в задаче (текущей сессии - цепочки коммутаций).<br />
* Согласно настройкам задачи <br />
* Записывать <br />
* Не записывать<br />
|- <br />
|Режим обхода операторов<br />
|Доступно только при расширенной настройке компонента. Позволяет установить индивидуальный режим выбора оператора для текущего звонка, вне зависимости от того, какой вариант обхода выбран в самой задаче. Список возможных вариантов можно посмотреть в [[Голосовые задачи#Ресурсы|соответствующем свойстве]] голосовой задачи на вкладке «Ресурсы».<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление в случае успешной коммутации с оператором. В случае успешного запуска сценария задачи автоматической обработки выполнение текущего сценария прекращается на этом компоненте.<br />
|-<br />
|Переход, превышено число подключений<br />
|Компонент, на который передается управление, если данным звонком превышено установленное в задаче максимальное число подключений (одновременных звонков во входящей задаче). Максимальное число задается в свойствах голосовой задачи на вкладке [[Голосовые задачи#Ресурсы|Ресурсы]].<br />
|-<br />
|Переход, задача не найдена<br />
|Компонент, на который передается управление, если задача не задана или указанная не найдена среди существующих в системе.<br />
|-<br />
|Переход, абонент не найден<br />
|Компонент, на который передается управление, если абонент не идентифицирован в прикрепленной таблице. Это может произойти в случае, если установлено свойство «Возврат, если абонент не найден» текущего компонента, а также в запускаемой задаче установлено свойство «Модифицировать записи прикрепленной таблицы».<br />
Поле доступно только при выборе значения «Да» в свойстве «Возврат, если абонент не найден».<br />
|- <br />
|Переход, вне расписания<br />
|Компонент, на который передается управление, если вход осуществляется во время, не установленное недельным графиком активности задачи.<br />
|-<br />
|Переход, вне периода активности<br />
|Компонент, на который передается управление, если вход осуществляется во время, находящееся за границами активации или деактивации задачи.<br />
|-<br />
|Переход, параметры не подходят<br />
|Компонент, на который передается управление, если задача неактивна, задача не является входящей или звонок осуществляется с линии, не поддерживающей обработку в задаче (внутренние линии или линии, подключенные к АТС).<br />
|-<br />
|Переход, превышено время в очереди<br />
|Компонент, на который передается управление, если абонент попал в очередь задачи и находился в ожидании более установленного времени (свойства задачи на вкладке [[Голосовые задачи#Дополнительно|Дополнительно]]).<br />
|-<br />
|Переход, занято<br />
|Компонент, на который передается управление, если все операторы заняты, и не включена очередь ожидания.<br />
|- <br />
|Переход, не отвечает<br />
|Компонент, на который передается управление, если не найдено ни одного оператора, либо время ожидания ответа последнего оператора истекло.<br />
|- <br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="SwitchProject"></div><br />
[[Файл:cl_cc_scr_i41.png|left]]<br />
<br />
===Вход в проект===<br />
<br />
<br />
Администратор комплекса, не владея информацией о задачах, может настроить переадресацию потока звонков на проект. Компонентом «Вход в проект» производится поиск и запуск главного сценария IVR указанного в свойстве проекта. Тот в свою очередь может иметь любую структуру: запускать задачи, ветвиться, запускать вложенные сценарии и пр. <br />
<br />
Непосредственно перед запуском осуществляется упаковка текущего сценария в стэк. Таким образом, обработка звонка продолжится по общему принципу, заложенному администратором, если главный сценарий проекта вернет управление (с помощью компонента [[Общие компоненты сценариев#Стоп|Стоп]] с установленным свойством «Возврат управления»). В случае успеха, или отсутствия необходимости возврата управления в основной сценарий, в сценарии проекта должен присутствовать компонент [[Общие компоненты сценариев#Стоп|Стоп]] с неустановленным свойством «Возврат управления» (в случае успешного переключения) или [[#Положить трубку|Положить трубку]].<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Режим выбора проекта<br />
|Вариант указания проекта:<br />
* Из списка <br />
* По ключу (идентификатор, название)<br />
|- <br />
|Проект<br />
|Доступно только в случае режима «Из списка».<br />
Один из списка существующих [[Проекты|проектов]] системы Oktell.<br />
|-<br />
|Ключ проекта<br />
|Доступно только в случае режима «По ключу».<br />
Аргумент, уникально определяющий проект (идентификатор или название). Привязка осуществляется каждый раз в момент выполнения сценария.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление в случае возврата управления из главного сценария запускаемого проекта (с помощью компонента [[Общие компоненты сценариев#Стоп|Стоп]] с установленным свойством «Возврат управления»).<br />
|-<br />
|Переход, проект не найдена<br />
|Компонент, на который передается управление, если проект не указан или не найден среди существующих в системе.<br />
|-<br />
|Переход, параметры не подходят<br />
|Компонент, на который передается управление, если в проекте не задан главный сценарий или не найден файл главного сценария.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|} <br />
<br />
<br />
<br />
<br />
<div id="Content"></div><br />
[[Файл:cl_cc_scr_i44.png|left]]<br />
===Управление контентом===<br />
<br />
<br />
Осуществляет чтение или изменение пользовательского поля выбранного контента. В ходе работы с каналом системой производится сбор и формирование контента. Это XML документ, который существует в памяти сервера и постоянно пополняется происходящими действиями в ходе обработки вызова. Контент линии существует только у внешних линий, формируется при поступлении или совершении звонка по каналу, и сбрасывается при завершении этого звонка. Может быть передан в служебный сценарий, запускаемый по окончании обработки вызова по внешнему каналу. Также существует контент цепочки коммутаций, который формируется пока существует обозначенная цепочка. При присоединении или отбое каналов из цепочки ее контент существует, наполняется и может быть обработан внешним образом.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Объект<br />
|Линия (канал) / цепочка коммутаций. <br />
Источник обрабатываемого контента (контент в системе двух видов - для канала и для цепочки коммутаций)<br />
|- <br />
|Элемент<br />
|Заголовок/коммутация.<br />
Пользовательское поле может быть взято в заголовке всего контента или в поле конкретной коммутации.<br />
|- <br />
|Действие<br />
|Получить/установить.<br />
Определяет действие, которое производится с пользовательским полем<br />
|- <br />
|Переменная/Аргумент<br />
|В зависимости от действия назначается либо аргумент (значение которого будет установлено в определенное пользовательское поле контента) или переменная, в которую будет размещено значение определенного пользовательского поля контента.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление после завершения работы.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="Conference"></div><br />
[[Файл:cl_cc_scr_i46.png|left]]<br />
===Вход в конференцию===<br />
<br />
<br />
Производит подключение канала к конференции. Подробно о конференц-связи и управлении в разделе [[Конференц-связь|Клиентское приложение. Телефон. Конференц-связь]]. <br />
<br />
Компонент предоставляет возможность доступа к конференциям для активных каналов, для реализации автоматического сбора конференций, а также для подключения к конференции при отсутствии клиентского интерфейса по инициативе пользователя системы.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Ключ конференции<br />
|Числовой или строковый аргумент, определяющий номер виртуальной комнаты, в которой проходит конференция, идентификатор конференции или числовой код идентификатора конференции. <br />
В каждый момент времени уникальным образом идентифицирует активную конференцию. Номера комнат могут повторяться в истории, однако в каждый момент времени не существует двух активных конференций с одним номером. Идентификаторы же конференций повторяться не должны.<br />
В случае обнаружения активной конференции с указанным номером производится подключение к ней (с проверкой прав). В противном случае в зависимости от установленных свойств производится ее создание, либо выход из компонента.<br />
|- <br />
|Определять участника<br />
|Да/нет. Активирует/деактивирует режим проверки уникальности и привязки к существующим участникам.<br />
|-<br />
|Ключ участника<br />
|Доступен только при активации режима определения участника.<br />
Числовой или строковый аргумент, идентифицирующий вновь подключаемого участника конференции. В случае, если в указанной конференции не существует участника с таким ключом (идентификатором или кодом идентификатора), происходит вход в конференцию, при этом указанный ключ регистрируется в качестве идентификатора. Если же существует активный участник с таким идентификатором, то вход блокируется во избежание дублирования. Исключением является участник конференции, находящийся в состоянии ожидания ответа - в этом случае происходит привязка вновь подключаемой линии к этому участнику без проверки на уровень доступа к конференции.<br />
Используется при организации внешних очередей, когда необходимо пригласить одного из нескольких абонентов. В этом случае используется сценарий набора внутреннего номера в конференции, в котором необходимо сохранить коды конференции и приглашаемого участника, а затем использовать их на входе. Проверка на уникальность является тем транзакционным механизмом, который предотвратит появление в конференции сразу нескольких абонентов.<br />
Если ключ не указан, для участника генерится новый уникальный и происходит стандартная процедура входа в конференцию.<br />
|- <br />
|Создать, если отсутствует<br />
|Да/нет. Определяет поведение компонента в случае, если конференции с указанным номером комнаты не существует на текущий момент. «Да» - производит создание конференции и подключается к ней, «Нет» - отклоняет вход и производит выход по ветке «Отсутствует».<br />
|-<br />
|Разрешать вход в закрытую<br />
|Да/нет. В случае «Да» вход будет разрешен и пройдет без запроса к управляющему при любой настройке типа доступа.<br />
|- <br />
|Таймаут ожидания разрешения, с<br />
|Время в секундах, в течение которого компонент будет ожидать ответа управляющего в случае, если конференция имеет режим входа с подтверждением.<br />
|-<br />
|Расширенная настройка<br />
|Доступно только если активирован режим создания в случае отсутствия конференции.<br />
Да/нет. Открывает для настройки ряд свойств создаваемой конференции.<br />
|- <br />
|Название конференции<br />
|Доступно при расширенной настройке и применяется, если конференция не существует, и компонентом производится ее создание. По умолчанию «Автоконференция номер дата/время».<br />
Название конференции для отображения в клиентском интерфейсе и в статистических модулях. <br />
|- <br />
|Описание конференции<br />
|Доступно при расширенной настройке и применяется, если конференция не существует, и компонентом производится ее создание. По умолчанию пустая строка.<br />
Строковая идентификация или описание конференции. Передается в клиентские модули и в сценарий обработки завершения конференции. <br />
|- <br />
|Запись<br />
|Доступно при расширенной настройке и применяется, если конференция не существует, и компонентом производится ее создание. По умолчанию запись активирована.<br />
Определяет будет ли производиться запись конференции. Применяется, если конференция не существует и компонентом производится ее создание. В случае наличия такой записи доступ к ее прослушиванию будет открыт для всех участников конференции, если иного не будет установлено создателем через клиентский интерфейс, пока конференция активна.<br />
|- <br />
|Вид<br />
|Доступно при расширенной настройке и применяется, если конференция не существует, и компонентом производится ее создание. По умолчанию создается неуправляемая конференция.<br />
* Неуправляемая конференция. <br />
* Селекторное совещание.<br />
|- <br />
|Тип доступа<br />
|Доступно при расширенной настройке и применяется, если конференция не существует, и компонентом производится ее создание. По умолчанию создается открытая конференция.<br />
* Открытое совещание. <br />
* Закрытое, с возможностью подать заявку на вход. <br />
* Закрытое, вход только по приглашениям.<br />
|- <br />
|Ключ управляющего<br />
|Доступно при расширенной настройке и применяется, если конференция не существует, и компонентом производится ее создание. По умолчанию управляющим назначается пользователь на обслуживаемой текущим сценарием линии.<br />
<br />
Аргумент, определяющий управляющего участника конференции.<br />
|- <br />
|Модель поведения<br />
|Доступно при расширенной настройке и применяется, если конференция не существует, и компонентом производится ее создание. По умолчанию устанавливается обычный режим.<br />
* Обычный режим. <br />
* Преобразовать в коммутацию. <br />
<br />
Режим преобразования в коммутацию ожидает появления второго участника конференции и сразу после его присоединения инициирует преобразование. Совместно с активацией воспроизведения первому участнику режим может использоваться для организации парковочных секций.<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Следует помнить, что в конференции у каждого участника своя уникальная сессия (идентификатор цепочки коммутаций), после преобразования в коммутацию сессия одного из участников наследуется другим.<br />
|- <br />
|Воспроизведение первому участнику<br />
|Доступно при расширенной настройке и применяется, если конференция не существует, и компонентом производится ее создание. Позволяет активировать воспроизведение установленного в общих настройках музыкального файла первому подключившемуся к конференции участнику.<br />
* Согласно общим настройкам. <br />
* Да. <br />
* Нет.<br />
|- <br />
|Сохранить идентификаторы<br />
|Да/нет. Осуществляет сохранение параметров обнаруженной/созданной конференции в указанных переменных.<br />
|- <br />
|Идентификатор в переменную<br />
|Доступно в режиме сохранения идентификаторов. Строковая переменная, в которую сохранится GUID-идентификатор обнаруженной/созданной конференции.<br />
|- <br />
|Код идентификатора в переменную<br />
|Доступно в режиме сохранения идентификаторов. Числовая/строковая переменная, в которую сохранится код GUID-идентификатора обнаруженной/созданной конференции. <br />
Код идентификатора - это функция от Guid-идентификатора, возвращающая довольно уникальное целое число.<br />
|- <br />
|Номер комнаты в переменную<br />
|Доступно в режиме сохранения идентификаторов. Числовая/строковая переменная, в которую сохранится номер комнаты обнаруженной/созданной конференции.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление после успешного входа в конференцию.<br />
|-<br />
|Переход, отсутствует<br />
|Компонент, на который передается управление в случае, если конференция не существует и заблокирован режим создания (свойством «Создать, если отсутствует» или не установленной привилегией пользователя на создание).<br />
|-<br />
|Переход, нет доступа<br />
|Компонент, на который передается управление в случае, если конференция существует, и доступ к конференции заблокирован (закрытая конференция или управляющий отклонил запрос на вход).<br />
|-<br />
|Переход, таймаут ожидания разрешения<br />
|Компонент, на который передается управление в случае, если при входе в конференцию требуется разрешение управляющего, реакции которого не последовало в течение установленного свойством «Таймаут» времени.<br />
|-<br />
|Переход, участник уже существует<br />
|Компонент, на который передается управление в случае, если установлен режим определения участника, указан ключ участника, и этот ключ обнаружен среди активных участников указанной конференции.<br />
|-<br />
|Переход, неудача<br />
|Компонент, на который передается управление после завершения работы в случае, если произошло исключение, сбой или любой другой непредвиденный результат, приведший к отклонению входа.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="FaxSend"></div><br />
[[Файл:cl_cc_scr_i42.png|left]]<br />
===Отправка факсимильного сообщения===<br />
<br />
<br />
Компонент открывает факс сеанс на линии и в случае успеха отправляет документы, определенные в параметрах. Для корректной работы необходимо наличие в текущей плате возможности работы с факсимильными сообщениями, наличие свободных портов для факс-сеансов. <br />
Для плат семейства Ольха-9 необходим ключ, лицензирующий работу с факсами.<br />
Для плат Synway необходимо наличие мезонина для работы с факсами.<br />
Каждое из семейств плат требует свои уникальные параметры для работы: ширина страницы в пикселях, режим многостраничности, высота страницы, способ формирования имен. Настройку компонента рекомендуется производить под конкретную плату.<br />
<br />
Компонент отправки предоставляет возможность автоматического преобразования изображения в необходимый формат. Однако в зависимости от используемых параметров (тип преобразования, размер исходного документа и т.д.) это может занять некоторое время. Поэтому настоятельно рекомендуется во избежание пауз готовить файлы в нужном формате.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Документ 1<br />
|Файл изображения для отправки. Окно выбора изображения. Допускаются статические файлы, хранящиеся вместе со сценариями, а также динамически прикрепляемые файлы, имя которых формируется в компоненте на этапе исполнения.<br />
|-<br />
|Документ 2<br />
|Аналогично свойству Документ 1.<br />
|-<br />
|Документ 3<br />
|Аналогично свойству Документ 1.<br />
|-<br />
|Тип преобразования к битовому изображению<br />
|Один из вариантов преобразования отправляемых изображений к битовому, поддерживаемому формату факсимильной передачи. <br />
<br />
Среди способов преобразования допускаются:<br />
* Без изменений. Файл будет передан в исходном виде. В случае если он не подходит, будет возвращена ошибка; <br />
* По фиксированной границе яркости. В соответствии с коэффициентом; <br />
* По границе яркости от крайних точек; <br />
* По проценту заполнения листа; <br />
* Случайный офсет.<br />
|- <br />
|Коэффициент границы контрастности<br />
|Аргумент, представляющий собой действительное число от 0 до 1, являющееся параметром для функции преобразования к битовому изображению. Например при выборе пункта "По фиксированной границе яркости" определяет уровень яркости, ниже которого производится преобразование к черному цвету, остальные к белому.<br />
|-<br />
|Приведение ширины<br />
|Для отправки факса в битовом изображении требуется строго фиксированная ширина. <br />
<br />
Среди способов преобразования допускаются:<br />
* Без изменений. Файл будет передан в исходном виде с исходной шириной. В случае, если он не подходит, будет возвращена ошибка. <br />
* Достраивать без изменения размера. Если изображение меньше требуемой ширины, его ширина будет увеличена за счет белых полос по краям. <br />
* Приводить по X. Ширина будет изменена до требуемой, высота останется без изменений. <br />
* Приводить по XY пропорционально. Ширина будет изменена до требуемой, высота будет изменена аналогично изменению ширины для сохранения пропорций. <br />
* Растягивать по X. Если изображение меньше требуемой ширины, ширина будет увеличена до необходимой, высота останется без изменений. <br />
* Растягивать по XY пропорционально. Если изображение меньше требуемой ширины, ширина будет увеличена до необходимой, высота будет изменена аналогично для сохранения пропорций. <br />
* Сужать по X. Если изображение больше требуемой ширины, ширина будет уменьшена до необходимой, высота останется без изменений. <br />
* Сужать по XY пропорционально. Если изображение больше требуемой ширины, ширина будет уменьшена до необходимой, высота будет уменьшена аналогично для сохранения пропорций.<br />
|- <br />
|Таймаут, с<br />
|Числовой аргумент, определяющий время в секундах до принудительного разрыва сеанса. Если не задан или равен нулю, ограничение снимается.<br />
|-<br />
|Код ошибки в переменную<br />
|Переменная, в которую будет записан числовой код ошибки.<br />
<br />
Коды возвращаемых ошибок:<br />
* 0 - Ошибок нет.<br />
* 1 - Канал не поддерживает факс сеанс.<br />
* 3 - Таймаут.<br />
* 4 - Исключение при вызове аппаратной функции.<br />
* 5 - Неверные параметры.<br />
* 65281 - Системная ошибка.<br />
* 65282 - Ошибка драйвера.<br />
* 65283 - Ошибка ввода-вывода устройства.<br />
* 65284 - Ошибка памяти.<br />
* 65285 - Факс сессия уже открыта.<br />
* 65288 - Ошибка файла.<br />
* 65289 - Страницы не обнаружены.<br />
* 65290 - Превышение количества строк.<br />
* 65292 - Несоответствие версии драйвера.<br />
* 65295 - Некорректная версия.<br />
|- <br />
|Переход, успех<br />
|Компонент, на который передается управление после успешно проведенной операции.<br />
|-<br />
|Переход, неудача<br />
|Компонент, на который передается управление, если отправка завершилась неудачей.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="FaxReceive"></div><br />
[[Файл:cl_cc_scr_i43.png|left]]<br />
===Прием факсимильного сообщения===<br />
<br />
<br />
Компонент открывает факс сеанс на линии и в случае успеха принимает факсимильные сообщения и сохраняет в определенное в параметрах место. Для корректной работы необходимо наличие в текущей плате возможности работы с факсимильными сообщениями, наличие свободных портов для факс-сеансов. <br />
Для плат семейства Ольха-9 необходим ключ, лицензирующий работу с факсами.<br />
Для плат Synway необходимо наличие мезонина для работы с факсами.<br />
Каждое из семейств плат требует свои уникальные параметры для работы: ширина страницы в пикселях, режим многостраничности, высота страницы, способ формирования имен. Настройку компонента рекомендуется производить под конкретную плату.<br />
<br />
<br />
В случае если принимается более одного документа, производится формирование нескольких файлов, с добавлением к имени исходного определенного в параметрах файла расширениях, например «_pageN».<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Файл<br />
|Файл изображения для отправки. Окно выбора изображения. Допускаются статические файлы, хранящиеся вместе со сценариями, а также динамически прикрепляемые файлы, имя которых формируется в компоненте на этапе исполнения.<br />
|-<br />
|Имя файла в переменную<br />
|Аналогично свойству Документ 1.<br />
|-<br />
|Возвращать полный путь<br />
|Аналогично свойству Документ 1.<br />
|-<br />
|Таймаут, с<br />
|Числовой аргумент, определяющий время в секундах до принудительного разрыва сеанса. Если не задан или равен нулю, ограничение снимается.<br />
|-<br />
|Код ошибки в переменную<br />
|Переменная, в которую будет записан числовой код ошибки.<br />
Перечень в\озможных ошибок см. в описании аналогичного свойства компонента [[#Отправка факсимильного сообщения|Отправка факсимильного сообщения]].<br />
|-<br />
|Переход, успех<br />
|Компонент, на который передается управление после успешно проведенной операции.<br />
|-<br />
|Переход, неудача<br />
|Компонент, на который передается управление, если прием завершился неудачей.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}</div>Peter%D0%A0%D0%B0%D1%81%D0%BF%D0%BE%D0%B7%D0%BD%D0%B0%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D1%87%D0%B8_Yandex_SpeechKit_CloudРаспознавание речи Yandex SpeechKit Cloud2014-06-30T08:31:54Z<p>Peter: </p>
<hr />
<div>[[Системные настройки|Наверх]]<br />
<br />
<br />
Компонент служебных и IVR сценариев [[Компоненты сценариев IVR#Recognition|Распознавание речи]] использует для работы сервис Яндекс.SpeechKit. Здесь происходит настройка доступа к сервису. Условия использования можно узнать [http://yandexspeechkit.oktell.ru здесь].<br />
<br />
<br />
'''Код клиента (uuid)'''<br />
<br />
Отладочный идентификатор, используемый для взаимодействия со службой поддержки Яндекс по выяснению результатов конкретных проведенных тестов.<br />
<br />
<br />
'''Ключ доступа (key)'''<br />
<br />
Ключ, используемый в запросах к сервису Яндекс.SpeechKit. Выдается клиентской службой Яндекс. [http://yandexspeechkit.oktell.ru Подробнее...]</div>Peter%D0%A0%D0%B0%D1%81%D0%BF%D0%BE%D0%B7%D0%BD%D0%B0%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D1%87%D0%B8_Yandex_SpeechKit_CloudРаспознавание речи Yandex SpeechKit Cloud2014-06-30T08:29:41Z<p>Peter: Новая страница: «Наверх Компонент служебных и IVR сценариев [[Компоненты сценариев IV...»</p>
<hr />
<div>[[Системные настройки|Наверх]]<br />
<br />
<br />
Компонент служебных и IVR сценариев [[Компоненты сценариев IVR#Recognition|Распознавание речи]] использует для работы сервис Яндекс.SpeechKit. Здесь происходит настройка доступа к сервису. Условия использования можно узнать [http://yandexspeechkit.oktell.ru|здесь].<br />
<br />
<br />
'''Код клиента (uuid)'''<br />
<br />
Отладочный идентификатор, используемый для взаимодействия со службой поддержки Яндекс по выяснению результатов конкретных проведенных тестов.<br />
<br />
<br />
'''Ключ доступа (key)'''<br />
<br />
Ключ, используемый в запросах к сервису Яндекс.SpeechKit. Выдается клиентской службой Яндекс. [http://yandexspeechkit.oktell.ru|Подробнее...]</div>Peter%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8Системные настройки2014-06-30T08:22:44Z<p>Peter: </p>
<hr />
<div>[[Общие_Настройки|Наверх]]<br />
<br />
<br />
Выберите из предложенного списка необходимый раздел и разверните его нажатием на треугольник после заголовка или двойным щелчком на заголовке. <br />
<br />
<br />
[[Файл:cl_ad_Set_2a.png|center|800px]] <br />
<br />
<br />
Установите необходимые значения и нажмите сохранить для мгновенного применения их на сервере. При нажатии кнопки «По умолчанию» будут загружены все настройки на момент установки системы, но не сохранятся на сервер до нажатия кнопки «Сохранить», давая таким образом подсматривать начальные настройки и возвращаться в режим редактирования собственных настроек без потери данных. <br />
<br />
<br />
<br />
В этом разделе:<br />
<br />
:*[[Параметры АТС]]<br />
:*[[Сценарии АТС]]<br />
:*[[Временные параметры АТС]]<br />
:*[[Музыкальное сопровождение]]<br />
:*[[Автодозвон]]<br />
:*[[Настройка менеджера очередей|Менеджер очередей]]<br />
:*[[Менеджер задач]]<br />
:*[[Настройки Call-центра|Call-центр]]<br />
:*[[Экстренные номера]]<br />
:*[[Мобильная статистика]]<br />
:*[[Настройки подключения к интернет]]<br />
:*[[Настройки веб-сервера|Web-сервер Oktell]]<br />
:*[[Интеграция с Web-Socket CRM|Web-интеграция с CRM]]<br />
:*[[Сертификат X.509]]<br />
:*[[Настройки E-mail]]<br />
:*[[SMS-сервис]]<br />
:*[[ICQ-сервис]]<br />
:*[[Jabber-сервис]]<br />
:*[[Настройки распознавания|Распознавание речи Яндекс]]<br />
:*[[Настройка клиентского приложения|Клиентское приложение]]<br />
:*[[График работы офиса]]<br />
:*[[Управление записями разговоров]]<br />
:*[[Сборка лог-журналов]]<br />
:*[[Управление сервером]]<br />
:*[[Управление базами данных]] <br />
:*[[Информация о лицензиях]]</div>Peter%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8Системные настройки2014-06-30T08:22:24Z<p>Peter: </p>
<hr />
<div>[[Общие_Настройки|Наверх]]<br />
<br />
<br />
Выберите из предложенного списка необходимый раздел и разверните его нажатием на треугольник после заголовка или двойным щелчком на заголовке. <br />
<br />
<br />
[[Файл:cl_ad_Set_2a.png|center|800px]] <br />
<br />
<br />
Установите необходимые значения и нажмите сохранить для мгновенного применения их на сервере. При нажатии кнопки «По умолчанию» будут загружены все настройки на момент установки системы, но не сохранятся на сервер до нажатия кнопки «Сохранить», давая таким образом подсматривать начальные настройки и возвращаться в режим редактирования собственных настроек без потери данных. <br />
<br />
<br />
<br />
В этом разделе:<br />
<br />
:*[[Параметры АТС]]<br />
:*[[Сценарии АТС]]<br />
:*[[Временные параметры АТС]]<br />
:*[[Музыкальное сопровождение]]<br />
:*[[Автодозвон]]<br />
:*[[Настройка менеджера очередей|Менеджер очередей]]<br />
:*[[Менеджер задач]]<br />
:*[[Настройки Call-центра|Call-центр]]<br />
:*[[Экстренные номера]]<br />
:*[[Мобильная статистика]]<br />
:*[[Настройки подключения к интернет]]<br />
:*[[Настройки веб-сервера|Web-сервер Oktell]]<br />
:*[[Интеграция с Web-Socket CRM|Web-интеграция с CRM]]<br />
:*[[Сертификат X.509]]<br />
:*[[Настройки E-mail]]<br />
:*[[SMS-сервис]]<br />
:*[[ICQ-сервис]]<br />
:*[[Jabber-сервис]]<br />
:*[[Настройки распознавания]]<br />
:*[[Настройка клиентского приложения|Клиентское приложение]]<br />
:*[[График работы офиса]]<br />
:*[[Управление записями разговоров]]<br />
:*[[Сборка лог-журналов]]<br />
:*[[Управление сервером]]<br />
:*[[Управление базами данных]] <br />
:*[[Информация о лицензиях]]</div>Peter%D0%A1%D1%86%D0%B5%D0%BD%D0%B0%D1%80%D0%B8%D0%B8_%D0%90%D0%A2%D0%A1Сценарии АТС2014-06-30T08:15:15Z<p>Peter: </p>
<hr />
<div>[[Системные настройки|Наверх]]<br />
<br />
'''Сценарий IVR входящей маршрутизации (главный)'''<br />
<br />
Главным называется сценарий IVR, обрабатывающий все без исключения поступающие в АТС входящие вызовы. Как правило, сценарий осуществляет маршрутизацию и перевод звонка в другие вложенные сценарии или проекты call-центра. В списке общих сценариев АТС главный сценарий выделяется цветом. Он также может быть выбран непосредственно в контекстном меню списка сценариев или нажатием соответствующей кнопки.<br />
<br />
<br />
'''Сценарий IVR исходящей маршрутизации (сценарий входа в АТС)'''<br />
<br />
В некоторых случаях особенности инфраструктуры требуют организовывать маршрутизацию исходящих звонков особым образом. Параметр позволяет задействовать режим входа в АТС через сценарий. В этом случае любой вход в АТС, при котором в обычном режиме выдается тон АТС и ожидается ввод цифр для набора внутреннего номера, будет осуществлять запуск служебного IVR-сценария, указанного в текстовом поле текущего параметра. Ожидается, что сценарий организован таким образом, что оценивает набранный номер (функция CalledId), а также осуществляет ожидание ввода при необходимости. <br />
<br />
Необходимо иметь в виду, что разные режимы входа в сочетании с разными возможными типами устройств создают различные окружения перед запуском сценария. Например, снятая трубка на аналоговом или USB аппарате приведет к запуску сценария с пустым значением функции CalledId. В то же время дозвон с IP телефона в качестве функции CalledId будет возвращать всю последовательность цифр, набранную на аппарате до нажатия CALL. Перевод же звонка с помощью клиентского интерфейса будет запускать сценарий и в качестве CalledId выдавать номер, на который запрошен перевод (внешний или внутренний).<br />
<br />
По умолчанию использование такой схемы со сценарием входа отключено.<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Переключение работы в этот режим и обратно кардинально изменяет алгоритмы маршрутизации и требует тщательной проработки концепций и настройки всех соответствующих режимов. Также при включении режима необходимо помнить, что менеджер задач и автодозвон тоже скорее всего должны быть переведены на усложненный набор номеров через [[Компоненты служебных сценариев#Дозвон|служебный сценарий дозвона]].</span><br />
<br />
При активации режима следует иметь в виду, что ряд переключений (для которых не заданых отдельные сценарии обработки) осуществляются также через этот сценарий. В случае, если переключающий пользователь не дожидается соединения с абонентом, а кладет трубку во время обработки в сценарии, перевод абонента будет осуществлен на начало текущего активного сценария. Именно так происходит при переводе на активную очередь, а также при TRANSFER-переключении с IP телефона. Сценарий лучше организовать по вложенной схеме, где в основном сценарии входа происходит анализ и определение номера, а переключение происходит во вложенном сценарии, куда управление передается с параметром, содержащим номер. Переключающий пользователь разницы не ощущает, но если он кладет трубку в момент переключения, то абонент попадет в обработку уже в финальный вложенный сценарий переключения, в который передался итоговый номер, и на который необходимо переключение осуществить.<br />
<br />
При написании сценариев, в том числе вложенных, вставляйте в начало отладочные уведомления с отображением канала, значения функции callerid и входного параметра. Это поможет быстрее понять принцип переключений и достичь желаемого результата.<br />
Очевидно, чем больше используется различных устройств и возможных номеров и направлений переключения, тем масштабнее совокупность сценариев входа в АТС.<br />
<br />
<br />
<div id="ScrFlash"></div><br />
'''Сценарий IVR маршрутизации при переводе звонка (Flash)'''<br />
<br />
Аналогичен сценарию исходящей маршрутизации. Запускается вместо него в случае, когда во флеш-буфере находится абонент и потенциально готовится перевод звонка. В этом сценарии по умолчанию установлен режим подмены обслуживаемой линии при переключении на него (определяется служебной переменной [[Сценарии IVR#VarFlash|Режим FLASH]]). В случае неактивности применяется сценарий исходящей маршрутизации (если активирован) или общий режим работы. Подробнее о режиме перевода с подменой обслуживаемой линии [[Сценарии IVR#VarFlash|в описании служебной переменной «Режим FLASH»]].<br />
<br />
<br />
<div id="ScrExchange"></div><br />
'''Сценарий IVR маршрутизации межсерверных звонков'''<br />
<br />
Аналогичен сценарию входящей маршрутизации. Запускается вместо него в случае, когда звонок поступает по каналу межсерверного взаимодействия. В случае неактивности применяется главный сценарий входящей маршрутизации.<br />
<br />
<br />
'''Сценарий IVR sip-transfer-переключения'''<br />
<br />
IP-телефоны позволяют осуществлять переключение командой XFER (Transfer). На различных моделях телефонов комбинации могут отличаться. Однако в любом случае в момент подачи команды IP-телефон передает системе номер. В обычном режиме этот номер применяется линией переключаемого абонента для прямого набора в систему. Направление вызова (внешний или внутренний номер) определяется в этом случае системой на основании присутствия/отсутствия указанного номера во внутреннем номерном плане.<br />
<br />
Указанием сценария sip-transfer-переключения активируется режим набора номера через сценарий. Для обработки линии абонента запускается обработчик сценария, на вход которого (в переменную на старте) передается номер, полученный с IP-телефона.<br />
<br />
<br />
<div id="ScrInsteadBusy"></div><br />
'''Сценарий IVR вместо отбоя внешней линии'''<br />
<br />
Позволяет активировать режим соединения внешней линии с указанным IVR-сценарием вместо отбоя при разрыве связи по инициативе сервера. В момент, когда разрывается соединение по инициативе оператора или любого пользователя системы, стандартно внешняя линия получает отбой. При активации режима в этом случае внешняя линия будет переведена на указанный IVR-сценарий, где можно проанализировать глобальные переменные, задать вопрос анкеты о качестве связи или обслуживания, или даже переключить ее снова на любого абонента.<br />
<br />
<br />
'''Сценарий IVR запроса пароля'''<br />
<br />
При активации режима [[Мобильная статистика]] путем указания множества масок номеров, вызовы на которые необходимо фиксировать, контролировать и подсчитывать, система при наборе попадающего под установленный набор масок номера и невозможности определения инициатора звонка (пользователя) осуществляет запрос пароля и переадресацию посредством указанного сценария (по умолчанию «(Служебный) Запрос пароля»).<br />
<br />
<br />
<br />
---------------<br />
--------------<br />
<br />
<br />
<br />
<div id="SvcCallerIdModify"></div><br />
'''Служебный сценарий преобразования CallerId'''<br />
<br />
В некоторых случаях при организации системы на разных типах каналов для общей картины в статистике, а также для возможности осуществления обратных вызовов "одним щелчком мышью" может потребоваться приведение определившегося номера в соответствующий нормальный вид. Если при определении номеров с некоторых направлений номеру требуется преобразование, необходимо активировать параметр и выбрать соответствующий служебный сценарий преобразования. В этом сценарии в качестве неявных параметров в сценарий передаются: 1 - определившийся номер CallerId, 2 - набранный номер CalledId. Функция [[Функции|Номер линии]] возвращает соответствующий индекс канала. Результат выполнения необходимо сохранить в служебной переменной «[[Служебные сценарии|Возвращаемое значение 1]]». При необходимости подвергнуть корректировке также CalledId, его переопределенное значение необходимо сохранить в служебной переменной «Возвращаемое значение 2». Код инициатора запуска служебного сценария - 13.<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Сценарий должен быть максимально простым и быстрым, поскольку вызывается синхронно в обслуживающем потоке канала. Если в течение 2 секунд ответа получено не будет, то сценарий автоматически деактивируется и больше не будет применяться до пересохранения настроек.</span><br />
<br />
<br />
'''Служебный сценарий получения данных из справочника РосФирм'''<br />
<br />
Активирует применение справочника РОСФИРМ, содержащего 796 тысяч предприятий Российской Федерации, для всех поступающих звонков. Фактически это означает, что при входящем звонке Oktell получает из справочника информацию о названии компании, соответствующей определившемуся номеру телефона, и отображает её на экране монитора сотрудника при переводе звонка. <br />
<br />
<br />
<div id="SvcDialExt"></div> <br />
'''Служебный сценарий набора внешних/быстрых номеров'''<br />
<br />
Задействует режим набора внешних/быстрых номеров менеджером очередей через служебный сценарий. В обычном режиме набор осуществляется непосредственно в одну из внешних линий, доступных пользователю по правам. В условиях настройки сложных маршрутов может потребоваться разбор номера и, в зависимости от различных параметров, перенаправление и индивидуальное определение маршрута с указанием команды на набор. <br />
<br />
Запуск этого сценария происходит при наборе [[Внутренние номера#Быстрые номера|внутреннего быстрого номера]] (код инициатора 15), при наборе [[Внутренние номера#Стандартные номера|внутреннего стандартного номера]], содержащего одну или несколько записей о звонках на внешние номера - запуск осуществляется для каждого (код инициатора 24), а также при вызове внешнего номера [[Конференц-связь|из конференции]] (код инициатора 23).<br />
<br />
В качестве неявных параметров в служебный сценарий передаются: 1 - внешний номер, подлежащий набору, 2 - время ожидания ответа в секундах, которое было бы применено системой при работе без сценария, 3 - внутренний номер, посредством которого осуществляется вызов внешнего (внутренние быстрые, внутренние стандартные номера) или пустая строка в случае вызова напрямую (из конференции).<br />
<br />
См также [[Линии#Направления|Администрирование. Линии. Направления]], [[Компоненты служебных сценариев#Дозвон|Сценарии. Служебные. Компоненты. Дозвон]].<br />
<br />
<br />
<div id="SvcContent"></div><br />
'''Служебный сценарий обработки контента'''<br />
<br />
В ходе обработки внешнего звонка сервером производится сбор так называемого контента. Это идентификационная информация по линии, абоненту, времени, а также перечень всех коммутаций с указанием имени сценария, идентификатора и имени оператора, времени начала, времени конца, продолжительности и пр. После завершения звонка запускается указанный в этом поле служебный сценарий (если таковой найден) и в него на вход передается собранный контент в строковом виде. Дальнейшие действия производятся в служебном сценарии. Код инициатора запуска служебного сценария - 25.<br />
За подробным описанием обратитесь в раздел [[Служебные сценарии|Call-центр. Сценарии. Служебные сценарии]].<br />
<br />
<br />
<div id="SvcSendEmail"></div><br />
'''Служебный сценарий отправки электронной почты'''<br />
<br />
Сценарий применяется для отправки электронной почты на указанный адрес. Его запуск автоматически инициируется в клиентском приложении при соответствующем действии в модуле софт-телефона [[Передача_e-mail_и_SMS-сообщений|(здесь)]]. Код инициатора запуска служебного сценария - 30.<br />
<br />
В качестве неявных параметров в служебный сценарий передаются: 1 - адреса получателей (возможно несколько через запятую), 2 - тема сообщения, 3 - тело сообщения, 4 - путь к каталогу с файлами для вложения. Среди явных параметров - информация о пользователе-инициаторе запуска и его линии, а также идентификатор сессии/цепочки коммутаций.<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Рекомендуется разделить адреса и отправить письмо на каждый адрес отдельно, так как в случае единой отправки и ошибки в одном из адресов, письмо не будет отправлено никуда.<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Вложения, выбранные пользователем-инициатором, предварительно закачаны на сервер в указанный в параметре 4 каталог. От сценария требуется просмотр каталога, считывание имен всех файлов, и указание их в качестве вложений компонента [[Общие компоненты сценариев#EmailSend|Отправка Email]].<br />
<br />
<br />
<div id="SvcSendSms"></div><br />
'''Служебный сценарий отправки SMS-сообщения'''<br />
<br />
Сценарий применяется для отправки электронной почты на указанный адрес. Его запуск автоматически инициируется в клиентском приложении при соответствующем действии в модуле софт-телефона [[Передача_e-mail_и_SMS-сообщений|(здесь)]]. Код инициатора запуска служебного сценария - 29.<br />
<br />
В качестве неявных параметров в служебный сценарий передаются: 1 - номер получателя, 2 - текст сообщения. Среди явных параметров - информация о пользователе-инициаторе запуска и его линии, а также идентификатор сессии/цепочки коммутаций.<br />
<br />
<br />
'''Служебный сценарий набора внутренних номеров при приглашении в конференцию'''<br />
<br />
Задействует режим набора внутренних номеров через служебный сценарий. В обычном режиме набор осуществляется через встроенный менеджер очередей. При необходимости расширить географию внутренних абонентов может потребоваться разбор номера и, в зависимости от различных параметров, перенаправление как во внешнюю, так и во внутреннюю сеть. В этом случае в служебном сценарии необходимо использовать компонент [[Компоненты служебных сценариев#Дозвон|Дозвон]] с обслуживанием в [[Компоненты служебных сценариев#Дозвон|управляющем модуле с ожиданием в сценарии]]. <br />
<br />
Также этим путем может быть организована внешняя очередь, реализованная как некий сервис. В обычных условиях если сценарий так и не получил ответа и вернул управление безрезультатно, конференция отбивает участника, выставляя ему состояние «не ответил». Однако при установке значения «1» служебной переменной «Возвращаемое значение 1» и безрезультатном возврате управления из сценария конференция тем не менее оставляет участника в состоянии «Ожидание ответа». <br />
<br />
Сценарий на вход через стандартные функции служебных сценариев принимает идентификатор и код идентификатора конференции, номер комнаты, идентификатор и код идентификатора вызываемого участника (вызов которого в данном случае производится). В качестве неявного стартового параметра передается вызываемый номер. Код инициатора запуска служебного сценария - 17.<br />
<br />
На основе идентификационных параметров может быть произведен последующий вход в конференцию произвольного канала с привязкой именно к этому участнику (посредством IVR сценария и компонента [[Компоненты сценариев IVR#Вход в конференцию|Конференция]]). В качестве кода участника и кода конференции могут быть использованы как строковые представления идентификаторов, так и коды идентификаторов - довольно уникальные целые числа, являющиеся функциями от соответствующих guid-идентификаторов. См также [[Функции|Сценарии. Функции]].<br />
<br />
<br />
'''Служебный сценарий прерывания набора внутренних номеров в конференции'''<br />
<br />
При использовании сценария набора внутреннего номера при приглашении в конференцию (описание выше) возможно использование внешней очереди, реализованной как некий сервис. При этом, если в ходе ожидания ответа производится обрыв приглашения, во внешней очереди рискует остаться информация. Использование этого сценария - единственный вариант по зачистке. <br />
<br />
На вход через стандартные функции служебных сценариев принимает идентификатор и код идентификатора конференции, номер комнаты, идентификатор и код идентификатора вызываемого участника (вызов которого в данном случае прерывается). В качестве неявного стартового параметра передается вызываемый номер. Код инициатора запуска служебного сценария - 19.<br />
<br />
<br />
'''Служебный сценарий обработки завершения конференции'''<br />
<br />
Служебный сценарий, выполняемый сразу после завершения конференции. <br />
<br />
На вход через стандартные функции служебных сценариев принимает идентификатор, код идентификатора конференции, номер комнаты. В качестве неявных стартовых параметров передаются: 1 - путь к файлу с записью, 2 -название конференции, 3 - описание конференции. Код инициатора запуска служебного сценария - 20.<br />
<br />
В момент запуска сценария файл еще упаковывается и, в зависимости от продолжительности конференции, может иметь разный размер и соответственно время упаковки. Поэтому следует проверять наличие файла, а также выжидать некоторое время, прежде чем копировать или использовать любым другим образом файл записи.<br />
<br />
<br />
<div id="SvcUserChanged"></div><br />
'''Служебный сценарий уведомления об изменении учетной записи пользователя'''<br />
<br />
Служебный сценарий, выполняемый при изменении учетной записи пользователя в разделе [[Пользователи]].<br />
<br />
На вход через стандартные функции служебных сценариев принимает идентификатор администратора. В качестве неявных стартовых параметров передаются: 1 - идентификатор изменяемого пользователя, 2 - код операции (1-создание, 2-изменение, 3-удаление), 3 - логин, 4 - пароль (непустой только в случае создания или изменения, в ходе которого изменен в том числе пароль), 5 - имя. Код инициатора запуска служебного сценария - 33.<br />
<br />
<br />
<div id="SvcUserStateChanged"></div><br />
'''Служебный сценарий уведомления об изменении состояния пользователя'''<br />
<br />
Служебный сценарий, выполняемый при входе и выходе пользователя из системы.<br />
<br />
На вход через стандартные функции служебных сценариев принимает идентификатор пользователя. В качестве неявных стартовых параметров передаются: 1 - идентификатор пользователя, 2 -код операции (в настоящее время только 1-вход/выход из системы), 3 - вход (1) или выход (0). Код инициатора запуска служебного сценария - 34.<br />
<br />
<br />
<div id="SvcUserLogin"></div><br />
'''Служебный сценарий внешней авторизации пользователя'''<br />
<br />
Служебный сценарий, выполняемый при авторизации пользователя в систему.<br />
<br />
Введенные пользователем в окно авторизации значения логина и пароля передаются в служебный сценарий, который может произвести авторизацию во внешней системе (например через веб-запрос, или путем обращения к БД) и в случае удачи вернуть логин существующей учетной записи пользователя Oktell, под которой следует ввести авторизующегося пользователя в систему.<br />
<br />
На вход через стандартные функции служебных сценариев принимает идентификатор пользователя. В качестве неявных стартовых параметров передаются: 1 - введенный логин, 2 - введенный пароль, 3 - имя хоста клиентской станции. Код инициатора запуска служебного сценария - 36.<br />
<br />
<br />
<br />
<br />
[[Системные настройки|Наверх]]</div>Peter%D0%9B%D0%B8%D0%BD%D0%B8%D0%B8Линии2014-06-30T07:57:12Z<p>Peter: </p>
<hr />
<div>[[Администрирование|Наверх]]<br />
<br />
<br />
В разделе редактируются свойства для внешних и внутренних линий, настроенных в соответствии с текущей картой сети. А также осуществляется создание/редактирование направлений.<br />
<br />
<br />
<br />
===Внешние, внутренние===<br />
<br />
<br />
<br />
На двух вкладках «Внешние» и «Внутренние» перечислены все соответствующие линии системы. Таблицы со списком линий аналогичны тем, которые были в свойствах сервера в редакторе карты сети. <br />
<br />
<br />
'''Свойства внешних линий''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Сервер<br />
|Название сервера (из свойств объекта карты офиса), который обслуживает данную линию. Доступно только для чтения.<br />
|- <br />
|Идентификатор линии<br />
|Уникальный номер линии, которым оперирует визуальная часть комплекса Oktell. Именно этот номер выступает в качестве возвращаемого значения встроенной функции обработчика сценариев IVR (для обслуживаемой линии) и диалога (для линии абонента) . Доступно только для чтения.<br />
|-<br />
|Поток<br />
|Название потока, составной частью которого является линия. Доступно только для чтения.<br />
|-<br />
|Включена<br />
|Выключение приводит к запрету использования на любых типах звонков. Применяется, если линия неактивна, не подведена к серверу или по каким то причинам не работает.<br />
|-<br />
|Тип набора<br />
|Тоновый/импульсный. Если одна или несколько ваших внешних линий подключены к АТС, не обладающей обработчиком тоновых сигналов, установите значение в «Импульсный». Такой способ набора ограничивает гибкость комплекса, но в большинстве случаев решает поставленную задачу. Используется в режимах набора номера с клиентского интерфейса, USB-телефонов, а также аналоговых телефонов в режиме резервирования внешней линии. При использовании режима набора с аналогового телефона с предварительной коммутацией тип набора определяется установками самого аппарата.<br />
<br />
Начиная с версии 2.3 задается в параметрах аппаратуры для внешних линий.<br />
|-<br />
|Исходящие разрешены<br />
|Разрешает или запрещает совершать прямые исходящие звонки в город пользователями с участием линии. Используется в служебном номере [[Внутренние номера#Специальные номера|Выход в город]], в компоненте сценария IVR [[Компоненты сценариев IVR#Переключение на номер|Переключение]], а также в быстрых номерах.<br />
|-<br />
|Подключена к АТС<br />
|Внешняя линия, подключенная к внутренней линии офисной АТС. Используется в служебном номере типа «Выход в АТС», а также в быстрых номерах, работающих в направлении АТС. <br />
<br />
Линия с установленным свойством становится недоступной при совершении звонков с использованием служебного номера [[Внутренние номера#Специальные номера|Выход в город]], а также компонента сценария IVR [[Компоненты сценариев IVR#Переключение на номер|Переключение]], однако доступна в компоненте [[Компоненты сценариев IVR#Переключение на внешний номер с указанием последовательности выделения линий|Переключение с указанием внешних линий]].<br />
<br />
Также в соответствии с настройкой «Пропускать вход в задачу для внешних линий, подключенных к АТС» модуля [[Менеджер задач|Общие настройки. Менеджер задач]] для линии, помеченной данным флагом, может блокироваться работа менеджера задач, тем самым автоматически разделяя поступающие вызовы на внутриофисные и внешние. В этом случае происходит выход из компонента [[Компоненты сценариев IVR#Вход в задачу|Вход в задачу]] по ветке «Параметры не подходят».<br />
|- <br />
|Автодозвон<br />
|Разрешает или запрещает использование линии для выполнения исходящих задач в автоматическом и полуавтоматическом режимах.<br />
|-<br />
|Доступна в call-центре<br />
|Линии, у которых не установлен флаг, становятся недоступными и невидимыми в настройках задач, а также в модуле «Ресурсы». <br />
|-<br />
|Префикс<br />
|Номер, необходимый для набора при выходе во внешнюю среду. Чаще используется, если выше системы установлена АТС. <br />
|-<br />
|Номер<br />
|В случае невозможности определения номера абонента, на который шел входящий вызов, подставляется указанная в этом поле строка.<br />
Подставляется также как описание линии в клиентских интерфейсах в том случае, если линия не является составной частью какого-либо потока и не участвует ни в одном [[#Направления|направлении]].<br />
|-<br />
|Код<br />
|Произвольный текстовый код, привязанный к линии. Отображается во всех модулях, где осуществляется выбор линий. Может быть использован в сценарии (возвращается функцией «Код линии») для маршрутизации. Призван бороться с проблемой сдвигов номеров каналов при частых модификациях карты сети.<br />
|} <br />
<br />
<br />
'''Свойства внутренних линий''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Сервер<br />
|Название сервера или операторского компьютера (из свойств объекта карты офиса), который обслуживает данную линию. Доступно только для чтения.<br />
|-<br />
|Идентификатор линии<br />
|Уникальный номер линии, которым оперирует визуальная часть комплекса Oktell. Именно этот номер выступает в качестве возвращаемого значения встроенной функции обработчика сценариев IVR (для обслуживаемой линии) и диалога (для линии абонента). Доступно только для чтения.<br />
|-<br />
|Поток<br />
|Название потока, составной частью которого является линия. Доступно только для чтения.<br />
|- <br />
|Название<br />
|Исключительно информационная расшифровка линии. Название появляется при назначении ее на внутренние номера, а также там, где идут операции с линиями при назначении прав, отображении статистики и пр. Название аналоговых линий также используется при звонках внутри офиса, когда линия работает без управления компьютером оператора и отображается во всплывающем окне.<br />
<br />
Название линии совпадает с названием объекта телефонного аппарата в карте, которому она сопоставлена. <br />
|-<br />
|Включена<br />
|При отключении линии звонки на нее не поступают, звонить с нее становится также невозможно.<br />
|-<br />
|Город<br />
|Определяет, коммутировать ли сразу с внешней линией после подъема трубки.<br />
|-<br />
|Код<br />
|Произвольный текстовый код, привязанный к линии. Отображается во всех модулях, где осуществляется выбор линий. Может быть использован в сценарии (возвращается функцией «Код линии») для маршрутизации. Призван бороться с проблемой сдвигов номеров каналов при частых модификациях карты сети.<br />
|}<br />
<br />
<br />
<br />
===Направления===<br />
<br />
<br />
<br />
Направлением в системе Oktell называется упорядоченная совокупность внешних линий, объединенных по какому-либо признаку. Одни и те же внешние линии могут участвовать в нескольких направлениях одновременно. Может использоваться любое количество направлений.<br />
<br />
Направления задействуются при исходящих звонках, осуществляемых вовне (при задании соответствующих свойств в компонентах сценариев, связанных со звонками на внешние линии - [[Компоненты служебных сценариев#Дозвон|Дозвон]] и [[Компоненты сценариев IVR#Переключение на внешний номер с указанием последовательности выделения линий|Переключение на внешние линии]]). <br />
<br />
<br />
Для каждого направления может быть задана команда преобразования набираемого номера. Номер, набираемый во внешнюю линию любого типа, представляет собой строковую команду, содержащую помимо DTMF-символов служебные символы ''w'', ''q'', ''z'', ''^'' и ''{'', ''}''. ''w'' - пауза при наборе в 1 секунду, ''q'' - ожидание соединения с абонентом перед дальнейшей отправкой DTMF символов, ''z'' - ожидание соединения с абонентом перед дальнейшей отправкой DTMF символов с задержкой дальнейших действий (коммутации, воспроизведения) до момента окончания набора номера. ''^'' удаляет символ из набора в линию (возможно оставляя его в статистике). Фигурными скобками выделяется та часть команды, которая будет подставлена в статистику коммутаций как номер абонента. ''Пример: +7{^89050213951} - в набор будет отправлено +79050213951, а в статистику попадет 89050213951''.<br />
<br />
Таким образом, при наборе номеров в направления (в отличие от набора в линии) может быть произведено преобразование, влекущее использование особого маршрута. Для этого в соответствующих компонентах сценариев ([[Компоненты_служебных_сценариев#Call|Дозвон]], [[Компоненты_сценариев_IVR#SwitchExt|Переключение с использованием внешних линий]]) необходим выбор соответствующего свойства. Подобные свойства введены, так как преобразование может производиться в самом сценарии безотносительно команд, указанных при создании направления.<br />
<br />
<span style="color:green;">Пример: Предположим, цель - позвонить на номер 89172123456. Набор мобильных номеров необходимо производить во внешнюю линию, подключенную к АТС, у которой номер 508 - канал с подключенным GSM-шлюзом. Соответственно, нужно осуществить дозвон на номер 508 и дальнейшую передачу DTMF-символов, составляющих номер абонента. В статистику необходимо подставить непосредственно номер абонента. Для реализации в качестве номера (команды) в одну из подключенных к АТС внешних линий может быть отправлена строка 508zw{89172123456}. Преобразование номера в указанную команду может быть произведено средствами сценария, либо например, в системе может быть задано направление "мобильные" с командой-выражением '508zw{' + [Номер] + '}'. При звонке через сценарий выбирается направление "мобильные", тип команды "использовать команду направления". Номер подставляется в направление, расчитывается выражение и в линию, входящую в направление, посылается преобразованная команда. В итоге после отправки в набор номера 508 будет осуществлено ожидание ответа абонента (в данном случае GSM-шлюза), задержка коммутации в сценарии до окончания DTMF-трансляции, пауза в 1 секунду и последующая генерация DTMF символов номера 8, 9, 1, 7, 2 ... Выделенная фигурными скобками часть подставится в статистику соединений как номер абонента.</span><br />
<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Команды не активируются при наборе специальных URI-содержащих номеров с префиксами sip:, tel:, fax: и т.д.</span><br />
<br />
<br />
Направление может не использовать команду преобразования, использовать указанное выражение для расчета итоговой команды, или использовать служебный сценарий, принимающий на вход (в компонент старт) исходный номер, и возвращающий результат в служебную переменную "(сл) возвращаемое значение". Сценарий в данном случае может помочь набором условных операторов и внешних данных для принятия решения о преобразовании.<br />
<br />
Направление может быть временно отключено в настройках. При этом система будет считать направление несуществующим, несмотря на то, что линии, входящие в его состав могут участвовать в других направлениях или использоваться отдельно. Соответственно, если отключается линия, то в момент использования направления система считает ее отсутствующей. <br />
<br />
<br />
У направления может быть задан код, который возвращается функцией сценария IVR [[Функции|Код направления]].<br />
<br />
<br />
Кнопка «Применить» внизу применяет изменения в текущем сеансе работы сервера. В противном случае изменения будут использованы после перезапуска сервера. Рекомендуется перезапускать сервер после изменения значения флага "Линия включена", так как он существенно влияет на процесс загрузки комплекса.<br />
<br />
<br />
Система в любом случае всегда автоматически создает направление «Все линии», в которое динамически включаются все доступные линии.</div>Peter%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2_%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8Параметры файлов конфигурации2014-06-30T07:51:44Z<p>Peter: </p>
<hr />
<div>[[Дополнительно|Наверх]]<br />
<br />
<br />
Ряд настроек комплекса хранится в файлах конфигурации соответствующих приложений. Файл конфигурации загружается однократно в момент запуска приложения, и хранящиеся в нем настройки не могут быть изменены в ходе работы. Любые изменения файлов конфигурации применяются только при следующем запуске соответствующего приложения. <br />
<br />
Настройки файла конфигурации клиентского приложения влияют на работу только конкретного клиента.<br />
<br />
<br />
Файлы конфигурации находятся в том же каталоге, в котором расположен запускаемый модуль.<br />
<br />
Файл конфигурации клиентского приложения: oktell.ClientStarter4.exe.config<br />
<br />
Файл конфигурации серверной службы: oktell.ServerService.exe.config (приложения - oktell.ServerForm.exe.config)<br />
<br />
Файлы конфигурации есть также у ряда сопутствующих сервисов: служба файл-сервера, служба обмена межсерверными сообщениями, служба туннелирования запросов в БД, служба сервера видео-конференций, и т.д.<br />
<br />
<br />
Изменять файлы необходимо в редакторах, не изменяющих кодировку (рекомендуется стандартный редактор «Блокнот»). Такие редакторы как «Microsoft Word» и «Wordpad» сбивают кодировку, в следствие чего запуск приложения системы становится невозможным. При попытке запуска с некорректным конфигурационном файлом возникает системное окно с описанием ошибки.<br />
<br />
Конфигурационные файлы содержат ряд служебных настроек, поэтому в целях сохранения целостности и работоспособности не рекомендуется изменять формат файла и параметры, у которых нет описания.<br />
<br />
Формат представляет собой стандартный XML-документ со специфическими элементами. Допустимые настройки находятся в разделе между тегами <span style="color:red;"><appSettings></span> и <span style="color:red;"></appSettings></span>. Каждый конкретный параметр представляет собой строку <br />
<br />
<pre> <add key="KEY_STRING" value="VALUE_STRING" /></pre><br />
<br />
где <span style="color:blue;">KEY_STRING</span>-название параметра,<span style="color:blue;">VALUE_STRING</span>-значение параметра.Комментарии располагаются между строками <span style="color:blue;"><nowiki><!--</nowiki></span> и <span style="color:blue;"><nowiki>--></nowiki></span>.<br />
<br />
<br />
<br />
__TOC__<br />
<br />
<br />
===Обновление клиентских конфигураций===<br />
<br />
<br />
При необходимости обновить настройки файлов конфигурации у всех или некоторых клиентов можно воспользоваться системой обновления (каталог LiveUpdate сервера). Размещение клиентского конфигурационного файла целиком возможно только в том случае, когда все настройки, включая адрес сервера, идентичны у всех клиентов. При различиях можно воспользоваться служебным механизмом частичного обновления: файлы update*.config, находящиеся в каталоге LiveUpdate, сортируются лексикографически и применяются к тем клиентам, которые определены в настройках каждого из этих файлов. При этом могут быть указаны конкретные клиентские места, или исключения. Клиентские места указываются с помощью идентификатора, определяющего его в карте сети (любой принадлежащий ему IP-адрес, имя хоста, либо хеш-идентификатор, определенный ключом [[#ManualHostAddress|ManualHostAddress]]).<br />
<br />
Например, нижеприведенный файл update1.config применится на всех клиентах, локальный адрес которых 192.168.0.12 или 192.168.0.13.<br />
При этом будут добавлены/обновлены ключи "xxx" и "yyy", а ключ "zzz" будет удален.<br />
<br />
<pre><br />
<?xml version="1.0"?><br />
<configuration><br />
<br />
<updateAddress><br />
<include address="192.168.0.12"/><br />
<include address="192.168.0.13"/><br />
</updateAddress><br />
<br />
<appSettings><br />
<br />
<add key="xxx" value="111" /><br />
<add key="yyy" value="555" /><br />
<add key="zzz" /><br />
<br />
</appSettings><br />
<br />
</configuration><br />
</pre><br />
<br />
<br />
По умолчанию при отсутствии раздела ''updateAddress'' изменение конфигурационного файла производится на всех клиентских рабочих местах, подключающихся к серверу.<br />
Могут быть обновлены конкретные (<include address="*"/>), или все кроме указанных (<exclude address="*"/>), где * - IP-адрес, имя хоста или хеш-идентификатор.<br />
<br />
Обновиться самостоятельно могут только те клиенты, которые в силу текущих настроек конфигурационного файла способны подключиться к серверу.<br />
<br />
<br />
<br />
===Параметры файла конфигурации серверного приложения===<br />
<br />
<br />
<br />
<span style="color:blue;">Language</span>. Определяет языковую схему, используемую комплексом. В основном каталоге приложения находятся файлы Lang*.xml, представляющие собой наборы текстов для отображения в клиентских интерфейсах и БД. Для выбора того или иного языка необходимо в качестве значения данного параметра выставить соответствующее расширение имени файла (*). Например для использования файла LangRus.xml необходимо прописать значение «rus».<br />
<br />
Язык по умолчанию – русский (применяется, если в конфигурационном файле не указан язык, или если не найден файл указанного языка).<br />
<br />
Русский также является базовым языком. То есть если какого-либо кода не найдено в файле языка, то в альтернативу будет применен русский текст, заданный в коде программы. Язык также определяется в конфигурационном файле клиентского приложения, но после подключения к серверу клиентское приложение синхронизирует язык с установленным на сервере. <br />
<br />
Локализация программы производится компаниями-партнерами, файлы с текстами могут распространяться в открытом и шифрованном виде. В последнем случае осуществляется привязка к лицензии.<br />
<br />
<span style="color:blue;">HALSeparate</span>. Режим запуска модуля поддержки оборудования. «0» - в текущем процессе, «1» - в отдельном процессе используя взаимодействие через NET.Remoting, «2» - в отдельном процессе используя собственный альтернативный канал связи по протоколу TCP. <br />
<br />
В случае, если оборудование в некоторых случаях вызывает критические ошибки, подгрузка модуля поддержки оборудования в отдельном процессе позволяет не терять основной работоспособности сервера. В моменты падения процесса основная служба перезапускает его, производит фоновую регистрацию и продолжает работу. <br />
<br />
В момент перерегистрации все линии переходят в состояние «Отключена», пользователи переходят в состояние «Без телефона», все коммутации разрываются, логика резервирований очищается. Менеджер задач реагирует способом, аналогичным тому случаю, когда абоненты на внешних линиях положили трубки. Возможно файлы записей оборвавшихся разговоров будут иметь некорректный заголовок, что сделает невозможным их прослушивание стандартными средствами. Полностью процесс автоматической переинициализации занимает 5-10 секунд.<br />
<br />
<span style="color:blue;">HALRemoteAddress</span>. Адрес расположения вынесенной в отдельной процесс службы HAL. По умолчанию localhost.<br />
<br />
<span style="color:blue;">HALRemotePort</span>. Порт доступа к вынесенной в отдельный процесс службе HAL. По умолчанию 4052.<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">Настройки серверов HAL</span>.'''<br />
<br />
<span style="color:blue;">START_SERVER</span>. Индексированные параметры, определяющие запускаемые серверы аппаратуры. Доступные серверы: Сервер CTI плат Ольха-9, Сервер CTI плат Ольха-14, сервер CTI плат Synway, сервер SIP, серверы VoIP телефонии. При установке системы параметры выставляются согласно выбранным в дистрибутиве значениям. Однако в сложных системах могут потребоваться модификации. Например, в случае если происходит замена типа платы на рабочей системе, использование нескольких разных типов плат, а также при запуске нескольких VoIP серверов, обслуживающих разные подсети. Загрузке подлежат серверы с индексами от 1 до 32 (в примере - часть строки XX).<br />
<br />
<br />
Сервер плат «Ольха 9», «Ольха 14»:<br />
<br />
<pre><add key="START_SERVER_XX" value="Alder9 Server;oktell.HALAlder9Srv.dll;Alder9;_Loaders\" /><br />
<br />
<add key="START_SERVER_XX" value="Alder14 Server;oktell.HALAlder9Srv.dll;Alder14;_Loaders\" /></pre><br />
<br />
Последний элемент строки после точки с запятой указывает путь к файлам-загрузчикам. По умолчанию это подкаталог серверной службы _Loaders.<br />
<br />
<br />
Сервер плат «Synway»:<br />
<br />
<pre><add key="START_SERVER_XX" value="Synway Server;oktell.HALSynwaySrv.dll;ShCti;" /></pre><br />
<br />
<br />
Сервер плат «Yeastar»:<br />
<br />
<pre><add key="START_SERVER_XX" value="E1 Yeastar Server;oktell.HALYeastarSrv.dll;YeaCTI" /><br />
<br />
<add key="START_SERVER_XX" value="TDM800 Yeastar Server;oktell.HALYeastarSrv.dll;TDM800" /></pre><br />
<br />
<br />
Сервер SIP:<br />
<br />
<pre><add key="START_SERVER_XX" value="SIP Server;oktell.HALSipSrv.dll;SIP;sip:*:5060" /></pre><br />
<br />
Последний элемент строки после точки с запятой устанавливает детальные настройки сетевого интерфейса и порта, на которых запускаемый SIP-сервер будет активен. По умолчанию «sip:*:5060», то есть сервер слушает все интерфейсы на порте 5060. При необходимости установить какой-либо конкретный интерфейс необходимо вместо «*» указать его адрес.<br />
<br />
<br />
Серверы VoIP:<br />
<br />
<pre><add key="START_SERVER_XX" value="Buildin VOIP Server;;Voip;localhost:4003" /></pre><br />
<br />
Последний элемент строки после точки с запятой указывает сетевой интерфейс и порт слушателя регистраций локальных устройств. При необходимости использования сервера для поддержки локальных устройств разных подсетей возможно запустить несколько VoIP-серверов - несколько однотипных строчек файла конфигурации с разными индексами и разными сетевыми интерфейсами.<br />
<br />
<br />
Сервер виртуальных каналов<br />
<br />
<pre><add key="START_SERVER_XX" value="Virtual Server;oktell.HALVirtualSrv.dll;VS;12/10" /></pre><br />
<br />
Последний элемент строки указывает количество используемых каналов - внешних/внутренних.<br />
<br />
<br />
<br />
<span style="color:blue;">RTP_PORT_START</span>. Начальный порт для обмена RTP-трафиком медиа-подсистемой (SIP, VoIP). По умолчанию 9000.<br />
<br />
<span style="color:blue;">RTP_PORT_COUNT</span>. Количество портов, начиная со стартового, доступные для медиа-подсистемы (SIP, VoIP). По умолчанию 10000.<br />
<br />
<span style="color:blue;">RTP_MAX_CHANNELS</span>. Количество сокетов получения RTP-трафика на один поток-слушатель. От 1 до 32. (SIP, VoIP). По умолчанию 8.<br />
<br />
<span style="color:blue;">USE_AFFINITY_MASK</span>. «1» - использовать разделение задач по процессорам. Половина процессоров для сервера логики, другая половина для сервера HAL. «0» - значение по умолчанию. В этом случае операционная система самостоятельно занимается распределением.<br />
<br />
<span style="color:blue;">JITTER_DEPTH</span>. Значение глубины джиттер-буфера на сервере. Минимальное значение - «4», по умолчанию - «4». При увеличении значения происходит рост задержки в голосовом обмене по направлению звука к серверу, эффективнее исключая влияние проблем сети.<br />
<br />
<span style="color:blue;">TIMER_TYPE</span>. Тип используемого таймера высокой разрешающей способности для тактирования звуковых пакетов. На разных операционных системах и компьютерах различные варианты таймеров могут иметь достаточно сильную погрешность, влияющую на итоговое качество звука. Основная задача при выборе таймера состоит в обеспечении корректного среднего промежутка времени между тиками. Замечены случаи, когда некоторые из вариантов таймеров ОС тактируют постоянно увеличенные интервалы времени (например постоянно 46 мс вместо 40 положенных). Если не происходит корректировок, то такой таймер следует заменить на другой тип. Для определения значений всех вариантов таймеров можно использовать специальное тестовое приложение.<br />
<br />
Возможные значения:<br />
<br />
:::0 - Системный таймер по умолчанию. Дает более точное тактирование по сравнению с таймером на ожидании. Выдает точное тактирование в Windows Vista и некоторую погрешность в предыдущих версиях Windows. Система буферизации звука в этом случае сглаживает разброс, однако существуют компьютеры, где погрешность таймера постоянна. Это влечет пропуск пакетов и заметное ухудшение итогового качества звука. На таких компьютерах необходимо использовать другие типы таймеров. Рекомендуется мультимедийный.<br />
<br />
:::1 - Системный таймер в собственном потоке приложения.<br />
<br />
:::2 - Имплементация таймера в потоке с использованием функции WaitForSingleObject(). <br />
<br />
:::3 - Мультимедийный таймер. Дает наиболее точное тактирование, однако имеет общее ограничение на количество одновременно существующих таймеров в системе (16 объектов). Сервер Oktell использует 3 объекта таймера высокой разрешающей способности.<br />
<br />
:::4 - Автоопределение. На старте системы осуществляется тестовый прогон всех вариантов таймеров и определяется средне наиболее точный. В случае, если все имеют одинаковую среднюю точность, предпочтение отдается таймеру с меньшим индексом (таймер по умолчанию, системный, таймер ожидания, мультимедийный). На прогон теста на старте системы выделяется лишняя секунда.По умолчанию «4».<br />
<br />
<br />
<span style="color:blue;">TIMER_HIGHRES</span>. Тип используемого счетчика интервалов времени. «0» - миллисекундный системный счетчик GetTickCount, «1» - Query Performance Counter. По умолчанию «1».<br />
<br />
<div id="FORCE_BRACKETS_FOR_URI"></div><br />
<span style="color:blue;">FORCE_BRACKETS_FOR_URI</span>. «1» - значения заголовков To и From отправляемых SIP-пакетов размещаются в треугольных скобках. По умолчанию «0».<br />
<br />
<br />
<div id="EnableSipTransportFilter"></div><br />
<span style="color:blue;">EnableSipTransportFilter</span>. «1» - активирует на сервере спам-фильтр, защищающий от атак на SIP-подсистему. При поступлении с одного IP-адреса за короткий отрезок времени чрезмерно большого количества регистрационных пакетов, завершающихся неудачей по причине неверной авторизационной информации, осуществляется блокирование адреса на период времени, указанный в параметре и исчислимый в минутах. На все попытки регистрации с заблокированного IP-адреса сервер не отвечает никаким образом. По умолчанию 1440 минут (= 1 сутки), 1 - не отключать фильтрацию адреса вплоть до перезагрузки сервера, остальные действительные значения являются непосредственными значениями интервала в минутах. 0 - режим отключен.<br />
<br />
<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">Настройки клиентских подключений</span>.'''<br />
<br />
<span style="color:blue;">PBXServerPort</span>. Порт для подключения собственных клиентских приложений через механизм NET.Remoting (устаревш.).<br />
<br />
<span style="color:blue;">InternalClientPort</span>. Порт для подключения собственных клиентских приложений и приложений на базе клиентского ядра через встроенную надстройку над протоколом TCP. По умолчанию 4054.<br />
<br />
<span style="color:blue;">ExternalClientPort</span>. Порт для подключения внешних приложений 4053.<br />
<br />
<span style="color:blue;">SIP_ENABLE_TCP</span>. Разрешает TCP-подключение по протоколу SIP. Конкретный порт зависит от настроек SIP-сервера (по умолчанию, 5060). «0» - не активно, «1» - активно. По умолчанию «0».<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">Настройки рабочего каталога</span>.'''<br />
<br />
<span style="color:blue;">WORK_ROOTDIR</span>. Устанавливает в явном виде путь к рабочей папке серверной службы. Временные файлы, сценарии, проекты, плагины, каталог по умолчанию для записи разговоров, резервные копии - все, кроме основных сборок службы, размещается именно там.<br />
<br />
<span style="color:blue;">WORK_ROOTDIR_TYPE</span>. Устанавливает один из нескольких возможных вариантов размещения рабочей папки. Используется, если не задана рабочая папка в явном виде. Возможные варианты: 0 – папка запустившего процесс выполняемого файла, 2 – Documents And Settings\All Users, 3 – Documents And Settings\CurrentUser.<br />
<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">Настройки доступа к БД</span>.'''<br />
<br />
<span style="color:blue;">DBServerName</span>. Адрес сервера, на котором находится база данных MSSQL. По умолчанию «(local)».<br />
<br />
<span style="color:blue;">DBName</span>. Имя основной оперативной базы данных, к которой производится подключение. По умолчанию «oktell».<br />
<br />
<span style="color:blue;">DBNameCC</span>. Имя базы данных статистики call-центра. По умолчанию «oktell_cc_temp».<br />
<br />
<span style="color:blue;">DBNameSettings</span>. Имя базы данных с настройками системы. По умолчанию «oktell_settings».<br />
<br />
<span style="color:blue;">DBLogin</span>. Имя пользователя, учетной записью которого пользуется система. По умолчанию «AutelService».<br />
<br />
<span style="color:blue;">DBInstanceName</span>. Имя экземпляра сервера MSSQL. По умолчанию «MSSQLSERVER». Для доступа к службе, обеспечивающей работу БД. В момент запуска службы Oktell осуществляется проверка доступности БД. Если SQLServer, обслуживающий БД коммуникационного сервера, находится на том же компьютере, что и служба Oktell, то при невозможности обращения к БД Oktellпроверяет и перезапускает локальную службу SQLServer (указанный instance). <br />
<br />
Если работа SQLServer осуществляется на другом компьютере, то во избежании запуска службы SQLServer на локальной машине в значение поля можно поставить «0». Октелл будет осуществлять бесконечное ожидание корректного подключения к БД перед началом загрузки, а сервер баз данных не будет загружать в ОЗУ свои данные, тем самым коммуникационный сервер будет гарантирован от кэширования данных на диск, и, как следствие, временных приостановок операционной системой работы всех служб и приложений в ожидании завершения операции, что достаточно критично при активных коммутациях.<br />
<br />
<span style="color:blue;">DBConnectionString</span>. Строка подключения, задаваемая явно. Используется при настройке подключения к службам SQL с индивидуальными параметрами, при которых не подходят параметры по умолчанию. При отсуствии этого свойства, или пустом его значении, подставляется строка: <br />
<br />
<pre>"server=(local);database=oktell;uid=AutelService;pwd=[pwd];pooling=true",</pre><br />
<br />
где значения параметров server, database и uid подставляются из вышеописанных свойств. При явном указании строки подключения пароль может быть указан явно, либо использована последовательность символов «[pwd]», указывающая системе на необходимость подстановки пароля для логина AutelService.<br />
<br />
<span style="color:blue;">DBTransactionLogSize_1, DBTransactionLogSize_2</span>. Размеры транзакционных лог-файлов баз данных - основной и пространственной. По умолчанию по 500 МБ.<br />
<br />
<span style="color:blue;">DBBackupDir</span>. Путь к каталогу на сервере баз данных, в котором осуществляется создание резервных копий баз данных. По умолчанию это Backup в рабочей папке сервера. Однако в случае, если сервер баз данных работает на отдельном компьютере, путь должен существовать именно на нём. <br />
<br />
<span style="color:blue;">DBAutoDailyBackup</span>. «1» - устанавливает режим автоматического ежедневного резервного копирования баз данных одновременно с оптимизацией используемых баз данных. Режим оптимизации сам по себе настраивается в разделе [[Управление базами данных|Администрирование. Общие настройки. Управление базами данных]]. Если режим ежедневной оптимизации отключен, то вне зависимости от значения описываемого параметра резервная копия создана не будет. Cоздание файлов резервных копий производится на компьютере, где установлен текущий используемый MSSQLServer. Файлы размещаются в каталоге, установленном параметром [[#Параметры файла конфигурации серверного приложения|DBBackupDir]], а при его отсутствии в каталоге, путь к которому совпадает с рабочей папкой службы сервера в подкаталоге \Backup. Файлы резервных копий баз имеют названия db_ok.bak, db_okcc.bak, db_okset.bak, при ежедневном автоматическом создании резервных копий предыдущие резервные копии автоматически заменяются новыми. При необходимости осуществлять хранение нескольких копий за некоторый промежуток времени необходимо налаживать схему бэкапа или копирования файлов самостоятельно.<br />
<br />
<span style="color:blue;">ScrBackupDir</span>. Путь к каталогу на сервере АТС, в котором осуществляется создание резервных архивов со сценариями. По умолчанию это каталог Backup в рабочей папке сервера.<br />
<br />
<span style="color:blue;">RepUpdateDir</span>. Каталог с обновлениями отчетов call-центра.<br />
<br />
<span style="color:blue;">DBUpdateDir</span>. Каталог с обновлениями для БД.<br />
<br />
<span style="color:blue;">DBUpdateDirExtern</span>. Каталог с внешними обновлениями для БД. Расположенные здесь файлы с текстом, представляющим собой один совокупность нескольких SQL-batch, исполняются в БД по очередности их имен в момент запуска сервера. После успешного исполнения файлы удаляются. В случае возникновения ошибок их описание можно обнаружить в лог-журнале Exception. <br />
<br />
<span style="color:blue;">PauseTMOnDbQueueLength</span>. Определяет количество сообщений в очереди на сохранение в БД, при котором менеджер задач приостанавливает совершение звонков по исходящим голосовым задачам. Система считает, что таким образом нагрузка уменьшается, и БД имеет больше шансов к уменьшению очереди запросов. По умолчанию 100. Бывают случаи временной загрузки БД, когда своп происходит редко и длится в течение минуты или более того, а в остальные случаи сервер БД не подвержен притормаживанию. В этом случае имеет смысл оценить производительность сервера и увеличить максимальный предел очереди вплоть до нескольких тысяч. Отсутствие предела может привести в особо критичных случаях к тому, что данных в очереди накопится чрезмерно много, что выльется либо в нехватку памяти процессу, либо в несохранение результатов звонков после их совершения в случае сбоя сервера или базы данных.<br />
<br />
<span style="color:blue;">PauseProgressiveOnDbQueueLength</span>. Аналогичный предыдущему параметр для прогрессивного пула задач. Может иметь обособленную настройку и сказывается на запуск прогрессивных исходящих звонков. По умолчанию 50;<br />
<br />
<br />
<div id="DbRemote"></div><br />
<span style="color:blue;">UseDbRemote</span>. Довольно большое количество обращений из клиентских приложений к серверу являются суть запросами к БД. 1 - использует отдельный процесс туннелирования (oktell.DbRemoteService.exe) для прямых обращений к БД из клиентских приложений. 0 - все обращения к БД через основную службу. По умолчанию 0. При подключении к службе туннелирования все клиенты проходят аутентификацию. Служба туннелирования получает параметры доступа к БД из конфигурационного файла основной службы Oktell. Собственный конфигурационный файл необходим лишь для определения способа старта (служба или приложение), порта слушателя TCP подключений, а также возможно некоторых настроек логирования. <br />
<br />
<span style="color:blue;">CheckStartDbRemote</span>. Применяется в случае использования отдельного процесса туннелирования доступа клиентских приложений к БД. 1 - указывает серверу на необходимость самостоятельного запуска процесса; процесс при этом запускается на том же физическом сервере, где и основная служба Oktell; при завершении службы при этом процесс выгружается. 0 - указывает на необходимость подключения к постоянно запущенной службе (при этом служба может находиться на другом физическом сервере). По умолчанию 1. В конфигурационном файле службы туннелирования устанавливается, какой способ запуска используется - как служба или как приложение (ключ IsService). Настройки доступа к процессу туннелирования и самого процесса должны соответствовать друг другу.<br />
<br />
<span style="color:blue;">DbRemoteServer</span>. Применяется в случае использования отдельного процесса туннелирования доступа клиентских приложений к БД. Определяет адрес и порт для TCP доступа к приложению («address:port»). Сервер с помощью них осуществляет самостоятельное подключение для управления, а также выдает этот адрес клиентам для организации их собственных каналов связи. В случае, если указан localhost (используется по умолчанию), сервер выдает клиентам свой публичный адрес. Порт указывается в конфигурационном файле приложения/службы oktell.DbRemoteService.exe, по умолчанию 4086. <br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">Настройки службы</span>.'''<br />
<br />
<span style="color:blue;">EnableEmptyAdmin</span>. «1» - активирует на сервере возможность пользования учетной записью системного администратора. По умолчанию запись доступна только на сервере, где неактивен сервер состояний или среди учетных записей пользователей которого не существует ни одной, обладающей базовой ролью администратора. Может понадобиться в случае, если пароль учетной записи администратора утерян. Для применения требуется перезапуск службы сервера. По умолчанию «0».<br />
<br />
<div id="EnableAutoMap"></div><br />
<span style="color:blue;">EnableAutoMap</span>. «1» - активирован режим, при котором авторизация с рабочего места, не имеющего в карте сети учетной записи, приводит к автоматической временной регистрации на сервере рабочего места, снабженного USB-телефоном. «0» - доступ с неизвестных рабочих станций заблокирован. В целях обеспечения работы веб-клиентов, значение по умолчанию «1».<br />
<br />
<div id="EnableAutoMapSip"></div><br />
<span style="color:blue;">EnableAutoMapSip</span>. «1» - активирован режим, при котором при динамической регистрации вместо создания динамической линии USB-телефона производится связка с существующим в карте сети SIP-телефоном. Связка осуществляется по совпадению логина телефона с логином пользователя, либо по совпадению назначенного «пользователя по умолчанию» с авторизующимся пользователем. Для работы требуется включение параметра [[#EnableAutoMap|EnableAutoMap]]. «0» - связка динамических рабочих мест с SIP-телефонами не используется.<br />
<br />
<span style="color:blue;">UseWlockForDynamicReg</span>. «1» - использовать блокировку писателя при добавлении/удалении динамических рабочих мест. По умолчанию «0» - использовать блокировку читателя.<br />
<br />
<div id="Use4xLineNumbers"></div><br />
<span style="color:blue;">Use4xLineNumbers</span>. «1» - использовать при создании линий четырехзначную числовую нумерацию (0000-9999). Может быть использовано в проектах с более чем 1000 линий одного типа. По умолчанию «0».<br />
<br />
<br />
<span style="color:blue;">ManualHostAddress</span>. Устанавливает уникальное имя сервера для идентификации в карте сети на старте службы. В случае, если в качестве адреса сервера в карте сети указано это значение - позволяет устранить зависимость от смены DNS-имени, а также смены и назначения динамических адресов сервера. <br />
<br />
Следует обратить внимание, что сервер может являться также и клиентской рабочей станцией. В этом случае необходимо в файл конфигурации клиентского приложения на сервере задать аналогичный параметр тем же значением, либо создать в карте сети отдельный компьютер с указанным реальным адресом или любой другой уникальной строкой (в случае использования на клиенте аналогичной схемы подмены адреса).<br />
<br />
<span style="color:blue;">ProcessPriority</span>. Приоритет серверного процесса. По умолчанию «0» - Нормальный. «1» - выше среднего, «2» - высокий, «3» - реального времени.<br />
<br />
<span style="color:blue;">HALRemoteProcessPriority</span>. Приоритет процесса HALRemote. «0» - нормальный, «1» - выше среднего (по умолчанию), «2» - высокий, «3» - реального времени.<br />
<br />
<span style="color:blue;">Default_DateTime_Format</span>. Индексированные параметры, определяющие нестандартныей варианты преобразования типа СТРОКА к типу ДАТАВРЕМЯ. Используются строки с индексами от 0 до 99, перебор в ходе работы осуществляется в порядке увеличения индексов.<br />
<br />
<span style="color:blue;">MixerDeleteSourceRecords</span>. «1» - удалять исходные файлы записей коммутаций после упаковки и/или микширования, «0» - оставлять на месте. По умолчанию «1».<br />
<br />
<span style="color:blue;">CheckRecordDriveEmptySpace</span>. «1» - осуществляет слежение за объемом свободного места на диске для записи разговоров. «0» - игнорирует проверку. Игнорирование может потребоваться при использовании сетевых дисков для записи, размер свободного пространства которых системой определяется нулевым, а также при использовании файлового сервера. По умолчанию «1».<br />
<br />
<span style="color:blue;">TaskListAbonentUseLikeNumber</span>. «1» - позволяет активировать поиск абонентской строчки в таблице абонентов с фильтром "number like '%x%'". По умолчанию «0» и поиск осуществляется только по идентификатору абонента.<br />
<br />
<span style="color:blue;">SkipCloseMutexCommand</span>. Режим автоматического закрытия сервера через мьютекс-команду необходим в целях исключения проблем с операциями обнаружения процессов. Встречаются системы, в которых отключены или недееспособны службы, необходимые для обнаружения внешнего процесса. В этом случае процесс копира не в состоянии при необходимости остановить серверный процесс перед обновлением и/или для перезапуска. «1» - пропускать команду закрытия, отданную через системные мьютексы процессом копира. «0» и другие значения - команда будет распознаваться и сервер будет реагировать на нее автоматическим закрытием.<br />
<br />
<div id="UseSimpleLineState"></div><br />
<span style="color:blue;">UseSimpleLineState</span>. Определяет способ привязки состояний внутренних номеров, ссылающихся на линии к состоянию самих линий. Если указать 0, то состояние номера, в случае свободности подчиненной ему линии, будет оцениваться по состоянию привязанного к ней пользователя. По умолчанию 1.<br />
<br />
<div id="HideGhostMonitor"></div><br />
<span style="color:blue;">HideGhostMonitor</span>. 1 - скрывает [[Прослушивание и помощь|слушателей разговора]] друг от друга, 0 - делает их доступными друг другу. По умолчанию 1.<br />
<br />
<div id="GCCollectorPeriodMin"></div><br />
<span style="color:blue;">GCCollectorPeriodMin</span>. Определяет периодичность принудительного запуска сборщика мусора .NET в минутах. По умолчанию 1 минута.<br />
<br />
<div id="UseNumStateChangedEventDelayer"></div><br />
<span style="color:blue;">UseNumStateChangedEventDelayer</span>. Интервал в мс, определяющий задержку перед рассылкой уведомлений о смене состояния номеров в номерном плане. 0 - выключено. По умолчанию 500. Применяется при большом количестве номеров и пользователей, следящих за их изменением. За время задержки происходит накопление данных и отправка одним пакетом. Позволяет экономить вычислительную мощность.<br />
<br />
<span style="color:blue;">DEBUG_incomingemail</span>. Логирование в common логе сервера принимаемых e-mail сообщений (pop3) "1" - включено. По умолчанию выключено.<br />
<br />
<div id="DEBUG_LogActiveThreadStackTrace"></div><br />
<span style="color:blue;">DEBUG_LogActiveThreadStackTrace</span>. При установке значения «1» производит вывод в лог ''DEBUG'' информации о стеке всех активных потоков основной службы сервера.<br />
<br />
<div id="UsePriorSwitchCallername"></div><br />
<span style="color:blue;">UsePriorSwitchCallername</span>. При осуществлении переключения из сценария на внутренний номер определяет, что будет отображаться в качестве имени абонента (callername) на sip-телефоне. 0 - автоопределение; если пусто, то callername из компонента «Переключение на номер» сценария IVR. 1 - наоборот, с приоритетом заданного в компоненте значения. По умолчанию 1.<br />
<br />
<span style="color:blue;">UserMessageCheckPeriodSec</span>. Позволяет активировать отслеживание появления новых сообщений между пользователями в базе данных и отправить их на отображение. Применяется в случае индивидуальной или внешней настройки и отправки сообщений путем размещения в таблицу A_UserMessages в БД. Указывается период отслеживания появления новых в секундах. 0 - выключено. По умолчанию 0.<br />
<br />
<div id="UserMessageCheckMakeViewed"></div><br />
<span style="color:blue;">UserMessageCheckMakeViewed</span>. В случае периодического отслеживания появления новых сообщений между пользователями в БД, указывает, отмечать ли их сразу как прочитанные с тем, чтобы при следующей итерации они не возникали вновь.<br />
<br />
<div id="DBPluginCommandTimeoutSec"></div><br />
<span style="color:blue;">DBPluginCommandTimeoutSec</span>. Позволяет задать таймаут в секундах на исполнение запросов от плагинов к БД. По умолчанию 600. Начиная с версии 120911.<br />
<br />
<div id="AllowDownloadFilesDirectlyOnlyFromTemp"></div><br />
<span style="color:blue;">AllowDownloadFilesDirectlyOnlyFromTemp</span>. 1 - блокирует скачивание файлов с сервера через HTTP интерфейс отовсюду, кроме как из временной папки Temp и [[Настройки веб-сервера#LocalStoragePath|локального хранилища]]. 0 - разрешает скачивать произвольные файлы с диска сервера по прямой ссылке. По умолчанию 1 (блокировать).<br />
<br />
<div id="BanUserAgent"></div><br />
<span style="color:blue;">BanUserAgentXX</span>, XX - порядковый номер от 00 до 99. Позволяет установить SIP-транспортный фильтр для определенных значений поля User-Agent. По умолчанию банится "Friendly-Scanner" в целях снижения нагрузки и уменьшения вероятности взлома.<br />
<br />
<div id="UpdateSelectorOnDirectorDisconnect"></div><br />
<span style="color:blue;">UpdateSelectorOnDirectorDisconnect</span>. 1 - при выходе/выпадении управляющего из селекторного совещания производит преобразование селектора к общей конференции. 0 - оставляет селектор с теми правами и в том виде, в котором он находился в последний момент присутствия управляющего. По умолчанию «1».<br />
<br />
<div id="PBX_Use180SdpAs183"></div><br />
<span style="color:blue;">PBX_Use180SdpAs183</span>. 1 - воспринимает команду ''180 Ringing'' с SDP содержимым как команду ''183 Progress'' и начинает сеанс медиасвязи. Используется в режиме ''прослушивание медиа-потока'' компонента [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние линии]]. 0 - генерирует стандартный сигнал КПВ (длинные гудки). По умолчанию 1.<br />
<br />
<div id="PBX_BackFrom183To180"></div><br />
<span style="color:blue;">PBX_BackFrom183To180</span>. 1 - воспринимает команду ''180 Ringing'' к обязательному исполнению - начинает генерацию сигнала КПВ (длинные гудки), даже если предварительно был получен ответ ''183 Progress'' и канал находится в медиа-коммутации. Используется в режиме ''прослушивание медиа-потока'' компонента [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние линии]]. 0 - пропускает такую команду. По умолчанию 0.<br />
<br />
<div id="UseAssertedIdentity"></div><br />
<span style="color:blue;">UseAssertedIdentity</span>. Включает отправку SIP-заголовоков ''P-Asserted-Identity'' и ''Remote-Party-ID'' в ответ на входящие вызовы с внутренних SIP-устройств на сервер с целью отправить на отображение в SIP-устройство ''Сaller-name'' вызываемого абонента. Применяется в случае осуществления вызова на внутренний номер.<br />
<br />
<div id="ScreenShotSize"></div><br />
<span style="color:blue;">AutoScreenshotWidth</span>, <span style="color:blue;">AutoScreenshotHeight</span>. Определяют максимальные размеры скриншотов экранов, снимаемых с помощью компонента сценариев [[Общие компоненты сценариев#UserState|Статус объекта]].<br />
<br />
<div id="PredictivePoolTimerIntervalMs"></div><br />
<span style="color:blue;">PredictivePoolTimerIntervalMs</span>. Устанавливает общий для всей системы интервал пересчета параметров предиктивных задач в мс, в ходе которого могут быть начаты новые дозвоны (по умолчанию 5000). <br />
<br />
<div id="PredictivePoolClearStatOnDeactivate"></div><br />
<span style="color:blue;">PredictivePoolClearStatOnDeactivate</span>. Устанавливает общий для всей системы режим очистки статистики в предиктивных задачах при деактивации (по умолчанию 0).<br />
<br />
<div id="PredictivePoolExtraShiftTimeoutMs"></div><br />
<span style="color:blue;">PredictivePoolExtraShiftTimeoutMs</span>. Устанавливает общий для всей системы дополнительный интервал в мс, применяемый безусловно к спрогнозированным параметрам. Может быть отрицательным и положительным. По умолчанию 0.<br />
<br />
<div id="WebServerNoAuth_Loopback"></div><br />
<span style="color:blue;">WebServerNoAuth_Loopback</span>. Позволяет отменить требование базовой авторизации при обращении к веб-серверу по loopback-интерфейсу (из приложений на самом сервере). По умолчанию 0.<br />
<br />
<br />
<div id="FileServer"></div><br />
<span style="color:blue;">FileServer_Log</span>, <span style="color:blue;">FileServer_Record</span>. Позволяет активировать сохранение соответственно лог-журналов и записей разговоров на удаленный файл-сервер. Значение задается в формате «address:port», например «192.168.0.199:4088». В качестве файлсервера может выступать любой компьютер с установленной и активированной службой oktell.FileService.exe из каталога серверной службы Oktell. О настройке и способах работы файл-сервера доступна [[http://r.oktell.ru/wiki/306/ статья]] в базе знаний.<br />
<br />
<div id="FileServerRecDir"></div><br />
Хранение записей может происходить в разных каталогах в соответствии с настройкой в Oktell. При использовании файл-сервера в качестве хранилища записей может потребоваться подключать дополнительные хранилища и изменять путь для сохранения записей и последующего доступа к ним. Чтобы это обеспечить, необходимо подвергать корректировке совместно настройку каталога для записи в Oktell и конфиг файлового-сервера. При этом в конфигурационном файле файлового сервера требуется указание соответствия переданного службой Oktell пути с локальным путем (ключ ''BaseDir_*'', где * - это subdir.ToLower(recordedfiles\dirname), а dirname - название последнего внутреннего каталога по выбранному службой Oktell пути; значение - локальный путь на файловом сервере. Например <add key="BaseDir_recordedfiles\path2" value="D:\_OktellWorkDir\Files\Base2\"/>. При настройке Oktell следует указывать пути, последний каталог которых имеет уникальное название и ранее не использовалось).<br />
<br />
<br />
<br />
<div id="FaceTime"></div><br />
'''Раздел <span style="color:green;">Настройки сервера видео-конференций</span>.'''<br />
<br />
<span style="color:blue;">FaceTimeLocalPort</span>. Определяет порт локального сервиса видео-конференций. По умолчанию 4090.<br />
<br />
<span style="color:blue;">FaceTimeServer</span>. Определяет доступные серверы видео-конференций. Перечисляются через запятую с помощью алиасов, которые затем определяются отдельными ключами конфигурации. По умолчанию доступен только локальный сервер, но могут быть вместо или дополнительно настроены один или несколько обособленных серверов. Локальный сервер определяется алиасом «local». Например <br />
<pre><add key="FaceTimeServer" value="local, futurama, videoserver"/></pre><br />
<br />
<span style="color:blue;">FaceTime_*</span>. Определяет адрес и порт обособленного сервера видео-конференций. Вместо символа * подлежит указанию алиас сервера. Эта настройка должна присутствовать для каждого упомянутого алиаса кроме «local». Например <br />
<pre><add key="FaceTime_futurama" value="192.168.0.10:4092"/></pre><br />
<br />
<br />
<br />
<div id="ThreadManagement"></div><br />
'''Раздел <span style="color:green;">Управление потоками</span>.'''<br />
<br />
Позволяет ограничивать максимальное количество потоков-обработчиков для отдельных видов работ.<br />
<br />
<br />
<span style="color:blue;">ThreadCountLowLimit</span>. Количество потоков в общем пуле системы, свободно доступных службе сервера. По умолчанию 500.<br />
<br />
<span style="color:blue;">ThreadCountHighLimit</span>. Максимально допустимое количество потоков в общем пуле системы, доступных службе сервера. Потоки, находящиеся в разнице между нижним и верхним ограничениями, выделяются системой с запаздыванием. По умолчанию 700.<br />
<br />
<br />
<br />
<span style="color:blue;">CachedThreadFreeMode</span>. Режим работы пула асинхронных потоков. «0» по умолчанию - использовать пул, никогда не уничтожать потоки, «1» - не использовать пул, уничтожать потоки сразу после использования, «2» - размещать в пул на 1 секунду, уничтожать по истечении в случае простоя.<br />
<br />
<br />
<span style="color:blue;">CheckReleaseRWOnAbort</span>. По умолчанию «1» - производить дополнительную проверку блокировки критической секции сервера состояний перед освобождением асинхронного потока и освобождать в случае обнаружения. «0» - не производить.<br />
<br />
<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimit</span>. 0 - отключает ограничение на количество потоков, обслуживающих клиентские запросы. <br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitHighest</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки высокоприоритетных клиентских запросов, таких как Ping. По умолчанию 10.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitData</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов, возвращающих большие объемы данных. По умолчанию 10. В момент длительной отправки данных по сети поток не считается использующимся.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitDownload</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов на скачивание и закачивание файлов. По умолчанию 10. В момент длительной отправки данных по сети поток не считается использующимся.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitSetup</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов из раздела администрирования. По умолчанию 5.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitLiveupdate</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов в части проверки обновлений, подготовки архива и его скачивания. По умолчанию совпадает с половиной общего количества ядер всех процессоров сервера, но не менее 2. В момент длительной отправки данных по сети поток не считается использующимся.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitNormal</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов в части проверки обновлений, подготовки архива и его скачивания. По умолчанию 100.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitEvent</span>. Устанавливает максимально допустимое количество потоков, доступных системе для рассылки событий клиентским приложениям. По умолчанию 10.<br />
<br />
<br />
Этот же набор параметров с другим префиксом действует для службы туннелирования клиентских запросов в БД. Их указание требуется в конфигурационном файле сервера, так как конфигурационные параметры передаются в службу туннелирования из основной службы.<br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimit</span>. <br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimitHighest</span>. <br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimitData</span>. <br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimitDownload</span>. <br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimitSetup</span>. <br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimitNormal</span>. <br />
<br />
<br />
<span style="color:blue;">OKTCP_HALL_ThreadCountLimit</span>. Устанавливает максимально допустимое количество потоков, доступных системе для взаимодействия с внешним процессом HAL. По умолчанию 0 - не ограничено.<br />
<br />
<span style="color:blue;">OKTCP_HALR_ThreadCountLimit</span>. Применяется в конфигурационном файле внешнего процесса HAL (oktell.HALRemoteApp.exe) или в собственном (если процесс настроен на работу с конфигурационным файлом основной службы). Устанавливает максимально допустимое количество потоков, доступных внешнему процессу HAL для взаимодействия с основным процессом службы. По умолчанию 0 - не ограничено.<br />
<br />
<span style="color:blue;">Line_ThreadCountLimit</span>. Устанавливает максимально допустимое количество потоков, обслуживающих каналы АТС. По умолчанию 20.<br />
<br />
<span style="color:blue;">Script_ThreadCountLimit</span>. Устанавливает максимально допустимое количество потоков, обслуживающих сценарии. По умолчанию 20.<br />
<br />
<span style="color:blue;">TML_ThreadCountLimit</span>. Устанавливает максимально допустимое количество потоков, обслуживающих звонки в голосовых задачах. По умолчанию 10.<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">LOG</span>.'''<br />
<br />
Хранит настройки лог-сервера комплекса. Среди неописываемых настроек - пути к папкам для сбора журналов.<br />
<br />
<span style="color:blue;">LOG_storedays</span>. Длительность хранения лог-журналов в днях. По умолчанию «7». По истечении указанного периода журналы удаляются системой. В некоторых случаях объем журналов может достигать нескольких гигабайтов за день.<br />
<br />
<span style="color:blue;">LOG_maxfilesize</span>. Максимальный размер одного файла лог-журнала в МБ. При достижении лог-журналом указанного размера логирование прекращается. Имеет воздействие на все лог-журналы, исключая HAL (Hardware). По умолчанию 3 ГБ.<br />
<br />
<span style="color:blue;">LOG_maxpartsize</span>. Позволяет настроить максимальный размер одного файла в МБ. По умолчанию 500 МБ. При достижении лог-журналом указанного размера формируется новый файл. Имеет воздействие на все лог-журналы, исключая HAL (Hardware).<br />
<br />
<span style="color:blue;">LOG_root</span>. Абсолютный или относительный путь к папке с лог-журналами. По умолчанию «Log», то есть относительный путь в каталоге серверной службы/приложения.<br />
<br />
<br />
<div id="DebugLogTcpBufferSizeKB"></div><br />
<span style="color:blue;">DebugLogTcpBufferSizeKB</span>. Позволяет включить логирование информации обо всех объемных пакетах, переданных или отправленных сервером. Указывается размер в KB, выше которого пакеты логируются в Debug лог. По умолчанию 0 - не логировать.<br />
<br />
<div id="DebugLogCPEventTypes"></div><br />
<span style="color:blue;">DebugLogCPEventTypes</span>. 1 - включает логирование информации обо всех событиях, отправляемых в клиентские приложения в Debug-лог. По умолчанию 0 - выключено.<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">DEBUGGING</span>.'''<br />
<br />
Хранит настройки, согласно которым ведется заполнение служебного сервисного лог-журнала. По умолчанию все параметры выставлены в «1», что влечет полное логирование служб сервера. Полное или частичное отключение уменьшает размер журнала, однако не даст информации в случае возникновения сбоев и общением с технической поддержкой.<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">KEYREMOTE</span>.'''<br />
<br />
Хранит настройки для подключения к внешнему серверу, управляющему ключом защиты. Необходимо в редких случаях, если USB-порт на сервере не функционирует должным образом.<br />
<br />
<br />
<br />
<br />
<br />
===Параметры файла конфигурации клиентского приложения===<br />
<br />
<br />
<br />
<span style="color:blue;">Language</span>. Определяет языковую схему, используемую клиентским приложением до момента подключения к соответствующему серверу. После подключения производится принудительная синхронизация языковой схемы. Фактически это происходит в момент отображения окна авторизации. Подробнее в [[#Параметры файла конфигурации серверного приложения|описании ключа]] в разделе серверного приложения.<br />
<br />
<span style="color:blue;">ServerSelectMode</span>. Определяет, каким образом происходит выбор сервера в случае, если указано несколько адресов (нижеперечисленные ключи конфигурации). «0» - в окне авторизации отображается список серверов в соответствии с перечислением в конфигурационном файле. При автоматическом переподключении всегда берется последний активный сервер. «1» - осуществляется автоматический перебор серверов начиная с самого первого. Подключение производится к тому, который дал положительный ответ. При автоматическом подключении без окна авторизации в учет берется не только подключение, но и ответ авторизации. Таким образом будет активирован сервер, успешно подключенный и разрешивший вход. В этом случае в окне авторизации список серверов для выбора не отображается. «2» - перебор серверов осуществляется автоматически, начиная с последнего активированного. «3» - случайный выбор сервера. «4» - основной сервер единственный, при потере связи с ним подключение осуществляется к одному из резервных на основании случайного выбора. По умолчанию - 0.<br />
<br />
<span style="color:blue;">ConnectBackReserve</span>. «1» - активирует режим мониторинга за появлением основного сервера в случае, если текущее подключение установлено с резервным сервером. Применяется при настройке резервных схем с преимущественной привязкой к одному серверу.<br />
<br />
<br />
'''Раздел <span style="color:green;">Подключения к серверу</span>.'''<br />
<br />
<span style="color:blue;">NetConnectionName</span>. Название подключения (сервера) для отображения в окне авторизации (при указании нескольких возможных подключений).<br />
<br />
<span style="color:blue;">LogicServerAddress</span>. Адрес для подключения к серверу логики.<br />
<br />
<span style="color:blue;">LogicServerPort</span>. Порт для подключения к серверу логики.<br />
<br />
<span style="color:blue;">ConnectProtocol</span>. Устанавливает протокол, по которому осуществляется подключение клиента к серверу. 0 - по умолчанию, 1 - Remoting, 2 - OkTCP.<br />
<br />
<span style="color:blue;">NETCLIENT_SERVER_ADDRESS</span>. Адрес для подключения к серверу аппаратуры.<br />
<br />
<span style="color:blue;">NETCLIENT_SERVER_PORT</span>. Порт на сервере для подключения к нему по сигнальному протоколу.<br />
<br />
<span style="color:blue;">NETCLIENT_LOCAL_PORT</span>. Локальный порт для обмена сигнальным трафиком по UDP.<br />
<br />
<span style="color:blue;">NETCLIENT_VOICE_PORT</span>. Локальный порт для обмена голосовым трафиком по UDP. <br />
<br />
<div id="SipDomain"></div><br />
<span style="color:blue;">SipDomain</span>. Переопределяет доменное имя SIP-сервера при отправке регистрационных пакетов с клиентского локального устройства. Явное указание может потребоваться в случае нестандартных настроек NAT сервера.<br />
<br />
<div id="SipPort"></div><br />
<span style="color:blue;">SipPort</span>. Переопределяет порт SIP-сервера при отправке SIP пакетов с клиентского локального устройства. Явное указание может потребоваться в случае нестандартных настроек NAT сервера. <br />
<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Вышеперечисленные параметры (NetConnectionName, ..., NETCLIENT_VOICE_PORT) определяют различные адреса и порты для организации сетевого канала подключения к серверу. Эти параметры могут присутствовать в конфигурационном файле несколько раз с добавлением к концу строки-ключа разных целочисленных индексов. Например NetConnectionName_1 и NetConnectionName_2. Индекс 0 не указывается, вместо него используется значение без индекса. В случае указания в конфигурационном файле нескольких подключений в окне авторизации будет отображен список их имен и доступен выбор одного из них. Это удобно использовать при работе с несколькими серверами с одних и тех же клиентских рабочих станций.</span><br />
<br />
<br />
<div id="SipDomainMode"></div><br />
<span style="color:blue;">SipDomainMode</span>. Режим формирования доменного имени при подключении локального устройства по SIP к серверу. По умолчанию используется IP-адрес указанного в конфигурационном файле [[#LogicServerAddress|доменного имени логического сервера]] (''=2''). Варианты: ''0'' - имя хоста серверной машины, ''1'' - указанное в конфигурационном файле [[#LogicServerAddress|доменное имя логического сервера]]. В любом случае доменное имя может быть явно переопределено параметром конфига [[#SipDomain]], если он установлен для текущего подключения. В большинстве случаев изменения значения этого параметра не требуется<br />
<br />
<div id="SipForceKeepAliveIntervalSec"></div><br />
<span style="color:blue;">SipForceKeepAliveIntervalSec</span>. Позволяет явно включить и задать интервал в секундах для отправки пакетов Keep-Alive в SIP-подключении к серверу. Может потребоваться при настройках NAT для удерживания порта.<br />
<br />
<br />
<span style="color:blue;">WORK_ROOTDIR</span>. Устанавливает в явном виде путь к рабочей папке клиентского приложения. Временные файлы, сценарии, проекты, плагины, каталог по умолчанию для записи разговоров - все кроме основных сборок службы размещается именно там.<br />
<br />
<span style="color:blue;">WORK_ROOTDIR_TYPE</span>. Устанавливает один из нескольких возможных вариантов размещения рабочей папки. Используется, если не задана рабочая папка в явном виде. Возможные варианты: 0 – папка запустившего процесс выполняемого файла, 1 – папка размещения основных сборок приложения, 2 – Documents And Settings\All Users, 3 – Documents And Settings\CurrentUser.<br />
<br />
<span style="color:blue;">AutoUpdate</span>. «1» - обновлять клиента автоматически. «0» - не обновлять автоматически при запуске, если обнаружено отличие версий. По умолчанию «1». Настоятельно не рекомендуется оставлять рабочую версию программы со значением «0» и использовать этот режим только для отладочных целей.<br />
<br />
<span style="color:blue;">AutoUpdateGateway</span>. «1» - обновлять шлюз автоматически. «0» - не трогать. По умолчанию «0». В список шлюзов требуется добавить адрес сервера, если подключение производится к серверу с несколькими сетевыми интерфейсами через интерфейс с индексом более 1. В большинстве случаев указания не требуется.<br />
<br />
<div id="ManualHostAddress"></div><br />
<span style="color:blue;">ManualHostAddress</span>. Альтернативный псевдо-адрес клиентского компьютера для идентификации на сервере в карте сети. Может быть использован для подключения к серверу при динамически выделяемом IP-адресе и сложностях с идентификацией по HostName. Каждый клиент должен иметь уникальное значение ключа, не совпадающее с реальными возможными адресами и именами других компьютеров сети.<br />
<br />
<div id="TerminalMode"></div><br />
<span style="color:blue;">TerminalMode</span>. Определяет режим подстановки адреса (для организации работы в терминальном режиме) - какой адрес берется, какое терминальное расширение для идентификации в карте сети используется (''address/terminalkey'').<br />
0 — адрес локальный, без терминального расширения: ''address''.<br />
1 — адрес локальный, терминальное расширение из текущего конфигурационного файла [[#TerminalAddress|TerminalAddress]]: ''address/terminalkey''.<br />
2 — адрес локальный, терминальное расширение с помощью текущего авторизованного Win-User: ''address/user''.<br />
3 — адрес клиентского терминала (ищется активная сессия авторизованная под совпадающим с текущим win-user), терминальное расширение из текущего конфигурационного файла [[#TerminalAddress|TerminalAddress]]: ''clientaddress/terminalkey''. Если удовлетворяющая условиям терминальная сессия не найдена, то используется локальный адрес. Если терминальное расширение не задано - не используется. <br />
По умолчанию 1.<br />
<br />
<div id="TerminalAddress"></div><br />
<span style="color:blue;">TerminalAddress</span>. Строка, определяющая уникальный адрес клиентского места. Приписывается ко всем адресам компьютера для определения клиентского места в карте офиса (например «FUTURAMA/terminal1»). Именно эту строку необходимо будет указать в карте офиса для идентификации. Решает проблему терминальных подключений, где все клиенты физически запускаются с одного компьютера. По умолчанию «».<br />
<br />
<div id="ShowLoginAuthMode"></div><br />
<span style="color:blue;">ShowLoginAuthMode</span>. ''1'' - отображать выбор способа авторизации (active dictionary/oktell), ''0'' - не отображать и использовать всегда стандартный режим. По умолчанию ''1''.<br />
<br />
<span style="color:blue;">TimeSynchronization</span>. «1» - синхронизировать время с сервером при запуске, «0» - не синхронизировать. По умолчанию «1».<br />
<br />
RestartApplicationWithProcess</span>. «1» - любой перезапуск клиента производится с выгрузкой процесса. «0» - выгрузка процесса производится только для применения обновлений, другие перезапуски осуществляются внутри процесса. По умолчанию «0». <br />
<br />
ProcessPriority</span>. Приоритет процесса клиентского приложения и процесса обслуживания внешних звуковых устройств. «0» - нормальный, «1» - выше среднего, «2» - высокий, «3» - реального времени. По умолчанию «1».<br />
<br />
<span style="color:blue;">HAL_skip_loading</span>. «1» - пропускать загрузку модуля обслуживания устройств работы со звуком. «0» - нормальный режим.<br />
<br />
<span style="color:blue;">Register_ocx</span>. «1» - регистрировать библиотеки обслуживаемых устройств перед запуском, «0» - не регистрировать. По умолчанию «1».<br />
<br />
<span style="color:blue;">ClientWebServerPort</span>. Устанавливает порт слушателя [[Клиентский интерфейс|HTTP-запросов]] к клиентскому приложению (например запрос http://localhost:4059/callto?number=184 - команда на звонок через Oktell). Доступ возможен только по локальному loopback интерфейсу.<br />
<br />
<span style="color:blue;">ComAsyncEventing</span>. Применяется для форсированной активации/отключения соответствующего режима COM-ядра без изменения кода приложения. Активирует/деактивирует режим раздачи событий COM-объекта в асинхронных служебных потоках. Применяется только в случае указания значений «1» или «0». По умолчанию применяется режим, установленный в коде внешнего интегрирующего приложения. Подробно в руководстве по интеграции (раздел «Октелл в других проектах», статья «Загрузка и выгрузка модуля»).<br />
<br />
<span style="color:blue;">ComXmlFullLogging</span>. Применяется для форсированной активации/отключения соответствующего режима COM-ядра без изменения кода приложения. Активирует/деактивирует режим полного логирования всех событий и вызовов управляющего объекта. Применяется только в случае указания значений «1» или «0». По умолчанию применяется режим, установленный в коде внешнего интегрирующего приложения. Подробно в руководстве по интеграции (раздел «Октелл в других проектах», статья «Загрузка и выгрузка модуля»).<br />
<br />
<span style="color:blue;">TRACE_HARDWARE</span>. Уровень трассировки аппаратного модуля. Битовая маска xxxx. C конца: 0 - TraceCall, 1-TraceEvents, 2-TraceVoice, 3-TraceNet. По умолчанию «1». Для полной трассировки значение «1111111111».<br />
<br />
<span style="color:blue;">SEPARATE_PROCESS</span>. «1» - запускать отдельный процесс для работы с устройствами. «0» - работать с устройствами в собственном процессе. По умолчанию «1».<br />
<br />
<span style="color:blue;">JITTER_DEPTH</span>. Значение глубины джиттер-буфера на клиенте, измеряемое в количестве пакетов по 20 мс. Минимальное значение - «0», по умолчанию - «6». При увеличении значения происходит рост задержки в голосовом обмене по направлению звука в локальное устройство, эффективнее устраняя влияние проблем сети. При указании «0» джиттер буфер не используется.<br />
<br />
Если наблюдается поступление пакетов вперемешку с незначительным разбросом, и/или периодические задержки с последующим одновременным поступлением серии пакетов, увеличение значения может способствовать выравниванию звука. Для диагностики этого явления можно активировать логирование голосового трафика (TRACE_HARDWARE) или использовать программы-перехватчики трафика (снифферы), например WireShark.<br />
<br />
<span style="color:blue;">WAVE_COUNT</span>. Значение, определяющее количество буферов для обмена звуком со звуковым устройством. Минимальное значение - «2», по умолчанию - «2». При увеличении значения происходит рост задержки в голосовом обмене по направлению звука в локальное устройство, эффективнее устраняя влияние проблем в медлительности звукового устройства.<br />
<br />
Если при ровно поступающем звуке из сети (диагностировать можно с помощью отладочной записи на входе - WAVE_COUNT, либо с помощью программ-перехватчиков трафика, например WireShark) наблюдается щелканье или пропадание кусков голосового потока, увеличение значения может способствовать выравниванию звука.<br />
<br />
<span style="color:blue;">WRITE_VOICE</span>. Отладочный параметр для оценки звукового потока на входе в клиентский HAL из сети до воспроизведения непосредственно в устройстве. «1» - отладочная запись в файл включена, файл с именем, соответствующим текущему времени размещается в корне клиентского приложения . «0» - отладочная запись отключена. По умолчанию «0».<br />
<br />
<span style="color:blue;">WAVEIN_AUTOCLOSE</span>. «1» - закрывать устройство ввода звука после завершения коммутации. «0» - оставлять открытым. По умолчанию «0». <br />
<br />
<span style="color:blue;">WAVEOUT_AUTOCLOSE</span>. «1» - закрывать устройство вывода звука после завершения коммутации. «0» - оставлять открытым. По умолчанию «0».<br />
<br />
<span style="color:blue;">USE_DIRECTSOUND</span>. Тип работы со звуком по умолчанию. Выбирается в клиентском интерфейсе. «1» - использовать для работы со звуком библиотеки DirectSound. «0» - обычный режим через системные функции Windows Multimedia (WMM). По умолчанию «0».<br />
<br />
<span style="color:blue;">NETCLIENT_PAYLOAD</span>. Кодек по умолчанию для обмена голосовым трафиком. Выбирается в клиентском интерфейсе. Здесь служит для задания начальной настройки. 0 - 711mulaw, 8 - 711alaw, 41 - gsm610. По умолчанию «8».<br />
<br />
<span style="color:blue;">PHONEDEVICE_WAVEOUT</span>. Устройство вывода звука (спикер) по умолчанию. Выбирается в клиентском интерфейсе. Здесь служит для задания начальной настройки.<br />
<br />
<span style="color:blue;">PHONEDEVICE_WAVEIN</span>. Устройство ввода звука (микрофон) по умолчанию. Выбирается в клиентском интерфейсе. Здесь служит для задания начальной настройки.<br />
<br />
<span style="color:blue;">PHONEDEVICE</span>. Имя устройства по умолчанию. Выбирается в клиентском интерфейсе. Здесь служит для задания начальной настройки.<br />
<br />
<span style="color:blue;">SIGNAL_VOLUME</span>. 0-100. Уровень громкости генерируемых в локальное устройство системных звуков и тонов. По умолчанию 50.<br />
<br />
<br />
<br />
<div id="UseKeyHook"></div><br />
<span style="color:blue;">UseKeyHook</span>. Параметр позволяет принудительно отключить режим перехвата действий клавиатуры для управления гарнитурой. Отключение может понадобиться при обнаружении проблем и конфликтов с операционной системой. «1» - режим перехвата активирован. «0» - режим перехвата деактивирован. По умолчанию «1». Выключение требуется на 64 разрядных ОС при работе версий до 2.8.130325.<br />
<br />
<span style="color:blue;">default_HeadSet_AutoHookUp</span>. Определяет используемый по умолчанию режим автоподнятия трубки на гарнитуре при поступлении входящего звонка. После фактического изменения настроек пользователем в параметрах локального устройства значение из конфигурационного файла теряет актуальность. По умолчанию «1».<br />
<br />
<span style="color:blue;">default_HeadSet_UseKeyBoard</span>. Определяет используемый по умолчанию режим перехвата нажатий на клавиатуре для управления гарнитурой. После фактического изменения настроек пользователем в параметрах локального устройства значение из конфигурационного файла теряет актуальность. По умолчанию «1».<br />
<br />
<span style="color:blue;">default_HeadSet_UseACM</span>. Определяет, активен ли по умолчанию режим автодозвона для гарнитуры. После фактического изменения настроек пользователем в параметрах локального устройства значение из конфигурационного файла теряет актуальность. По умолчанию «1».<br />
<br />
<span style="color:blue;">default_Phone_ShowRingPopup</span>. Определяет используемый по умолчанию способ отображения информации о вызывающем абоненте (всплывающее окно/всплывающее уведомление). После фактического изменения настроек пользователем в параметрах локального устройства значение из конфигурационного файла теряет актуальность. По умолчанию «1».<br />
<br />
<span style="color:blue;">WatcherResourceLogType</span>. Формат логирования ресурсов. С помощью параметра можно настроить вывод в клиентский лог-журнал WATCHER информации по использованию процессом ресурсов системы. Объем используемой памяти, количество открытых дескрипторов, количество потоков, пользовательские системные ресурсы, ориентировочное среднее процессорное время по всему процессу и отдельно по всем его потокам. 0 - не логировать, 1 - информация о процессе каждую секунду, 2 - информация о процессе и активным потокам каждую секунду, 3 - информация о процессе и всем его потокам каждую секунду, 4 - информация о процессе каждую минуту. По умолчанию 4.<br />
<br />
<span style="color:blue;">RestoreLastModules</span>. «1» - осуществляет при загрузке приложения загрузку и восстановление модулей, активных перед закрытием программы. «0» - запускает приложение с пустым фоном без дополнительной загрузки модулей; это экономит время на загрузке, так как некоторые модули требуют достаточно длительного времени для полной загрузки, однако пользователь при необходимости сам может активировать модуль по стандартной схеме из главного меню. По умолчанию «1».<br />
<br />
<span style="color:blue;">ShowVideoNoise</span>. «1» - в видео-окне модуля ТЕЛЕФОН при отсутствии видео-сигнала отображается черно-белый шум, «0» - черное окно. По умолчанию «1».<br />
<br />
<span style="color:blue;">CameraFrameFrequencyLimit</span>. Устанавливает ограничение на количество передаваемых кадров из клиентского приложения в сеть в ходе видео-сессии. Может использоваться при необходимости снизить исходящий трафик при видео-коммутациях с настраиваемой клиентской рабочей станцией.<br />
<br />
<span style="color:blue;">CameraJitterDepth</span>. Глубина джиттер-буфера фреймов с камеры. Позволяет нивелировать задержку в выдаче кадров в целях выравнивания отправляемого видео-потока. По умолчанию «3». «0» - не использовать джиттер. <br />
<br />
<span style="color:blue;">Phone_UseBlockedDelay</span>. «1» - использует асинхронный отложенный механизм по выставлению заблокированного состояния модулю [[Телефон]]. «0» - заблокированное состояние выставляется сразу (может потребоваться при работе на медленных машинах, где асинхронность сказывается отрицательно с приведением телефона в недееспособное состояние. Рекомендуется изменять только при соответствующем запросе службы технической поддержки). По умолчанию «1».<br />
<br />
<span style="color:blue;">Phone_ACMMode</span>. Определяет порядок действий при нажатии на кнопку «Позвонить» в модуле [[Телефон]]. «0» - стандартная последовательность действий: сначала производится вызов абонента, потом обратный вызов пользователя. «1» - обратная последовательность: сначала производится вызов самого пользователя, потом абонента. См. раздел [[Звонки и сервис автодозвона|Телефон. Звонки]].<br />
<br />
<div id="PhoneAllowHotline"></div><br />
<span style="color:blue;">PhoneAllowHotline</span>. ''1'' - разрешить ''HOTLINE'' вызовы из локального устройства на SIP-сервер (при звонке на пустой номер), ''0'' - запретить. По умолчанию ''1''.<br />
<br />
<span style="color:blue;">HeadsetNonACMMode</span>. Режим вызова с гарнитуры без использования автодозвона. «0» - сначала обратный вызов пользователя, потом набор абонента. «1» - поднятие трубки, таймаут, набор номера. По умолчанию «1».<br />
<br />
<span style="color:blue;">UseAutoReconnectOnFly</span>. При установке значения «1» в случае потери связи по каналу TCP между клиентом и сервером клиентское приложение будет пытаться переподключиться без перезагрузки. Неактуально при использовании протокола Remoting (по умолчанию порт 4050).<br />
<br />
<span style="color:blue;">ShowHelpInside</span>. Определяет, где отображать справку по системе. «0» - в отдельных процессах браузера по умолчанию, «1» - во встроенном браузере в окне клиентского приложения. По умолчанию «0».<br />
<br />
<div id="PlugRegLoadType"></div><br />
<span style="color:blue;">PlugRegLoadType</span>. Устанавливает режим загрузки при настройке plugin-программ. «1» - стандартный режим в отдельном домене с последующей выгрузкой. «2» - загрузка plugin-программ в отдельный процесс для настройки. Для загрузки plugin-библиотек используется запускающий модуль oktell.PluginStarter.exe, который может быть скопирован под другим названием. Используемая версия .NET Framework для работы плагина в отдельном процессе определяется в конфигурационном файле этого процесса (по умолчанию oktell.PluginStarter.exe.config). Сам же запускающий модуль (название файла в каталоге клиентского приложения) определяется в конфигурационном файле oktell (клиентском и возможно серверном) с ключом, зависящим от названия основной библиотеки plugin-программы. Например <add key="PluginTcp_libnamewithoutextension" value="oktell.PluginStarter2.exe"/>. Существующий модуль oktell.PluginStarter.exe может скопирован под другим именем и снабжен таким образом индивидуальным конфигурационным файлом. Это может понадобиться в частности для применения разных версий .NET Framework к разным plugin-программам.<br />
<br />
<span style="color:blue;">AutoSortGroups</span>. Устанавливает режим сортировки отделов для модуля [[Сотрудники]] по названиям. По умолчанию «1». В случае отключения ожидается, что сортировкой занимается хранимая процедура, результаты ее исполнения выводятся последовательно.<br />
<br />
<span style="color:blue;">PersonalHandleDepartments</span>. При установке значения «1» обновление состояний внутренних номеров в разделе [[Сотрудники|«Сотрудники. Отделы»]] производится только для номеров, входящих в выделенный отдел. Имеет смысл применять для сокращения трафика. <br />
<br />
<div id="SplitDepartmentsTreeByDot"></div><br />
<span style="color:blue;">SplitDepartmentsTreeByDot</span>. «1» - осуществлять построение глубокого дерева вложенных отделов в модуле «Сотрудники», разбивая указанные для сотрудников отделы на категории по символу «.». «0» - одноуровневое дерево отделов. По умолчанию «0».<br />
<br />
<div id="ExportCsvDelimiter"></div><br />
<span style="color:blue;">ExportCsvDelimiter</span>. Устанавливает символ-разделитель столбцов при формировании файлов экспорта CSV во всех модулях клиентского приложения.<br />
<br />
<div id="ExportTextDelimiter"></div><br />
<span style="color:blue;">ExportTextDelimiter</span>. Устанавливает символ-разделитель столбцов при формировании текстовых файлов с отчетами во всех модулях клиентского приложения.<br />
<br />
<span style="color:blue;">HandleSessionToChangeUserState</span>. «1» - при блокировании сессии авторизованного пользователя windows производится автоматический перевод состояния авторизованного пользователя oktell в «Нет на месте». При возврате в сессию производится автоматический перевод в «На месте». При этом перевод не осуществляется, если в момент блокировки пользователь не был свободен (находился в разговоре, в резерве или в состоянии перерыва), при этом не производится и обратного перевода при входе в сессию. «0» - действие по автоматической смене состояний не применяется. По умолчанию «1».<br />
<br />
<span style="color:blue;">RecordDownloadNameAddInfo</span>. «1» - устанавливает режим выгрузки записей разговоров статистики с включением в имена файлов имен участвующих абонентов.<br />
<br />
<span style="color:blue;">Memory_UseSameDialogForms</span>. «1» - активирует режим использования одних и тех же окон в режиме операторских диалоговых форм без уничтожения и создания при каждом показе. Используется на компьютерах с минимальным объемом оперативной памяти во избежание скачкообразного роста используемой памяти. «0» - деактивирует режим. По умолчанию «0».<br />
<br />
<span style="color:blue;">Debug_PingErrorRestart</span>. «0» - отключает автоматическую перезагрузку клиентского приложения при отсутствии откликов сервера на команды Ping. Используется для отладочных режимов, в основном при отладке plugin-программ. «1» - обычный режим. По умолчанию «1».<br />
<br />
<span style="color:blue;">PingTimeoutNotify</span>. Устанавливает период в миллисекундах, при превышении которого в момент вызова метода Ping возникает уведомление о плохой связи с сервером. <br />
<br />
<span style="color:blue;">ActivationServer</span>. Ссылка на сайт активаций для режима автоматической активации тестовой версии. По умолчанию «http://activate.telsystems.ru».<br />
<br />
<br />
<span style="color:blue;">ShowLoadingBar</span>. Отображает полосу загрузки при открытии модулей клиентского приложения. В некоторых случаях, улучшает работу отрисовки приложения. «0» - не отображает, «1» - отображает. По умолчанию «1».<br />
<br />
<span style="color:blue;">helplinks</span>. Тип используемой справки: «0» - встроенная справка в файле manual.chm, «1» - ссылка на вики. По умолчанию «1».<br />
<br />
<span style="color:blue;">FaxPreperformProcess</span>. Режим работы факса при отправке с клиентского приложения: «0» - обычный режим отправки изображений с преобразованием на сервере к необходимому виду. «1» - использование локального XPS-принтера для изготовления общего многостраничного файла TIFF из нескольких выбранных документов (для этого режима необходимы .NET Framework 3.0, установленный Microsoft Office версии 2003 или старше, установленный XPS принтер). По умолчанию «0».<br />
<br />
<div id="">AutoUserStateChangeOnSystemLock</div><br />
<span style="color:blue;">AutoUserStateChangeOnSystemLock</span>. 1 - активирует режим автоматического перевода состояния пользователя в ''Отключен'' или ''Перерыв'' (в зависимости от присутствия пользователя в режиме Call-центра) при блокировке ОС и автоматический перевод обратно при входе в систему снова. 0 - не использует режим. По умчоланию 1.<br />
<br />
<div id="">PhoneDirectDigit</div><br />
<span style="color:blue;">PhoneDirectDigit</span>. Определяет поведение софт-телефона. 1 - в активном состоянии набор символов осуществляется по одному, ввод в текстовое поле невозможен, кнопка «Набрать» недоступна. 0 - набор осуществляется в текстовое поле, после чего кнопкой «Набрать» отправляется на сервер. По умолчанию 0. Это касается состояний набора номера, коммутаций с абонентами, коммутаций с IVR, ожидания ответа, ожидания факс-сеанса.<br />
<br />
<span style="color:blue;">PhoneIvrDirectDigit</span>. Определяет поведение софт-телефона в состоянии коммутации с IVR при отключенном режиме прямого набора символов. 1 - позволяет активировать прямой набор только для случая коммутации с IVR. 0 - оставляет доступным только набор в текстовое поле с последующей отправкой по нажатию на «Набрать», при этом сценарий завершается и осуществляется набор номера по-новой. По умолчанию 0.<br />
<br />
<span style="color:blue;">PhoneLineDirectDigit</span>. Определяет поведение софт-телефона в состоянии коммутации с абонентом при отключенном режиме прямого набора символов. 1 - позволяет активировать прямой набор только для случая коммутации с абонентом. 0 - оставляет доступным только набор в текстовое поле с последующей отправкой по нажатию на «Набрать», при этом осуществляется переключение. По умолчанию 1.<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">LOG</span>.'''<br />
<br />
Хранит настройки лог-сервера комплекса. Среди неописываемых настроек - пути к папкам для сбора журналов.<br />
<br />
<span style="color:blue;">LOG_storedays</span>. Длительность хранения лог-журналов в днях. По умолчанию «7». По истечении указанного периода журналы удаляются системой. В некоторых случаях объем журналов может достигать нескольких гигабайтов за день.<br />
<br />
<span style="color:blue;">LOG_maxfilesize</span>. Максимальный размер одного файла лог-журнала в байтах. Имеет воздействие на все лог-журналы, исключая HAL (Hardware). По умолчанию 3 ГБ.<br />
<br />
<span style="color:blue;">LOG_root</span>. Абсолютный или относительный путь к папке с лог-журналами. По умолчанию «Log», то есть относительный путь в каталоге клиентского приложения.</div>Peter%D0%92%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8FВыражения2014-06-30T07:46:06Z<p>Peter: </p>
<hr />
<div>[[Сценарии|Наверх]]<br />
<br />
<br />
'''Выражение''' — это заданная создателем сценария последовательность арифметических или строковых действий, оперирующая с константами и переменными и функциями от них. Выражение используется для подстановки в качестве аргумента в значение объектов сценария. Значением выражения могут являться строка и число. Для явного указания строки заключайте текст в кавычки. В противном случае, сначала будут вычислены все арифметические комбинации, доступные для расчета. В приведенных примерах 7 и 8 результат будет разный, то есть началом результирующей строки примера 7 будет являться символ «5», а примера 8 – символы «23».<br />
<br />
<br />
Примеры числовых выражений:<br />
<br />
* [переменная_число_1] + 1 <br />
<br />
* 2 ^ [переменная_число_2] * ( Log10 ( [переменная_число_3] ) + 2 ) <br />
<br />
* Sin ( Len ( [переменная_строка_1] ) ) <br />
<br />
<br />
Примеры строковых выражений:<br />
<br />
* [переменная_строка_1] + [переменная_строка_2] <br />
<br />
* Кусок текста + [ переменная_строка_1] <br />
<br />
* "Кусок текста" + [переменная_строка_1] <br />
<br />
* 2 + 3 + [переменная_строка_1] <br />
<br />
* "2" + "3" + [переменная_строка_1] <br />
<br />
* SubStr ( [переменная_строка], 1, Length ( [переменная_строка] ) - 1 ) <br />
<br />
<br />
Для задания выражения служит соответствующая вкладка окна [[Аргументы]]. Выражения вычисляются в сценариях и результат вычисления подставляется в качестве аргумента текущего выполняемого объекта (свойства объекта) сценария.<br />
<br />
[[Файл:cl_cc_scra_f1_3.png|center]]<br />
<br />
<br />
Операции и подстановочные функции, доступные для использования в составе выражений:<br />
<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
!Операция<br />
!Параметры<br />
!Тип возвращ. значения<br />
!Описание<br />
|-<br />
|''+''<br />
|s1 + s2<br />
x1 + x2<br />
s + x <br />
x + s<br />
|строка<br />
число<br />
строка<br />
строка<br />
|Если один из операндов функции является строкой, то возвращаемым значением будет строка, склеенная из двух частей. Если все операнды являются числами, результатом будет число.<br />
|- <br />
|''-''<br />
|x1 - x2<br />
|число<br />
|Вычитает из числа X1 число X2.<br />
|-<br />
|*<br />
|x1 * x2<br />
|число<br />
|Перемножает числа X1 и X2.<br />
|-<br />
|/<br />
|x1 / x2<br />
|число<br />
|Делит число X1 на число X2.<br />
|-<br />
|^<br />
|x1 ^ x2<br />
|число<br />
|Возводит число X1 в степень X2.<br />
|-<br />
|( )<br />
| <br />
| <br />
|Выставление приоритета любой арифметической операции.<br />
|- <br />
|%<br />
|x1 % x2<br />
|число<br />
|Возвращает действительный остаток от деления.<br />
|-<br />
|&<br />
|x1 & x2<br />
s1 & s2<br />
x & s<br />
s & x<br />
|число<br />
строка<br />
строка<br />
строка<br />
|Соединяет числа или строки (в строковом представлении).<br />
Примеры: 2.16 & 3 => 2.163; "2" & 5 => "25"; 2 & -3 => "2-3"<br />
|} <br />
<br />
<br />
Функции для работы со строковыми и числовыми значениями, доступные для использования в составе выражений:<br />
<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
!Функция<br />
!Параметры<br />
!Тип возвращ. значения<br />
!Описание<br />
|- <br />
|Abs (x)<br />
|x - число<br />
|Число<br />
|Абсолютная величина числа X.<br />
|-<br />
|B64Encode<br />
|s - строка<br />
|Строка<br />
|Кодирует указанную строку в base64, используя текущую кодировку ANSI.<br />
|-<br />
|B64EncodeUtf8<br />
|s - строка<br />
|Строка<br />
|Кодирует указанную строку в base64, используя кодировку UTF-8.<br />
|-<br />
|B64Decode<br />
|s - строка<br />
|Строка<br />
|Декодирует указанную строку из base64, используя текущую кодировку ANSI.<br />
|-<br />
|B64DecodeUtf8<br />
|s - строка<br />
|Строка<br />
|Декодирует указанную строку из base64, используя кодировку UTF-8.<br />
|- <br />
|Cos (x)<br />
|x - число<br />
|Число<br />
|Косинус угла, определяемого параметром X в радианах.<br />
|- <br />
|Ceil (x)<br />
|x - число<br />
|Число<br />
|Округляет число до целого в большую сторону.<br />
|- <br />
|Char (x)<br />
|x - число<br />
|Строка<br />
|Возвращает ANSI-символ, соответствующий коду X (0 - 255).<br />
|-<br />
|DecHex (x)<br />
|x - число<br />
|Строка<br />
|Возвращает строку с HEX-представлением числа.<br />
|-<br />
|Eval (s)<br />
|s - строка<br />
|Число, строка<br />
|Осуществляет расчет вложенного выражения, содержащегося в строке-параметре. Таким образом, давая возможность динамически задавать выражения вне сценария.<br />
Примеры: Eval ( "1 + 3" ) => 4; Eval ( "Привет" ) => ошибка; Eval ( " 'Привет' ") => "Привет"; Eval ( [cтр.переменная_1] ) => результат выполнения выражения, заданного в переменной; Eval ( " [стр.переменная_1] " ) => возвращает содержимое переменной.<br />
|- <br />
|Exp (x)<br />
|x - число<br />
|Число<br />
|Экспонента числа X.<br />
|- <br />
|Floor (x)<br />
|x - число<br />
|Число<br />
|Округляет число до целого в меньшую сторону.<br />
|-<br />
|GuidToInt (s)<br />
|s - строка<br />
|Число<br />
|Формирует доволно уникальное целое число на основе передаваемой строки, содержащей представление GUID-идентификатора.<br />
|- <br />
|HexDec (s)<br />
|s - строка<br />
|Число<br />
|Преобразует строку к числу, рассматривая ее как HEX-представление.<br />
|-<br />
|IndexOf (s1, s2)<br />
|s1 - строка,<br />
s2 - строка<br />
|Число<br />
|Ищет подстроку S2 в строке S1 и возвращает номер позиции. Отсчет ведется с 0 символа. В случае, если подстрока не найдена, возвращается -1.<br />
|- <br />
|Len (s)<br />
|s - строка<br />
|Число<br />
|Длина строки S в символах.<br />
|-<br />
|Lg (x),<br />
Log10 (x)<br />
|x - число<br />
|Число<br />
|Десятичный логарифм числа X.<br />
|-<br />
|Ln (x)<br />
|x - число<br />
|Число<br />
|Натуральный логарифм числа X.<br />
|-<br />
|Log (x, y)<br />
|x - число<br />
y - число<br />
|Число<br />
|Логарифм числа Y по основанию X.<br />
Если в функцию передается один параметр - возвращается его натуральный логарифм.<br />
|- <br />
|Max (x, y)<br />
|x - число<br />
y - число<br />
|Число<br />
|Максимум из двух чисел X и Y.<br />
|-<br />
|Min (x, y)<br />
|x - число<br />
y - число<br />
|Число<br />
|Минимум из двух чисел X и Y.<br />
|- <br />
|NewId ()<br />
| <br />
|Строка<br />
|Возвращает строковое представление вновь сгенеренного GUID-идентификатора. Например 12A5A37E-B97A-45F7-86F1-87C88DA66CBA<br />
|- <br />
|NowTick ()<br />
| <br />
|Число<br />
|Возвращает текущий тик системы (количество миллисекунд с момента запуска операционной системы).<br />
|-<br />
|Num (s)<br />
|s - строка<br />
|Число<br />
|Принудительное преобразование строки к числу. Если строка не является корректным числом, возвращает 0.<br />
|-<br />
|Numval (s)<br />
|s - строка<br />
|Число<br />
|Принудительное преобразование строки к числу. Если строка не является корректным числом, возвращает число, преобразованное из максимального количества начальных символов строки-параметра, соответствующих корректному представлению.<br />
|-<br />
|Random (x)<br />
|x - число<br />
|Число<br />
|Случайное целое число из отрезка [0, x-1].<br />
|-<br />
|Remove (s, idx, len)<br />
|s - строка,<br />
idx - число,<br />
len - число<br />
|Строка<br />
|Возвращает строку, полученную удалением из строки S символов в количестве LEN, начиная с позиции IDX. Отсчет ведется с 0 символа.<br />
|-<br />
|Replace (s, s1, s2)<br />
|s - строка,<br />
s1 - строка,<br />
s2 - строка<br />
|Строка<br />
|Возвращает строку, образованную замещением в строке S всех встречающихся подстрок S1 на подстроки S2.<br />
|-<br />
|Round (x)<br />
|x - число<br />
|Число<br />
|Ближайшее целое значение числа X.<br />
|- <br />
|Sin (x)<br />
|x - число<br />
|Число<br />
|Синус угла, определяемого параметром X в радианах.<br />
|-<br />
|Sqr (x)<br />
|x - число<br />
|Число<br />
|Квадрат числа X.<br />
|-<br />
|Sqrt (x)<br />
|x - число<br />
|Число<br />
|Квадратный корень числа X.<br />
|-<br />
|Str (x)<br />
|x - число<br />
|Строка<br />
|Принудительное преобразование числа к строке.<br />
|-<br />
|Substr (s, idx, len)<br />
|s - строка,<br />
idx - число,<br />
len - число<br />
|Строка<br />
|Возвращает вырезанную из строки S подстроку длиной LEN, начиная с позиции IDX. Отсчет ведется с 0 символа.<br />
|-<br />
|Tan (x)<br />
|x - число<br />
|Число<br />
|Тангенс угла, определяемого параметром X в радианах.<br />
|-<br />
|<div id="Translit"></div>Translit (s)<br />
|s - строка<br />
|Строка<br />
|Транслитерация строки в латинские символы.<br />
|-<br />
|Trim (s)<br />
|s - строка<br />
|Строка<br />
|Возвращает строку, в которой исключены начальные и конечные пробельные символы.<br />
|-<br />
|TrimEnd (s)<br />
|s - строка<br />
|Строка<br />
|Возвращает строку, в которой исключены конечные пробельные символы.<br />
|-<br />
|TrimStart (s)<br />
|s - строка<br />
|Строка<br />
|Возвращает строку, в которой исключены начальные пробельные символы.<br />
|-<br />
|UrlEncode (s)<br />
|s - строка<br />
|Строка<br />
|Кодирует указанную строку в UrlEncode, используя текущую кодировку ANSI.<br />
|-<br />
|UrlEncodeUtf8<br />
|s - строка<br />
|Строка<br />
|Кодирует указанную строку в UrlEncode, используя кодировку UTF-8.<br />
|-<br />
|UrlDecode (s)<br />
|s - строка<br />
|Строка<br />
|Декодирует указанную строку из UrlEncode, рассматривая ее как закодированную с помощью текущей кодировки ANSI.<br />
|-<br />
|UrlDecodeUtf8<br />
|s - строка<br />
|Строка<br />
|Декодирует указанную строку из UrlEncode, рассматривая ее как закодированную с помощью UTF-8.<br />
|}<br />
<br />
<br />
Функции для работы со значениями Дата/время, доступные для использования в составе выражений.<br />
В качестве параметра функций, ожидающих значения Дата/время, может быть передано значение типа Дата/время, либо строковое в установленном формате. Стандартным форматом представления даты в строке является формат «dd.MM.yyyy HH:mm:ss», либо любой другой, установленный в системе или упомянутый в конфигурационном файле серверного приложения.<br />
<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
!Функция<br />
!Параметры<br />
!Тип возвращ. значения<br />
!Описание<br />
|-<br />
|Date (d)<br />
|d - дата/время или строка<br />
|Дата/время<br />
|Возвращает дату, сформированную на основе параметра (начало дня - время дня нулевое).<br />
|-<br />
|DateTime ( Y[, M[, D[, H[, m[, s[, ms]]]]]] )<br />
|Y, M, D, H, m, s, ms - числа<br />
|Дата/время<br />
|Возвращает дату/время, сформированную на основе переданных параметров, которые могут быть не указаны. Соответственно: год, месяц, день, час, минута, секунда, миллисекунда.<br />
|-<br />
|DateTime (s) <br />
|s - строка<br />
|Дата/время<br />
|Принудительное преобразование строки к формату Дата/время.<br />
|-<br />
|DateFormat (s, d)<br />
|s - строка<br />
d - дата/время<br />
|Строка<br />
|Осуществляет преобразование даты к строке с указанным стандартным форматом. Описание форматов и специальных символов можно найти на странице<br />
http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.aspx<br />
|-<br />
|DateDiff (s, d1, d2)<br />
|s - строка<br />
d1 - дата/время<br />
d2 - дата/время<br />
|Число<br />
|Возвращает временной интервал между двумя указанными датами, выраженный в указанных с помощью параметра s единицах:<br />
* Год - yy, yyyy <br />
* Квартал - qq, q <br />
* Месяц - mm, m <br />
* День в году - dy, y <br />
* День - dd, d <br />
* Неделя - wk, ww <br />
* Час - hh <br />
* Минута - mi, n <br />
* Секунда - ss, s <br />
* Миллисекунда - ms<br />
|-<br />
|DayOfWeek (d)<br />
|d - дата/время или строка<br />
|Число<br />
|День недели, которому соответствует дата-параметр (1-7).<br />
|-<br />
|DayOfYear (d)<br />
|d - дата/время или строка<br />
|Число<br />
|Порядковый номер дня в году.<br />
|-<br />
|Hour (d)<br />
|d - дата/время или строка<br />
|Число<br />
|Час.<br />
|-<br />
|Millisecond (d)<br />
|d - дата/время или строка<br />
|Число<br />
|Миллисекунда.<br />
|-<br />
|Minute (d)<br />
|d - дата/время или строка<br />
|Число<br />
|Минута.<br />
|-<br />
|Month (d)<br />
|d - дата/время или строка<br />
|Число<br />
|Месяц.<br />
|-<br />
|Second (d)<br />
|d - дата/время или строка<br />
|Число<br />
|Секунда.<br />
|-<br />
|Year (d)<br />
|d - дата/время или строка<br />
|Число<br />
|Год.<br />
|}<br />
<br />
<br />
Специальные символы, доступные для использования в составе выражений:<br />
<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
!Спецсимвол<br />
!Параметры<br />
!Тип возвращ. значения<br />
!Описание<br />
|- <br />
|EndLine (),<br />
EndLine<br />
|нет<br />
|Строка<br />
|Возвращает символ конца строки.<br />
|-<br />
|Tab (),<br />
Tab<br />
|нет<br />
|Строка<br />
|Возвращает символ табуляции.<br />
|-<br />
|Quot (),<br />
Quot<br />
|нет<br />
|Строка<br />
|Возвращает символ одинарной кавычки.<br />
|-<br />
|DblQuot (),<br />
DblQuot<br />
|нет<br />
|Строка<br />
|Возвращает символ двойной кавычки.<br />
|}<br />
<br />
<br />
Константы, доступные для использования в составе выражений:<br />
<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
!Константа<br />
!Тип возвращ. значения<br />
!Описание<br />
|- <br />
|Pi<br />
|Число<br />
|Число «Пи». 3,1415926...<br />
|- <br />
|Fi<br />
|Число<br />
|Число «Фи». 1,6180339...<br />
|-<br />
|E<br />
|Число<br />
|Число «E». 2,74182818...<br />
|}<br />
<br />
<br />
<br />
В качестве типов параметров (число и строка) указаны ожидаемые типы, в которые будет производится преобразование. Однако параметрами могут являться переменные другого типа, если они удовлетворяют [[Правило включения типов|правилу включения типов]].<br />
<br />
<br />
Функции без параметров можно указывать в выражении как с пустыми круглыми скобками в конце, так и без них.</div>Peter%D0%92%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8FВыражения2014-06-30T07:45:40Z<p>Peter: </p>
<hr />
<div>[[Сценарии|Наверх]]<br />
<br />
<br />
'''Выражение''' — это заданная создателем сценария последовательность арифметических или строковых действий, оперирующая с константами и переменными и функциями от них. Выражение используется для подстановки в качестве аргумента в значение объектов сценария. Значением выражения могут являться строка и число. Для явного указания строки заключайте текст в кавычки. В противном случае, сначала будут вычислены все арифметические комбинации, доступные для расчета. В приведенных примерах 7 и 8 результат будет разный, то есть началом результирующей строки примера 7 будет являться символ «5», а примера 8 – символы «23».<br />
<br />
<br />
Примеры числовых выражений:<br />
<br />
* [переменная_число_1] + 1 <br />
<br />
* 2 ^ [переменная_число_2] * ( Log10 ( [переменная_число_3] ) + 2 ) <br />
<br />
* Sin ( Len ( [переменная_строка_1] ) ) <br />
<br />
<br />
Примеры строковых выражений:<br />
<br />
* [переменная_строка_1] + [переменная_строка_2] <br />
<br />
* Кусок текста + [ переменная_строка_1] <br />
<br />
* "Кусок текста" + [переменная_строка_1] <br />
<br />
* 2 + 3 + [переменная_строка_1] <br />
<br />
* "2" + "3" + [переменная_строка_1] <br />
<br />
* SubStr ( [переменная_строка], 1, Length ( [переменная_строка] ) - 1 ) <br />
<br />
<br />
Для задания выражения служит соответствующая вкладка окна [[Аргументы]]. Выражения вычисляются в сценариях и результат вычисления подставляется в качестве аргумента текущего выполняемого объекта (свойства объекта) сценария.<br />
<br />
[[Файл:cl_cc_scra_f1_3.png|center]]<br />
<br />
<br />
Операции и подстановочные функции, доступные для использования в составе выражений:<br />
<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
!Операция<br />
!Параметры<br />
!Тип возвращ. значения<br />
!Описание<br />
|-<br />
|''+''<br />
|s1 + s2<br />
x1 + x2<br />
s + x <br />
x + s<br />
|строка<br />
число<br />
строка<br />
строка<br />
|Если один из операндов функции является строкой, то возвращаемым значением будет строка, склеенная из двух частей. Если все операнды являются числами, результатом будет число.<br />
|- <br />
|''-''<br />
|x1 - x2<br />
|число<br />
|Вычитает из числа X1 число X2.<br />
|-<br />
|*<br />
|x1 * x2<br />
|число<br />
|Перемножает числа X1 и X2.<br />
|-<br />
|/<br />
|x1 / x2<br />
|число<br />
|Делит число X1 на число X2.<br />
|-<br />
|^<br />
|x1 ^ x2<br />
|число<br />
|Возводит число X1 в степень X2.<br />
|-<br />
|( )<br />
| <br />
| <br />
|Выставление приоритета любой арифметической операции.<br />
|- <br />
|%<br />
|x1 % x2<br />
|число<br />
|Возвращает действительный остаток от деления.<br />
|-<br />
|&<br />
|x1 & x2<br />
s1 & s2<br />
x & s<br />
s & x<br />
|число<br />
строка<br />
строка<br />
строка<br />
|Соединяет числа или строки (в строковом представлении).<br />
Примеры: 2.16 & 3 => 2.163; "2" & 5 => "25"; 2 & -3 => "2-3"<br />
|} <br />
<br />
<br />
Функции для работы со строковыми и числовыми значениями, доступные для использования в составе выражений:<br />
<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
!Функция<br />
!Параметры<br />
!Тип возвращ. значения<br />
!Описание<br />
|- <br />
|Abs (x)<br />
|x - число<br />
|Число<br />
|Абсолютная величина числа X.<br />
|-<br />
|B64Encode<br />
|s - строка<br />
|Строка<br />
|Кодирует указанную строку в base64, используя текущую кодировку ANSI.<br />
|-<br />
|B64EncodeUtf8<br />
|s - строка<br />
|Строка<br />
|Кодирует указанную строку в base64, используя кодировку UTF-8.<br />
|-<br />
|B64Decode<br />
|s - строка<br />
|Строка<br />
|Декодирует указанную строку из base64, используя текущую кодировку ANSI.<br />
|-<br />
|B64DecodeUtf8<br />
|s - строка<br />
|Строка<br />
|Декодирует указанную строку из base64, используя кодировку UTF-8.<br />
|- <br />
|Cos (x)<br />
|x - число<br />
|Число<br />
|Косинус угла, определяемого параметром X в радианах.<br />
|- <br />
|Ceil (x)<br />
|x - число<br />
|Число<br />
|Округляет число до целого в большую сторону.<br />
|- <br />
|Char (x)<br />
|x - число<br />
|Строка<br />
|Возвращает ANSI-символ, соответствующий коду X (0 - 255).<br />
|-<br />
|DecHex (x)<br />
|x - число<br />
|Строка<br />
|Возвращает строку с HEX-представлением числа.<br />
|-<br />
|Eval (s)<br />
|s - строка<br />
|Число, строка<br />
|Осуществляет расчет вложенного выражения, содержащегося в строке-параметре. Таким образом, давая возможность динамически задавать выражения вне сценария.<br />
Примеры: Eval ( "1 + 3" ) => 4; Eval ( "Привет" ) => ошибка; Eval ( " 'Привет' ") => "Привет"; Eval ( [cтр.переменная_1] ) => результат выполнения выражения, заданного в переменной; Eval ( " [стр.переменная_1] " ) => возвращает содержимое переменной.<br />
|- <br />
|Exp (x)<br />
|x - число<br />
|Число<br />
|Экспонента числа X.<br />
|- <br />
|Floor (x)<br />
|x - число<br />
|Число<br />
|Округляет число до целого в меньшую сторону.<br />
|-<br />
|GuidToInt (s)<br />
|s - строка<br />
|Число<br />
|Формирует доволно уникальное целое число на основе передаваемой строки, содержащей представление GUID-идентификатора.<br />
|- <br />
|HexDec (s)<br />
|s - строка<br />
|Число<br />
|Преобразует строку к числу, рассматривая ее как HEX-представление.<br />
|-<br />
|IndexOf (s1, s2)<br />
|s1 - строка,<br />
s2 - строка<br />
|Число<br />
|Ищет подстроку S2 в строке S1 и возвращает номер позиции. Отсчет ведется с 0 символа. В случае, если подстрока не найдена, возвращается -1.<br />
|- <br />
|Len (s)<br />
|s - строка<br />
|Число<br />
|Длина строки S в символах.<br />
|-<br />
|Lg (x),<br />
Log10 (x)<br />
|x - число<br />
|Число<br />
|Десятичный логарифм числа X.<br />
|-<br />
|Ln (x)<br />
|x - число<br />
|Число<br />
|Натуральный логарифм числа X.<br />
|-<br />
|Log (x, y)<br />
|x - число<br />
y - число<br />
|Число<br />
|Логарифм числа Y по основанию X.<br />
Если в функцию передается один параметр - возвращается его натуральный логарифм.<br />
|- <br />
|Max (x, y)<br />
|x - число<br />
y - число<br />
|Число<br />
|Максимум из двух чисел X и Y.<br />
|-<br />
|Min (x, y)<br />
|x - число<br />
y - число<br />
|Число<br />
|Минимум из двух чисел X и Y.<br />
|- <br />
|NewId ()<br />
| <br />
|Строка<br />
|Возвращает строковое представление вновь сгенеренного GUID-идентификатора. Например 12A5A37E-B97A-45F7-86F1-87C88DA66CBA<br />
|- <br />
|NowTick ()<br />
| <br />
|Число<br />
|Возвращает текущий тик системы (количество миллисекунд с момента запуска операционной системы).<br />
|-<br />
|Num (s)<br />
|s - строка<br />
|Число<br />
|Принудительное преобразование строки к числу. Если строка не является корректным числом, возвращает 0.<br />
|-<br />
|Numval (s)<br />
|s - строка<br />
|Число<br />
|Принудительное преобразование строки к числу. Если строка не является корректным числом, возвращает число, преобразованное из максимального количества начальных символов строки-параметра, соответствующих корректному представлению.<br />
|-<br />
|Random (x)<br />
|x - число<br />
|Число<br />
|Случайное целое число из отрезка [0, x-1].<br />
|-<br />
|Remove (s, idx, len)<br />
|s - строка,<br />
idx - число,<br />
len - число<br />
|Строка<br />
|Возвращает строку, полученную удалением из строки S символов в количестве LEN, начиная с позиции IDX. Отсчет ведется с 0 символа.<br />
|-<br />
|Replace (s, s1, s2)<br />
|s - строка,<br />
s1 - строка,<br />
s2 - строка<br />
|Строка<br />
|Возвращает строку, образованную замещением в строке S всех встречающихся подстрок S1 на подстроки S2.<br />
|-<br />
|Round (x)<br />
|x - число<br />
|Число<br />
|Ближайшее целое значение числа X.<br />
|- <br />
|Sin (x)<br />
|x - число<br />
|Число<br />
|Синус угла, определяемого параметром X в радианах.<br />
|-<br />
|Sqr (x)<br />
|x - число<br />
|Число<br />
|Квадрат числа X.<br />
|-<br />
|Sqrt (x)<br />
|x - число<br />
|Число<br />
|Квадратный корень числа X.<br />
|-<br />
|Str (x)<br />
|x - число<br />
|Строка<br />
|Принудительное преобразование числа к строке.<br />
|-<br />
|Substr (s, idx, len)<br />
|s - строка,<br />
idx - число,<br />
len - число<br />
|Строка<br />
|Возвращает вырезанную из строки S подстроку длиной LEN, начиная с позиции IDX. Отсчет ведется с 0 символа.<br />
|-<br />
|Tan (x)<br />
|x - число<br />
|Число<br />
|Тангенс угла, определяемого параметром X в радианах.<br />
|-<br />
|<div id="Translit"></div>Translit (s)<br />
|s - строка<br />
|Строка<br />
|Транслитерация строки в латинские символы.<br />
|-<br />
|Translit (s)<br />
|s - строка<br />
|Строка<br />
|Возвращает строку, в которой произведена транслитерация всех национальных символов в латиницу.<br />
|-<br />
|Trim (s)<br />
|s - строка<br />
|Строка<br />
|Возвращает строку, в которой исключены начальные и конечные пробельные символы.<br />
|-<br />
|TrimEnd (s)<br />
|s - строка<br />
|Строка<br />
|Возвращает строку, в которой исключены конечные пробельные символы.<br />
|-<br />
|TrimStart (s)<br />
|s - строка<br />
|Строка<br />
|Возвращает строку, в которой исключены начальные пробельные символы.<br />
|-<br />
|UrlEncode (s)<br />
|s - строка<br />
|Строка<br />
|Кодирует указанную строку в UrlEncode, используя текущую кодировку ANSI.<br />
|-<br />
|UrlEncodeUtf8<br />
|s - строка<br />
|Строка<br />
|Кодирует указанную строку в UrlEncode, используя кодировку UTF-8.<br />
|-<br />
|UrlDecode (s)<br />
|s - строка<br />
|Строка<br />
|Декодирует указанную строку из UrlEncode, рассматривая ее как закодированную с помощью текущей кодировки ANSI.<br />
|-<br />
|UrlDecodeUtf8<br />
|s - строка<br />
|Строка<br />
|Декодирует указанную строку из UrlEncode, рассматривая ее как закодированную с помощью UTF-8.<br />
|}<br />
<br />
<br />
Функции для работы со значениями Дата/время, доступные для использования в составе выражений.<br />
В качестве параметра функций, ожидающих значения Дата/время, может быть передано значение типа Дата/время, либо строковое в установленном формате. Стандартным форматом представления даты в строке является формат «dd.MM.yyyy HH:mm:ss», либо любой другой, установленный в системе или упомянутый в конфигурационном файле серверного приложения.<br />
<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
!Функция<br />
!Параметры<br />
!Тип возвращ. значения<br />
!Описание<br />
|-<br />
|Date (d)<br />
|d - дата/время или строка<br />
|Дата/время<br />
|Возвращает дату, сформированную на основе параметра (начало дня - время дня нулевое).<br />
|-<br />
|DateTime ( Y[, M[, D[, H[, m[, s[, ms]]]]]] )<br />
|Y, M, D, H, m, s, ms - числа<br />
|Дата/время<br />
|Возвращает дату/время, сформированную на основе переданных параметров, которые могут быть не указаны. Соответственно: год, месяц, день, час, минута, секунда, миллисекунда.<br />
|-<br />
|DateTime (s) <br />
|s - строка<br />
|Дата/время<br />
|Принудительное преобразование строки к формату Дата/время.<br />
|-<br />
|DateFormat (s, d)<br />
|s - строка<br />
d - дата/время<br />
|Строка<br />
|Осуществляет преобразование даты к строке с указанным стандартным форматом. Описание форматов и специальных символов можно найти на странице<br />
http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.aspx<br />
|-<br />
|DateDiff (s, d1, d2)<br />
|s - строка<br />
d1 - дата/время<br />
d2 - дата/время<br />
|Число<br />
|Возвращает временной интервал между двумя указанными датами, выраженный в указанных с помощью параметра s единицах:<br />
* Год - yy, yyyy <br />
* Квартал - qq, q <br />
* Месяц - mm, m <br />
* День в году - dy, y <br />
* День - dd, d <br />
* Неделя - wk, ww <br />
* Час - hh <br />
* Минута - mi, n <br />
* Секунда - ss, s <br />
* Миллисекунда - ms<br />
|-<br />
|DayOfWeek (d)<br />
|d - дата/время или строка<br />
|Число<br />
|День недели, которому соответствует дата-параметр (1-7).<br />
|-<br />
|DayOfYear (d)<br />
|d - дата/время или строка<br />
|Число<br />
|Порядковый номер дня в году.<br />
|-<br />
|Hour (d)<br />
|d - дата/время или строка<br />
|Число<br />
|Час.<br />
|-<br />
|Millisecond (d)<br />
|d - дата/время или строка<br />
|Число<br />
|Миллисекунда.<br />
|-<br />
|Minute (d)<br />
|d - дата/время или строка<br />
|Число<br />
|Минута.<br />
|-<br />
|Month (d)<br />
|d - дата/время или строка<br />
|Число<br />
|Месяц.<br />
|-<br />
|Second (d)<br />
|d - дата/время или строка<br />
|Число<br />
|Секунда.<br />
|-<br />
|Year (d)<br />
|d - дата/время или строка<br />
|Число<br />
|Год.<br />
|}<br />
<br />
<br />
Специальные символы, доступные для использования в составе выражений:<br />
<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
!Спецсимвол<br />
!Параметры<br />
!Тип возвращ. значения<br />
!Описание<br />
|- <br />
|EndLine (),<br />
EndLine<br />
|нет<br />
|Строка<br />
|Возвращает символ конца строки.<br />
|-<br />
|Tab (),<br />
Tab<br />
|нет<br />
|Строка<br />
|Возвращает символ табуляции.<br />
|-<br />
|Quot (),<br />
Quot<br />
|нет<br />
|Строка<br />
|Возвращает символ одинарной кавычки.<br />
|-<br />
|DblQuot (),<br />
DblQuot<br />
|нет<br />
|Строка<br />
|Возвращает символ двойной кавычки.<br />
|}<br />
<br />
<br />
Константы, доступные для использования в составе выражений:<br />
<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
!Константа<br />
!Тип возвращ. значения<br />
!Описание<br />
|- <br />
|Pi<br />
|Число<br />
|Число «Пи». 3,1415926...<br />
|- <br />
|Fi<br />
|Число<br />
|Число «Фи». 1,6180339...<br />
|-<br />
|E<br />
|Число<br />
|Число «E». 2,74182818...<br />
|}<br />
<br />
<br />
<br />
В качестве типов параметров (число и строка) указаны ожидаемые типы, в которые будет производится преобразование. Однако параметрами могут являться переменные другого типа, если они удовлетворяют [[Правило включения типов|правилу включения типов]].<br />
<br />
<br />
Функции без параметров можно указывать в выражении как с пустыми круглыми скобками в конце, так и без них.</div>Peter%D0%9E%D0%B1%D1%89%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D1%8B_%D1%81%D1%86%D0%B5%D0%BD%D0%B0%D1%80%D0%B8%D0%B5%D0%B2Общие компоненты сценариев2014-06-30T07:38:36Z<p>Peter: </p>
<hr />
<div>[[Сценарии|Наверх]]<br />
<br />
<br />
В данном блоке в справочном порядке будут приведены все компоненты, являющиеся общими для всех типов сценариев, а также краткое описание действий и перечни свойств.<br />
<br />
__TOC__<br />
<br />
<br />
<br />
<div id="Start"></div><br />
[[Файл:cl_cc_scr_i01.png|left]]<br />
===Старт=== <br />
<br />
<br />
<br />
<br />
Компонент существует в любом сценарии – с него начинается действие, если трубка обрабатываемой линии положена. Старт на вход принимает параметр, который может сохранить в некоторой внутренней переменной сценария для дальнейшего использования.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Параметр запуска<br />
|Переменная, в которую необходимо сохранить значение, переданное из другого сценария, запустившего этот.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|} <br />
<br />
<br />
<br />
<br />
<div id="Stop"></div><br />
[[Файл:cl_cc_scr_i02.png|left]] <br />
===Стоп===<br />
<br />
<br />
<br />
Осуществляет завершение сценария без разрыва связи. Служит для остановки выполнения сценария после появления соответствующих условий. Классические примеры успешное переключение в сценарии IVR или корректное завершение работы в сценарии диалога.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Возврат управления<br />
|Да/нет. По умолчанию «Да». Флаг определяет необходимо ли в текущей точке передать управление стеку (да) или прекратить выполнение всей последовательности сценариев (нет). Актуален только в сценариях, вызванных через компонент [[#Запуск сценария|Запуск сценария]] с установленным флагом «Возврат управления» и в проектных сценариях IVR, вызванных через компонент [[Компоненты сценариев IVR#Вход в проект|Вход в проект]].<br />
|- <br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|} <br />
<br />
<br />
<br />
<br />
<div id="Pause"></div> <br />
[[Файл:cl_cc_scr_i03.png|left]]<br />
===Пауза===<br />
<br />
<br />
<br />
Осуществляет задержку сценария перед выполнением следующего компонента. В случае указания длительности 0 – компонент пропускается. В некоторых случаях при работе с большими сценариями удобно использовать компонент «Пауза» в качестве пустышки, для удобства и быстроты смены свойств. Например, по веткам выхода из компонента «Меню», где каждое свойство перехода задается внутри специального окна путем выбора одного объекта из списка всех объектов сценария.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Время задержки<br />
|Время в миллисекундах, которое необходимо простоять на компоненте в паузе.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="Appropriate"></div><br />
[[Файл:cl_cc_scr_i04.png|left]]<br />
===Присвоение значения===<br />
<br />
<br />
<br />
Задает значение указанной переменной. В качестве присваемого значения выступает аргумент. Используется механизм преобразования типов, если типы значения аргумента и переменной не совпадают.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Режим<br />
|Одиночный / Множественный<br />
Множественный режим позволяет в одном компоненте производить сразу несколько операций присвоения.<br />
|-<br />
|Переменная<br />
|Локальная переменная, в которую нужно записать указанное значение. <br />
Доступно только в режиме одиночной операции.<br />
|- <br />
|Значение<br />
|Аргумент (значение, переменная, функция, выражение), значение которого необходимо задать для указанной переменной.<br />
Доступно только в режиме одиночной операции.<br />
|- <br />
|Операции<br />
|Список операций (пар элементов {Переменная, Аргумент}), которые будут выполнены в порядке перечисления в окне задания значений нескольких операций присвоения. <br />
Если в одной из операций в аргументе используется переменная, указанная в качестве приемщика значения в более ранней операции по списку, то при расчете значения аргумента будет использовано новое ее значение.<br />
Таким образом компонент с множественным присвоением является компактным аналогом последовательности одиночных присвоений.<br />
|- <br />
|Переход<br />
|Компонент, на который передается управление.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="Compare"></div><br />
[[Файл:cl_cc_scr_i05.png|left]]<br />
===Сравнение===<br />
<br />
<br />
<br />
Сравнивает значения двух аргументов. Компонент осуществляет ветвление сценария. В случае соответствия выбранной логической операции и значений аргументов переход осуществляется по ветке «Правда», в противном случае – по ветке «Ложь».<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1" <br />
|Аргумент 1<br />
|Аргумент (значение, переменная, функция, выражение), значение которого необходимо сравнить.<br />
|-<br />
|Аргумент 2<br />
|Аргумент (значение, переменная, функция, выражение), значение которого необходимо сравнить.<br />
|-<br />
|Тип сравнения<br />
|Один из вариантов логической операции<br />
* = (равно) <br />
* > (больше) <br />
* => (больше или равно) <br />
* < (меньше) <br />
* <= (меньше или равно) <br />
* != (не равно)<br />
|- <br />
|Переход, правда<br />
|Компонент, на который передается управление, если выбранная логическая операция вернула истину.<br />
|-<br />
|Переход, ложь<br />
|Компонент, на который передается управление, если выбранная логическая операция вернула ложь.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|} <br />
<br />
<br />
<br />
<br />
<div id="Menu"></div><br />
[[Файл:cl_cc_scr_i06.png|left]]<br />
===Меню===<br />
<br />
<br />
<br />
Сравнивает аргумент со списком значений. Компонент может иметь неограниченное число веток перехода. Переход осуществляется по ветке значения, с которым совпало значение аргумента. Если совпадений не найдено, переход осуществляется по ветке «Прочее».<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1" <br />
|Аргумент<br />
|Аргумент (значение, переменная, функция, выражение), значение которого необходимо сравнить.<br />
|-<br />
|Значения (варианты)<br />
|Окно ввода значений, позволяющее задать возможные значения и связывающее с каждым указанным значением элемент перехода. Соответственно переход осуществляется по ветке первого найденного совпадающего значения.<br />
|-<br />
|Переход, прочее<br />
|Компонент, на который передается управление, если среди значений не найдено того, которое соответствует значению аргумента.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|} <br />
<br />
<br />
<br />
<br />
<div id="File"></div><br />
[[Файл:cl_cc_scr_i07.png|left]]<br />
===Файловая операция===<br />
<br />
<br />
<br />
Производит указанную дисковую операцию с файлом, каталогом или путем. <br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Путь<br />
|Аргумент, определяющий место размещения объекта, подвергаемого файловой операции - абсолютный путь к каталогу или файлу.<br />
|-<br />
|Тип объекта<br />
|Каталог / Файл / Путь<br />
Определяет перечень операций, возможных для проведения с объектом, указанным с помощью пути.<br />
|- <br />
|Операция<br />
|В зависимости от выбранного типа объекта предоставляет перечень возможных операций.<br />
<br />
Каталог:<br />
* Создать <br />
* Удалить <br />
* Переместить <br />
* Переименовать <br />
* Скопировать <br />
* Проверить существование <br />
* Количество подкаталогов <br />
* Вернуть путь к подкаталогу <br />
* Количество файлов <br />
* Вернуть путь к файлу <br />
<br />
Файл:<br />
* Создать <br />
* Удалить <br />
* Переместить <br />
* Переименовать <br />
* Скопировать <br />
* Проверить существование <br />
* Определить размер <br />
* Определить MD5 содержимого<br />
* Считать данные <br />
* Дописать данные в конец <br />
<br />
Путь:<br />
* Вернуть родительский каталог <br />
* Вернуть имя <br />
* Вернуть имя без расширения <br />
* Вернуть расширение <br />
* Проверить полноту <br />
* Склеить пути<br />
|-<br />
|Новый путь <br />
Новое имя <br />
<br />
Путь копии<br />
|Путь или имя, которое будет присвоено вновь созданному файлу (или каталогу).<br />
В случае, если при переименовании указывается имя без пути, за основу будет взят путь к исходному объекту.<br />
|-<br />
|Данные<br />
|Аргумент, представляющий собой строку. Строка в соответствии с выбранной кодировкой будет переведена в бинарный формат и размещена в содержимом файла при проведении операций создания и записи в файл.<br />
|-<br />
|Кодировка<br />
|Определяет кодировку, посредством которой происходит преобразовании строки в бинарные данные и обратно при проведении операций записи в файл и чтения из файла.<br />
<br />
* Unicode <br />
* UTF-8 <br />
* UTF-7 <br />
* Текущая кодовая страница Windows <br />
* Windows-1251 <br />
* Указанная кодовая страница Windows<br />
|- <br />
|Данные в переменную<br />
|Строковая переменная, куда будет сохранено содержимое файла при проведении операции чтения. Данные из файла считываются в бинарном виде и преобразуются в строку согласно выбранной кодировке.<br />
<br />
<span style="color:red;">Внимание! Если целью считывания данных из файла является их дальнейшая передача вовне без изменений (например используя веб-запрос или сохранение файла, осуществляющие преобразование строки в бинарные данные), необходимо в обоих компонентах использовать кодировки ANSI, так как только она гарантирует однозначное двустороннее преобразование без потери данных.<br />
|- <br />
|Маска<br />
|Аргумент, представляющий собой маску для файлов/каталогов в формате операционной системы, например *.inf или data_??.txt. Используется при определении содержимого каталога.<br />
<br />
<span style="color:red;">Внимание! Если целью определения содержимого является обнаружение конкретного подкаталога/файла, либо обработка всего содержимого, соответствующего маске, то при взятии пути к конкретному файлу используется индекс. В этом случае необходимо также указывать ту же самую маску.<br />
|- <br />
|Индекс<br />
|Аргумент, определяющий индекс файла/подкаталога при взятии его пути. Индекс - порядковый номер объекта в общем списке файлов/подкаталогов исследуемого каталога, отфильтрованного в соответствии с указанной маской.<br />
|-<br />
|Добавочный путь<br />
|Аргумент, определяющий часть пути, подвергаемый склейке с основным. Например, если основной указанный путь 'C:\1', а добавочный '2.txt', то при проведении склейки результатом будет 'C:\1\2.txt'.<br />
|-<br />
|Результат в переменную<br />
|Переменная, куда будет сохранен результат выполнения операции. Может быть строковой, либо числовой для проведения отдельных операций.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление после успешного завершения ввода.<br />
|-<br />
|Переход, не найдено<br />
|Компонент, на который передается управление в случае, если указанный каталог или файл не найден.<br />
|-<br />
|Переход, ошибка<br />
|Компонент, на который передается управление в случае, если в назначенных параметрах допущена ошибка или при проведении указанной операции возникла ошибка.<br />
|- <br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="VoiceMail"></div><br />
[[Файл:cl_cc_scr_i08.png|left]]<br />
===Голосовая почта===<br />
<br />
<br />
<br />
Осуществляет перемещение данных об указанном звуковом файле (чаще после записи в этом же сценарии) в голосовой ящик указанных пользователей. Подробнее о сервисе голосовой почты в разделе [[Кабинет#Голосовая почта|Офис. Кабинет. Голосовая почта]]. <br />
<br />
Заполняя свойство «Голосовой ящик» в окне адресата, можно явно указать существующих в системе пользователей, а также существующие отделы и внутренние номера. Также можно использовать свойство «Ключ получателя», значением которого является вычисляемый аргумент. Это удобно, когда заранее неизвестно получателя, и данные о нем формируются в момент исполнения сценария. При этом сообщение попадет ко всем пользователям, которые указаны явно, составляют указанные внутренние номера и группы. У пользователей, которым поступает голосовая почта, в их модулях появляются данные об абоненте, и возможность прослушать файл. <br />
<br />
Сообщение отправится всем выбранным по одному из двух параметров – указателей адресатов. При этом один компонент формирует группу из всех перечисленных участников - прослушивание одним из них будет отражено на всей записи. При необходимости разослать сообщение независимо нескольким пользователям следует использовать серию из компонентов «Голосовая почта»<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Имя файла<br />
|Аргумент, значение которого определяет абсолютный путь к файлу, который необходимо поместить в голосовой ящик. При использовании после объекта [[Компоненты сценариев IVR#Запись звукового файла|Запись файла]], в котором имя файла генерируется, необходимо в соответствующем свойстве выбирать возврат полного пути в переменную, сохраняющую имя записанного файла.<br />
|-<br />
|Ключ получателя<br />
|Аргумент, определяющий пользователя-получателя почты. В качестве ключа может выступать идентификатор пользователя, его имя или логин. Также ключом может являться внутренний стандартный номер, явно определяющий пользователя через правило звонка («Администрирование. Внутренние номера. Стандартные»). В случае, если номер групповой, то получателями будут являться одновременно все его участники (пользователи указанные в номере явно, или посредством внутренних линий). <br />
В качестве значения аргумента может быть указан список ключей, разделенных запятыми.<br />
|- <br />
|Голосовой ящик<br />
|Окно ввода адресата: списка получателей, среди которых могут быть пользователи системы, отделы и конкретные внутренние номера. Каждый пользователь, участвующей явно через отдел, или через номер получит соответствующее голосовое сообщение.<br />
При одновременном указании голосового ящика и ключа производится объединение всех установленных получателей на момент исполнения компонента.<br />
|- <br />
|Режим подстановки CallerId<br />
|Определяет режим подстановки CallerId.<br />
<br />
* Автоматически. Для сценариев IVR и диалоговых существует возможность автоматически определить номер абонента, чей звонок обслуживается в текущем сценарии. Если голосовую почту оставляет внутренний пользователь системы, будет подставлено его имя. <br />
* Из аргумента. В некоторых случаях (если номер не определен, номер требует преобразований, служебный сценарий, работающий без привязки к каналу и т.д.) номер следует указывать вручную. При выборе данного значения появляется возможность задать callerid из аргумента.<br />
|- <br />
|CallerId<br />
|Доступно только в режиме подстановки CallerId из аргумента.<br />
Аргумент, значение которого подставляется при размещении голосового сообщения в поле таблицы CallerId и устанавливает номер абонента, оставившего сообщение.<br />
|- <br />
|Переход<br />
|Компонент, на который передается управление после успешного завершения ввода.<br />
|- <br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="Notify"></div><br />
[[Файл:cl_cc_scr_i09.png|left]]<br />
===Уведомление===<br />
<br />
<br />
<br />
Уведомление – всплывающее окно, позволяющее донести до пользователя информацию о происходящем в сценарии действии. В качестве адресатов могут быть выбран список из пользователей, отделов и конкретных номеров. Также в качестве адреса может выступать номер, определяемый значением аргумента.<br />
<br />
<br />
Уведомление получат все пользователи, которые указаны персонально, либо состоят в выбранных группах или внутренних номерах. В режиме [[Кабинет#Системные уведомления|Офис. Кабинет. Уведомления]] пользователь всегда сможет просмотреть пришедшие к нему уведомления и осуществить поиск.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Отладочный режим<br />
|Да / нет. По умолчанию «нет». При сохранении сценария может быть установлен общий режим отладки (на странице свойств сценария). Отладочные уведомления будут отображаться только в режиме отладки сценария. Остальные будут отображаться в любом случае.<br />
|- <br />
|Ключ получателя<br />
|Аргумент, определяющий пользователя-получателя сообщения. В качестве ключа может выступать идентификатор пользователя, его имя или логин. Также ключом может являться внутренний стандартный номер, явно определяющий пользователя через правило звонка («Администрирование. Внутренние номера. Стандартные»). В случае, если номер групповой, то получателями будут являться одновременно все его участники (пользователи указанные в номере явно, или посредством внутренних линий). <br />
В качестве значения аргумента может быть указан список ключей, разделенных запятыми.<br />
|-<br />
|Адресат<br />
|Окно ввода адресата: списка получателей, среди которых могут быть пользователи системы, отделы и конкретные внутренние номера. Каждый пользователь, участвующий явно, через отдел, или через номер получит соответствующее уведомление.<br />
При одновременном указании адресата и ключа производится объединение всех установленных получателей на момент исполнения компонента.<br />
|- <br />
|Сохранять в БД<br />
|Да/нет. По умолчанию «да». При установке свойства сообщение будет сохранено в БД и будет доступно в модуле [[Кабинет#Системные уведомления|Офис. Кабинет. Уведомления]]. Если пользователь отсутствует, то сообщение будет доставлено сразу после его авторизации в системе.<br />
|- <br />
|Текст<br />
|Аргумент, определяющий текст уведомления. <br />
Поддерживается минимальный набор тегов HTML для форматирования. Чтобы отобразить текст в виде HTML-документа необходимо его заключить в теги <html>..</html><br />
Ниже за пределами таблицы свойств приведен перечень поддерживаемых HTML-тегов.<br />
|-<br />
|Способ оповещения<br />
|Позволяет выбрать режим, в котором данные поступают указанным адресатам.<br />
<br />
* Всплывающее уведомление. Появляющиеся в правой части экрана цветные окна с информацией. <br />
* Системный чат. Сообщение от имени системы во встроенном [[Сотрудники|системном чате]].<br />
* Лог-журнал. Запись в серверном лог-журнале Common.<br />
|-<br />
|Цвет фона<br />
|Определяет цвет фона всплывающего окошка.<br />
|-<br />
|Скрывать автоматически<br />
|Да/нет. По умолчанию «да». При отключении уведомление будет скрыто только после щелчка пользователя на нем. Поступающие уведомления помещаются в очередь, из которой отображаются в видимых областях экрана в порядке поступления. Очередь сообщений может быть очищена из системного меню в трее. <br />
При отправке уведомления отключенному пользователю с сохранением в БД, отображаемые после авторизации последние несколько пропущенных уведомлений будут в любом случае автоматически скрываться.<br />
|-<br />
|Асинхронный режим<br />
|Да/нет. Способ рассылки уведомлений. При выборе асинхронного режима компонент не ожидает доставки уведомлений пользователям и сразу передает управление следующему объекту сценария. Имеет смысл при рассылке уведомления множеству пользователей из сценариев IVR обработки входящих вызовов во избежание незапланированных пауз. Однако при завершении сценария асинхронные рассылки всех уведомлений, не успевшие завершиться, будут прерваны.<br />
|- <br />
|Разрешать несколько экземпляров на экране<br />
|Да/нет. В некоторых случаях требуется выводить уведомления об одном и том же. Чтобы однотипные отображения не заполняли экран, можно устанавливать режим фильтрации по коду сообщения. Код указывается в открывающемся при этом свойстве.<br />
|-<br />
|Код сообщения<br />
|Доступно только при запрете нескольких экземпляров на экране. Аргумент, определяющий код, на основании которого будет производиться фильтрация и пропуск отображения.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление после успешного завершения ввода.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
'''Поддерживаемые HTML-теги''':<br />
<br />
* <html>..</html> - определяет, что блок текста должен быть отображен как HTML-документ<br />
* <nowiki><span>..</span></nowiki> - текстовый блок, атрибуты: style - стиль <br />
* <nowiki><a>..</a></nowiki> - гиперссылка, атрибуты: href - ссылка, title - заголовок, style - стиль <br />
* <nowiki><b>..</b></nowiki> - полужирный, атрибуты: style - стиль <br />
* <nowiki><u>..</u></nowiki> - подчеркнутый, атрибуты: style - стиль <br />
* <nowiki><i>..</i></nowiki> - курсив, атрибуты: style - стиль <br />
* <nowiki><s>..</s></nowiki> - перечеркнутый, атрибуты: style - стиль <br />
* <nowiki><br></nowiki> - переход на следующую строчку, атрибуты: style - стиль <br />
* <nowiki><center>..</center></nowiki> - выравнение по центру, атрибуты: style - стиль <br />
* <nowiki><p>..</p></nowiki> - параграф, атрибуты: style - стиль > <br />
<br />
<br />
<br />
'''Атрибутами стиля могут быть'''<br />
<br />
1. font-weight - толщина символов<br />
<br />
Значения:<br />
* bold - полужирный <br />
* normal - обычный <br />
(Не поддерживается: bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900)<br /><br />
<br />
2. text-decoration - декорация текста<br />
<br />
Значения:<br />
* line-through - перечеркнутый <br />
* underline - подчеркнутый<br />
* none - отсутствует <br />
(Не поддерживается: blink | overline )<br />
<br />
3. font-style - стиль шрифта<br />
<br />
Значения:<br />
* normal - обычный <br />
* italic - курсив <br />
(Не поддерживается: oblique)<br />
<br />
4. text-align - выравнение текста (только для<nowiki><p></nowiki>)<br />
<br />
Значения:<br />
* left - по левому краю <br />
* right - по правому краю <br />
* center - по центру <br />
* justify - по ширине <br />
<br />
5. color - цвет текста<br />
<br />
Значения:<br />
* red - красный <br />
* green - зеленый <br />
* blue - синий <br />
* black - черный <br />
* white - белый <br />
* yellow - желтый <br />
* gray - серый <br />
* #XXXXXX - шестнадцатеричный код цвета где (X - шестнадцатеричное число 0..F ) <br />
<br />
<br />
<br />
'''Другие атрибуты игнорируются'''<br />
<br />
<br />
Примеры:<br />
* <html>Данное устройство<nowiki> <b style='color:red;'></nowiki>не обнаружено<nowiki></b></html></nowiki><br />
* <html>У Вас новая <nowiki><a style='font-style:bold;color:#127A81</nowiki>;<nowiki>' href='http://mail.ru' title='</nowiki>Нажмите, чтобы открыть<nowiki>'>почта</a></html></nowiki><br />
<br />
<br />
<br />
<br />
<div id="CallTask"></div><br />
[[Файл:cl_cc_scr_i10.png|left]]<br />
===Задание на звонок===<br />
<br />
<br />
<br />
Компонент инициирует задачу однократного выполнения в указанное время на указанный номер. Задача запускает указанный в соответствующем свойстве компонента сценарий IVR. Для формируемой задачи в компоненте указываются инициирующие значения, а также параметр задачи, который будет доступен через функцию «Параметр задачи» в сценарии IVR.<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Для инициации звонка существует альтернатива данному компоненту. Служебный сценарий имеет компонент «Дозвон», рекомендуемый к использованию в большинстве случаев, так как имеет расширенные настройки и не производит дополнительной нагрузки на менеджер задач. <br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Номер<br />
|Аргумент, определяющий номер, по которому производить дозвон.<br />
|-<br />
|Выполнить сразу<br />
|Да/Нет. Сразу выполнять задачу или дожидаться указанного времени.<br />
|- <br />
|Дата/время<br />
|Дата и время, когда производить выполнение задачи.<br />
Поле доступно только при выборе значения «Нет» в свойстве «Выполнить сразу».<br />
|-<br />
|Сценарий<br />
|Текстовое поле с возможностью выбора из списка имеющихся сценариев. Определяет имя сценария, который необходимо запустить после дозвона.<br />
|- <br />
|Параметр запуска<br />
|Числовой аргумент, передающий свое значение в задачу, а через нее на старт запускаемого сценария и в функцию «Параметр задачи». Может быть использован для идентификации через сопоставление по таблице в БД, или для передачи множества параметров. Доступен в сценарии автоматической задачи через встроенную функцию «Параметр задачи».<br />
|-<br />
|Количество сигналов «Занято»<br />
|Сколько дозвонов с ответом «Занято» считать успешным выполнением задачи.<br />
|-<br />
|Количество сигналов «Не отвечает»<br />
|Сколько дозвонов с ответом «Не отвечает» считать успешным выполнением задачи.<br />
|-<br />
|Время фиксации в секундах<br />
|Сколько секунд необходимо выполнять сценарий после дозвона, чтобы считать успешным выполнение задачи.<br />
|-<br />
|Время ожидания ответа<br />
|Сколько секунд ожидать ответа от линии для получения сигнала «Не отвечает».<br />
|-<br />
|Пауза после сигнала «Занято»<br />
|Сколько секунд делать перерыв в выполнении задачи, если от линии получен сигнал «Занято».<br />
|-<br />
|Пауза после сигнала «Не отвечает»<br />
|Сколько секунд делать перерыв в выполнении задачи, если от линии получен сигнал «Не отвечает».<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|} <br />
<br />
<br />
<br />
<br />
<div id="SQL"></div> <br />
[[Файл:cl_cc_scr_i11.png|left]]<br />
===Запрос SQL в БД===<br />
<br />
<br />
<br />
Позволяет производить действия в БД, а также передавать параметры (на вход и на выход). В качестве параметров выступают переменные сценария. Обращение к БД происходит по одной из выбранных технологий: ADO, OLE, ODBC. Для запросов во внешние БД необходимо заполнить строку подключения с помощью помощника – построителя. В случае ошибки переход осуществляется по ветке «Ошибка», и в переменную «Код ошибки» возвращается соответствующий код исключения БД. <br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|SQL запрос<br />
|Окно ввода запроса в формате SQL. В нем вы можете проверить запрос, а также исполнить в базе в момент создания. Параметры запроса в виде переменных SQL обозначаются маркером «@» в начале имени («:» в начале имени для OLE, Oracle, или «?» для входных параметров ODBC). Встроенный парсер разберет параметры и предложит сопоставить им переменные сценария. Входные параметры запроса получат значение из соответствующих переменных сценария перед выполнением запроса, выходные параметры занесут свои значения в переменные сценария после выполнения запроса. Также, если в возвращаемой выборке название какого-либо поля совпадает с названием внутренней переменной сценария, в нее будет занесено соответствующее значение из выборки.<br />
На вкладке «Подключение» вы можете выбрать один из вариантов подключения к БД. Это используется в большей части для получения индивидуальных нестандартных настроек, а также при подключении к внешним БД. В случае использования общего формата ADO, OLE или ODBC (а также подключения по отдельно выделенным каналам к БД Oracle) необходимо заполнить строку подключения. В строке и определяются индивидуальные настройки. Например, таймаут ожидания ответа, или драйвер для подключения к различным СУБД при использовании технологии ODBC. В окне помощника формирования строки подключения вы можете увидеть все доступные для использования параметры и их описания.<br />
В случае необходимости плотного взаимодействия с внешней СУБД, обилия хранимых процедур, запросов и их параметров рекомендуется настроить прилинкованный сервер СУБД в MS SQL Server и работать с внешней СУБД по правилам, определяемым TSQL. Подробнее о процедуре подключения линкованных серверов можно узнать в разделе [[Подключение внешних БД]]<br />
Формат самих запросов SQL вне рамок данного описания. <br />
|- <br />
|Таймаут<br />
|Устанавливает временное ограничение выполнения запроса на сервере БД. По умолчанию 30 секунд.<br />
В случае, если используется уникальная строка подключения, таймаут может быть установлен в ней (Command Time Out). Если значением является 0, таймаут особым образом не устанавливается и применятся таймаут по умолчанию для созданного подключения (берется из строки подключения или из параметров соответствующего драйвера).<br />
Не применяется при подключении к Oracle.<br />
|- <br />
|Код ошибки<br />
|Переменная, в которую сохранится код возврата.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление после успешной транзакции.<br />
|-<br />
|Переход, ошибка<br />
|Компонент, на который передается управление при появлении исключительной ситуации. В переменную свойства «Код ошибки» попадает код полученного исключения из сервера БД.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|} <br />
<br />
<br />
<br />
<br />
<div id="WebRequest"></div><br />
[[Файл:cl_cc_scr_i12.png|left]]<br />
===Запрос к WEB-сервису, XML-запрос===<br />
<br />
<br />
<br />
Позволяет выполнять запросы к web-сервисам в форматах get, post, put, head, delete. На вход может передавать указанным образом заполненную структуру XML документа. Прием данных и их обработку осуществляет также согласно прикрепленной к компоненту структуре XML документа. В случае ошибки переход осуществляется по ветке «Ошибка», и в переменную «Код ошибки» возвращается соответствующий код исключения. Для детального разбора ответа может быть использован совместно с компонентом «Парсер»: сохранив ответ в строковой переменной, его дальнейший анализ производится совокупностью других компонентов сценария.<br />
<br />
Компонент поддерживает работу в сессиях, сохраняя и используя COOKIE, а также HTTPS и подтверждение сертификатов.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Подключение<br />
|Форма, определяющая адрес сервера, а также способ подключения к нему и параметры авторизации. При необходимости устанавливаются адрес и пароль подключения к Proxy-серверу.<br />
|- <br />
|Максимальное число перенаправлений<br />
|Устанавливает ограничение на количество перенаправлений при отправке запроса. По умолчанию свойство не задано, что эквивалентно ограничению в 20 перенаправлений - недостижимое в нормальных условиях значение. 0 - полностью игнорирует перенаправления.<br />
При каждом перенаправлении cookie-файлы накапливаются и передаются дальше.<br />
|- <br />
|Тип контента<br />
|Строка contenttype, подставляемая в отсылаемый запрос.<br />
<br />
<br />
Например: <br />
* application/x-www-form-urlencoded <br />
* text/xml <br />
* text/html <br />
* text/plain <br />
<br />
Допускается указание других строк.<br />
|- <br />
|Метод<br />
|POST / GET / PUT / HEAD / DELETE<br />
В случае POST, PUT, HEAD, DELETE запроса становится доступным формирование и отправка контента.<br />
|-<br />
|Тип запроса<br />
|XML / Аргумент. <br />
Доступно только для методов POST, PUT, HEAD, DELETE. Вариант определения тела запроса - формирование в специальной форме с подстановкой переменных, либо на базе указанного аргумента.<br />
|-<br />
|Запрос<br />
|Доступно только для методов POST, PUT, HEAD, DELETE.<br />
В зависимости от выбранного значения свойства «Тип запроса» это либо форма, определяющая структуру запроса и подстановку в качестве параметров аргументов (переменных) сценария, либо форма выбора строкового аргумента.<br />
|- <br />
|Кодировка запроса<br />
|Определяет в какой кодировке передается тело запроса. В списке возможных вариантов:<br />
* Unicode <br />
* UTF-8 <br />
* UTF-7 <br />
* Текущая кодовая страница Windows <br />
* Windows-1251 <br />
* Указанная кодовая страница Windows <br />
|- <br />
|Дополнительные заголовки<br />
|Позволяет переопределить некоторые стандартные заголовки, а также установить новые персональные заголовки. <br />
Строковый аргумент, подразумевающий многострочное присутствие одного или нескольких заголовков в виде:<br />
HeaderName1: Value1<br />
HeaderName2: Value2<br />
|- <br />
|Дополнительные cookies<br />
|Позволяет установить дополнительные cookie значения.<br />
Строковый аргумент, подразумевающий присутствие одного или нескольких дуплетов "ключ=значение", разделенных переводом строки, запятой или точкой с запятой.<br />
|- <br />
|Кодовая страница Windows для запроса<br />
|Доступно только при выборе кодировки запроса «Указанная кодовая страница Windows». <br />
Числовой аргумент, определяющий кодовую страницу Windows для формирования запроса. <br />
|- <br />
|Режим работы<br />
|Определяет режим работы компонента. Один из четырех вариантов:<br />
* Ожидание результата. Компонент завершает свою работу только после получения ответа от сервера, ошибки сокета или принудительного завершения работы сценария (по обрыву связи). Во всех случаях кроме последнего производится анализ результата и сохранение значений в соответствии с настройками компонента. <br />
* Асинхронный запуск. Запускает асинхронную процедуру запроса к серверу и мгновенно возвращает управление. Ответ сервера не сохраняется и не анализируется. Запрос продолжает выполняться даже после завершения работы сценария. <br />
* Обрыв по таймауту. Ожидает ответа сервера не дольше установленного времени, после чего обрывает запрос и возвращает управление. Если ответ сервера получен в промежутке до таймаута, то производится анализ результата и сохранение значений в соответствии с настройками компонента. В случае принудительного завершения работы сценария (по обрыву связи) выполнение запроса обрывается. <br />
* Выход по таймауту. Ожидает ответа сервера не дольше установленного времени, после чего возвращает управление, оставляя запрос работать асинхронно. Если ответ сервера получен в промежутке до таймаута, то производится анализ результата и сохранение значений в соответствии с настройками компонента. В противном случае ответ сервера не сохраняется (так как сценарий может быть уже завершен). В случае принудительного завершения работы сценария (по обрыву связи) запрос продолжает выполняться.<br />
|- <br />
|Таймаут, секунды<br />
|Определяет таймаут, после которого компонент завершит свою работу в соответствии с выбранным режимом работы. Доступно только для режимов обрыва и выхода по таймауту.<br />
|- <br />
|Тип ответа<br />
|XML / TEXT. Определяет, в каком режиме производить сохранение полученного ответа - парсить XML или сохранять в строковую переменную для дальнейшего анализа. Недоступно для асинхронного режима.<br />
|-<br />
|Ответ(XML)<br />
|Форма, определяющая структуру стандартного ответа сервера и характер распределения выходных значений по переменным сценария. Поддерживает только строгое соответствие дерева XML. Недоступно для асинхронного режима.<br />
|-<br />
|Ответ(строка)<br />
|Переменная, в которую сохранится текст ответа. Недоступно для асинхронного режима.<br />
|-<br />
|Кодировка ответа<br />
|Определяет в какой кодировке форматировать тело ответа. В списке возможных вариантов:<br />
* Unicode <br />
* UTF-8 <br />
* UTF-7 <br />
* Текущая кодовая страница Windows <br />
* Windows-1251 <br />
* Указанная кодовая страница Windows <br />
* Авто (заголовок) <br />
* Авто (метатэги, заголовок)<br />
|- <br />
|Кодовая страница Windows для ответа<br />
|Доступно только при выборе кодировки ответа «Указанная кодовая страница Windows». <br />
Числовой аргумент, определяющий кодовую страницу Windows для разбора ответа.<br />
|-<br />
|Код ошибки<br />
|Переменная, в которую сохранится код возврата сценария.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление после успешной транзакции.<br />
|-<br />
|Переход, таймаут<br />
|Компонент, на который передается управление в случае, если выход осуществляется по таймауту.<br />
|-<br />
|Переход, ошибка<br />
|Компонент, на который передается управление, если web-сервис не доступен или вернул ошибку.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="Parser"></div><br />
[[Файл:cl_cc_scr_i27.png|left]]<br />
===Парсер текста===<br />
<br />
<br />
<br />
Осуществляет разбор любых текстовых структур. Может использоваться метод регулярных выражений или встроенный анализатор гипертекста OQuery. Согласно строке поиска формирует ответ, либо вырезает запрошенный раздел или их совокупность, либо определяет количество элементов в указанном разделе структуры. Сложные структуры могут быть разобраны последовательностью элементов «Парсер». Каждый из которых выделяет из документа некоторую структуру и возвращает ее на вход следующего элемента.<br />
<br />
В общем случае производится разбор HTML, XML структур различного формата. На уровне сценария могут быть организованы циклы и условия. Чаще применяется для разбора ответов веб-сервисов компонентом «Web-запрос».<br />
<br />
Подробнее о компоненте можете прочитать в статье [[Компонент Парсер]]<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Документ<br />
|Аргумент, содержащий текстовую структуру, подлежащую разбору.<br />
|-<br />
|Алгоритм<br />
|Метод разбора:<br />
* Регулярные выражения. <br />
* Язык OQuery для HTML.<br />
* Парсер JSON<br />
|- <br />
|Поисковый запрос<br />
|Строка запроса для соответствующего алгоритма. Язык регулярных выражений совпадает со стандартом .NET. Синтаксис языка OQuery и JSON описан ниже.<br />
|-<br />
|Функция<br />
|Тип запроса (возвращаемого значения)<br />
<br />
В зависимости от выбранного алгоритма допускает выбор одного из возможных вариантов. Для регулярных выражений доступны:<br />
* Содержимое. <br />
* Количество найденных. <br />
<br />
<br />
Для OQuery доступны:<br />
* Документ. Возвращает текст структуры с обрамляющими тэгами. <br />
* Содержимое. Возвращает текст структуры без обрамляющих тэгов. <br />
* Количество элементов. Возвращает число - количество найденных структур, расположенных согласно поисковому запросу на одном уровне. <br />
* Значение атрибута. <br />
* Имя атрибута. <br />
* Количество атрибутов.<br />
<br />
<br />
Для JSON доступны:<br />
* Содержимое. Возвращает текст структуры - значение элемента, объект или массив.<br />
* Количество элементов. Возвращает число - количество вложенных элементов, объектов, массивов.<br />
|- <br />
|Номер элемента<br />
|Доступно для регулярных выражений и языка OQuery.<br />
Аргумент, определяющий порядковый номер структуры на случай, если поисковый запрос нашел несколько результатов. Нумерация у парсера OQuery начинается с 1, нумерация в случае регулярных выражения начинается с 0. <br />
|- <br />
|Атрибут<br />
|Доступно только для алгоритма OQuery и функций, связанных с атрибутами.<br />
Аргумент, определяющий параметры интересующего атрибута.<br />
Функция "Значение атрибута" ждет в качестве значения аргумента имя или порядковый номер атрибута.<br />
Функция "Имя атрибута" ждет в качестве значения аргумента порядковый номер атрибута.<br />
|-<br />
|Результат в переменную<br />
|Переменная, в которую будет сохранен результат применения поискового запроса к документу (число или часть текста вырезанного или сформированного).<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление в случае корректного выполнения поискового запроса.<br />
|-<br />
|Переход, неудача<br />
|Компонент, на который передается управление в случае неудачи при разборе.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|} <br />
<br />
<br />
'''Синтаксис языка OQuery'''<br />
<br />
<br />
Запрос - это набор команд.<br />
<br />
Запрос пишется в одну строчку и выполняется в порядке перечисления (слева направо)<br />
<br />
<br />
Уровни:<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|*<br />
|Все элементы<br />
|-<br />
|><br />
|Все дочерние элементы<br />
|-<br />
|^<br />
|Корневые элементы (содержатся на нулевом уровне искомой структуры)<br />
|- <br />
|пробел<br />
|Все элементы кроме корневых<br />
|}<br />
<br />
<br />
Простые команды:<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|название тега документа<br />
|Теги, английские буквы и цифры (начинаются на букву). <br />
Пример: ^TITLE - найдет тег TITLE в корне <br />
|-<br />
|#значение<br />
|Возвращает теги, у которых атрибут id равен указанному значению. <br />
Пример: FORM#32 - найдет все теги FORM, у которых атрибут id равен 32 ( <FORM class=a id=32> )<br />
|-<br />
|[название=значение]<br />
|Возвращает теги, в теле которых присутствует атрибут с соответствующим названием и значением.<br />
Пример: TABLE[width=90%]<br />
|- <br />
|.значение<br />
|Возвращает теги, у которых атрибут class равен указанному значению. <br />
Пример: INPUT.b.c - найдет теги, у которых атрибут class содержит b и c ( <INPUT class="a b c" /> )<br />
|}<br />
<br />
<br />
Примечание: Результат не зависит от порядка перечисления команд. Например TABLE#big.sample = TABLE.sample#big - найдет теги, у которых атрибут id = big и атрибут class содержит sample.<br />
<br />
<br />
<br />
Операции сравнения:<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|=<br />
|Знак полного совпадения значения аттрибута. Пример: TABLE[width=90%]<br />
|- <br />
|^=<br />
|Начинается со значения. Пример:<nowiki>IMG[src^="http://bulmas.ru/images"]</nowiki><br />
|-<br />
|$=<br />
|Заканчивается значением. Пример: IMG[src$=".gif"]<br />
|-<br />
|*=<br />
|Значение содержится где-то в центре. Пример: IMG[src*="erotic"]<br />
|}<br />
<br />
<br />
Суффиксы:<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|:first<br />
|Возвращает первый элемент коллекции. Пример: TD:first<br />
|-<br />
|:last<br />
|Возвращает последний элемент коллекции. Пример: UL:last <br />
|-<br />
|:parent<br />
|Возвращает родительские теги элементов коллекции. Пример: TABLE>TD>A:parent:parent<br />
|}<br />
<br />
<br />
Простые функции - команды с параметрами:<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|:gt(позиция)<br />
|Возвращает элементы начиная с текущей позиции. Пример: TD:gt(10)<br />
|-<br />
|:lt(позиция)<br />
|Возвращает элементы до текущей позиции включительно. Пример: TD:lt(15)<br />
|- <br />
|:eq(позиция)<br />
|Возвращает элемент соответсвующей позиции, если число отрицательное, то с конца. Пример: TD:eq(-3) третий тег с конца.<br />
|-<br />
|:eq(начало,конец)<br />
|Возвращает набор элементов от начальной до конечной позиции, если числа отрицательные, то с конца.<br />
Пример: TD:eq (10,24) - Аналог TD:eq(10):lt(15)<br />
Пример: TD:eq(-1,-3) - возвращает последние 3 элемента<br />
eq, equal, range - синонимы<br />
|}<br />
<br />
<br />
Сложные функции - команды, которым в качестве параметра можно передавать набор команд:<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|:has(OQuery-запрос)<br />
|Возвращает теги, содержащие другие теги, которые удовлетворяют указанному OQuery-запросу. <br />
Пример: TABLE:has(^TD>A) - аналог TABLE>TD>A:parent:parent<br />
|- <br />
|:not(OQuery-запрос) <br />
|Возвращает теги не удовлетворяющие указанному OQuery-запросу. <br />
Пример: A:not(<nowiki>[href=http://bulmas.ru]</nowiki>) - найдет все теги A, которые не ссылаются на <nowiki>http://bulmas.ru.</nowiki><br />
Или: A:eq(1,10):not(:eq(2)) - Все теги A по порядку от 1 до 10, кроме второго.<br />
|} <br />
<br />
<br />
Пример: Результат следующих запросов разный<br />
<br />
A:has(:not(IMG)) - все теги A, которые содержат не IMG<br />
<br />
A:not(:has(IMG)) - все теги A, которые не содержат IMG<br />
<br />
<br />
Операции и знаки:<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|запрос1 , запрос2<br />
|Запятая (логическое "или"), для перечисления запросов. <br />
Примеры: *A>IMG,>TABLE - вернет все IMG, содержащиеся в A, и TABLE содержащиеся в корне.<br />
INPUT([value="Петр"],[value="Виктор"]) - все INPUT со значениями "Петр" или "Виктор".<br />
|-<br />
|запрос1 + запрос2 <br />
|Плюс, найдет теги удовлетворяющие запросу1, за которым идут теги удовлетворяющие запросу2.<br />
|-<br />
|запрос1 - запрос2<br />
|Минус, найдет теги удовлетворяющие запросу1 перед которым идут теги, удовлетворяющие запросу2.<br />
|}<br />
<br />
<br />
Примечание: Операции могут объединять и более двух запросов например A + IMG + #num - вернет все теги A, за которыми идут теги IMG, за которым в свою очередь идут теги с id="num".<br />
<br />
<br />
<br />
<br />
<br />
Скобки:<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|()<br />
|Скобки, для объединения команд одинакового приоритета. <br />
Пример: (FONT,A)(:has(IMG),:has(SPAN)) - теги FONT и A содержащие IMG или SPAN, <br />
Аналог (FONT:has(IMG), FONT:has(SPAN), A:has(IMG), A:has(SPAN))<br />
|}<br />
<br />
<br />
Наборы команд:<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|^FONT <br />
|все теги FONT корневого (нулевого) уровня.<br />
|- <br />
|>FONT<br />
|все теги FONT первого уровня.<br />
|-<br />
|*FONT<br />
|все теги FONT.<br />
|- <br />
|*>FONT<br />
|все теги FONT кроме корня.<br />
|- <br />
|*>>FONT или >*>FONT<br />
|все теги FONT начиная со второго уровня.<br />
|- <br />
|A>>B<br />
|все теги B находящиеся на втором уровне у A.<br />
|}<br />
<br />
<br />
'''Рекомендации''':<br />
<br />
Время выполнения запроса в основном зависит от размера исходного текста и количетсва тегов в нем, и значительно меньше от длины самого запроса.<br />
<br />
Если данные нужно получать в цикле, постарайтесь сначала сократить размер исходного текста.<br />
<br />
Например, если хотим вернуть прогноз погоды в Казани с содержимого сайта <nowiki>"http://weather.yandex.ru/?city=27595"</nowiki> (Около 50кб) за последние 10 дней, можно воспользоваться запросами<br />
<br />
<br />
tr.data.day>td>b:eq(1)<br />
<br />
tr.data.day>td>b:eq(2)<br />
<br />
tr.data.day>td>b:eq(3)<br />
<br />
и т. д.<br />
<br />
<br />
Каждый запрос выполняется примерно ~50мс.<br />
<br />
Итого: ~500мс<br />
<br />
<br />
Но можно поступить следующим образом: Организуется цепочка из нескольких компонентов «Парсер», первый из которых забирает все нужные теги <nowiki><B></nowiki> запросом <nowiki>tr.data.day>td>b</nowiki> (~50мс) в переменную сценария. Далее в цикле сценария следующими компонентами забираются соответствующие значения<br />
<br />
<nowiki>:eq(1)</nowiki><br />
<br />
<nowiki>:eq(2)</nowiki><br />
<br />
<nowiki>:eq(3)</nowiki><br />
<br />
и т. д.<br />
<br />
<br />
Каждый запрос выполняется примерно ~0.2мс. Итого время выполнения ~50мс. Получается тот же результат, но в 10 раз быстрее.<br />
<br />
<br />
<div id="json"></div><br />
'''Синтаксис парсера JSON'''<br />
<br />
Запросом к парсеру JSON является строка, определяющая ключи свойств объектов или номера элементов в массиве, разделенных символом слэша. При выполнении запроса слева направо парсер на каждом этапе углубляется внутрь структуры JSON.<br />
<br />
Таким образом, строка <br />
<br />
<pre><br />
"values"/3/"x"<br />
</pre><br />
<br />
примененная к структуре JSON с выбранным значением свойства ''Функция'' -> ''Содержимое''<br />
<br />
<pre><br />
{<br />
"name": "xxx",<br />
"values": [<br />
"37",<br />
true,<br />
99,<br />
{"x":2, "y":3},<br />
"value"<br />
],<br />
"result": true <br />
}<br />
</pre><br />
<br />
вернет значение 2.<br />
<br />
<br />
<br />
<br />
<div id="Callback"></div><br />
[[Файл:cl_cc_scr_i13.png|left]]<br />
<br />
===Заказ на встречный звонок===<br />
<br />
<br />
<br />
Сохраняет информацию о заказанном звонке в БД, и отображает в клиентском приложении Oktell у пользователей-адресатов, определяющихся указанным внутренним номером. Подробнее о сервисе заказов встречных звонков в разделе [[Кабинет#Заказы на встречные звонки|Офис. Кабинет. Встречные звонки]].<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Ключ получателя<br />
|Аргумент, определяющий пользователя-получателя сообщения. В качестве ключа может выступать идентификатор пользователя, его имя или логин. Также ключом может являться внутренний стандартный номер, явно определяющий пользователя через правило звонка («Администрирование. Внутренние номера. Стандартные»). В случае, если номер групповой, то получателями будут являться одновременно все его участники (пользователи указанные в номере явно, или посредством внутренних линий). <br />
В качестве значения аргумента может быть указан список ключей, разделенных запятыми.<br />
|- <br />
|Заказ на номер<br />
|Аргумент, определяющий номер, на который заказан встречный звонок. Может быть введен пользователем с клавиатуры, определен как «CallerId», или подставлен из базы по коду.<br />
|- <br />
|Заказ на время<br />
|Ориентировочное время, на которое заказан встречный звонок (сохранится в базе и будет отображено в описании заказа). Не заполнять, если время не указывается.<br />
|- <br />
|Комментарий<br />
|Комментарий к компоненту (сохранится в базе и будет отображен в описании заказа).<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление.<br />
|- <br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|} <br />
<br />
<br />
<br />
<br />
<div id="UserState"></div><br />
[[Файл:cl_cc_scr_i14.png|left]]<br />
===Статус объекта===<br />
<br />
<br />
<br />
Позволяет получить доступ к состояниям различных объектов (на чтение и запись). Например до начала переключения определить статус объекта (пользователя, задачи, номера), чтобы без попытки переключения и, соответственно, без включения сигнала ожидания, озвучить соответствующий текст меню. <br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Действие<br />
|Доступные действия: <br />
* Определить. Формирует работу компонента для записи в назначенную переменную выбранного состояния указанного объекта. <br />
* Установить. Изменяет выбранное состояние указанного объекта на результат вычисления назначенного аргумента. <br />
* Создать. Создает объект выбранного типа, возвращая его идентификатор. <br />
* Удалить. Удаляет объект выбранного типа. <br />
|- <br />
|Тип объекта<br />
|Один из вариантов: Задача, Пользователь, Номер, Линия, Направление, Конференция, Сервер. Тип объекта, с которым производится работа: статус которого подлежит определению, изменению, или который необходимо создать/удалить.<br />
В зависимости от выбранного действия перечень типов может меняться.<br />
|- <br />
|Задача (ключ), Пользователь (ключ), Номер, Линия (ключ), Направление (ключ), Конференция (ключ), Сервер<br />
|Доступны только для действий определить/установить.<br />
В зависимости от выбранного типа поле принимает тот или иной вид:<br />
* Задача. Одна из списка задач системы (или проекта, если сценарий принадлежит проекту). Возможно задание через строковый аргумент «Ключ задачи». Может содержать идентификатор в виде Guid значения «xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx», код задачи или название задачи. Будет использован только в случае, если задача не указана явно в списке имеющихся в системе задач. <br />
* Пользователь. Один из списка пользователей системы. Возможно задание через строковый аргумент «Ключ пользователя». Может содержать идентификатор в виде GUID значения, имя или логин. <br />
* Номер. Аргумент, определяющий внутренний номер (стандартный). <br />
* Линия. Аргумент, определяющий номер, код или Guid-идентификатор линии. <br />
* Направление. Аргумент, определяющий направление (код или название). <br />
* Конференция. Аргумент, определяющий номер комнаты, Guid-идентификатор или код идентификатора конференции.<br />
|- <br />
|Функция / действие<br />
|Доступно только для действий определить/установить.<br />
<br />
В зависимости от выбранного действия и типа объекта поле содержит список доступных состояний.<br />
<br />
''Определение состояния.''<br />
<br />
<br />
Доступные функции для задач: <br />
* Количество абонентов в очереди. <br />
* Наибольшее время ожидания среди абонентов очереди (при сохранении в переменную типа дата/время подставляется значение переменной начиная с 01.01.0000; в переменную строка - значение ЧЧ:мм:cc, ЧЧ при превышении 24 продолжает увеличиваться; в числовую переменную попадает действительное значение количества минут). <br />
* Расчетное время ожидания в очереди (при сохранении в переменную типа дата/время подставляется значение переменной начиная с 01.01.0000; в переменную строка - значение ЧЧ:мм:cc, ЧЧ при превышении 24 продолжает увеличиваться; в числовую переменную попадает действительное значение количества секунд). Осуществляет расчет времени ожидания при гипотетическом размещении текущего звонка в очереди указанной задачи. В случае, если установлен приоритет звонку, он будет учтен. При выполнении в диалоговом и служебном сценариях, где отсутствует понятие приоритета звонка, происходит оценка времени ожидания при размещении в конец очереди. <br />
* Количество активных операторов задачи. <br />
* Количество свободных операторов задачи. <br />
* Активность задачи. <br />
* Доступность по расписанию. 0 - в данный момент недоступна, 1 - в данный момент доступна.<br />
* Проверка доступности входа. -1 - функция не выполнена, 0 - вход разрешен, 1 - текущее время не подходит по расписанию, 2 - текущее время не подходит по установленному периоду активности, 3 - превышение максимального числа одновременно активных внешних линий, 4 - задача не найдена, 5 - несоответствие состояния (задача неактивна, отсутствуют операторы и т.д.), 6 - ошибка при попытке входа. <br />
* Количество использованных линий.<br />
* Количество линий в разговоре.<br />
* Количество линий в дозвоне.<br />
* Количество линий в ожидании оператора.<br />
<br />
<br />
Доступные функции для пользователей:<br />
* Идентификатор пользователя.<br />
* Имя пользователя.<br />
* Логин пользователя.<br />
* Скилл-тэги.<br />
* Идентификатор связанной линии.<br />
* Внутренний номер.<br />
* Статус (0 - не авторизован, 1 - готов, 2 - перерыв, 3 - отключен (нет на месте), 5 - занят, 6 - зарезервирован, 7 - без телефона). <br />
* Признак переадресации.<br />
* Признак перерыва.<br />
* Присутствие в КЦ.<br />
* Ручной режим КЦ.<br />
* Свободное состояние (1-да, 0-нет). <br />
* Количество абонентов в очереди. <br />
* Наибольшее время ожидания среди абонентов очереди. <br />
* Наличие привилегии в правах. <br />
<br />
<br />
Доступные функции для номеров:<br />
* Количество абонентов в очереди. <br />
* Наибольшее время ожидания среди абонентов очереди. <br />
* Наличие свободных абонентов. <br />
* Тип внутреннего номера. (-1 - номер не найден. 1 - стандартный номер, 11...16 - hunt-номер, 101...105 - служебный номер, 201 - быстрый номер, 301 - запуск IVR, 401 - экстренный номер). <br />
* Идентификатор основного объекта.<br />
* Идентификатор основной линии.<br />
* Идентификатор основного пользователя.<br />
<br />
<br />
Доступные функции для линий:<br />
* Идентификатор линии.<br />
* Номер линии.<br />
* Код линии.<br />
* Внутренний номер.<br />
* CallerId.<br />
* CalledId.<br />
* Идентификатор цепочки коммутаций.<br />
* Идентификатор связанного пользователя.<br />
* IP-адрес (шлюза).<br />
* Состояние. ( 1 - Не подключена, 2 - Выключена, 4 - Готова, 8 - Трубка поднята, 16 - Входящий звонок, 32 - Скоммутирована, 64 - Ожидание, 128 - Флеш, 256 - не используется, 512 - Занято, 1024 - Неопределено, 2048 - Зарезервирована, 4096 - Зарезервирована задачей).<br />
* Время активности. <br />
* Название абонента. Установленное ранее в сценарии название. <br />
* Описание абонента. Установленное ранее в сценарии описание. <br />
* Текущая позиция в очереди.<br />
* Текущий приоритет в очереди.<br />
* Расчетное оставшееся время ожидания в секундах.<br />
* Контент линии (XML).<br />
* Контент цепочки (XML).<br />
* Контент цепочки (JSON).<br />
* Поле контента линии.<br />
* Поле контента цепочки (заголовок).<br />
* Поле контента цепочки (коммутация).<br />
* Поле контента цепочки (коммутация).<br />
* Время без звука, сек.<br />
* Идентификатор скоммутированной линии/конференции.<br />
* Номер скоммутированной линии/конференции.<br />
* Принадлежность к направлению.<br />
* Заголовок из входящего SIP INVITE/OK сообщения.<br />
<br />
<br />
Доступные функции для направлений:<br />
* Существование.<br />
* Идентификатор.<br />
* Код.<br />
* Название.<br />
* Проверка активности.<br />
* Проверка выхода во внешнюю сеть.<br />
* Количество линий.<br />
* Количество свободных линий.<br />
* Количество занятых линий.<br />
* Количество линий, занятых исходящими звонками.<br />
* Количество линий, занятых входящими звонками.<br />
* Проверка принадлежности указанной линии к направлению.<br />
* Поиск свободной линии без осуществления резервирования.<br />
<br />
<br />
<br />
Доступные функции для конференций:<br />
* Существование. <br />
* Время активности. <br />
* Идентификатор. <br />
* Код идентификатора. <br />
* Номер комнаты. <br />
* Название.<br />
* Описание.<br />
* Идентификатор управляющего.<br />
* Идентификатор создателя.<br />
* Количество всех участников. <br />
* Количество активных участников. <br />
* Тип доступа (свободный, с разрешения управляющего, закрытый). <br />
<br />
<br />
Доступные функции для сервера:<br />
* Имя хоста сервера.<br />
* Локальный IP-адрес.<br />
* Все локальные IP-адреса.<br />
* Внешний IP-адрес сервера (STUN-запрос). В качестве параметра может быть указан адрес конкретного stun-сервера.<br />
* Значение конфигурации. В качестве параметра указывается ключ конфигурации.<br />
* Рабочее время по графику офиса. В качестве параметра может быть указано значение дата/время. <br />
* Объем виртуальной памяти службы (в МБ).<br />
* Объем виртуальной памяти процесса HAL (в МБ).<br />
* Количество подключенных пользователей.<br />
* Количество внешних линий.<br />
* Количество внутренних линий.<br />
* Регистрационный номер.<br />
* Количество пользователей в лицензии.<br />
* Количество внешних линий в лицензии.<br />
* Количество внутренних линий в лицензии.<br />
* Дата следующего подтверждения лицензии.<br />
<br />
<br />
<br />
''Установка состояния.''<br />
<br />
<br />
Доступные функции для задач: <br />
* Активность (1 - активна, 0 - неактивна). <br />
* Очистить оперативную статистику.<br />
* Синхронизировать таблицу абонентов с БД.<br />
* [[Голосовые задачи#ManualCall|Привязать задачу к звонку оператора]] (дополнительно указывается ключ пользователя или json-форматированная строка, содержащая ключи-значения user и/или idinlist для указания ид абонента в прикрепленной к задаче таблице абонентов).<br />
* Добавить оператора.<br />
* Удалить оператора.<br />
* Изменить количество линий. Используется для ограничения одновременного количества звонков по задаче. -1 - снять ограничение.<br />
<br />
<br />
Доступные функции для пользователей: <br />
* Сохранить скриншот (в размерах 640х480 или переопределенных в [[Параметры файлов конфигурации#ScreenShotSize|конфигурационном файле сервера]]). В параметре указывается относительный или абсолютный путь к файлу, куда изображение следует сохранить. Таймаут на исполнение 10 секунд.<br />
* [[Голосовые задачи#ManualCall|Привязать текущий звонок к задаче]] (дополнительно указывается ключ задачи или json-форматированная строка, содержащая ключи-значения task и/или idinlist для указания ид абонента в прикрепленной к задаче таблице абонентов).<br />
* Изменить статус.<br />
* Изменить признак занятости. 0-освободить, 1-занять.<br />
* Изменить признак переадресации. 0-выключить, 1-включить.<br />
* Ввести/вывести в перерыв. 0-вывести, 1-ввести. Для указания причины перерыва может быть указана комбинированная строка ''[сам флаг];[код перерыва];[текстовое описание перерыва]''? например ''1;-1;Обед''.<br />
* Ввести/вывести в коллцентр. 0-вывести, 1-ввести.<br />
* Ввести/вывести в ручной режим коллцентра. 0-вывести, 1-ввести.<br />
<br />
<br />
Доступные функции для линий: <br />
* Разрыв (выполняется безусловно). Производит разрыв и отсоединение линии. <br />
* Мягкий сброс. Производит разрыв с переключением в [[Параметры_АТС#Сценарий IVR вместо отбоя внешней линии|сценарий вместо отбоя]].<br />
* Выход из задачи (1 - применить, 0 - отменить). Фактически используется менеджером задач при обслуживании вызова с участием оператора. Установленный режим будет способствовать следующее переключение абонента на любой другой объект, отличный от оператора с выходом из задачи. Без использования компонента аналогичное действие можно достигнуть, выставив в настройках задачи режим «Выход из задачи при переключении на IVR». Подробно о режиме в разделе [[Голосовые задачи#Дополнительно|Call-центр.Голосовые задачи.Дополнительно]]. <br />
* Название абонента. Отображается в [[Статистика АТС#Журнал звонков|журналах статистики]], а также при звонках на пользователей системы во всплывающем при входящем звонке окне и в разделе [[Телефон|программного телефона]]. <br />
* Описание абонента. Отображается при звонках на пользователей системы во всплывающем при входящем звонке окне и в разделе [[Телефон|программного телефона]]. <br />
* Приоритет очереди. Применяется только при вводе абонента в очереди. Изменение во время нахождения в очереди требует вывода и повторного ввода.<br />
* Поле контента линии.<br />
* Поле контента цепочки (заголовок).<br />
* Поле контента цепочки (коммутация).<br />
* Разрешить DTMF-управление. 1 или 0 - позволяет на время текущей сессии разрешить исполнение команд (FLASH и управление конференциями) через DTMF (для внешних линий).<br />
* Перерегистрировать SIP-поток.<br />
<br />
<br />
Доступные функции для конференции:<br />
* Установить название.<br />
* Установить описание.<br />
* Обновить информацию у клиентов.<br />
* Завершить конференцию.<br />
<br />
<br />
Доступные функции для сервера:<br />
* Обновить список задач. Синхронизирует менеджер задач с базой данных, обновляя список задач и их свойства.<br />
* Обновить общие настройки. Перезагружает текущие общие настройки, задаваемые в разделе ''[[Общие настройки]]'', из БД.<br />
* Перерегистрировать все SIP-потоки.<br />
* [[Динамическое управление картой сети|Изменить карту сети]].<br />
* Перезагрузить сервер состояний (выполняется безусловно). Производится действие, аналогичное нажатию кнопки «Применить» в любом из модулей администрирования. Сервер состояний инициализируется на основе информации в БД. <br />
* Перезагрузить аппаратный модуль (выполняется безусловно). Производится переинициализация аппаратной подсистемы с завершением всех коммутаций и конференций. В случае, если аппаратный модуль настроен на работу в отдельном процессе, производится выгрузка процесса с последующим автоматическим его запуском. <br />
* Перезагрузить службу сервера (выполняется безусловно). Действие производится сразу же без ожидания корректного завершения коммутаций и служебных сценариев. <br />
* Перезагрузить серверную станцию (выполняется безусловно). Отдает команду операционной системе на полное завершение всех процессов с последующей перезагрузкой.<br />
* Сборка мусора .NET.<br />
* Произвести анализ памяти .NET.<br />
* Обновить лицензионный сертификат.<br />
* Удалить из бан-листа.<br />
|- <br />
|Значение в переменную<br />
|Доступно только для действия «Определить».<br />
Переменная, в которую заносится результат вычисления функции.<br />
|- <br />
|Значение<br />
|Доступно только для действия «Установить».<br />
Аргумент, значение которого вычисляется для установки состояния.<br />
|- <br />
|Идентификатор в переменную<br />
|Доступно только для действия «Создать». <br />
Переменная, в которую заносится идентификатор вновь созданного объекта.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="ClientGroup"></div><br />
[[Файл:cl_cc_scr_i15.png|left]]<br />
<br />
===Определить группу клиента===<br />
<br />
<br />
<br />
Осуществляет проверку на принадлежность контакта (определившегося номера телефона, почтового адреса и любого другого переданного аргумента) указанной группе клиентов. Позволяет разделить обработку в сценарии звонков VIP клиентов, клиентов из черного списка, личных контактов и пр.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Контакт<br />
|Аргумент, содержащий произвольную контактную информацию.<br />
|-<br />
|Группа<br />
|Аргумент, содержащий имя группы клиентов.<br />
|- <br />
|Переход, принадлежит<br />
|Компонент, на который передается управление, если соответствующий контакту клиент найден, указанная группа существует, и клиент принадлежит группе.<br />
|- <br />
|Переход, не принадлежит<br />
|Компонент, на который передается управление, если не найден соответствующий контакту клиент, не существует группа, или клиент не принадлежит группе.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="Counter"></div><br />
[[Файл:cl_cc_scr_i16.png|left]]<br />
===Счетчик===<br />
<br />
<br />
<br />
Увеличивает значение выбранного счетчика на 1. Подробнее о счетчиках, их создании и анализе в модуле общего меню [[Отчеты#Счетчики||Call-центр. Отчеты. Счетчики]]. <br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Счетчик<br />
|Список счетчиков, существующих в системе и доступных для увеличения.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление в случае успешной коммутации.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="ExecProcess"></div><br />
[[Файл:cl_cc_scr_i17.png|left]]<br />
===Запуск процесса===<br />
<br />
<br />
<br />
Запускает на сервере внешний процесс или открывает приложение с указанным документом. В сценариях IVR используется чаще для запуска системных программ, а также учетных, сервисных, обслуживающих программ организации-клиента Oktell. <br />
<br />
<span style="color:red;">ВНИМАНИЕ! При работе сервера Oktell в режиме службы запуск процесса производится от имени того пользователя, который указан в настройках службы. По умолчанию это системная учетная запись «NETWORK SERVICE». Запускаемые таким образом процессы выполняются в фоновом режиме и не отображаются на экране пользователя.</span><br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Файла<br />
|Строковый аргумент, определяющий имя или путь к файлу, который необходимо запустить.<br />
|-<br />
|Путь<br />
|Относительный/абсолютный. Определяет, какой путь будет подставляться впереди к имени файла. Относительный – от папки запуска приложения Oktell.<br />
|-<br />
|Параметры командной строки<br />
|Строковый аргумент, определяющий параметры запуска для командной строки, если необходимо.<br />
|-<br />
|Режим запуска<br />
|Определяет способ исполнения указанного файла<br />
* С помощью оболочки. В качестве файла можно указывать документы - их открытие будет осуществляться автоматически в зарегистрированных приложениях, однако становится недоступным использование консоли для ввода/вывода.<br />
* Скрыть окно. Приложение не отображает свое консольное окно.<br />
* Не скрывать окно. Приложение ведет себя стандартным образом.<br />
|-<br />
|Ожидание выхода<br />
|Да/нет. Определяет, приостанавливать ли сценарий в ожидании завершения работы запущенного процесса.<br />
|-<br />
|Консольный ввод/вывод<br />
|Доступно только при ожидании завершения процесса, запущенном в обычном режиме (не с помощью оболочки).<br />
* Нет.<br />
* Только ввод. Позволяет передать произвольные текстовые данные в консоль приложения сразу после старта.<br />
* Только вывод. Позволяет считать произвольные текстовые данные из консоли приложения сразу после завершения.<br />
* Ввод и вывод. Позволяет передать и считать данные.<br />
|-<br />
|Консольный ввод<br />
|Доступно только при ожидании завершения процесса, запущенном в консольном режиме (не с помощью оболочки).<br />
Строковый аргумент, значение которого передается в консоль сразу после запуска приложения.<br />
<br />
<span style="color:red;">ВНИМАНИЕ! При передаче сложных данных для простоты реализации чтения из консоли рекомендуется компоновать данные общим размером в самом начале.<br />
|-<br />
|Консольный вывод в переменную<br />
|Доступно только при ожидании завершения процесса, запущенном в консольном режиме (не с помощью оболочки).<br />
Строковая переменная, в которую полностью сохраняется консольный вывод исполненного приложения.<br />
|-<br />
|Таймаут, мс<br />
|Доступно только для режима ожидания завершения процесса.<br />
Аргумент, определяющий предельное время ожидания, по истечении которого управление будет в любом случае передано дальше по сценарию. «0» - таймаут не установлен.<br />
|-<br />
|Завершать при обрыве<br />
|Доступно только для режима ожидания завершения процесса.<br />
Да/нет. Определяет, следует ли принудительно завершить работу запущенного процесса, если за установленный таймаут он так и не завершился самостоятельно.<br />
|-<br />
|Переход, успех<br />
|Компонент, на который передается управление, если приложение успешно стартовало.<br />
|-<br />
|Переход, таймаут<br />
|Доступно только для режима ожидания завершения процесса.<br />
Компонент, на который передается управление в случае таймаута ожидания.<br />
|-<br />
|Переход, неудача<br />
|Компонент, на который передается управление, если файл не найден, отсутствует доступ, или по другой причине не удалось запустить приложение. <br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="ExecScript"></div><br />
[[Файл:cl_cc_scr_i18.png|left]]<br />
===Запуск сценария===<br />
<br />
<br />
<br />
В случае организации автоматических сервисов размеры сценария могут быть достаточно велики, и компонент «Запуск сценария» предоставляет возможность разбить крупный сценарий на несколько логических блоков. Таким образом, один сценарий передает управление в начало другого сценария. При этом можно задать некоторое значение на запуск, которое примет компонент «Старт» вложенного сценария и сохранит в свою локальную переменную. Помимо этого, все переменные одного типа, которые названы одинаково в запускающем и запускаемом сценариях, перенесут свои значения из одного в другой без изменений. Такой способ запуска называется вложенным.<br />
<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Обработка сценария начинается с компонента Старт и ведется последовательно согласно значениям свойств перехода, если трубка положена (в основном это входящие звонки с внешних линий). В случае, когда трубка уже поднята, после компонента [[#Старт|Старт]] производится безусловный переход к компоненту "Поднять трубку", если такой имеется в сценарии. При этом обработчик пропускает все компоненты, которые находятся между ними. Запуск вложенных сценариев следует этим же правилам.<br />
<br />
<br />
<br />
Также с помощью компонента можно запускать в параллельный процесс любой служебный сценарий, не работающий с зависимыми от основного сценария ресурсами (линией, оператором). При запуске асинхронного служебного сценария начальные значения его переменных, совпадающих по типам и именам с переменными основного сценария, будут установлены в соответствии с их значениями.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Тип запуска<br />
|Определяет тип и формат запуска дочернего сценария. <br />
* Вложенный. Запуск вложенного сценария прекращает выполнение (возможно на время, до возврата управления) текущего сценария и активизирует обработку выбранного сценария того же типа. <br />
* Асинхронный служебный. Запускает в параллельном процессе выполнение выбранного служебного сценария и продолжает выполнение текущего. <br />
* Фоновое медиа-взаимодействие. Доступно только для IVR сценариев. Инициирует дублирующий параллельный сценарий IVR. Подробнее в разделе [[Фоновый IVR-сценарий медиа-взаимодействия|Сценарии IVR. Фоновый сценарий]].<br />
|- <br />
|Сценарий<br />
|Текстовое поле с возможностью выбора из списка имеющихся сценариев. Определяет имя сценария, который необходимо запустить.<br />
|-<br />
|Параметр запуска<br />
|Аргумент, передающий свое значение на старт запускаемого сценария.<br />
|-<br />
|Возврат управления<br />
|Да/нет. По умолчанию «Нет». Определяет способ вызова вложенного сценария. <br />
<br />
При установке значения «Нет» выполнение текущего сценария прекращается и запускается вложенный сценарий (с сохранением значений всех переменных). Такой способ наиболее часто применим на практике. <br />
При установке значения «Да» вложенный сценарий вызывается как функция и после его завершения происходит возврат в точку вызова. Все переменные исходного сценария доступны во вложенном и наоборот, таким образом после возврата они будут иметь соответствующие измененные значения. На процедуру возврата также влияет флаг «Возврат управления» компонента [[#Стоп|Стоп]], - используется во вложенном сценарии после успешного переключения с необходимостью безусловно прервать обработчик сценариев. <br />
<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Обработчик сценариев поддерживает условно неограниченную вложенность и имеет стек с ограничением в 100 сценариев во избежание зацикливания. <br />
<br />
<span style="color:red;">ВНИМАНИЕ! Вызов внутри одной цепочки исполнения может происходить одновременно как с возвратом, так и без возврата.<br />
|- <br />
|Переход<br />
|Компонент, на который передается управление после возврата в случае запуска вложенного сценария, а также непосредственно после запуска служебного сценария.<br />
Поле используется (и обязательно для заполнения) только в случае асинхронного запуска служебного сценария, а также в случае вложенного, если флаг «Возврат управления» установлен.<br />
|- <br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="SipRegister"></div><br />
[[Файл:cl_cc_scr_i45.png|left]]<br />
===Регистрация===<br />
<br />
<br />
<br />
Компонент используется совместно со шлюзом с динамической регистрацией потоков (подробнее в разделе [[Свойства компонентов#IP шлюз|Карта сети. Компоненты. Шлюз]]). Служит для проведения динамической регистрации под указанным аккаунтом перед осуществлением звонка по каналу потока такого шлюза. Параметры аккаунта - логин и пароль - могут быть взяты из БД, вычислены, указаны явно в сценарии. Для проведения регистрации достаточно указать в свойствах компонента шлюз, и свободный поток автоматически будет зарегистрирован и зарезервирован под совершение вызова именно в этом экземпляре сценария. Потоки и линии шлюзов с динамической регистрацией недоступны для выбора ни в задачах, ни в настройках прав пользователей, ни в списках линий при наборе номера компонентами сценариев. Осуществить дозвон через них можно только путем явного указания кода зарегистрированного потока в соответствующий аргумент компонентов «Дозвон» служебного сценария и «Переключение на внешние» сценария IVR. <br />
<br />
<br />
<span style="color:red;">ВНИМАНИЕ! В случае успешной коммутации поток будет разрегистрирован автоматически по завершению разговора и переводу одной из линий потока в состояние готовности. Однако, если коммутации не произведено, то разрегистрация производится автоматически по истечению времени неактивности (3 минуты), либо путем использования этого же компонента с действием «Отмена регистрации».<br />
<br />
<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Действие<br />
|Выбор режима работы. Регистрация / отмена регистрации.<br />
В случае установки режима регистрации осуществляет прямое действие по регистрации аккаунта на сервере и активации (перевода в состояние готовности) одного из потоков указанного шлюза с динамической регистрацией потоков. <br />
В режиме отмены регистрации освобождает аккаунт и переводит указанный поток в отключенное состояние.<br />
|- <br />
|Шлюз<br />
|Доступно только для действия «Регистрация». В списке выбирается один из существующих в карте сети шлюзов с динамической регистрацией потоков.<br />
|- <br />
|Аккаунт<br />
|Доступно только для действия «Регистрация». Аргумент, представляющий собой логин для регистрации потока.<br />
|-<br />
|Пароль<br />
|Доступно только для действия «Регистрация». Аргумент, представляющий собой пароль для регистрации потока.<br />
|-<br />
|Время ожидания<br />
|Доступно только для действия «Регистрация». Максимальное время ожидания регистрации, по истечению которого будет прервана регистрация и произведен выход по ветке «Таймаут».<br />
|-<br />
|Автоматическая отмена регистрации<br />
|Доступно только для действия «Регистрация». Позволяет установить такой режим работы, при котором при любой последующей попытке дозвона по одной из линий зарегистрированного потока даже в случае неудачи (занято, недоступно и т.д.) будет производиться мгновенная отмена регистрации. <br />
|-<br />
|Код потока в переменную<br />
|Доступно только для действия «Регистрация». В случае успешного проведения операции по регистрации в указанную переменную будет размещен Guid-идентификатор зарегистрированного потока. Эта переменная впоследствии может быть использована для осуществления вызова в компонентах [[Компоненты сценариев IVR#Переключение на внешний номер с указанием последовательности выделения линий|Переключение на внешние]] и/или [[Компоненты служебных сценариев#Дозвон|Дозвон]] или отмены регистрации.<br />
|- <br />
|Код ошибки в переменную<br />
|Доступно только для действия «Регистрация». В переменную попадает код ошибки в случае возникновения проблем при регистрации. Большинство кодов совпадают с типами ответов HTTP-сервера (например, 404 - not found).<br />
|-<br />
|Код потока<br />
|Доступно только для действия «Отмена регистрации». Аргумент, представляющий собой Guid-идентификатор потока в строковом представлении. Может быть указан явно, или получен в переменную в одном из предыдущих компонентов «Регистрация».<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление после возврата в случае успешного проведения операции.<br />
|-<br />
|Переход, потоков не найдено<br />
|Доступно только для действия «Регистрация». Компонент, на который передается управление, если у выбранного шлюза нет свободных потоков.<br />
|- <br />
|Переход, таймаут<br />
|Доступно только для действия «Регистрация». Компонент, на который передается управление в случае, если за установленный интервал времени не получен ответ от внешнего сервера/шлюза.<br />
|-<br />
|Переход, ошибка<br />
|Компонент, на который передается управление в случае возникновения ошибок.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="Plugin"></div><br />
[[Файл:cl_cc_scr_i28.png|left]]<br />
===Плагин-компонент===<br />
<br />
<br />
<br />
Компонент позволяет выполнять произвольный сторонний код, подключенный к серверу в виде стандартного плагин-компонента (см. руководство по интеграции, раздел «Встраиваемые plugin-модули»). <br />
<br />
<br />
Подробно об архитектуре исполнения описано в руководстве по интеграции.<br />
<br />
При выполнении компонента осуществляется подгрузка внешней сборки и передача управления компоненту. В случае, если сборка плагина уже загружена, повторной ее загрузки не происходит. Исключением может являться только обновление сборок в модуле [[Внешние модули#Plugin-модули|Администрирование. Внешние модули]]. <br />
Передача управления производится путем вызова метода PrepareShow управляющего объекта, описанного в plugin-программе. В качестве параметра для метода передается XML-структура, содержащая комплексную информацию о требуемом компоненте (его guid-идентификатор, описанный при вызове метода GetForms() управляющего объекта), параметрах сценария, сессии, задаче, а также других имеющихся свойств (различаются в зависимости от типа исполняемого сценария). Помимо базовых параметров передаются значения требуемых для работы компонента параметров (информация о них возвращается при вызове GetInputParams управляющего объекта plugin-программы). В качестве возвращаемого значения ожидается XML-структура с описанием всех выходных значений согласно общему списку выходных параметров (определяются при вызове GetOutputParams управляющего объекта). <br />
В качестве возможных для использования в сценариях компонентов принимаются все формы подпрограммы со свойством 'module=2'.<br />
<br />
Назначение входных значений, а также переменных для приема выходных значений производится на отдельной вкладке. <br />
Дальнейшая реализация сценария приостанавливается вплоть до получения назад управления из внешнего компонента. Может быть назначен интервал таймаута, по истечению которого будет произведен принудительный возврат управления и переход к следующему компоненту сценария. Обрыв исполнения производится также при остановке сценария.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Модуль/Форма<br />
|Выбор конкретного плагина и одного из его компонентов для работы в сценарии.<br />
|-<br />
|Свойства<br />
|Доступ к вкладке редактора параметров формы для настройки передаваемых и сохраняемых параметров.<br />
|-<br />
|Таймаут, сек<br />
|Аргумент, устанавливающий время в секундах, по истечению которого будет произведен принудительный отъем управления из вызванной подпрограммы. В случае, если интервал нулевой (по умолчанию), таймаут считается не установленным.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление после возврата в случае успешного проведения операции.<br />
|-<br />
|Переход, компонент не найден<br />
|Компонент, на который передается управление, если plugin-программа не указана, не найдена или не может быть загружена.<br />
|-<br />
|Переход, таймаут<br />
|Компонент, на который передается управление в случае, если за установленный интервал времени не вернулось управление от внешнего компонента.<br />
|-<br />
|Переход, ошибка<br />
|Компонент, на который передается управление в случае возникновения ошибок.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="WebCRM"></div><br />
[[Файл:cl_cc_scr_i29.png|left]] <br />
===Действие/карточка в plugin или WebCRM=== <br />
<br />
<br />
<br />
В любом месте сценария может быть выполнен компонент, осуществляющий исполнение динамического (известного только на этапе создания сценария) метода во внешней среде. Суть метода в предоставлении сервисных функций внешней средой серверу Oktell. Такой средой может быть указанный плагин или активная подключенная Web-CRM система. <br />
<br />
Интеграция с сервером коммуникаций подразумевает то, что Oktell выступает в качестве сервера, исполняя запросы WebCRM системы, и информируя ее о происходящих коммуникационных событиях. Этот компонент позволяет наладить встречное взаимодействие, когда Oktell выступает в качестве клиента WebCRM системы.<br />
<br />
В указанном клиентском плагине в качестве динамических методов выступают заявленные формы (опрос производится после регистрации плагина при настройке сценария). В качестве исполнимых поддерживаются диалоговые формы (тип 0) и компоненты типа 3 (подробно в руководстве по интеграции). При настройке компонента задаются значения всем заявленным входным параметрам, привязанным к выбранной форме, возможно ожидание возвращаемых значений и сохранение их в переменные сценария. Серверные плагины не требуют тонко настраиваемого функционала, и вызов их методов осуществляется компонентом [[#Плагин-компонент|Серверный плагин]].<br />
Web-CRM система предоставляет информацию о поддерживаемых динамических методах в рамках обмена информацией между сервером Oktell и web-socket сервером Web-CRM системы согласно интеграционному протоколу (подробно в статье [[Oktell Web-Socket Protocol|«Интеграции. Web-Socket протокол»]]). Каждый динамический метод может принимать на вход определяемые в сценарии значения для всех заявленных входных параметров. Компонент может дожидаться исполнения и возврата выходных значений. Вызов метода производится согласно описанию Web-CRM системы и детальным настройкам компонента.<br />
<br />
В качестве возможных примеров можно привести такие общесерверные запросы, как «Определение компании и ответственного сотрудника по определившемуся номеру телефона», «Создать инцидент в связи с обращением» и т.д., и такие пользовательско-ориентированные методы как «Отобразить карточку указанной компании», «Закрыть карточку», «Переключить отображение в режим работы с партнерами» и т.д.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Модуль, действие<br />
|Окно выбора plugin-модуля или web-crm системы, ответственной за вызов настраиваемого метода, а также одного из списка динамических методов, заявленных в выбранном модуле.<br />
|-<br />
|Свойства<br />
|Настройка входных и выходных параметров выбранного метода. Выходные параметры сохраняются только в случае, если настраивается вызов метода с ожиданием завершения исполнения.<br />
|-<br />
|Дожидаться завершения<br />
|Да/нет. При ожидании завершения устанавливается также допустимый таймаут. Сценарий приостанавливается до получения ответа, после чего сохраняет выходные значения в переменные в соответствии с настроенными свойствами.<br />
Если ожидание не выставлено, то сценарий отправляет команду на исполнение метода, а сам переходит к следующим компонентам.<br />
|-<br />
|Момент отображения<br />
|Доступно только при отключенном режиме ожидания завершения. В случае, если стоит ожидание завершения, то автоматически применяется значение «Сразу».<br />
* Сразу. Команда на выполнение отправляется сразу и одновременно на адреса всех указанных пользователей в ходе работы компонента.<br />
Следующие пункты доступны только для настройки в сценариях IVR.<br />
* При входящем вызове. Команда на выполнение запоминается, но не отправляется и сохраняется до следующего компонента «Переключение», после чего автоматически удаляется. Особенностью является то, что исполнение производится у всех пользователей, но у каждого только в момент, когда телефон начинает фактически звенеть, с нахождением обслуживаемого канала в первой позиции в очереди. Если пользователь не снимает трубку, а вызов уходит другому или теряется, отправляется команда на прекращение исполнения метода (согласно интеграционному интерфейсу web-socket протокола).<br />
* При коммутации. Аналогично «При входящем вызове», но команда отправляется только в случае успешного переключения тому, с кем произошло соединение обслуживаемого канала. Отмена невозможна.<br />
* При завершении коммутации. Аналогично «При входящем вызове», но команда отправляется только в момент разрыва коммутации с тем, с кем произошло успешное соединение обслуживаемого канала. Отмена невозможна.<br />
|-<br />
|Ключ получателя<br />
|Доступно только при выборе пункта «Сразу» в качестве момента отображения. В других случаях получатели определяются автоматически.<br />
Аргумент, определяющий пользователя-получателя. В качестве ключа может выступать идентификатор пользователя, его имя или логин. Также ключом может являться внутренний стандартный номер, явно определяющий пользователя через правило звонка ([[Внутренние номера#Стандартные номера|«Администрирование. Внутренние номера. Стандартные»]]). В случае, если номер групповой, то получателями будут являться все его участники (пользователи указанные в номере явно, или посредством внутренних линий); при этом запросов будет отправлено ровно столько, сколько обнаружено получателей.<br />
В качестве значения аргумента может быть указан список ключей, разделенных запятыми.<br />
<br />
<span style="color:red;">Внимание! При вызове динамического метода WebCRM в его декларации может быть заявлен режим вызова без указания пользователя (это касается прямых методов, исполняемых непосредственно на сервере без привязки к конкретным пользователям и их станциям). В этом случае ключ получателя применен не будет. О необходимости указания пользователей должно сообщаться в описаниях динамических методов.</span><br />
|-<br />
|Таймаут, сек<br />
|Доступно только в режиме ожидания завершения.<br />
Устанавливает максимальное время в секундах, которое сценарий простаивает, ожидая ответ внешнего модуля с отчетом о выполнении и выходными значениями. В случае, если ответ не получен долее установленного времени, исполнение передается следующему компоненту по ветке «Таймаут». Значение 0 устанавливает бесконечное ожидание.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление после успешного выполнения компонента.<br />
|- <br />
|Переход, таймаут<br />
|Компонент, на который передается управление, если за установленный период времени не получен ответ от внешнего модуля/CRM-системы.<br />
Поле доступно только при выборе значения «Да» в свойстве «Дожидаться завершения».<br />
|-<br />
|Переход, ошибка<br />
|Компонент, на который передается управление, если модуль не обнаружен, не доступен или другие условия не позволяют провести операцию.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="SmsSend"></div><br />
[[Файл:cl_cc_scr_i19.png|left]]<br />
===Отправка SMS-сообщения===<br />
<br />
<br />
<br />
Осуществляет отправку SMS-сообщения по указанному номеру с назначенным текстом. Может быть настроен на ожидание доставки.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Номер<br />
|Аргумент, определяющий номер адресата.<br />
|-<br />
|Текст<br />
|Аргумент, определяющий текст SMS-сообщения. <br />
|-<br />
|Подставляемый номер<br />
|Номер, от которого осуществляется доставка.<br />
|-<br />
|Push Id<br />
|Код отправленного сообщения (для дальнейшего запроса отчета о доставке).<br />
|-<br />
|Ожидание доставки<br />
|Да/Нет. Требуется ли ожидать отчета о доставке.<br />
|-<br />
|Таймаут ожидания<br />
|Время, которое компонент будет ожидать отчета о доставке. <br />
Поле доступно только при выборе значения «Да» в свойстве «Ожидание доставки».<br />
|-<br />
|Переход, доставлено<br />
|Компонент, на который передается управление после успешной отправки сообщения. В случае установки значения «Да» в свойстве "Ожидание доставки", если сообщение успешно доставлено до таймаута ожидания.<br />
|- <br />
|Переход, не доставлено<br />
|Компонент, на который передается управление, если сообщение отправлено, но не было доставлено за установленное время ожидания (в случае если ожидание было назначено).<br />
Поле доступно только при выборе значения «Да» в свойстве «Ожидание доставки».<br />
|-<br />
|Переход, ошибка<br />
|Компонент, на который передается управление, если сервис недоступен или вернул ошибку.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="SmsCheck"></div><br />
[[Файл:cl_cc_scr_i20.png|left]]<br />
===Получение статуса отправленного SMS-сообщения===<br />
<br />
<br />
<br />
Производит запрос к SMS-сервису на получение отчета о доставке конкретного SMS-сообщения по коду отправки (Push Id).<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Push Id<br />
|Код отправленного сообщения.<br />
|-<br />
|Переход, доставлено<br />
|Компонент, на который передается управление, если sms уже доставлено.<br />
|- <br />
|Переход, не доставлено<br />
|Компонент, на который передается управление, если sms еще не доставлено.<br />
|-<br />
|Переход, неудача<br />
|Компонент, на который передается управление, если сервис недоступен или вернул ошибку.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="SmsReceive"></div><br />
[[Файл:cl_cc_scr_i21.png|left]]<br />
<br />
===Получение входящего SMS-сообщения===<br />
<br />
<br />
<br />
Производит запрос к SMS-сервису на получение первого в очереди входящих сообщений. В случае успеха наполняет переменные сценария соответствующими сообщению значениями.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Номер отправителя<br />
|Переменная, куда запишется номер отправителя.<br />
|-<br />
|Текст<br />
|Переменная, куда запишется текст сообщения.<br />
|-<br />
|Номер адресата<br />
|Переменная, куда запишется номер, на который сообщение было отправлено.<br />
|-<br />
|Переход, получено<br />
|Компонент, на который передается управление, если сообщение на сервере имеется и получено успешно.<br />
|-<br />
|Переход, сообщений нет<br />
|Компонент, на который передается управление, если входящих сообщений на сервере нет.<br />
|-<br />
|Переход, ошибка<br />
|Компонент, на который передается управление, если сервис недоступен или вернул ошибку.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|} <br />
<br />
<br />
<br />
<br />
<div id="SmsBalance"></div><br />
[[Файл:cl_cc_scr_i22.png|left]]<br />
===Баланс счета на SMS-сервере===<br />
<br />
<br />
<br />
Запускает на сервере внешний процесс или открывает приложение с указанным документом. В сценариях IVR используется чаще для запуска системных программ, а также учетных, сервисных, обслуживающих программ организации-клиента Oktell.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Количество<br />
|Переменная, куда вернется количество оставшихся оплаченных SMS-сообщений.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление, если запрос отработан.<br />
|-<br />
|Переход, ошибка<br />
|Компонент, на который передается управление, если сервис недоступен или вернул ошибку.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="EmailSend"></div><br />
[[Файл:cl_cc_scr_i23.png|left]]<br />
===Отправка сообщения электронной почты===<br />
<br />
<br />
<br />
Осуществляет отправку email-сообщения на указанный ящик электронной почты. <br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Способ отправки<br />
|[[#Отправка сообщения электронной почты|Форма]], определяющая способ отправки email-сообщения.<br />
|-<br />
|Кому<br />
|Аргумент, определяющий получателей email сообщения. Если письмо предназначается нескольким адресатам, то адреса должны быть перечислены через «;».<br />
<br />
<span style="color:red">ВНИМАНИЕ: Начиная с версии 2.9 адреса должны быть перечислены через «,»<br />
|-<br />
|От кого<br />
|Аргумент, определяющий отправителя email сообщения. Ряд почтовых серверов требует явного указания поля "Отправитель" (e-mail адрес отправителя). В этом случае свойство должно быть вычислено к моменту, когда компонент получит управление.<br />
В качестве отправителя может быть указана строка вида "username <address@mail.com>".<br />
|- <br />
|Тема<br />
|Аргумент, определяющий тему email сообщения.<br />
|-<br />
|Формат тела письма<br />
|Текст или HTML. Определяет формат, в котором будет сформировано тело для отправки.<br />
|- <br />
|Содержание письма<br />
|Аргумент, определяющий текстовую часть e-mail сообщения.<br />
|-<br />
|Кодировка<br />
|Определяет кодировку отправляемого письма. При необходимости осуществляется преобразование тела.<br />
* UTF-8 <br />
* UTF-7 <br />
* Windows-1251 <br />
* KOI8-R <br />
* Текущая кодовая страница Windows <br />
* Указанная кодовая страница Windows<br />
|-<br />
|Кодовая страница Windows<br />
|Доступно только при выборе кодировки «Указанная кодовая страница Windows». <br />
Числовой аргумент, определяющий кодовую страницу Windows для формирования тела письма. <br />
|- <br />
|Вложение 1<br />
|Аргумент, значение которого определяет абсолютный путь к файлу, который необходимо прикрепить к сообщению email. <br />
|-<br />
|Вложение 2<br />
|По аналогии со свойством «Вложение 1».<br />
|-<br />
|Вложение 3<br />
|По аналогии со свойством «Вложение 1».<br />
|-<br />
|Вложение 4<br />
|По аналогии со свойством «Вложение 1».<br />
|-<br />
|Вложение 5<br />
|По аналогии со свойством «Вложение 1».<br />
|-<br />
|Уведомлять об ошибках<br />
|Форма выбора пользователей-получателей уведомлений об ошибках, возникающих в момент выполнения отправки. Необходимо в отладочных целях в первые дни работы новых проектов.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление, если сообщение успешно отправлено.<br />
|-<br />
|Переход, неудача<br />
|Компонент, на который передается управление, если при отправке SMTP сервер вернул ошибку.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
'''Форма «Способ отправки»''':<br />
[[Файл:cl_cc_scr_f9.png|center]]<br />
<br />
<br />
<br />
<br />
Форма определяет способ отправки email сообщения. В зависимости от типа сценария email можно отправить через:<br />
<br />
<br />
* SMTP сервер <br />
* Встроенный почтовый клиент (доступен только для сценариев диалога) <br />
<br />
<br />
Если для отправки выбран выбран «SMTP сервер», письмо будет отправлено немедленно на указанный SMTP сервер.<br />
<br />
'''Для настройки доступны свойства''':<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Тип SMTP сервера<br />
|Свойство, определяющее источник настроек для SMTP сервера<br />
<br />
* Операторский - используются настройки SMTP сервера по умолчанию в случае настроенного SMTP сервера на компьютере, где установлен клиент. Например - MS IIS SMTP Server. <br />
* Общий (из настроек комплекса) - используются [[Общие Настройки|общие настройки]] комплекса <br />
* Отдельный - настройки SMTP сервера определяются нижеследуюшими свойствами.<br />
|-<br />
|Адрес<br />
|Адрес SMTP сервера<br />
|-<br />
|Порт<br />
|Порт SMTP сервера. Значение не должно содержать более 4 цифр ( максимум: 9999 )<br />
|-<br />
|Требуется авторизация<br />
|Установлено, если SMTP сервер требует авторизацию<br />
|-<br />
|Требуется SSL авторизация<br />
|Установлено, если SMTP сервер требует SSL авторизацию<br />
|-<br />
|Логин<br />
|Учетная запись на почтовом сервере<br />
|-<br />
|Пароль<br />
|Пароль учетной записи на почтовом сервере<br />
|}<br />
<br />
<br />
Если для отправки выбран «Встроенный почтовый клиент», письмо будет открыто на компьютере оператора в почтовом редакторе по умолчанию. Открыть письмо может любой почтовый редактор, поддерживающий MAPI интерфейс.<br />
<br />
<br />
<br />
<br />
<div id="EmailReceive"></div><br />
[[Файл:cl_cc_scr_i24.png|left]]<br />
===Прием входящего сообщения электронной почты===<br />
<br />
<br />
<br />
Осуществляет прием email-сообщения с указанного ящика электронной почты. <br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Способ получения<br />
|[[#Прием входящего сообщения электронной почты|Форма]], определяющая способ получения email-сообщения.<br />
|-<br />
|MessageId<br />
|Переменная, в которую будут сохранен идентификатор email сообщения.<br />
|-<br />
|Кому<br />
|Переменная, в которую будут сохранены получатели email сообщения.<br />
|-<br />
|От кого<br />
|Переменная, в которую будут сохранены отправители email сообщения.<br />
|-<br />
|Тема<br />
|Переменная, в которую будут сохранена тема email сообщения.<br />
|-<br />
|Предпочитаемый тип контента<br />
|Для разделов multipart/alternative позволяет установить предпочитаемый тип текстового контента. При наличии указанного типа среди блоков в переменную будет сохранено именно его содержимое, а остальные дублирующие альтернативные блоки будут игнорироваться. По умолчанию text/plain, но может быть установлен text/html, text/xml, text/rtf, text/richtext.<br />
|-<br />
|Текст письма<br />
|Переменная, в которую будут сохранен текст email сообщения.<br />
|-<br />
|Текст письма часть2<br />
|Переменная, в которую будут сохранен текст из второй части email сообщения. Используется для сообщений multipart.<br />
|- <br />
|Текст письма часть3<br />
|Переменная, в которую будут сохранен текст из третьей части email сообщения. Используется для сообщений multipart.<br />
|-<br />
|IMAP каталог<br />
|Аргумент, значение которого определяет IMAP каталог, из которого будет получено сообщение. По умолчанию используется стандартный каталог входящей почты Inbox.<br />
Поле доступно только при работе с IMAP-сервером (свойство «Способ получения»).<br />
|-<br />
|IMAP запрос<br />
|Аргумент, значение которого определяет IMAP запрос. Запрос определяет критерии выбора сообщения из каталога, заданного свойством IMAP каталог. По умолчанию используется запрос, возвращающий все письма (значение "ALL"). Более подробно о синтаксисе IMAP запросов можно узнать из документации <nowiki>RFC 2060</nowiki>.<br />
Поле доступно только при работе с IMAP-сервером (свойство «Способ получения»).<br />
|-<br />
|Принимать только заголовки<br />
|Да/Нет. Требуется ли получать только заголовки письма (в этом случае тело сообщения и прикрепленные файлы скачиваться с почтового сервера не будут)<br />
|- <br />
|Удалять с сервера<br />
|Да/Нет. Требуется ли удалить письмо с почтового сервера после получения.<br />
|-<br />
|Сохранять вложения<br />
|Определяет режим сохранения вложений.<br />
<br />
* Нет. Вложения сохранены не будут. <br />
* В указанную папку. В этом случае все вложенные файлы будут сохранены в папку, путь к которой установлен свойством "Папка для вложений". <br />
* В папку по умолчанию. В этом случае каталог определяется из общих настроек, раздел «Настройки e-mail».<br />
|- <br />
|Папка для вложений<br />
|Доступно только при выбранном режиме сохранения вложений в указанную папку.<br />
Представляет собой аргумент, устанавливающий абсолютный или относительный путь к папке, куда будут сохранены вложения с исходными именами.<br />
|-<br />
|Путь к папке для вложений в переменную<br />
|Доступно только при выбранном режиме сохранения вложений в папку по умолчанию, заданную в общих настройках.<br />
Представляет собой переменную, в которую будет сохранен путь к папке с вложениями, заданный в общих настройках.<br />
|-<br />
|Уведомлять об ошибках<br />
|Форма выбора пользователей-получателей уведомлений об ошибках, возникающих в момент выполнения отправки. Необходимо в отладочных целях в первые дни работы новых проектов.<br />
|-<br />
|Переход, получено<br />
|Компонент, на который передается управление, если сообщение успешно получено.<br />
|-<br />
|Переход, не получено<br />
|Компонент, на который передается управление, если сообщение не получено, но при этом ошибок не возникло. Такая ситуация может возникнуть, если:<br />
* на POP3 сервере нет сообщений <br />
* на IMAP4 сервере нет сообщений в заданном каталоге <br />
* на IMAP4 сервере нет сообщений в заданном каталоге удовлетворяющих заданным критериям<br />
|-<br />
|Переход, неудача<br />
|Компонент, на который передается управление, если при получении сообщения POP3 ( IMAP4 ) сервер вернул ошибку.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
'''Форма «Способ получения»''':<br />
[[Файл:cl_cc_scr_f10.png|center]]<br />
<br />
<br />
<br />
Форма определяет способ получения email сообщения. Сообщение можно получить через:<br />
* POP сервер (по протоколу POP3) <br />
* IMAP сервер (по протоколу IMAP4) <br />
<br />
<br />
'''Для настройки доступны свойства''':<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Тип почтового сервера<br />
|Свойство, определяющее источник настроек для сервера входящей почты<br />
<br />
* Общий (из настроек комплекса) - используются [[Общие Настройки|общие настройки]] комплекса <br />
* Отдельный - настройки SMTP сервера определяются нижеследуюшими свойствами.<br />
|- <br />
|Адрес<br />
|Адрес сервера.<br />
|- <br />
|Порт<br />
|Порт сервера. (стандартный порт POP сервера - 110, IMAP сервера - 143).<br />
|-<br />
|Требуется авторизация<br />
|Установлено, если сервер требует авторизацию.<br />
|-<br />
|Требуется SSL авторизация<br />
|Установлено, если сервер требует SSL авторизацию.<br />
|-<br />
|Логин<br />
|Учетная запись на почтовом сервере.<br />
|- <br />
|Пароль<br />
|Пароль учетной записи на почтовом сервере.<br />
|}<br />
<br />
<br />
<br />
<br />
<div id="ICQSend"></div><br />
[[Файл:cl_cc_scr_i25.png|left]]<br />
===Отправка IM (ICQ/jabber) сообщения===<br />
<br />
<br />
<br />
Осуществляет отправку IM-сообщения (ICQ или Jabber). Указываются сервер, аккаунт адресата, аккаунт отправителя, способ подключения к серверу (прокси/без прокси).<br />
Работа с аккаунтом происходит через пул подключений. Любые обращения к аккаунту (отправки/приема из разных сценариев), влекущие подключение к серверу, помещают созданное подключение в специальный пул, где оно поддерживается некоторое время (устанавливается в разделах «[[ICQ-сервис|Общие настройки. ICQ-сервис]]» и «[[Jabber-сервис|Общие настройки. Jabber-сервис]]»). Каждое последующее обращение к аккаунту работает с подключением из пула и продляет время его существования. В случае таймаута аккаунт отключается. Также аккаунт отключается при получении ошибки сервера или выгрузке серверного приложения. Такой механизм работы в частности гарантирует работу комплекса от ошибки сервера ICQ «Превышен лимит подключений». Для каждого аккаунта в пуле держится отдельное подключение. Для Jabber-аккаунтов держатся отдельно подключения с разными настройками, даже если они имеют одинаковый JID.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Протокол<br />
|ICQ / Jabber.<br />
|- <br />
|Настройки прокси<br />
|[[#Отправка IM (ICQ/jabber) сообщения|Форма]], определяющая настройки подключения к прокси-серверу.<br />
|- <br />
|Настройки учетной записи<br />
|При отправке ICQ-сообщения - [[#Отправка IM (ICQ/jabber) сообщения|форма]], определяющая настройки учетной записи (UIN) ICQ, которая будет использоваться в качестве отправителя сообщения ICQ.<br />
При отправке Jabber-сообщения - форма настройки учетной записи (JID) сервиса Jabber, которая будет использоваться в качестве отправителя Jabber-сообщения, а также настройки сервера, к которому необходимо осуществлять подключение для работы в сети Jabber. Обратите внимание на рекомендации, приведенные в разделе [[Jabber-сервис|Общие настройки. Jabber-сервис]].<br />
|- <br />
|UIN / JID<br />
|Аргумент, определяющий UIN-номера / JID-аккаунты получателей IM-сообщения. Если сообщение предназначается нескольким адресатам, то адреса должны быть перечислены через «,».<br />
|- <br />
|Таймаут ожидания соединения<br />
|Аргумент, определяющий временной интервал (в миллисекундах), в течение которого система ожидает соединения с IM-сервером (ICQ / Jabber). При отправке сообщения выполнение сценария будет приостановленно до тех пор пока:<br />
* Будет установлено успешное соединение с сервером <br />
* Истечет таймаут ожидания соединения<br />
|- <br />
|Таймаут отправки соединения<br />
|Аргумент, определяющий временную задержку ( в миллисекундах ) перед отправкой сообщения. <br />
|- <br />
|Текст сообщения<br />
|Аргумент, определяющий текст сообщения.<br />
|-<br />
|Уведомлять об ошибках<br />
|Форма выбора пользователей-получателей уведомлений об ошибках, возникающих в момент выполнения отправки. Необходимо в отладочных целях в первые дни работы новых проектов.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление, если сообщение успешно отправлено.<br />
|-<br />
|Переход, неудача<br />
|Компонент, на который передается управление, если при отправке сервер вернул ошибку.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|}<br />
<br />
<br />
<br />
'''Форма «Настройки подключения»''':<br />
[[Файл:cl_cc_scr_f11.png|center]]<br />
<br />
<br />
<br />
Форма определяет настройки подключения к ICQ / Jabber серверу. Имеется возможность подключения напрямую и через прокси-сервер. Поддерживаются следующие типы прокси-серверов:<br />
* SOCKS5 <br />
* HTTPS <br />
<br />
<br />
'''Для настройки доступны свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Тип прокси сервера<br />
|Свойство, определяющее источник настроек для подключения к серверу.<br />
* Без прокси-сервера - подключение выполняется напрямую к серверу ICQ/Jabber, минуя прокси. <br />
* Общий (из настроек комплекса) - используется режим подключения, заданный в общих настройках комплекса (отдельно разделы [[ICQ-сервис|ICQ-сервис]] и [[Jabber-сервис|Jabber-сервис]]). <br />
* Отдельный - настройки прокси-сервера определяются в текущей форме и актуальны только для настраиваемого в данный момент компонента сценария.<br />
|- <br />
|Тип протокола<br />
|Свойство, определяющее тип протокола прокси-сервера:<br />
* SOCKS5 - протокол SOCKS5 <br />
* HTTPS - протокол HTTPS<br />
|- <br />
|Адрес<br />
|Адрес сервера.<br />
|-<br />
|Порт<br />
|Порт сервера. (стандартный порт SOCKS5 сервера - 1080, HTTPS сервера - 8080).<br />
|- <br />
|Требуется авторизация<br />
|Установлено, если сервер требует авторизацию.<br />
|- <br />
|Логин<br />
|Учетная запись на прокси сервере.<br />
|- <br />
|Пароль<br />
|Пароль учетной записи на прокси сервере.<br />
|}<br />
<br />
<br />
<br />
'''Форма «Настройки учетной записи ICQ»''':<br />
[[Файл:cl_cc_scr_f12.png|center]]<br />
<br />
<br />
Форма определяет учетную запись ICQ, которая будет использоваться в качестве отправителя сообщения ICQ.<br />
<br />
<br />
'''Для настройки доступны свойства''':<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Тип учетной записи<br />
|Свойство, определяющее источник настроек учетной записи<br />
* Общий (из настроек комплекса) - используются общие настройки комплекса <br />
* Отдельный - настройки учетной записи определяются нижеследуюшими свойствами.<br />
|- <br />
|UIN<br />
|Номер ICQ<br />
|-<br />
|Пароль UIN<br />
|Пароль ICQ<br />
|}<br />
<br />
<br />
Аналогичная форма открывается и при настройке JID-аккаунта (при работе с Jabber). В ней в дополнение к JID и паролю при осуществлении индивидуальной настройки предлагается указать адрес и порт сервера Jabber. <br />
<br />
<br />
<br />
<br />
<div id="ICQReceive"></div><br />
[[Файл:cl_cc_scr_i26.png|left]]<br />
===Получение IM (ICQ/jabber) сообщения===<br />
<br />
<br />
<br />
Осуществляет прием IM-сообщения (ICQ или Jabber). Указываются сервер, аккаунт получателя, способ подключения к серверу. <br />
Получаемые сообщения сохраняют в указанных переменных аккаунт отправителя и текст сообщения.<br />
Работа компонента происходит через пул подключений аналогично компоненту «Отправка IM-сообщения».<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Протокол<br />
|ICQ / Jabber<br />
|-<br />
|Настройки прокси<br />
|Форма, определяющая настройки подключения к прокси-серверу.<br />
|-<br />
|Настройки учетной записи<br />
|При получении ICQ-сообщения - форма, определяющая настройки учетной записи (UIN) ICQ, которая будет использоваться в качестве получателя сообщения ICQ.<br />
При получении Jabber-сообщения - форма настройки учетной записи (JID) сервиса Jabber, которая будет использоваться в качестве получателя Jabber-сообщения, а также настройки сервера, к которому необходимо осуществлять подключение для работы в сети Jabber. Обратите внимание на рекомендации, приведенные в разделе [[Jabber-сервис|Общие настройки. Jabber-сервис]].<br />
|- <br />
|UIN / JID<br />
|Переменная, в которую будет сохранен UIN / JID отправителя IM-сообщения.<br />
|-<br />
|Таймаут ожидания соединения<br />
|Аргумент, определяющий временной интервал (в миллисекундах), в течение которого система ожидает соединения с сервером. При получении сообщения выполнение сценария будет приостановленно до тех пор пока:<br />
* Будет установлено успешное соединение с сервером <br />
* Истечет таймаут ожидания соединения<br />
|- <br />
|Таймаут получения сообщения<br />
|Аргумент, определяющий временную задержку (в миллисекундах) перед получением сообщения. Если на указанный в свойстве «Настройки учетной записи» аккаунт раньше приходили сообщения, то таймаут игнорируется, а в переменные «UIN/JID», «Текст сообщения» будет подставлены значения, сохраненные в пуле сервера состояний системы.<br />
|-<br />
|Текст сообщения<br />
|Переменная, в которую будет сохранен текст полученного сообщения.<br />
|-<br />
|Уведомлять об ошибках<br />
|Форма выбора пользователей-получателей уведомлений об ошибках, возникающих в момент выполнения получения. Необходимо в отладочных целях в первые дни работы новых проектов.<br />
|- <br />
|Переход<br />
|Компонент, на который передается управление, если сообщение успешно получено.<br />
|-<br />
|Переход, сообщений нет<br />
|Компонент, на который передается управление, если новых сообщений не обнаружено.<br />
|-<br />
|Переход, неудача<br />
|Компонент, на который передается управление, если при получении сервер вернул ошибку.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|} <br />
<br />
<br />
<br />
<br />
<div id="1CQuery"></div><br />
[[Файл:cl_cc_scr_i501.png|left]]<br />
===Запрос к веб-сервису 1С===<br />
<br />
<br />
<br />
Осуществляет запрос к веб-сервису 1C, зарегистрированному в общих настройках или в компоненте. Запрос формируется на языке 1C. Параметры веб-сервиса могут быть заданы как в компоненте, так и в общих настройках. <br />
Для работы компонента (для его появления в редакторе сценариев) требуется наличие интеграционной лицензии.<br />
<br />
<br />
'''Свойства''':<br />
<br />
{|cellpadding="10" cellspacing="0" border="1"<br />
|Запрос<br />
|Тело запроса на языке 1С.<br />
|-<br />
|Параметры веб-сервиса<br />
|Устанавливает к использованию параметры веб-сервиса из общих настроек или позволяет настроить в рамках компонента (в этом случае появляются дополнительные поля ''URI'', ''логин'', ''пароль'').<br />
|-<br />
|URI<br />
|Аргумент, определяющий URI веб-сервиса 1С. <br />
Доступно только при выборе режима доступа к веб-сервису по параметрам, определенным текущим компонентом.<br />
|-<br />
|Логин<br />
|Аргумент, определяющий логин к веб-сервису 1С. <br />
Доступно только при выборе режима доступа к веб-сервису по параметрам, определенным текущим компонентом.<br />
|-<br />
|Пароль<br />
|Аргумент, определяющий пароль к веб-сервису 1С. <br />
Доступно только при выборе режима доступа к веб-сервису по параметрам, определенным текущим компонентом.<br />
|-<br />
|Режим запроса<br />
|Асинхронно без ожидания/Ожидание ответа/Ожидание ответа с таймаутом.<br />
|-<br />
|Таймаут, с<br />
|Аргумент, определяющий таймаут в секундах для ожидания ответа от веб-сервиса на отправленный запрос.<br />
Доступно только при выборе режима ''Ожидание ответа с таймаутом''.<br />
|- <br />
|Сохранять значения первой строки<br />
|Да/нет. Определяет, сохранять ли значения из первой строки вернувшегося в ответе от веб-сервиса набора данных в переменных сценария, сопоставляя их имена с названиями столбцов в наборе.<br />
|-<br />
|Результат CSV в переменную<br />
|Переменная, в которую сохранится результат в формате CSV.<br />
|-<br />
|Результат XML в переменную<br />
|Переменная, в которую сохранится результат в формате XML<br />
|- <br />
|Таймаут получения сообщения<br />
|Аргумент, определяющий временную задержку (в миллисекундах) перед получением сообщения. Если на указанный в свойстве «Настройки учетной записи» аккаунт раньше приходили сообщения, то таймаут игнорируется, а в переменные «UIN/JID», «Текст сообщения» будет подставлены значения, сохраненные в пуле сервера состояний системы.<br />
|-<br />
|Переход<br />
|Компонент, на который передается управление, если работа компонента завершена удачно.<br />
|-<br />
|Переход, таймаут<br />
|Компонент, на который передается управление, если работа компонента завершена по таймауту.<br />
|-<br />
|Переход, неудача<br />
|Компонент, на который передается управление, если при веб-сервер вернул ошибку или задан не верно.<br />
|-<br />
|Имя<br />
|Название компонента для отображения в визуальной среде и выбора в списке.<br />
|} <br />
<br />
<br />
Другие компоненты сценариев:<br />
<br />
* [[Компоненты сценариев IVR]]<br />
<br />
* [[Компоненты сценариев диалога]]<br />
<br />
* [[Компоненты служебных сценариев]]</div>Peter%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2_%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8Параметры файлов конфигурации2014-06-30T07:18:36Z<p>Peter: </p>
<hr />
<div>[[Дополнительно|Наверх]]<br />
<br />
<br />
Ряд настроек комплекса хранится в файлах конфигурации соответствующих приложений. Файл конфигурации загружается однократно в момент запуска приложения, и хранящиеся в нем настройки не могут быть изменены в ходе работы. Любые изменения файлов конфигурации применяются только при следующем запуске соответствующего приложения. <br />
<br />
Настройки файла конфигурации клиентского приложения влияют на работу только конкретного клиента.<br />
<br />
<br />
Файлы конфигурации находятся в том же каталоге, в котором расположен запускаемый модуль.<br />
<br />
Файл конфигурации клиентского приложения: oktell.ClientStarter4.exe.config<br />
<br />
Файл конфигурации серверной службы: oktell.ServerService.exe.config (приложения - oktell.ServerForm.exe.config)<br />
<br />
Файлы конфигурации есть также у ряда сопутствующих сервисов: служба файл-сервера, служба обмена межсерверными сообщениями, служба туннелирования запросов в БД, служба сервера видео-конференций, и т.д.<br />
<br />
<br />
Изменять файлы необходимо в редакторах, не изменяющих кодировку (рекомендуется стандартный редактор «Блокнот»). Такие редакторы как «Microsoft Word» и «Wordpad» сбивают кодировку, в следствие чего запуск приложения системы становится невозможным. При попытке запуска с некорректным конфигурационном файлом возникает системное окно с описанием ошибки.<br />
<br />
Конфигурационные файлы содержат ряд служебных настроек, поэтому в целях сохранения целостности и работоспособности не рекомендуется изменять формат файла и параметры, у которых нет описания.<br />
<br />
Формат представляет собой стандартный XML-документ со специфическими элементами. Допустимые настройки находятся в разделе между тегами <span style="color:red;"><appSettings></span> и <span style="color:red;"></appSettings></span>. Каждый конкретный параметр представляет собой строку <br />
<br />
<pre> <add key="KEY_STRING" value="VALUE_STRING" /></pre><br />
<br />
где <span style="color:blue;">KEY_STRING</span>-название параметра,<span style="color:blue;">VALUE_STRING</span>-значение параметра.Комментарии располагаются между строками <span style="color:blue;"><nowiki><!--</nowiki></span> и <span style="color:blue;"><nowiki>--></nowiki></span>.<br />
<br />
<br />
<br />
__TOC__<br />
<br />
<br />
===Обновление клиентских конфигураций===<br />
<br />
<br />
При необходимости обновить настройки файлов конфигурации у всех или некоторых клиентов можно воспользоваться системой обновления (каталог LiveUpdate сервера). Размещение клиентского конфигурационного файла целиком возможно только в том случае, когда все настройки, включая адрес сервера, идентичны у всех клиентов. При различиях можно воспользоваться служебным механизмом частичного обновления: файлы update*.config, находящиеся в каталоге LiveUpdate, сортируются лексикографически и применяются к тем клиентам, которые определены в настройках каждого из этих файлов. При этом могут быть указаны конкретные клиентские места, или исключения. Клиентские места указываются с помощью идентификатора, определяющего его в карте сети (любой принадлежащий ему IP-адрес, имя хоста, либо хеш-идентификатор, определенный ключом [[#ManualHostAddress|ManualHostAddress]]).<br />
<br />
Например, нижеприведенный файл update1.config применится на всех клиентах, локальный адрес которых 192.168.0.12 или 192.168.0.13.<br />
При этом будут добавлены/обновлены ключи "xxx" и "yyy", а ключ "zzz" будет удален.<br />
<br />
<pre><br />
<?xml version="1.0"?><br />
<configuration><br />
<br />
<updateAddress><br />
<include address="192.168.0.12"/><br />
<include address="192.168.0.13"/><br />
</updateAddress><br />
<br />
<appSettings><br />
<br />
<add key="xxx" value="111" /><br />
<add key="yyy" value="555" /><br />
<add key="zzz" /><br />
<br />
</appSettings><br />
<br />
</configuration><br />
</pre><br />
<br />
<br />
По умолчанию при отсутствии раздела ''updateAddress'' изменение конфигурационного файла производится на всех клиентских рабочих местах, подключающихся к серверу.<br />
Могут быть обновлены конкретные (<include address="*"/>), или все кроме указанных (<exclude address="*"/>), где * - IP-адрес, имя хоста или хеш-идентификатор.<br />
<br />
Обновиться самостоятельно могут только те клиенты, которые в силу текущих настроек конфигурационного файла способны подключиться к серверу.<br />
<br />
<br />
<br />
===Параметры файла конфигурации серверного приложения===<br />
<br />
<br />
<br />
<span style="color:blue;">Language</span>. Определяет языковую схему, используемую комплексом. В основном каталоге приложения находятся файлы Lang*.xml, представляющие собой наборы текстов для отображения в клиентских интерфейсах и БД. Для выбора того или иного языка необходимо в качестве значения данного параметра выставить соответствующее расширение имени файла (*). Например для использования файла LangRus.xml необходимо прописать значение «rus».<br />
<br />
Язык по умолчанию – русский (применяется, если в конфигурационном файле не указан язык, или если не найден файл указанного языка).<br />
<br />
Русский также является базовым языком. То есть если какого-либо кода не найдено в файле языка, то в альтернативу будет применен русский текст, заданный в коде программы. Язык также определяется в конфигурационном файле клиентского приложения, но после подключения к серверу клиентское приложение синхронизирует язык с установленным на сервере. <br />
<br />
Локализация программы производится компаниями-партнерами, файлы с текстами могут распространяться в открытом и шифрованном виде. В последнем случае осуществляется привязка к лицензии.<br />
<br />
<span style="color:blue;">HALSeparate</span>. Режим запуска модуля поддержки оборудования. «0» - в текущем процессе, «1» - в отдельном процессе используя взаимодействие через NET.Remoting, «2» - в отдельном процессе используя собственный альтернативный канал связи по протоколу TCP. <br />
<br />
В случае, если оборудование в некоторых случаях вызывает критические ошибки, подгрузка модуля поддержки оборудования в отдельном процессе позволяет не терять основной работоспособности сервера. В моменты падения процесса основная служба перезапускает его, производит фоновую регистрацию и продолжает работу. <br />
<br />
В момент перерегистрации все линии переходят в состояние «Отключена», пользователи переходят в состояние «Без телефона», все коммутации разрываются, логика резервирований очищается. Менеджер задач реагирует способом, аналогичным тому случаю, когда абоненты на внешних линиях положили трубки. Возможно файлы записей оборвавшихся разговоров будут иметь некорректный заголовок, что сделает невозможным их прослушивание стандартными средствами. Полностью процесс автоматической переинициализации занимает 5-10 секунд.<br />
<br />
<span style="color:blue;">HALRemoteAddress</span>. Адрес расположения вынесенной в отдельной процесс службы HAL. По умолчанию localhost.<br />
<br />
<span style="color:blue;">HALRemotePort</span>. Порт доступа к вынесенной в отдельный процесс службе HAL. По умолчанию 4052.<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">Настройки серверов HAL</span>.'''<br />
<br />
<span style="color:blue;">START_SERVER</span>. Индексированные параметры, определяющие запускаемые серверы аппаратуры. Доступные серверы: Сервер CTI плат Ольха-9, Сервер CTI плат Ольха-14, сервер CTI плат Synway, сервер SIP, серверы VoIP телефонии. При установке системы параметры выставляются согласно выбранным в дистрибутиве значениям. Однако в сложных системах могут потребоваться модификации. Например, в случае если происходит замена типа платы на рабочей системе, использование нескольких разных типов плат, а также при запуске нескольких VoIP серверов, обслуживающих разные подсети. Загрузке подлежат серверы с индексами от 1 до 32 (в примере - часть строки XX).<br />
<br />
<br />
Сервер плат «Ольха 9», «Ольха 14»:<br />
<br />
<pre><add key="START_SERVER_XX" value="Alder9 Server;oktell.HALAlder9Srv.dll;Alder9;_Loaders\" /><br />
<br />
<add key="START_SERVER_XX" value="Alder14 Server;oktell.HALAlder9Srv.dll;Alder14;_Loaders\" /></pre><br />
<br />
Последний элемент строки после точки с запятой указывает путь к файлам-загрузчикам. По умолчанию это подкаталог серверной службы _Loaders.<br />
<br />
<br />
Сервер плат «Synway»:<br />
<br />
<pre><add key="START_SERVER_XX" value="Synway Server;oktell.HALSynwaySrv.dll;ShCti;" /></pre><br />
<br />
<br />
Сервер плат «Yeastar»:<br />
<br />
<pre><add key="START_SERVER_XX" value="E1 Yeastar Server;oktell.HALYeastarSrv.dll;YeaCTI" /><br />
<br />
<add key="START_SERVER_XX" value="TDM800 Yeastar Server;oktell.HALYeastarSrv.dll;TDM800" /></pre><br />
<br />
<br />
Сервер SIP:<br />
<br />
<pre><add key="START_SERVER_XX" value="SIP Server;oktell.HALSipSrv.dll;SIP;sip:*:5060" /></pre><br />
<br />
Последний элемент строки после точки с запятой устанавливает детальные настройки сетевого интерфейса и порта, на которых запускаемый SIP-сервер будет активен. По умолчанию «sip:*:5060», то есть сервер слушает все интерфейсы на порте 5060. При необходимости установить какой-либо конкретный интерфейс необходимо вместо «*» указать его адрес.<br />
<br />
<br />
Серверы VoIP:<br />
<br />
<pre><add key="START_SERVER_XX" value="Buildin VOIP Server;;Voip;localhost:4003" /></pre><br />
<br />
Последний элемент строки после точки с запятой указывает сетевой интерфейс и порт слушателя регистраций локальных устройств. При необходимости использования сервера для поддержки локальных устройств разных подсетей возможно запустить несколько VoIP-серверов - несколько однотипных строчек файла конфигурации с разными индексами и разными сетевыми интерфейсами.<br />
<br />
<br />
Сервер виртуальных каналов<br />
<br />
<pre><add key="START_SERVER_XX" value="Virtual Server;oktell.HALVirtualSrv.dll;VS;12/10" /></pre><br />
<br />
Последний элемент строки указывает количество используемых каналов - внешних/внутренних.<br />
<br />
<br />
<br />
<span style="color:blue;">RTP_PORT_START</span>. Начальный порт для обмена RTP-трафиком медиа-подсистемой (SIP, VoIP). По умолчанию 9000.<br />
<br />
<span style="color:blue;">RTP_PORT_COUNT</span>. Количество портов, начиная со стартового, доступные для медиа-подсистемы (SIP, VoIP). По умолчанию 10000.<br />
<br />
<span style="color:blue;">RTP_MAX_CHANNELS</span>. Количество сокетов получения RTP-трафика на один поток-слушатель. От 1 до 32. (SIP, VoIP). По умолчанию 8.<br />
<br />
<span style="color:blue;">USE_AFFINITY_MASK</span>. «1» - использовать разделение задач по процессорам. Половина процессоров для сервера логики, другая половина для сервера HAL. «0» - значение по умолчанию. В этом случае операционная система самостоятельно занимается распределением.<br />
<br />
<span style="color:blue;">JITTER_DEPTH</span>. Значение глубины джиттер-буфера на сервере. Минимальное значение - «4», по умолчанию - «4». При увеличении значения происходит рост задержки в голосовом обмене по направлению звука к серверу, эффективнее исключая влияние проблем сети.<br />
<br />
<span style="color:blue;">TIMER_TYPE</span>. Тип используемого таймера высокой разрешающей способности для тактирования звуковых пакетов. На разных операционных системах и компьютерах различные варианты таймеров могут иметь достаточно сильную погрешность, влияющую на итоговое качество звука. Основная задача при выборе таймера состоит в обеспечении корректного среднего промежутка времени между тиками. Замечены случаи, когда некоторые из вариантов таймеров ОС тактируют постоянно увеличенные интервалы времени (например постоянно 46 мс вместо 40 положенных). Если не происходит корректировок, то такой таймер следует заменить на другой тип. Для определения значений всех вариантов таймеров можно использовать специальное тестовое приложение.<br />
<br />
Возможные значения:<br />
<br />
:::0 - Системный таймер по умолчанию. Дает более точное тактирование по сравнению с таймером на ожидании. Выдает точное тактирование в Windows Vista и некоторую погрешность в предыдущих версиях Windows. Система буферизации звука в этом случае сглаживает разброс, однако существуют компьютеры, где погрешность таймера постоянна. Это влечет пропуск пакетов и заметное ухудшение итогового качества звука. На таких компьютерах необходимо использовать другие типы таймеров. Рекомендуется мультимедийный.<br />
<br />
:::1 - Системный таймер в собственном потоке приложения.<br />
<br />
:::2 - Имплементация таймера в потоке с использованием функции WaitForSingleObject(). <br />
<br />
:::3 - Мультимедийный таймер. Дает наиболее точное тактирование, однако имеет общее ограничение на количество одновременно существующих таймеров в системе (16 объектов). Сервер Oktell использует 3 объекта таймера высокой разрешающей способности.<br />
<br />
:::4 - Автоопределение. На старте системы осуществляется тестовый прогон всех вариантов таймеров и определяется средне наиболее точный. В случае, если все имеют одинаковую среднюю точность, предпочтение отдается таймеру с меньшим индексом (таймер по умолчанию, системный, таймер ожидания, мультимедийный). На прогон теста на старте системы выделяется лишняя секунда.По умолчанию «4».<br />
<br />
<br />
<span style="color:blue;">TIMER_HIGHRES</span>. Тип используемого счетчика интервалов времени. «0» - миллисекундный системный счетчик GetTickCount, «1» - Query Performance Counter. По умолчанию «1».<br />
<br />
<div id="FORCE_BRACKETS_FOR_URI"></div><br />
<span style="color:blue;">FORCE_BRACKETS_FOR_URI</span>. «1» - значения заголовков To и From отправляемых SIP-пакетов размещаются в треугольных скобках. По умолчанию «0».<br />
<br />
<br />
<div id="EnableSipTransportFilter"></div><br />
<span style="color:blue;">EnableSipTransportFilter</span>. «1» - активирует на сервере спам-фильтр, защищающий от атак на SIP-подсистему. При поступлении с одного IP-адреса за короткий отрезок времени чрезмерно большого количества регистрационных пакетов, завершающихся неудачей по причине неверной авторизационной информации, осуществляется блокирование адреса на период времени, указанный в параметре и исчислимый в минутах. На все попытки регистрации с заблокированного IP-адреса сервер не отвечает никаким образом. По умолчанию 1440 минут (= 1 сутки), 1 - не отключать фильтрацию адреса вплоть до перезагрузки сервера, остальные действительные значения являются непосредственными значениями интервала в минутах. 0 - режим отключен.<br />
<br />
<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">Настройки клиентских подключений</span>.'''<br />
<br />
<span style="color:blue;">PBXServerPort</span>. Порт для подключения собственных клиентских приложений через механизм NET.Remoting (устаревш.).<br />
<br />
<span style="color:blue;">InternalClientPort</span>. Порт для подключения собственных клиентских приложений и приложений на базе клиентского ядра через встроенную надстройку над протоколом TCP. По умолчанию 4054.<br />
<br />
<span style="color:blue;">ExternalClientPort</span>. Порт для подключения внешних приложений 4053.<br />
<br />
<span style="color:blue;">SIP_ENABLE_TCP</span>. Разрешает TCP-подключение по протоколу SIP. Конкретный порт зависит от настроек SIP-сервера (по умолчанию, 5060). «0» - не активно, «1» - активно. По умолчанию «0».<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">Настройки рабочего каталога</span>.'''<br />
<br />
<span style="color:blue;">WORK_ROOTDIR</span>. Устанавливает в явном виде путь к рабочей папке серверной службы. Временные файлы, сценарии, проекты, плагины, каталог по умолчанию для записи разговоров, резервные копии - все, кроме основных сборок службы, размещается именно там.<br />
<br />
<span style="color:blue;">WORK_ROOTDIR_TYPE</span>. Устанавливает один из нескольких возможных вариантов размещения рабочей папки. Используется, если не задана рабочая папка в явном виде. Возможные варианты: 0 – папка запустившего процесс выполняемого файла, 2 – Documents And Settings\All Users, 3 – Documents And Settings\CurrentUser.<br />
<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">Настройки доступа к БД</span>.'''<br />
<br />
<span style="color:blue;">DBServerName</span>. Адрес сервера, на котором находится база данных MSSQL. По умолчанию «(local)».<br />
<br />
<span style="color:blue;">DBName</span>. Имя основной оперативной базы данных, к которой производится подключение. По умолчанию «oktell».<br />
<br />
<span style="color:blue;">DBNameCC</span>. Имя базы данных статистики call-центра. По умолчанию «oktell_cc_temp».<br />
<br />
<span style="color:blue;">DBNameSettings</span>. Имя базы данных с настройками системы. По умолчанию «oktell_settings».<br />
<br />
<span style="color:blue;">DBLogin</span>. Имя пользователя, учетной записью которого пользуется система. По умолчанию «AutelService».<br />
<br />
<span style="color:blue;">DBInstanceName</span>. Имя экземпляра сервера MSSQL. По умолчанию «MSSQLSERVER». Для доступа к службе, обеспечивающей работу БД. В момент запуска службы Oktell осуществляется проверка доступности БД. Если SQLServer, обслуживающий БД коммуникационного сервера, находится на том же компьютере, что и служба Oktell, то при невозможности обращения к БД Oktellпроверяет и перезапускает локальную службу SQLServer (указанный instance). <br />
<br />
Если работа SQLServer осуществляется на другом компьютере, то во избежании запуска службы SQLServer на локальной машине в значение поля можно поставить «0». Октелл будет осуществлять бесконечное ожидание корректного подключения к БД перед началом загрузки, а сервер баз данных не будет загружать в ОЗУ свои данные, тем самым коммуникационный сервер будет гарантирован от кэширования данных на диск, и, как следствие, временных приостановок операционной системой работы всех служб и приложений в ожидании завершения операции, что достаточно критично при активных коммутациях.<br />
<br />
<span style="color:blue;">DBConnectionString</span>. Строка подключения, задаваемая явно. Используется при настройке подключения к службам SQL с индивидуальными параметрами, при которых не подходят параметры по умолчанию. При отсуствии этого свойства, или пустом его значении, подставляется строка: <br />
<br />
<pre>"server=(local);database=oktell;uid=AutelService;pwd=[pwd];pooling=true",</pre><br />
<br />
где значения параметров server, database и uid подставляются из вышеописанных свойств. При явном указании строки подключения пароль может быть указан явно, либо использована последовательность символов «[pwd]», указывающая системе на необходимость подстановки пароля для логина AutelService.<br />
<br />
<span style="color:blue;">DBTransactionLogSize_1, DBTransactionLogSize_2</span>. Размеры транзакционных лог-файлов баз данных - основной и пространственной. По умолчанию по 500 МБ.<br />
<br />
<span style="color:blue;">DBBackupDir</span>. Путь к каталогу на сервере баз данных, в котором осуществляется создание резервных копий баз данных. По умолчанию это Backup в рабочей папке сервера. Однако в случае, если сервер баз данных работает на отдельном компьютере, путь должен существовать именно на нём. <br />
<br />
<span style="color:blue;">DBAutoDailyBackup</span>. «1» - устанавливает режим автоматического ежедневного резервного копирования баз данных одновременно с оптимизацией используемых баз данных. Режим оптимизации сам по себе настраивается в разделе [[Управление базами данных|Администрирование. Общие настройки. Управление базами данных]]. Если режим ежедневной оптимизации отключен, то вне зависимости от значения описываемого параметра резервная копия создана не будет. Cоздание файлов резервных копий производится на компьютере, где установлен текущий используемый MSSQLServer. Файлы размещаются в каталоге, установленном параметром [[#Параметры файла конфигурации серверного приложения|DBBackupDir]], а при его отсутствии в каталоге, путь к которому совпадает с рабочей папкой службы сервера в подкаталоге \Backup. Файлы резервных копий баз имеют названия db_ok.bak, db_okcc.bak, db_okset.bak, при ежедневном автоматическом создании резервных копий предыдущие резервные копии автоматически заменяются новыми. При необходимости осуществлять хранение нескольких копий за некоторый промежуток времени необходимо налаживать схему бэкапа или копирования файлов самостоятельно.<br />
<br />
<span style="color:blue;">ScrBackupDir</span>. Путь к каталогу на сервере АТС, в котором осуществляется создание резервных архивов со сценариями. По умолчанию это каталог Backup в рабочей папке сервера.<br />
<br />
<span style="color:blue;">RepUpdateDir</span>. Каталог с обновлениями отчетов call-центра.<br />
<br />
<span style="color:blue;">DBUpdateDir</span>. Каталог с обновлениями для БД.<br />
<br />
<span style="color:blue;">DBUpdateDirExtern</span>. Каталог с внешними обновлениями для БД. Расположенные здесь файлы с текстом, представляющим собой один совокупность нескольких SQL-batch, исполняются в БД по очередности их имен в момент запуска сервера. После успешного исполнения файлы удаляются. В случае возникновения ошибок их описание можно обнаружить в лог-журнале Exception. <br />
<br />
<span style="color:blue;">PauseTMOnDbQueueLength</span>. Определяет количество сообщений в очереди на сохранение в БД, при котором менеджер задач приостанавливает совершение звонков по исходящим голосовым задачам. Система считает, что таким образом нагрузка уменьшается, и БД имеет больше шансов к уменьшению очереди запросов. По умолчанию 100. Бывают случаи временной загрузки БД, когда своп происходит редко и длится в течение минуты или более того, а в остальные случаи сервер БД не подвержен притормаживанию. В этом случае имеет смысл оценить производительность сервера и увеличить максимальный предел очереди вплоть до нескольких тысяч. Отсутствие предела может привести в особо критичных случаях к тому, что данных в очереди накопится чрезмерно много, что выльется либо в нехватку памяти процессу, либо в несохранение результатов звонков после их совершения в случае сбоя сервера или базы данных.<br />
<br />
<span style="color:blue;">PauseProgressiveOnDbQueueLength</span>. Аналогичный предыдущему параметр для прогрессивного пула задач. Может иметь обособленную настройку и сказывается на запуск прогрессивных исходящих звонков. По умолчанию 50;<br />
<br />
<br />
<div id="DbRemote"></div><br />
<span style="color:blue;">UseDbRemote</span>. Довольно большое количество обращений из клиентских приложений к серверу являются суть запросами к БД. 1 - использует отдельный процесс туннелирования (oktell.DbRemoteService.exe) для прямых обращений к БД из клиентских приложений. 0 - все обращения к БД через основную службу. По умолчанию 0. При подключении к службе туннелирования все клиенты проходят аутентификацию. Служба туннелирования получает параметры доступа к БД из конфигурационного файла основной службы Oktell. Собственный конфигурационный файл необходим лишь для определения способа старта (служба или приложение), порта слушателя TCP подключений, а также возможно некоторых настроек логирования. <br />
<br />
<span style="color:blue;">CheckStartDbRemote</span>. Применяется в случае использования отдельного процесса туннелирования доступа клиентских приложений к БД. 1 - указывает серверу на необходимость самостоятельного запуска процесса; процесс при этом запускается на том же физическом сервере, где и основная служба Oktell; при завершении службы при этом процесс выгружается. 0 - указывает на необходимость подключения к постоянно запущенной службе (при этом служба может находиться на другом физическом сервере). По умолчанию 1. В конфигурационном файле службы туннелирования устанавливается, какой способ запуска используется - как служба или как приложение (ключ IsService). Настройки доступа к процессу туннелирования и самого процесса должны соответствовать друг другу.<br />
<br />
<span style="color:blue;">DbRemoteServer</span>. Применяется в случае использования отдельного процесса туннелирования доступа клиентских приложений к БД. Определяет адрес и порт для TCP доступа к приложению («address:port»). Сервер с помощью них осуществляет самостоятельное подключение для управления, а также выдает этот адрес клиентам для организации их собственных каналов связи. В случае, если указан localhost (используется по умолчанию), сервер выдает клиентам свой публичный адрес. Порт указывается в конфигурационном файле приложения/службы oktell.DbRemoteService.exe, по умолчанию 4086. <br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">Настройки службы</span>.'''<br />
<br />
<span style="color:blue;">EnableEmptyAdmin</span>. «1» - активирует на сервере возможность пользования учетной записью системного администратора. По умолчанию запись доступна только на сервере, где неактивен сервер состояний или среди учетных записей пользователей которого не существует ни одной, обладающей базовой ролью администратора. Может понадобиться в случае, если пароль учетной записи администратора утерян. Для применения требуется перезапуск службы сервера. По умолчанию «0».<br />
<br />
<div id="EnableAutoMap"></div><br />
<span style="color:blue;">EnableAutoMap</span>. «1» - активирован режим, при котором авторизация с рабочего места, не имеющего в карте сети учетной записи, приводит к автоматической временной регистрации на сервере рабочего места, снабженного USB-телефоном. «0» - доступ с неизвестных рабочих станций заблокирован. В целях обеспечения работы веб-клиентов, значение по умолчанию «1».<br />
<br />
<div id="EnableAutoMapSip"></div><br />
<span style="color:blue;">EnableAutoMapSip</span>. «1» - активирован режим, при котором при динамической регистрации вместо создания динамической линии USB-телефона производится связка с существующим в карте сети SIP-телефоном. Связка осуществляется по совпадению логина телефона с логином пользователя, либо по совпадению назначенного «пользователя по умолчанию» с авторизующимся пользователем. Для работы требуется включение параметра [[#EnableAutoMap|EnableAutoMap]]. «0» - связка динамических рабочих мест с SIP-телефонами не используется.<br />
<br />
<span style="color:blue;">UseWlockForDynamicReg</span>. «1» - использовать блокировку писателя при добавлении/удалении динамических рабочих мест. По умолчанию «0» - использовать блокировку читателя.<br />
<br />
<span style="color:blue;">ManualHostAddress</span>. Устанавливает уникальное имя сервера для идентификации в карте сети на старте службы. В случае, если в качестве адреса сервера в карте сети указано это значение - позволяет устранить зависимость от смены DNS-имени, а также смены и назначения динамических адресов сервера. <br />
<br />
Следует обратить внимание, что сервер может являться также и клиентской рабочей станцией. В этом случае необходимо в файл конфигурации клиентского приложения на сервере задать аналогичный параметр тем же значением, либо создать в карте сети отдельный компьютер с указанным реальным адресом или любой другой уникальной строкой (в случае использования на клиенте аналогичной схемы подмены адреса).<br />
<br />
<span style="color:blue;">ProcessPriority</span>. Приоритет серверного процесса. По умолчанию «0» - Нормальный. «1» - выше среднего, «2» - высокий, «3» - реального времени.<br />
<br />
<span style="color:blue;">HALRemoteProcessPriority</span>. Приоритет процесса HALRemote. «0» - нормальный, «1» - выше среднего (по умолчанию), «2» - высокий, «3» - реального времени.<br />
<br />
<span style="color:blue;">Default_DateTime_Format</span>. Индексированные параметры, определяющие нестандартныей варианты преобразования типа СТРОКА к типу ДАТАВРЕМЯ. Используются строки с индексами от 0 до 99, перебор в ходе работы осуществляется в порядке увеличения индексов.<br />
<br />
<span style="color:blue;">MixerDeleteSourceRecords</span>. «1» - удалять исходные файлы записей коммутаций после упаковки и/или микширования, «0» - оставлять на месте. По умолчанию «1».<br />
<br />
<span style="color:blue;">CheckRecordDriveEmptySpace</span>. «1» - осуществляет слежение за объемом свободного места на диске для записи разговоров. «0» - игнорирует проверку. Игнорирование может потребоваться при использовании сетевых дисков для записи, размер свободного пространства которых системой определяется нулевым, а также при использовании файлового сервера. По умолчанию «1».<br />
<br />
<span style="color:blue;">TaskListAbonentUseLikeNumber</span>. «1» - позволяет активировать поиск абонентской строчки в таблице абонентов с фильтром "number like '%x%'". По умолчанию «0» и поиск осуществляется только по идентификатору абонента.<br />
<br />
<span style="color:blue;">SkipCloseMutexCommand</span>. Режим автоматического закрытия сервера через мьютекс-команду необходим в целях исключения проблем с операциями обнаружения процессов. Встречаются системы, в которых отключены или недееспособны службы, необходимые для обнаружения внешнего процесса. В этом случае процесс копира не в состоянии при необходимости остановить серверный процесс перед обновлением и/или для перезапуска. «1» - пропускать команду закрытия, отданную через системные мьютексы процессом копира. «0» и другие значения - команда будет распознаваться и сервер будет реагировать на нее автоматическим закрытием.<br />
<br />
<div id="UseSimpleLineState"></div><br />
<span style="color:blue;">UseSimpleLineState</span>. Определяет способ привязки состояний внутренних номеров, ссылающихся на линии к состоянию самих линий. Если указать 0, то состояние номера, в случае свободности подчиненной ему линии, будет оцениваться по состоянию привязанного к ней пользователя. По умолчанию 1.<br />
<br />
<div id="HideGhostMonitor"></div><br />
<span style="color:blue;">HideGhostMonitor</span>. 1 - скрывает [[Прослушивание и помощь|слушателей разговора]] друг от друга, 0 - делает их доступными друг другу. По умолчанию 1.<br />
<br />
<div id="GCCollectorPeriodMin"></div><br />
<span style="color:blue;">GCCollectorPeriodMin</span>. Определяет периодичность принудительного запуска сборщика мусора .NET в минутах. По умолчанию 1 минута.<br />
<br />
<div id="UseNumStateChangedEventDelayer"></div><br />
<span style="color:blue;">UseNumStateChangedEventDelayer</span>. Интервал в мс, определяющий задержку перед рассылкой уведомлений о смене состояния номеров в номерном плане. 0 - выключено. По умолчанию 500. Применяется при большом количестве номеров и пользователей, следящих за их изменением. За время задержки происходит накопление данных и отправка одним пакетом. Позволяет экономить вычислительную мощность.<br />
<br />
<span style="color:blue;">DEBUG_incomingemail</span>. Логирование в common логе сервера принимаемых e-mail сообщений (pop3) "1" - включено. По умолчанию выключено.<br />
<br />
<div id="DEBUG_LogActiveThreadStackTrace"></div><br />
<span style="color:blue;">DEBUG_LogActiveThreadStackTrace</span>. При установке значения «1» производит вывод в лог ''DEBUG'' информации о стеке всех активных потоков основной службы сервера.<br />
<br />
<div id="UsePriorSwitchCallername"></div><br />
<span style="color:blue;">UsePriorSwitchCallername</span>. При осуществлении переключения из сценария на внутренний номер определяет, что будет отображаться в качестве имени абонента (callername) на sip-телефоне. 0 - автоопределение; если пусто, то callername из компонента «Переключение на номер» сценария IVR. 1 - наоборот, с приоритетом заданного в компоненте значения. По умолчанию 1.<br />
<br />
<span style="color:blue;">UserMessageCheckPeriodSec</span>. Позволяет активировать отслеживание появления новых сообщений между пользователями в базе данных и отправить их на отображение. Применяется в случае индивидуальной или внешней настройки и отправки сообщений путем размещения в таблицу A_UserMessages в БД. Указывается период отслеживания появления новых в секундах. 0 - выключено. По умолчанию 0.<br />
<br />
<div id="UserMessageCheckMakeViewed"></div><br />
<span style="color:blue;">UserMessageCheckMakeViewed</span>. В случае периодического отслеживания появления новых сообщений между пользователями в БД, указывает, отмечать ли их сразу как прочитанные с тем, чтобы при следующей итерации они не возникали вновь.<br />
<br />
<div id="DBPluginCommandTimeoutSec"></div><br />
<span style="color:blue;">DBPluginCommandTimeoutSec</span>. Позволяет задать таймаут в секундах на исполнение запросов от плагинов к БД. По умолчанию 600. Начиная с версии 120911.<br />
<br />
<div id="AllowDownloadFilesDirectlyOnlyFromTemp"></div><br />
<span style="color:blue;">AllowDownloadFilesDirectlyOnlyFromTemp</span>. 1 - блокирует скачивание файлов с сервера через HTTP интерфейс отовсюду, кроме как из временной папки Temp и [[Настройки веб-сервера#LocalStoragePath|локального хранилища]]. 0 - разрешает скачивать произвольные файлы с диска сервера по прямой ссылке. По умолчанию 1 (блокировать).<br />
<br />
<div id="BanUserAgent"></div><br />
<span style="color:blue;">BanUserAgentXX</span>, XX - порядковый номер от 00 до 99. Позволяет установить SIP-транспортный фильтр для определенных значений поля User-Agent. По умолчанию банится "Friendly-Scanner" в целях снижения нагрузки и уменьшения вероятности взлома.<br />
<br />
<div id="UpdateSelectorOnDirectorDisconnect"></div><br />
<span style="color:blue;">UpdateSelectorOnDirectorDisconnect</span>. 1 - при выходе/выпадении управляющего из селекторного совещания производит преобразование селектора к общей конференции. 0 - оставляет селектор с теми правами и в том виде, в котором он находился в последний момент присутствия управляющего. По умолчанию «1».<br />
<br />
<div id="PBX_Use180SdpAs183"></div><br />
<span style="color:blue;">PBX_Use180SdpAs183</span>. 1 - воспринимает команду ''180 Ringing'' с SDP содержимым как команду ''183 Progress'' и начинает сеанс медиасвязи. Используется в режиме ''прослушивание медиа-потока'' компонента [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние линии]]. 0 - генерирует стандартный сигнал КПВ (длинные гудки). По умолчанию 1.<br />
<br />
<div id="PBX_BackFrom183To180"></div><br />
<span style="color:blue;">PBX_BackFrom183To180</span>. 1 - воспринимает команду ''180 Ringing'' к обязательному исполнению - начинает генерацию сигнала КПВ (длинные гудки), даже если предварительно был получен ответ ''183 Progress'' и канал находится в медиа-коммутации. Используется в режиме ''прослушивание медиа-потока'' компонента [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние линии]]. 0 - пропускает такую команду. По умолчанию 0.<br />
<br />
<div id="UseAssertedIdentity"></div><br />
<span style="color:blue;">UseAssertedIdentity</span>. Включает отправку SIP-заголовоков ''P-Asserted-Identity'' и ''Remote-Party-ID'' в ответ на входящие вызовы с внутренних SIP-устройств на сервер с целью отправить на отображение в SIP-устройство ''Сaller-name'' вызываемого абонента. Применяется в случае осуществления вызова на внутренний номер.<br />
<br />
<div id="ScreenShotSize"></div><br />
<span style="color:blue;">AutoScreenshotWidth</span>, <span style="color:blue;">AutoScreenshotHeight</span>. Определяют максимальные размеры скриншотов экранов, снимаемых с помощью компонента сценариев [[Общие компоненты сценариев#UserState|Статус объекта]].<br />
<br />
<div id="PredictivePoolTimerIntervalMs"></div><br />
<span style="color:blue;">PredictivePoolTimerIntervalMs</span>. Устанавливает общий для всей системы интервал пересчета параметров предиктивных задач в мс, в ходе которого могут быть начаты новые дозвоны (по умолчанию 5000). <br />
<br />
<div id="PredictivePoolClearStatOnDeactivate"></div><br />
<span style="color:blue;">PredictivePoolClearStatOnDeactivate</span>. Устанавливает общий для всей системы режим очистки статистики в предиктивных задачах при деактивации (по умолчанию 0).<br />
<br />
<div id="PredictivePoolExtraShiftTimeoutMs"></div><br />
<span style="color:blue;">PredictivePoolExtraShiftTimeoutMs</span>. Устанавливает общий для всей системы дополнительный интервал в мс, применяемый безусловно к спрогнозированным параметрам. Может быть отрицательным и положительным. По умолчанию 0.<br />
<br />
<div id="WebServerNoAuth_Loopback"></div><br />
<span style="color:blue;">WebServerNoAuth_Loopback</span>. Позволяет отменить требование базовой авторизации при обращении к веб-серверу по loopback-интерфейсу (из приложений на самом сервере). По умолчанию 0.<br />
<br />
<br />
<div id="FileServer"></div><br />
<span style="color:blue;">FileServer_Log</span>, <span style="color:blue;">FileServer_Record</span>. Позволяет активировать сохранение соответственно лог-журналов и записей разговоров на удаленный файл-сервер. Значение задается в формате «address:port», например «192.168.0.199:4088». В качестве файлсервера может выступать любой компьютер с установленной и активированной службой oktell.FileService.exe из каталога серверной службы Oktell. О настройке и способах работы файл-сервера доступна [[http://r.oktell.ru/wiki/306/ статья]] в базе знаний.<br />
<br />
<div id="FileServerRecDir"></div><br />
Хранение записей может происходить в разных каталогах в соответствии с настройкой в Oktell. При использовании файл-сервера в качестве хранилища записей может потребоваться подключать дополнительные хранилища и изменять путь для сохранения записей и последующего доступа к ним. Чтобы это обеспечить, необходимо подвергать корректировке совместно настройку каталога для записи в Oktell и конфиг файлового-сервера. При этом в конфигурационном файле файлового сервера требуется указание соответствия переданного службой Oktell пути с локальным путем (ключ ''BaseDir_*'', где * - это subdir.ToLower(recordedfiles\dirname), а dirname - название последнего внутреннего каталога по выбранному службой Oktell пути; значение - локальный путь на файловом сервере. Например <add key="BaseDir_recordedfiles\path2" value="D:\_OktellWorkDir\Files\Base2\"/>. При настройке Oktell следует указывать пути, последний каталог которых имеет уникальное название и ранее не использовалось).<br />
<br />
<br />
<br />
<div id="FaceTime"></div><br />
'''Раздел <span style="color:green;">Настройки сервера видео-конференций</span>.'''<br />
<br />
<span style="color:blue;">FaceTimeLocalPort</span>. Определяет порт локального сервиса видео-конференций. По умолчанию 4090.<br />
<br />
<span style="color:blue;">FaceTimeServer</span>. Определяет доступные серверы видео-конференций. Перечисляются через запятую с помощью алиасов, которые затем определяются отдельными ключами конфигурации. По умолчанию доступен только локальный сервер, но могут быть вместо или дополнительно настроены один или несколько обособленных серверов. Локальный сервер определяется алиасом «local». Например <br />
<pre><add key="FaceTimeServer" value="local, futurama, videoserver"/></pre><br />
<br />
<span style="color:blue;">FaceTime_*</span>. Определяет адрес и порт обособленного сервера видео-конференций. Вместо символа * подлежит указанию алиас сервера. Эта настройка должна присутствовать для каждого упомянутого алиаса кроме «local». Например <br />
<pre><add key="FaceTime_futurama" value="192.168.0.10:4092"/></pre><br />
<br />
<br />
<br />
<div id="ThreadManagement"></div><br />
'''Раздел <span style="color:green;">Управление потоками</span>.'''<br />
<br />
Позволяет ограничивать максимальное количество потоков-обработчиков для отдельных видов работ.<br />
<br />
<br />
<span style="color:blue;">ThreadCountLowLimit</span>. Количество потоков в общем пуле системы, свободно доступных службе сервера. По умолчанию 500.<br />
<br />
<span style="color:blue;">ThreadCountHighLimit</span>. Максимально допустимое количество потоков в общем пуле системы, доступных службе сервера. Потоки, находящиеся в разнице между нижним и верхним ограничениями, выделяются системой с запаздыванием. По умолчанию 700.<br />
<br />
<br />
<br />
<span style="color:blue;">CachedThreadFreeMode</span>. Режим работы пула асинхронных потоков. «0» по умолчанию - использовать пул, никогда не уничтожать потоки, «1» - не использовать пул, уничтожать потоки сразу после использования, «2» - размещать в пул на 1 секунду, уничтожать по истечении в случае простоя.<br />
<br />
<br />
<span style="color:blue;">CheckReleaseRWOnAbort</span>. По умолчанию «1» - производить дополнительную проверку блокировки критической секции сервера состояний перед освобождением асинхронного потока и освобождать в случае обнаружения. «0» - не производить.<br />
<br />
<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimit</span>. 0 - отключает ограничение на количество потоков, обслуживающих клиентские запросы. <br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitHighest</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки высокоприоритетных клиентских запросов, таких как Ping. По умолчанию 10.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitData</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов, возвращающих большие объемы данных. По умолчанию 10. В момент длительной отправки данных по сети поток не считается использующимся.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitDownload</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов на скачивание и закачивание файлов. По умолчанию 10. В момент длительной отправки данных по сети поток не считается использующимся.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitSetup</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов из раздела администрирования. По умолчанию 5.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitLiveupdate</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов в части проверки обновлений, подготовки архива и его скачивания. По умолчанию совпадает с половиной общего количества ядер всех процессоров сервера, но не менее 2. В момент длительной отправки данных по сети поток не считается использующимся.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitNormal</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов в части проверки обновлений, подготовки архива и его скачивания. По умолчанию 100.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitEvent</span>. Устанавливает максимально допустимое количество потоков, доступных системе для рассылки событий клиентским приложениям. По умолчанию 10.<br />
<br />
<br />
Этот же набор параметров с другим префиксом действует для службы туннелирования клиентских запросов в БД. Их указание требуется в конфигурационном файле сервера, так как конфигурационные параметры передаются в службу туннелирования из основной службы.<br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimit</span>. <br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimitHighest</span>. <br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimitData</span>. <br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimitDownload</span>. <br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimitSetup</span>. <br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimitNormal</span>. <br />
<br />
<br />
<span style="color:blue;">OKTCP_HALL_ThreadCountLimit</span>. Устанавливает максимально допустимое количество потоков, доступных системе для взаимодействия с внешним процессом HAL. По умолчанию 0 - не ограничено.<br />
<br />
<span style="color:blue;">OKTCP_HALR_ThreadCountLimit</span>. Применяется в конфигурационном файле внешнего процесса HAL (oktell.HALRemoteApp.exe) или в собственном (если процесс настроен на работу с конфигурационным файлом основной службы). Устанавливает максимально допустимое количество потоков, доступных внешнему процессу HAL для взаимодействия с основным процессом службы. По умолчанию 0 - не ограничено.<br />
<br />
<span style="color:blue;">Line_ThreadCountLimit</span>. Устанавливает максимально допустимое количество потоков, обслуживающих каналы АТС. По умолчанию 20.<br />
<br />
<span style="color:blue;">Script_ThreadCountLimit</span>. Устанавливает максимально допустимое количество потоков, обслуживающих сценарии. По умолчанию 20.<br />
<br />
<span style="color:blue;">TML_ThreadCountLimit</span>. Устанавливает максимально допустимое количество потоков, обслуживающих звонки в голосовых задачах. По умолчанию 10.<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">LOG</span>.'''<br />
<br />
Хранит настройки лог-сервера комплекса. Среди неописываемых настроек - пути к папкам для сбора журналов.<br />
<br />
<span style="color:blue;">LOG_storedays</span>. Длительность хранения лог-журналов в днях. По умолчанию «7». По истечении указанного периода журналы удаляются системой. В некоторых случаях объем журналов может достигать нескольких гигабайтов за день.<br />
<br />
<span style="color:blue;">LOG_maxfilesize</span>. Максимальный размер одного файла лог-журнала в МБ. При достижении лог-журналом указанного размера логирование прекращается. Имеет воздействие на все лог-журналы, исключая HAL (Hardware). По умолчанию 3 ГБ.<br />
<br />
<span style="color:blue;">LOG_maxpartsize</span>. Позволяет настроить максимальный размер одного файла в МБ. По умолчанию 500 МБ. При достижении лог-журналом указанного размера формируется новый файл. Имеет воздействие на все лог-журналы, исключая HAL (Hardware).<br />
<br />
<span style="color:blue;">LOG_root</span>. Абсолютный или относительный путь к папке с лог-журналами. По умолчанию «Log», то есть относительный путь в каталоге серверной службы/приложения.<br />
<br />
<br />
<div id="DebugLogTcpBufferSizeKB"></div><br />
<span style="color:blue;">DebugLogTcpBufferSizeKB</span>. Позволяет включить логирование информации обо всех объемных пакетах, переданных или отправленных сервером. Указывается размер в KB, выше которого пакеты логируются в Debug лог. По умолчанию 0 - не логировать.<br />
<br />
<div id="DebugLogCPEventTypes"></div><br />
<span style="color:blue;">DebugLogCPEventTypes</span>. 1 - включает логирование информации обо всех событиях, отправляемых в клиентские приложения в Debug-лог. По умолчанию 0 - выключено.<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">DEBUGGING</span>.'''<br />
<br />
Хранит настройки, согласно которым ведется заполнение служебного сервисного лог-журнала. По умолчанию все параметры выставлены в «1», что влечет полное логирование служб сервера. Полное или частичное отключение уменьшает размер журнала, однако не даст информации в случае возникновения сбоев и общением с технической поддержкой.<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">KEYREMOTE</span>.'''<br />
<br />
Хранит настройки для подключения к внешнему серверу, управляющему ключом защиты. Необходимо в редких случаях, если USB-порт на сервере не функционирует должным образом.<br />
<br />
<br />
<br />
<br />
<br />
===Параметры файла конфигурации клиентского приложения===<br />
<br />
<br />
<br />
<span style="color:blue;">Language</span>. Определяет языковую схему, используемую клиентским приложением до момента подключения к соответствующему серверу. После подключения производится принудительная синхронизация языковой схемы. Фактически это происходит в момент отображения окна авторизации. Подробнее в [[#Параметры файла конфигурации серверного приложения|описании ключа]] в разделе серверного приложения.<br />
<br />
<span style="color:blue;">ServerSelectMode</span>. Определяет, каким образом происходит выбор сервера в случае, если указано несколько адресов (нижеперечисленные ключи конфигурации). «0» - в окне авторизации отображается список серверов в соответствии с перечислением в конфигурационном файле. При автоматическом переподключении всегда берется последний активный сервер. «1» - осуществляется автоматический перебор серверов начиная с самого первого. Подключение производится к тому, который дал положительный ответ. При автоматическом подключении без окна авторизации в учет берется не только подключение, но и ответ авторизации. Таким образом будет активирован сервер, успешно подключенный и разрешивший вход. В этом случае в окне авторизации список серверов для выбора не отображается. «2» - перебор серверов осуществляется автоматически, начиная с последнего активированного. «3» - случайный выбор сервера. «4» - основной сервер единственный, при потере связи с ним подключение осуществляется к одному из резервных на основании случайного выбора. По умолчанию - 0.<br />
<br />
<span style="color:blue;">ConnectBackReserve</span>. «1» - активирует режим мониторинга за появлением основного сервера в случае, если текущее подключение установлено с резервным сервером. Применяется при настройке резервных схем с преимущественной привязкой к одному серверу.<br />
<br />
<br />
'''Раздел <span style="color:green;">Подключения к серверу</span>.'''<br />
<br />
<span style="color:blue;">NetConnectionName</span>. Название подключения (сервера) для отображения в окне авторизации (при указании нескольких возможных подключений).<br />
<br />
<span style="color:blue;">LogicServerAddress</span>. Адрес для подключения к серверу логики.<br />
<br />
<span style="color:blue;">LogicServerPort</span>. Порт для подключения к серверу логики.<br />
<br />
<span style="color:blue;">ConnectProtocol</span>. Устанавливает протокол, по которому осуществляется подключение клиента к серверу. 0 - по умолчанию, 1 - Remoting, 2 - OkTCP.<br />
<br />
<span style="color:blue;">NETCLIENT_SERVER_ADDRESS</span>. Адрес для подключения к серверу аппаратуры.<br />
<br />
<span style="color:blue;">NETCLIENT_SERVER_PORT</span>. Порт на сервере для подключения к нему по сигнальному протоколу.<br />
<br />
<span style="color:blue;">NETCLIENT_LOCAL_PORT</span>. Локальный порт для обмена сигнальным трафиком по UDP.<br />
<br />
<span style="color:blue;">NETCLIENT_VOICE_PORT</span>. Локальный порт для обмена голосовым трафиком по UDP. <br />
<br />
<div id="SipDomain"></div><br />
<span style="color:blue;">SipDomain</span>. Переопределяет доменное имя SIP-сервера при отправке регистрационных пакетов с клиентского локального устройства. Явное указание может потребоваться в случае нестандартных настроек NAT сервера.<br />
<br />
<div id="SipPort"></div><br />
<span style="color:blue;">SipPort</span>. Переопределяет порт SIP-сервера при отправке SIP пакетов с клиентского локального устройства. Явное указание может потребоваться в случае нестандартных настроек NAT сервера. <br />
<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Вышеперечисленные параметры (NetConnectionName, ..., NETCLIENT_VOICE_PORT) определяют различные адреса и порты для организации сетевого канала подключения к серверу. Эти параметры могут присутствовать в конфигурационном файле несколько раз с добавлением к концу строки-ключа разных целочисленных индексов. Например NetConnectionName_1 и NetConnectionName_2. Индекс 0 не указывается, вместо него используется значение без индекса. В случае указания в конфигурационном файле нескольких подключений в окне авторизации будет отображен список их имен и доступен выбор одного из них. Это удобно использовать при работе с несколькими серверами с одних и тех же клиентских рабочих станций.</span><br />
<br />
<br />
<div id="SipDomainMode"></div><br />
<span style="color:blue;">SipDomainMode</span>. Режим формирования доменного имени при подключении локального устройства по SIP к серверу. По умолчанию используется IP-адрес указанного в конфигурационном файле [[#LogicServerAddress|доменного имени логического сервера]] (''=2''). Варианты: ''0'' - имя хоста серверной машины, ''1'' - указанное в конфигурационном файле [[#LogicServerAddress|доменное имя логического сервера]]. В любом случае доменное имя может быть явно переопределено параметром конфига [[#SipDomain]], если он установлен для текущего подключения. В большинстве случаев изменения значения этого параметра не требуется<br />
<br />
<div id="SipForceKeepAliveIntervalSec"></div><br />
<span style="color:blue;">SipForceKeepAliveIntervalSec</span>. Позволяет явно включить и задать интервал в секундах для отправки пакетов Keep-Alive в SIP-подключении к серверу. Может потребоваться при настройках NAT для удерживания порта.<br />
<br />
<br />
<span style="color:blue;">WORK_ROOTDIR</span>. Устанавливает в явном виде путь к рабочей папке клиентского приложения. Временные файлы, сценарии, проекты, плагины, каталог по умолчанию для записи разговоров - все кроме основных сборок службы размещается именно там.<br />
<br />
<span style="color:blue;">WORK_ROOTDIR_TYPE</span>. Устанавливает один из нескольких возможных вариантов размещения рабочей папки. Используется, если не задана рабочая папка в явном виде. Возможные варианты: 0 – папка запустившего процесс выполняемого файла, 1 – папка размещения основных сборок приложения, 2 – Documents And Settings\All Users, 3 – Documents And Settings\CurrentUser.<br />
<br />
<span style="color:blue;">AutoUpdate</span>. «1» - обновлять клиента автоматически. «0» - не обновлять автоматически при запуске, если обнаружено отличие версий. По умолчанию «1». Настоятельно не рекомендуется оставлять рабочую версию программы со значением «0» и использовать этот режим только для отладочных целей.<br />
<br />
<span style="color:blue;">AutoUpdateGateway</span>. «1» - обновлять шлюз автоматически. «0» - не трогать. По умолчанию «0». В список шлюзов требуется добавить адрес сервера, если подключение производится к серверу с несколькими сетевыми интерфейсами через интерфейс с индексом более 1. В большинстве случаев указания не требуется.<br />
<br />
<div id="ManualHostAddress"></div><br />
<span style="color:blue;">ManualHostAddress</span>. Альтернативный псевдо-адрес клиентского компьютера для идентификации на сервере в карте сети. Может быть использован для подключения к серверу при динамически выделяемом IP-адресе и сложностях с идентификацией по HostName. Каждый клиент должен иметь уникальное значение ключа, не совпадающее с реальными возможными адресами и именами других компьютеров сети.<br />
<br />
<div id="TerminalMode"></div><br />
<span style="color:blue;">TerminalMode</span>. Определяет режим подстановки адреса (для организации работы в терминальном режиме) - какой адрес берется, какое терминальное расширение для идентификации в карте сети используется (''address/terminalkey'').<br />
0 — адрес локальный, без терминального расширения: ''address''.<br />
1 — адрес локальный, терминальное расширение из текущего конфигурационного файла [[#TerminalAddress|TerminalAddress]]: ''address/terminalkey''.<br />
2 — адрес локальный, терминальное расширение с помощью текущего авторизованного Win-User: ''address/user''.<br />
3 — адрес клиентского терминала (ищется активная сессия авторизованная под совпадающим с текущим win-user), терминальное расширение из текущего конфигурационного файла [[#TerminalAddress|TerminalAddress]]: ''clientaddress/terminalkey''. Если удовлетворяющая условиям терминальная сессия не найдена, то используется локальный адрес. Если терминальное расширение не задано - не используется. <br />
По умолчанию 1.<br />
<br />
<div id="TerminalAddress"></div><br />
<span style="color:blue;">TerminalAddress</span>. Строка, определяющая уникальный адрес клиентского места. Приписывается ко всем адресам компьютера для определения клиентского места в карте офиса (например «FUTURAMA/terminal1»). Именно эту строку необходимо будет указать в карте офиса для идентификации. Решает проблему терминальных подключений, где все клиенты физически запускаются с одного компьютера. По умолчанию «».<br />
<br />
<div id="ShowLoginAuthMode"></div><br />
<span style="color:blue;">ShowLoginAuthMode</span>. ''1'' - отображать выбор способа авторизации (active dictionary/oktell), ''0'' - не отображать и использовать всегда стандартный режим. По умолчанию ''1''.<br />
<br />
<span style="color:blue;">TimeSynchronization</span>. «1» - синхронизировать время с сервером при запуске, «0» - не синхронизировать. По умолчанию «1».<br />
<br />
RestartApplicationWithProcess</span>. «1» - любой перезапуск клиента производится с выгрузкой процесса. «0» - выгрузка процесса производится только для применения обновлений, другие перезапуски осуществляются внутри процесса. По умолчанию «0». <br />
<br />
ProcessPriority</span>. Приоритет процесса клиентского приложения и процесса обслуживания внешних звуковых устройств. «0» - нормальный, «1» - выше среднего, «2» - высокий, «3» - реального времени. По умолчанию «1».<br />
<br />
<span style="color:blue;">HAL_skip_loading</span>. «1» - пропускать загрузку модуля обслуживания устройств работы со звуком. «0» - нормальный режим.<br />
<br />
<span style="color:blue;">Register_ocx</span>. «1» - регистрировать библиотеки обслуживаемых устройств перед запуском, «0» - не регистрировать. По умолчанию «1».<br />
<br />
<span style="color:blue;">ClientWebServerPort</span>. Устанавливает порт слушателя [[Клиентский интерфейс|HTTP-запросов]] к клиентскому приложению (например запрос http://localhost:4059/callto?number=184 - команда на звонок через Oktell). Доступ возможен только по локальному loopback интерфейсу.<br />
<br />
<span style="color:blue;">ComAsyncEventing</span>. Применяется для форсированной активации/отключения соответствующего режима COM-ядра без изменения кода приложения. Активирует/деактивирует режим раздачи событий COM-объекта в асинхронных служебных потоках. Применяется только в случае указания значений «1» или «0». По умолчанию применяется режим, установленный в коде внешнего интегрирующего приложения. Подробно в руководстве по интеграции (раздел «Октелл в других проектах», статья «Загрузка и выгрузка модуля»).<br />
<br />
<span style="color:blue;">ComXmlFullLogging</span>. Применяется для форсированной активации/отключения соответствующего режима COM-ядра без изменения кода приложения. Активирует/деактивирует режим полного логирования всех событий и вызовов управляющего объекта. Применяется только в случае указания значений «1» или «0». По умолчанию применяется режим, установленный в коде внешнего интегрирующего приложения. Подробно в руководстве по интеграции (раздел «Октелл в других проектах», статья «Загрузка и выгрузка модуля»).<br />
<br />
<span style="color:blue;">TRACE_HARDWARE</span>. Уровень трассировки аппаратного модуля. Битовая маска xxxx. C конца: 0 - TraceCall, 1-TraceEvents, 2-TraceVoice, 3-TraceNet. По умолчанию «1». Для полной трассировки значение «1111111111».<br />
<br />
<span style="color:blue;">SEPARATE_PROCESS</span>. «1» - запускать отдельный процесс для работы с устройствами. «0» - работать с устройствами в собственном процессе. По умолчанию «1».<br />
<br />
<span style="color:blue;">JITTER_DEPTH</span>. Значение глубины джиттер-буфера на клиенте, измеряемое в количестве пакетов по 20 мс. Минимальное значение - «0», по умолчанию - «6». При увеличении значения происходит рост задержки в голосовом обмене по направлению звука в локальное устройство, эффективнее устраняя влияние проблем сети. При указании «0» джиттер буфер не используется.<br />
<br />
Если наблюдается поступление пакетов вперемешку с незначительным разбросом, и/или периодические задержки с последующим одновременным поступлением серии пакетов, увеличение значения может способствовать выравниванию звука. Для диагностики этого явления можно активировать логирование голосового трафика (TRACE_HARDWARE) или использовать программы-перехватчики трафика (снифферы), например WireShark.<br />
<br />
<span style="color:blue;">WAVE_COUNT</span>. Значение, определяющее количество буферов для обмена звуком со звуковым устройством. Минимальное значение - «2», по умолчанию - «2». При увеличении значения происходит рост задержки в голосовом обмене по направлению звука в локальное устройство, эффективнее устраняя влияние проблем в медлительности звукового устройства.<br />
<br />
Если при ровно поступающем звуке из сети (диагностировать можно с помощью отладочной записи на входе - WAVE_COUNT, либо с помощью программ-перехватчиков трафика, например WireShark) наблюдается щелканье или пропадание кусков голосового потока, увеличение значения может способствовать выравниванию звука.<br />
<br />
<span style="color:blue;">WRITE_VOICE</span>. Отладочный параметр для оценки звукового потока на входе в клиентский HAL из сети до воспроизведения непосредственно в устройстве. «1» - отладочная запись в файл включена, файл с именем, соответствующим текущему времени размещается в корне клиентского приложения . «0» - отладочная запись отключена. По умолчанию «0».<br />
<br />
<span style="color:blue;">WAVEIN_AUTOCLOSE</span>. «1» - закрывать устройство ввода звука после завершения коммутации. «0» - оставлять открытым. По умолчанию «0». <br />
<br />
<span style="color:blue;">WAVEOUT_AUTOCLOSE</span>. «1» - закрывать устройство вывода звука после завершения коммутации. «0» - оставлять открытым. По умолчанию «0».<br />
<br />
<span style="color:blue;">USE_DIRECTSOUND</span>. Тип работы со звуком по умолчанию. Выбирается в клиентском интерфейсе. «1» - использовать для работы со звуком библиотеки DirectSound. «0» - обычный режим через системные функции Windows Multimedia (WMM). По умолчанию «0».<br />
<br />
<span style="color:blue;">NETCLIENT_PAYLOAD</span>. Кодек по умолчанию для обмена голосовым трафиком. Выбирается в клиентском интерфейсе. Здесь служит для задания начальной настройки. 0 - 711mulaw, 8 - 711alaw, 41 - gsm610. По умолчанию «8».<br />
<br />
<span style="color:blue;">PHONEDEVICE_WAVEOUT</span>. Устройство вывода звука (спикер) по умолчанию. Выбирается в клиентском интерфейсе. Здесь служит для задания начальной настройки.<br />
<br />
<span style="color:blue;">PHONEDEVICE_WAVEIN</span>. Устройство ввода звука (микрофон) по умолчанию. Выбирается в клиентском интерфейсе. Здесь служит для задания начальной настройки.<br />
<br />
<span style="color:blue;">PHONEDEVICE</span>. Имя устройства по умолчанию. Выбирается в клиентском интерфейсе. Здесь служит для задания начальной настройки.<br />
<br />
<span style="color:blue;">SIGNAL_VOLUME</span>. 0-100. Уровень громкости генерируемых в локальное устройство системных звуков и тонов. По умолчанию 50.<br />
<br />
<br />
<br />
<div id="UseKeyHook"></div><br />
<span style="color:blue;">UseKeyHook</span>. Параметр позволяет принудительно отключить режим перехвата действий клавиатуры для управления гарнитурой. Отключение может понадобиться при обнаружении проблем и конфликтов с операционной системой. «1» - режим перехвата активирован. «0» - режим перехвата деактивирован. По умолчанию «1». Выключение требуется на 64 разрядных ОС при работе версий до 2.8.130325.<br />
<br />
<span style="color:blue;">default_HeadSet_AutoHookUp</span>. Определяет используемый по умолчанию режим автоподнятия трубки на гарнитуре при поступлении входящего звонка. После фактического изменения настроек пользователем в параметрах локального устройства значение из конфигурационного файла теряет актуальность. По умолчанию «1».<br />
<br />
<span style="color:blue;">default_HeadSet_UseKeyBoard</span>. Определяет используемый по умолчанию режим перехвата нажатий на клавиатуре для управления гарнитурой. После фактического изменения настроек пользователем в параметрах локального устройства значение из конфигурационного файла теряет актуальность. По умолчанию «1».<br />
<br />
<span style="color:blue;">default_HeadSet_UseACM</span>. Определяет, активен ли по умолчанию режим автодозвона для гарнитуры. После фактического изменения настроек пользователем в параметрах локального устройства значение из конфигурационного файла теряет актуальность. По умолчанию «1».<br />
<br />
<span style="color:blue;">default_Phone_ShowRingPopup</span>. Определяет используемый по умолчанию способ отображения информации о вызывающем абоненте (всплывающее окно/всплывающее уведомление). После фактического изменения настроек пользователем в параметрах локального устройства значение из конфигурационного файла теряет актуальность. По умолчанию «1».<br />
<br />
<span style="color:blue;">WatcherResourceLogType</span>. Формат логирования ресурсов. С помощью параметра можно настроить вывод в клиентский лог-журнал WATCHER информации по использованию процессом ресурсов системы. Объем используемой памяти, количество открытых дескрипторов, количество потоков, пользовательские системные ресурсы, ориентировочное среднее процессорное время по всему процессу и отдельно по всем его потокам. 0 - не логировать, 1 - информация о процессе каждую секунду, 2 - информация о процессе и активным потокам каждую секунду, 3 - информация о процессе и всем его потокам каждую секунду, 4 - информация о процессе каждую минуту. По умолчанию 4.<br />
<br />
<span style="color:blue;">RestoreLastModules</span>. «1» - осуществляет при загрузке приложения загрузку и восстановление модулей, активных перед закрытием программы. «0» - запускает приложение с пустым фоном без дополнительной загрузки модулей; это экономит время на загрузке, так как некоторые модули требуют достаточно длительного времени для полной загрузки, однако пользователь при необходимости сам может активировать модуль по стандартной схеме из главного меню. По умолчанию «1».<br />
<br />
<span style="color:blue;">ShowVideoNoise</span>. «1» - в видео-окне модуля ТЕЛЕФОН при отсутствии видео-сигнала отображается черно-белый шум, «0» - черное окно. По умолчанию «1».<br />
<br />
<span style="color:blue;">CameraFrameFrequencyLimit</span>. Устанавливает ограничение на количество передаваемых кадров из клиентского приложения в сеть в ходе видео-сессии. Может использоваться при необходимости снизить исходящий трафик при видео-коммутациях с настраиваемой клиентской рабочей станцией.<br />
<br />
<span style="color:blue;">CameraJitterDepth</span>. Глубина джиттер-буфера фреймов с камеры. Позволяет нивелировать задержку в выдаче кадров в целях выравнивания отправляемого видео-потока. По умолчанию «3». «0» - не использовать джиттер. <br />
<br />
<span style="color:blue;">Phone_UseBlockedDelay</span>. «1» - использует асинхронный отложенный механизм по выставлению заблокированного состояния модулю [[Телефон]]. «0» - заблокированное состояние выставляется сразу (может потребоваться при работе на медленных машинах, где асинхронность сказывается отрицательно с приведением телефона в недееспособное состояние. Рекомендуется изменять только при соответствующем запросе службы технической поддержки). По умолчанию «1».<br />
<br />
<span style="color:blue;">Phone_ACMMode</span>. Определяет порядок действий при нажатии на кнопку «Позвонить» в модуле [[Телефон]]. «0» - стандартная последовательность действий: сначала производится вызов абонента, потом обратный вызов пользователя. «1» - обратная последовательность: сначала производится вызов самого пользователя, потом абонента. См. раздел [[Звонки и сервис автодозвона|Телефон. Звонки]].<br />
<br />
<div id="PhoneAllowHotline"></div><br />
<span style="color:blue;">PhoneAllowHotline</span>. ''1'' - разрешить ''HOTLINE'' вызовы из локального устройства на SIP-сервер (при звонке на пустой номер), ''0'' - запретить. По умолчанию ''1''.<br />
<br />
<span style="color:blue;">HeadsetNonACMMode</span>. Режим вызова с гарнитуры без использования автодозвона. «0» - сначала обратный вызов пользователя, потом набор абонента. «1» - поднятие трубки, таймаут, набор номера. По умолчанию «1».<br />
<br />
<span style="color:blue;">UseAutoReconnectOnFly</span>. При установке значения «1» в случае потери связи по каналу TCP между клиентом и сервером клиентское приложение будет пытаться переподключиться без перезагрузки. Неактуально при использовании протокола Remoting (по умолчанию порт 4050).<br />
<br />
<span style="color:blue;">ShowHelpInside</span>. Определяет, где отображать справку по системе. «0» - в отдельных процессах браузера по умолчанию, «1» - во встроенном браузере в окне клиентского приложения. По умолчанию «0».<br />
<br />
<div id="PlugRegLoadType"></div><br />
<span style="color:blue;">PlugRegLoadType</span>. Устанавливает режим загрузки при настройке plugin-программ. «1» - стандартный режим в отдельном домене с последующей выгрузкой. «2» - загрузка plugin-программ в отдельный процесс для настройки. Для загрузки plugin-библиотек используется запускающий модуль oktell.PluginStarter.exe, который может быть скопирован под другим названием. Используемая версия .NET Framework для работы плагина в отдельном процессе определяется в конфигурационном файле этого процесса (по умолчанию oktell.PluginStarter.exe.config). Сам же запускающий модуль (название файла в каталоге клиентского приложения) определяется в конфигурационном файле oktell (клиентском и возможно серверном) с ключом, зависящим от названия основной библиотеки plugin-программы. Например <add key="PluginTcp_libnamewithoutextension" value="oktell.PluginStarter2.exe"/>. Существующий модуль oktell.PluginStarter.exe может скопирован под другим именем и снабжен таким образом индивидуальным конфигурационным файлом. Это может понадобиться в частности для применения разных версий .NET Framework к разным plugin-программам.<br />
<br />
<span style="color:blue;">AutoSortGroups</span>. Устанавливает режим сортировки отделов для модуля [[Сотрудники]] по названиям. По умолчанию «1». В случае отключения ожидается, что сортировкой занимается хранимая процедура, результаты ее исполнения выводятся последовательно.<br />
<br />
<span style="color:blue;">PersonalHandleDepartments</span>. При установке значения «1» обновление состояний внутренних номеров в разделе [[Сотрудники|«Сотрудники. Отделы»]] производится только для номеров, входящих в выделенный отдел. Имеет смысл применять для сокращения трафика. <br />
<br />
<div id="SplitDepartmentsTreeByDot"></div><br />
<span style="color:blue;">SplitDepartmentsTreeByDot</span>. «1» - осуществлять построение глубокого дерева вложенных отделов в модуле «Сотрудники», разбивая указанные для сотрудников отделы на категории по символу «.». «0» - одноуровневое дерево отделов. По умолчанию «0».<br />
<br />
<div id="ExportCsvDelimiter"></div><br />
<span style="color:blue;">ExportCsvDelimiter</span>. Устанавливает символ-разделитель столбцов при формировании файлов экспорта CSV во всех модулях клиентского приложения.<br />
<br />
<div id="ExportTextDelimiter"></div><br />
<span style="color:blue;">ExportTextDelimiter</span>. Устанавливает символ-разделитель столбцов при формировании текстовых файлов с отчетами во всех модулях клиентского приложения.<br />
<br />
<span style="color:blue;">HandleSessionToChangeUserState</span>. «1» - при блокировании сессии авторизованного пользователя windows производится автоматический перевод состояния авторизованного пользователя oktell в «Нет на месте». При возврате в сессию производится автоматический перевод в «На месте». При этом перевод не осуществляется, если в момент блокировки пользователь не был свободен (находился в разговоре, в резерве или в состоянии перерыва), при этом не производится и обратного перевода при входе в сессию. «0» - действие по автоматической смене состояний не применяется. По умолчанию «1».<br />
<br />
<span style="color:blue;">RecordDownloadNameAddInfo</span>. «1» - устанавливает режим выгрузки записей разговоров статистики с включением в имена файлов имен участвующих абонентов.<br />
<br />
<span style="color:blue;">Memory_UseSameDialogForms</span>. «1» - активирует режим использования одних и тех же окон в режиме операторских диалоговых форм без уничтожения и создания при каждом показе. Используется на компьютерах с минимальным объемом оперативной памяти во избежание скачкообразного роста используемой памяти. «0» - деактивирует режим. По умолчанию «0».<br />
<br />
<span style="color:blue;">Debug_PingErrorRestart</span>. «0» - отключает автоматическую перезагрузку клиентского приложения при отсутствии откликов сервера на команды Ping. Используется для отладочных режимов, в основном при отладке plugin-программ. «1» - обычный режим. По умолчанию «1».<br />
<br />
<span style="color:blue;">PingTimeoutNotify</span>. Устанавливает период в миллисекундах, при превышении которого в момент вызова метода Ping возникает уведомление о плохой связи с сервером. <br />
<br />
<span style="color:blue;">ActivationServer</span>. Ссылка на сайт активаций для режима автоматической активации тестовой версии. По умолчанию «http://activate.telsystems.ru».<br />
<br />
<br />
<span style="color:blue;">ShowLoadingBar</span>. Отображает полосу загрузки при открытии модулей клиентского приложения. В некоторых случаях, улучшает работу отрисовки приложения. «0» - не отображает, «1» - отображает. По умолчанию «1».<br />
<br />
<span style="color:blue;">helplinks</span>. Тип используемой справки: «0» - встроенная справка в файле manual.chm, «1» - ссылка на вики. По умолчанию «1».<br />
<br />
<span style="color:blue;">FaxPreperformProcess</span>. Режим работы факса при отправке с клиентского приложения: «0» - обычный режим отправки изображений с преобразованием на сервере к необходимому виду. «1» - использование локального XPS-принтера для изготовления общего многостраничного файла TIFF из нескольких выбранных документов (для этого режима необходимы .NET Framework 3.0, установленный Microsoft Office версии 2003 или старше, установленный XPS принтер). По умолчанию «0».<br />
<br />
<div id="">AutoUserStateChangeOnSystemLock</div><br />
<span style="color:blue;">AutoUserStateChangeOnSystemLock</span>. 1 - активирует режим автоматического перевода состояния пользователя в ''Отключен'' или ''Перерыв'' (в зависимости от присутствия пользователя в режиме Call-центра) при блокировке ОС и автоматический перевод обратно при входе в систему снова. 0 - не использует режим. По умчоланию 1.<br />
<br />
<div id="">PhoneDirectDigit</div><br />
<span style="color:blue;">PhoneDirectDigit</span>. Определяет поведение софт-телефона. 1 - в активном состоянии набор символов осуществляется по одному, ввод в текстовое поле невозможен, кнопка «Набрать» недоступна. 0 - набор осуществляется в текстовое поле, после чего кнопкой «Набрать» отправляется на сервер. По умолчанию 0. Это касается состояний набора номера, коммутаций с абонентами, коммутаций с IVR, ожидания ответа, ожидания факс-сеанса.<br />
<br />
<span style="color:blue;">PhoneIvrDirectDigit</span>. Определяет поведение софт-телефона в состоянии коммутации с IVR при отключенном режиме прямого набора символов. 1 - позволяет активировать прямой набор только для случая коммутации с IVR. 0 - оставляет доступным только набор в текстовое поле с последующей отправкой по нажатию на «Набрать», при этом сценарий завершается и осуществляется набор номера по-новой. По умолчанию 0.<br />
<br />
<span style="color:blue;">PhoneLineDirectDigit</span>. Определяет поведение софт-телефона в состоянии коммутации с абонентом при отключенном режиме прямого набора символов. 1 - позволяет активировать прямой набор только для случая коммутации с абонентом. 0 - оставляет доступным только набор в текстовое поле с последующей отправкой по нажатию на «Набрать», при этом осуществляется переключение. По умолчанию 1.<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">LOG</span>.'''<br />
<br />
Хранит настройки лог-сервера комплекса. Среди неописываемых настроек - пути к папкам для сбора журналов.<br />
<br />
<span style="color:blue;">LOG_storedays</span>. Длительность хранения лог-журналов в днях. По умолчанию «7». По истечении указанного периода журналы удаляются системой. В некоторых случаях объем журналов может достигать нескольких гигабайтов за день.<br />
<br />
<span style="color:blue;">LOG_maxfilesize</span>. Максимальный размер одного файла лог-журнала в байтах. Имеет воздействие на все лог-журналы, исключая HAL (Hardware). По умолчанию 3 ГБ.<br />
<br />
<span style="color:blue;">LOG_root</span>. Абсолютный или относительный путь к папке с лог-журналами. По умолчанию «Log», то есть относительный путь в каталоге клиентского приложения.</div>Peter%D0%A0%D0%BE%D0%BB%D0%B8Роли2014-06-30T06:42:54Z<p>Peter: </p>
<hr />
<div>[[Пользователи|Наверх]]<br />
<br />
<br />
В текущем разделе модуля «Пользователи» на вкладке «Роли» приведен список пользовательских ролей и происходит их создание, модификация и удаление. <br />
<br />
<br />
'''Привилегией''' называется отдельное право доступа (определяемое одной галочкой в таблице свойств роли).<br />
<br />
<br />
Роли определяют некоторые наборы привилегий, и соответственно доступ пользователя к отдельным сервисам и модулям системы. На каждого пользователя может быть назначено одновременно несколько независимых ролей, а также сформирована уникальная доминирующая роль. Таким образом некоторая привилегия становится доступна пользователю тогда, когда она присутствует хотя бы в одной роли и не блокируется доминирующим набором прав. <br />
<br />
<br />
По умолчанию доминирующая роль пользователя, задаваемая в разделе редактирования учетной записи пользователя, не переопределяет привилегий. Таким образом обладание некоторой привилегией определяется лишь набором назначенных на пользователя ролей.<br />
<br />
<br />
<div id="BasicRoles"></div><br />
В системе существует набор предустановленных ролей: Администратор, Менеджер проектов, Супервизор, Оператор, Пользователь системы. Эти роли имеют фиксированные идентификаторы и пересоздаются системой в случае отсутствия каждый раз при запуске сервера. Их привилегии также постоянны. При необходимости модификаций следует создавать собственные роли.<br />
<br />
<br />
По умолчанию каждая привилегия роли может быть включена или выключена. Однако при создании и модификации роли для нее может быть выбрана базовая роль. В этом случае каждая привилегия роли может быть включена, выключена и выставлена в режим наследования от базовой роли. Например, существующая предустановленная роль «Администратор» с полными правами может быть модифицирована путем создания наследуемой роли «Администратор без права X», в которой все привилегии наследуются от базовой роли администратора, но принудительно выключается несколько привилегий. И наоборот, роли могут быть добавлены права путем создания новой наследуемой роли с принудительным включением некоторых привилегий.<br />
<br />
<br />
[[Файл:cl_ad_Users_5a.png|center]]<br />
<br />
<br />
Пользователям, у которых активна привилегия «Расширенное рабочее место», будет отображаться основное окно клиентского приложения, именуемое главной формой, состав модулей которого определяется набором дочерних привилегий этого пункта. <br />
<br />
Тем, у кого привилегия «Расширенное рабочее место» деактивирована, будет отображаться мини-окно. Набор возможных пунктов и свойств определяется дочерними привилегиями пункта «Сокращенное рабочее место». Подробнее о мини-окне в разделе [[Сокращенное рабочее место|Клиентское приложение. Сокращенное рабочее место]].<br />
<br />
<br />
При изменении свойств роли, набор привилегий, выставленных для нее, применяется для всех пользователей, для которых она назначена после перезапуска сервера состояний кнопкой «Применить». Однако для всех уже подключенных пользователей на текущий сеанс работы не изменяется набор прав. Для применения необходимо перезапустить одного, нескольких или всех пользователей в модуле мониторинга подключений, либо перезагрузкой серверной службы.<br />
<br />
<br />
Итоговый набор привилегий пользователя, формируемый на основании назначенных на пользователя ролей определяет права доступа к модулям системы. В частности определяет вид главного меню для пользователя: какие модули ему доступны, а какие нет. Основное право визуализации – «Расширенное рабочее место». При отсутствии этого права у пользователя вовсе не появляется клиентский интерфейс, и приложение лишь управляет USB-телефонами и гарнитурами, применяет настройки прав пользователя на звонки и в некоторых случаях выдает диалоговые формы обработки звонков call-центра. Вход и выход из call-центра осуществляется в этом случае через контекстное меню строки состояния. При установке свойства «Является оператором» в карточке учетной записи пользователя в контекстном меню такого рабочего места появляется соответствующая команда входа/выхода из call-центра.<br />
<br />
<br />
Среди привилегий находятся права доступа к отдельным модулям системы. Ряд модулей содержит расширение привилегий, позволяя запрещать отдельно просмотр, изменение, удаление данных, или другие индивидуальные права. <br />
<br />
В рамках раздела [[Администрирование|«Администрирование»]] не существует отдельных прав на чтение/редактирование. При необходимости ограничить доступ к редактированию, сохранив права просмотра модулей необходимо пользоваться [[Настройка_клиентского_приложения#BlockAdmin|паролем на изменение конфигурации]].<br />
<br />
<br />
Среди прочих прав: <br />
* Показывать системные сценарии, названия которых начинаются со строки "(Служебный)" <br />
* Возможность удалять записанные разговоры из статистики <br />
* Право видеть системные сценарии <br />
* Возможность редактировать отчеты статистики call-центра <br />
* Возможность редактировать индикаторы call-центра <br />
* Доступ к служебным задачам <br />
* Доступ к сервису автодозвона <br />
* Возможность отправки сообщений <br />
* Возможность использования факса через интерфейс <br />
* Возможность отправлять файлы в хранилище сессии <br />
* Доступ к модулю конференций <br />
* Возможность создавать конференции <br />
* Отображение софт-телефона в диалоговых формах <br />
* Возможность просматривать содержание экрана подчиненных пользователей <br />
* Безусловное блокирование режима просмотра собственного экрана <br />
* Возможность прослушивать разговоры и/или осуществлять помощь</div>Peter%D0%A1%D0%BE%D0%BA%D1%80%D0%B0%D1%89%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5_%D1%80%D0%B0%D0%B1%D0%BE%D1%87%D0%B5%D0%B5_%D0%BC%D0%B5%D1%81%D1%82%D0%BEСокращенное рабочее место2014-06-30T06:35:08Z<p>Peter: </p>
<hr />
<div>[[Клиентское приложение|Наверх]]<br />
<br />
<br />
Если пользователю закрыт доступ к полному рабочему месту (привилегия «Расширенное рабочее место»), взамен основного окна клиентского приложения будет открыто минимизированное окно.<br />
<br />
По умолчанию в окне присутствует только модуль «Телефон», работа которого описана в разделе ''[[Телефон|Клиентское приложение -> Телефон]]'' и ничем не отличается от характера его работы в основном окне. <br />
<br />
[[Файл:Client mini.png|center]]<br />
<br />
<br />
В случае наличия привилегии «Сотрудники» пункта «Сокращенное рабочее место» (подробнее в разделе [[Роли|Администрирование. Пользователи. Роли]]) в окне будет доступен минимизированный вариант модуля [[Сотрудники|Офис. Сотрудники]]. <br />
<br />
Нажатие на пиктограмму звездочки в верхней части модуля включает/выключает режим просмотра «Избранного». Установка/снятие пиктограммы у конкретных элементов списка осуществляет размещение/удаление соответствующего номера в избранном.<br />
<br />
Если у пользователя активирована привилегия «Call-центр» пункта «Сокращенное рабочее место», в контекстном меню трея будет активна команда «Вход в call-центр» или «Выход из call-центра». В случае успешного входа в режим call-центра расходуется одна лицензия режима и происходит активация операторского ресурса пользователя в менеджере задач. Подробнее в разделе [[Call-центр|Клиентское приложение. Call-центр]]. В случае минимизированного окна происходит полноценное участие оператора в задачах, отображение диалоговых окон, возможность переключения и управления звонком согласно заложенным в задаче правилам. Также в трее присутствует команда вызова супервизора.<br />
<br />
Минимизированное окно при увеличении размеров до высоты экрана липнет к краю и осуществляет уменьшение рабочей области экрана на размер собственной ширины.</div>Peter%D0%93%D0%BE%D0%BB%D0%BE%D1%81%D0%BE%D0%B2%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8Голосовые задачи2014-06-30T06:32:55Z<p>Peter: </p>
<hr />
<div>[[Задачи|Наверх]]<br />
<br />
<br />
__TOC__<br />
<br />
<br />
===Основные параметры===<br />
<br />
<br />
<br />
Вкладка предоставляет доступ к основным определяющим поведение задачи свойствам.<br />
* Название задачи. <br />
* Код задачи. Параметр применяется для взаимодействия с внешними базами данных, ведущихся по проектам во многих аутсорсинговых call-центрах. Параметр доступен в любом сценарии, выполняющемся в ходе реализации каждого звонка по конкретной задаче. <br />
* Направление (исходящее/входящее). Отличия входящей и исходящей задачи указаны выше в описании данного модуля.<br />
<br />
<br />
[[Файл:cl_cc_task5.png|center|800px]]<br />
<br />
<br />
* Тип задачи. Определяет каким способом ведется обработка звонка – автоматическим (IVR) или с помощью оператора. Среди исходящих задач существует несколько типов организации массового оповещения с участием операторов: <br />
** [[#Reserve|Оповещение оператором с резервированием и уведомлением]]].<br />
** [[#Reserve|Оповещение оператором с резервированием и запросом]].<br />
** [[#ManualChoice|Оповещение оператором с ручным выбором абонентов]].<br />
** [[#FixOperator|Оповещение оператором с закреплением абонентов]].<br />
** [[#ByScriptForOperator|Поиск абонента для оператора]].<br />
** [[#Progress|Прогрессивный обзвон операторами]].<br />
** [[#ProgressPredict|Прогрессивно-предиктивный обзвон операторами]].<br />
** [[#ManualCall|Дозвон операторами вручную]].<br />
<br />
<br />
<br />
<div id="Reserve"></div><br />
'''Оповещение с резервированием'''. Начинает дозвон до одного конкретного номера телефона, предварительно найдя и зарезервировав оператора. Оператору выводится уведомление или запрос на проведение обозначенного звонка, который в этом случае он может принять, отложить или отклонить.<br />
<br />
<br />
<div id="ManualChoice"></div><br />
'''Оповещение с ручным выбором абонентов'''. Кардинальное отличие от простого резервирования состоит не только в предоставлении оператору возможности выбора абонента, но и в использовании пула дозвона до абонентов по распределенному списку. Каждому оператору выделяется определенная группа абонентов, с которыми он работает индвивидуально (звонки абонентам осуществляются только им). При настройке этого типа задачи на вкладке [[#Абоненты|Абоненты]] появляются элементы для задания правил разбиения списка по операторам (подробнее об этом далее в разделе). Супервизору при создании подобной задачи необходимо в обязательном порядке провести распределение списка, в противном случае задача не найдет подходящих условий для совершения вызовов. Допускается равномерное деление, а также деление по правилам (количеству, процентному соотношению, начальным буквам названия абонента). Нераспределенные абоненты, а также абоненты, появившиеся в списке после разбиения не будут автоматически присоединены к обработке. Подобный тип задачи предусматривает полный контроль ситуации супервизором. На вкладке «Абоненты» модуля [[Ресурсы]] для задач с распределенным списком предоставляется возможность управления текущим разбиением на основе статусов звонков, и для полноты информации предоставляются доступ к дополнительным служебным статусам. Абонентов с определенными состояниями супервизор имеет возможность перетащить от одного оператора к другому, тем самым скорректировав разбиение списка. Также см. [[Менеджер голосовых задач|Принципы работы логики. Менеджер голосовых задач. Задачи с распределенным списком]].<br />
<br />
<br />
<div id="FixOperator"></div><br />
'''Оповещение с закреплением абонентов за оператором'''. Позволяет на этапе создания задачи распределить абонентов по операторам, как и в режиме ручного выбора абонентов. Однако не предоставляет оператору возможности изменить выбор абонента, предоставляя ему лишь возможность подтверждения/отклонения вызова. Работает на основе кэша в БД и позволяет налаживать специальные сторонние алгоритмы распределений абонентов путем изменения таблицы кэша задачи (<span style="color:green;">''A_TaskManager_dIdx_[guid-идентификатор задачи]''</span>). Режим добавлен с целью предоставления возможности автоматического формирования списков с закреплением за операторами.<br />
<br />
Автоматический поиск и закрепления абонента из списка нераспределенных при отсутствии абонентов в текущем списке оператора может быть осуществлено средствами хранимых процедур (поиск абонента для обработки звонка конкретным оператором конкретной задачи - <span style="color:green;">''A_TaskManager_List_DistrDirectDB_GetTable''</span> или <span style="color:green;">''A_TaskManager_List_DistrDirectDB_GetQuery''</span> в зависимости от того, на базе таблицы или запроса сформирована таблица абонентов).<br />
<br />
В таблице абонентов для задач этого типа может быть добавлен и назначен столбец ''Идентификатор оператора'', значения которого имеют тип данных ''uniqueidentifier''. При синхронизации задачи с таблицей абонентов в этом случае осуществляется автоматическое перестроение кэша и привязка абонентов к соответствующим операторам.<br />
<br />
<br />
<div id="ByScriptForOperator"></div><br />
'''Поиск абонента для оператора'''. Позволяет организовать исходящую задачу с помощью сценария поиска абонента, куда дополнительно в качестве параметра передается идентификатор оператора, для какого производится поиск.<br />
<br />
<br />
<div id="Progress"></div><br />
'''Прогрессивный дозвон'''. При обнаружении свободного оператора, задача помещает его в очередь и осуществляет одновременно несколько звонков. Первый успешный вызов сразу коммутируется. Остальные звонки в зависимости от настроек задачи (лояльность, очередь прогрессивного набора) остаются в очереди для других операторов, или прекращаются. Априори достоверно, что прогрессивная схема менее лояльна к абонентам, чем схема с резервированием. Если в очереди ожидающих дозвона находятся несколько операторов, то первый успешный звонок выделяется для первого оператора в очереди. Очевидный факт, что абоненты при исходящем оповещении ждать ответа в основном не намерены. Сервер Oktell при использовании прогрессивной схемы пытается минимизировать время ожидания операторов, взяв в расчет именно этот принцип и практически не давая вырастать очереди абонентов.<br />
<br />
Однако существуют настройки задач, при которых абоненты ждут операторов. Такие задачи редко представляют интерес. В этом случае очереди компенсируют друг друга, но лояльность к абонентам существенно снижается. <br />
<br />
Прогрессивный дозвон имеет больший смысл, если число линий, выделенных для задачи больше числа операторов, единовременно обрабатывающих задачу. Разумно настроенная прогрессивная схема – крайне эффективный инструмент. В качестве примера можно привести следующий результат в самых крайних условиях: Оповещение одним оператором по двум линиям списка из 10 абонентов, где у каждого абонента от 1 до 5 телефонных номеров и ситуация усугубляется тем, что половина номеров в итоге не отвечает. Для оператора наличие «битых» номеров остается незаметным до самого конца, когда на обеих линиях остаются только абоненты, не имеющие ни одного нормального номера. При увеличении числа линий и числа операторов качество заметно повышается. Более эффективно и менее лояльно прогрессивный дозвон можно настраивать, если число операторов достаточно велико, а время обработки одного звонка достаточно мало. <br />
<br />
В схемах, где число линий и операторов, назначенных в задачу, практически одинаково и значительно (20, 30, 40, 50, ...) прогрессивный дозвон экономит время поствызывной обработки и набора номера, производя работу в параллельном режиме, что в некоторых случаях приводит практически к тем же результатам что и в случае с числом линий, превышающим число операторов, обладая вместе с этим преимуществом, делая невозможным рост очереди абонентов. <br />
<br />
Использование прогрессивного набора в массовых кампаниях накладывает дополнительные требования, подробнее в разделе [[Менеджер голосовых задач|Принципы работы логики. Менеджер голосовых задач. Прогрессивный набор]].<br />
<br />
Задачи с прогрессивным набором очень эффективное средство, дающее наибольшую производительность при рационально назначенных количественных и ресурсных свойствах. Ориентировочная занятость операторов в зависимости от длительности разговора, соотношения операторы / линии и качества телефонной базы может достигать 90% и более.<br />
<br />
<br />
<div id="ProgressPredict"></div><br />
'''Прогрессивно-предиктивный дозвон'''. Общая схема аналогична задачам [[#Progress|с прогрессивным набором]], однако дополняет ее статистическими алгоритмами расчета усредненных показателей обслуживания, на основании которых принимаются решения о необходимости инициации очередного набора номера еще до освобождения операторов из текущих разговоров. Инициатива предполагается к исполнению только для операторов, занятых в конкретный момент времени в данной задаче.<br />
<br />
<br />
<div id="ManualCall"></div><br />
'''Дозвон вручную'''. Задача не использует поиск абонентов, резервирование линий и операторов. Вся эта часть работы лежит на операторе, который самостоятельно определяет время для звонка, ищет абонента во внешних источниках, выбирает номер для звонка, осуществляет звонок средствами АТС Oktell, и лишь потом при необходимости зафиксировать информацию осуществляет привязку звонка к определенной задаче. При этом номер попадает в прикрепленную таблицу абонентов новой строчкой, а у оператора есть возможность провести диалог по сценарию, сохранив в таблице абонентов зафиксированные ответы и прочую информацию, а также осуществить пост-вызывную обработку в недоступном для входящих звонков состоянии. <br />
<br />
Привязка существующего звонка к задаче осуществляется одним из способов:<br />
* В модуле [[Мое рабочее место|«Мое рабочее место»]].<br />
* Компонентом сценария [[Общие компоненты сценариев#UserState|«Статус объекта»]].<br />
* Командой [[Oktell_Web-Socket_Protocol#attachcalltotask|websocket-интерфейса]].<br />
<br />
Также может быть организован новый двусторонний вызов с последующей привязкой звонка к задаче с помощью компонента сценариев [[Компоненты служебных сценариев#Connector|«Коммутатор»]].<br />
<br />
Сразу следует заметить, что прикрипление существующего звонка возможно не только к задаче с типом ''Дозвон вручную'', но также и к задачам других типов, если это разрешено их настройкой. По умолчанию у других задач эта функция запрещена, так как прикрепление в этом случае может испортить прикрепленную таблицу абонентов. Таблица абонентов с одной стороны является ценным ресурсом, а с другой стороны в исходящих задачах - базой номеров, которая может стать некорректным хранилищем одинаковых данных. Прежде чем разрешать операторам прикреплять существующие звонки к исходящим задачам, следует определить алгоритм дальнейшего поведения. Например, в диалоговом сценарии в самом начале установить успешный результат для задачи, чтобы впоследствии исключить перезвоны на такие номера.<br />
<br />
<br />
<br />
* Сценарий IVR. Используется в задачах, обрабатываемых автоматическим сервисом голосовых меню. Выберите один из элементов списка существующих в текущем проекте пользовательских сценариев IVR для прикрепления его к редактируемой задаче. После дозвона до абонента ему будет воспроизведен выбранный сценарий голосового меню с полным функционалом и доступом к таблице с информацией об абоненте, если она назначена (раздел [[Сценарии IVR|Call-центр. Сценарии. Сценарии IVR]]). <br />
* Сценарий диалога. Используется в задачах, обрабатываемых операторами call-центра. Выберите один из элементов списка существующих в текущем проекте пользовательских сценариев разговора для прикрепления его к редактируемой задаче. После коммутации абонента с оператором система начнет выполнение указанного сценария диалога. В сценарии могут присутствовать элементы-подсказки оператору, элементы запросы ответов абонента, заполняемые оператором в открывающихся формах ввода, а также прочие произвольные формы ввода (раздел [[Сценарии диалога|Call-центр. Сценарии. Сценарии диалога]]). Сценарии диалогов являют собой наиболее общую и гибко настраиваемую систему всплывающих окон, известных в терминологии call-центров как «PopUp». <br />
* Служебный сценарий. Используется голосовыми задачами в конце обработки вызова c передачей собранного контента канала для его обработки, сохранения и других служебных действий (раздел [[Служебные сценарии|Call-центр. Сценарии. Служебные сценарии]]). При этом сценарий обработки контента, назначенный в общих настройках, не запускается. Код инициатора запуска служебного сценария - 26. <br />
* Рабочий график задачи. Определяет время активности задачи. Исходящая задачи не производит звонков вне графика, входящая задача не принимает звонки, возвращая управление обратно в сценарий обработки входящих звонков по ветке «Вне графика». Таким образом, задача, даже находясь в активном состоянии, при наличии всех условий будет ожидать начала очередного периода актуальности в соответствии с установленным графиком. График представляет собой недельный срез. Для установки активности – щелкните мышью в соответствующем пересечении дня недели и часа, или растяните рамку выделения необходимой области. Элемент является инверсивным, то есть при двойном выделении переходит в первоначальный вид. <br />
* Дата активации задачи. Определяет время, до которого исходящая задача не приступает к действию, даже будучи активной. Входящая задача до наступления этой границы при входе возвращает управление в сценарий обработки входящего вызова по ветке «вне периода актуальности». Время активации можно не назначать, отключив галочку. <br />
* Дата прекращения выполнения. Дополнительное условие, подобное рабочему графику, определяющее интервал времени, за пределами которого задача не выполняется и возвращает управление в сценарий по ветке «вне периода актуальности». <br />
* Остановить задачу. Способ завершения исходящей задачи. Среди вариантов: <br />
** После завершения всех абонентов; <br />
** После наступления времени деактивации; <br />
** Не останавливать никогда. <br />
<br />
<br />
<br />
При выборе пункта «не останавливать никогда», после завершения обзвона исходящая задача становится в ожидание и производит постоянную синхронизацию с таблицей абонентов на предмет появления новых записей. Период ожидания перед очередной синхронизацией задается на вкладке «Абоненты». Задача может быть остановлена только супервизором путем перевода в неактивное состояние.<br />
<br />
При завершении задачи, а также при каждом переходе задачи в режим ожидания появления новых абонентов система вызывает хранимую процедуру A_TaskManager_Task_AfterFinished, передавая в нее идентификатор задачи, системное время сервера, а также отличительный признак текущего состояния - полного завершения или ожидания новых абонентов. При необходимости оперативно реагировать в БД допускается свободная корректировка текста процедуры.<br />
* Расписание праздников. Указывает, будет ли применяться поправка на праздничное расписание (выходные и праздники и исключения, настраиваемые для комплекса в модуле общих настроек). В случае, если в расписании праздников день является исключением (праздник или наоборот рабочий день), то расписание задачи корректируется с учетом него, в противном случае применяется стандартное расписание задачи. Корректировка производится следующим образом: если день объявлен праздником - задача не запускается, а если день объявлен рабочим по какому-либо дню недели, то задача активируется в соответствии с ее расписанием для этого дня недели.<br />
<br />
<br />
<br />
<br />
===Ресурсы===<br />
<br />
<br />
Вкладка определяет ресурсы, выделяемые на задачу системой. С помощью управления ресурсами производится многостороннее ограничение производительности задачи. Это по-разному используется в случае организации аутсорсинговых и корпоративных call-центров.<br />
<br />
<br />
[[Файл:cl_cc_task_f2.png|center|800px]]<br />
<br />
<br />
* Операторы. Доступно для задач, обрабатываемых операторами call-центра. В списке операторов выделите галочками необходимых операторов и пользуясь стрелками установите необходимый порядок (если будет использован способ выбора операторов «по cписку»). Оператор может одновременно быть назначен на множество задач, предоставляя автоматике менеджера задач Oktell управление ресурсами (см. [[Менеджер задач|Администрирование. Общие настройки. Менеджер задач. Приоритет исходящих задач]]. <br />
* Вариант обхода операторов. Доступно для задач, обрабатываемых операторами call-центра. Предоставляет создателю задачи возможность максимально эффективно подходить к выделению ресурсов. В случае, если во входящей задаче дефицит операторов и звонок попадает в очередь, алгоритм выбора не включается, и производится коммутация с первым освободившимся оператором. В других случаях (а также в исходящих задачах) существуют несколько алгоритмов, выбор одного из которых должен производиться после учета всех факторов работы конкретного call-центра: <br />
** По списку (по компетенции). Выделяется первый свободный оператор из установленного списка, то есть основная нагрузка ложится на операторов в начале списка. <br />
** Поочередно. Организуется список, выбор оператора из которого производится поочередно, например 2, 1, 3, 2, 1, 3, 2, 1, 3. <br />
** Наименее занятый по задаче. Ищется оператор, участвовавший в задаче минимальное время среди операторов, назначенных в задачу. Таким образом, из двух операторов, один из которых обработал 5 вызовов по 5 минут каждый, а другой 1 вызов длительностью 0,5 часа, будет выбран первый. Стоит аккуратно использовать этот режим, так как при присоединении к задаче новых операторов весь поток звонков по задаче устремится на них. <br />
** Наименее занятый. Учитывая не только контекст данной задачи, а общую работу в организации, будет выбран оператор, который провел в коммутациях меньше всего времени за текущий день. Стоит аккуратно использовать этот режим, так как при присоединении к call-центру новых операторов весь поток звонков по задаче устремится на них. <br />
** Наиболее свободный. Среди операторов будет выбран тот, со времени окончания последнего разговора которого прошло больше всего времени. <br />
** Случайный выбор. Система пытается найти одного из свободных операторов с помощью равномерного распределения. Таким образом, имитируя равномерность загрузки в случае, если у создателя нет четкой уверенности в корректности применения одного из предыдущих вариантов. <br />
** Пользовательская процедура. Используется хранимая процедура <span id="procedura" style="color:green;">A_TaskManager_OperatorsAll_Get_Custom</span> в основной БД. При необходимости формирования динамических списков администратору необходимо сформировать в ней выходную таблицу с кодами операторов, отсортированную в приоритетном порядке от более приоритетных к менее. Будет зарезервирован свободный оператор, код которого располагается в выходном наборе выше всех остальных. Итоговый список фильтруется в соответствии со списком установленных операторов для обработки в конкретной задаче. Отсутствующие же в выходном наборе операторы не подлежат резервированию на текущий вызов ни в каком случае. При использовании этого режима во входящих задачах в процедуру передаются помимо кода задачи также код абонента в списке (если список прикреплен) и код внешней линии, по которой произошел текущий звонок (по нему из БД можно достать другие поля в таблице коммутаций или во временной таблице, ранее заполненной в сценарии IVR). По умолчанию процедура возвращает всех операторов в каком-то определенном произвольном порядке. <br />
<br />
При использовании пользовательской процедуры в исходящих задачах следует иметь в виду, что при фильтрации списка операторов и невозможности зарезервировать ни одного из перечисленных в ней, осуществляется приостановка выполнения задачи с кодом «Операторы не найдены», даже если в задаче есть свободные операторы, не вошедшие в выборку. Возобновление происходит не позднее чем через минуту. Однако задачи, использующие пул с резервированием операторов, при использовании пользовательской процедуры осуществляют в этом случае последовательный перебор абонентов согласно установленным приоритетам обхода вплоть до момента успешного резервирования оператора, либо до завершения однократного перебора всех абонентов задачи.<br />
<br />
* Супервизоры. Выделите галочками в списке необходимых супервизоров. Они будут получать уведомления при возникновении критических ситуаций, а также будут рассматриваться получателями контрольных событий, назначенных на задачу. <br />
* Внешние линии. Доступно только для исходящих задач. При назначении этого свойства для исходящей задачи отметьте галочками выделяемые для использования задачей внешние линии. Задача при возможности совершения очередного вызова будет использовать только те из указанных линий, которые находятся в активном состоянии и согласно их свойств доступны для использования в автоматическом оповещении. <br />
* Ограничивать количество. При необходимости, выставив флаг, можно ограничить использование линий задачами. Для входящей задачи укажите максимальное число подключений к задаче. При поступлении очередного звонка, превышающего число подключений к задаче, будет произведен возврат управления в сценарий обработки входящего вызова по ветке «превышено число подключений». Для исходящей задачи число совершаемых вызовов будет дополнительно ограничиваться указанным количеством линий, что может быть использовано, например, на линиях потока Е1 для разделения ресурсов несколькими задачами при их совместном использовании.<br />
<br />
<br />
<br />
<br />
===Абоненты===<br />
<br />
<br />
Вкладка определяет прикрепленную таблицу абонентов и формат общения задачи с ней.<br />
<br />
<br />
[[Файл:cl_cc_task_f3.png|center|800px]]<br />
<br />
<br />
* Таблица абонентов. Указывает на прикрепленную к задаче таблицу абонентов (из существующих в текущем проекте). Исходящие задачи используют таблицу для осуществления звонков. Входящие задачи могут корректно использовать только ту таблицу абонентов, в основе которой лежит таблица БД. Входящие задачи по выбору могут искать абонента по определившемуся номеру в таблице или для каждого звонка создавать новую запись. В соответствии с настройками таблицы абонентов, часть информации из списка будет отображена во всплывающих «PopUp» окнах на рабочем месте оператора, в случае если рабочее место оператора компьютеризировано. Номера абонента для дозвона берутся из столбцов, отмеченных свойством «Телефон». При смене списка у существующей задачи, статистика по произведенным звонкам не теряется, но задача полностью синхронизирует свой внутренний список с таблицей абонентов. Аналогично задача ведет себя при изменениях, вносимых в назначенную ей таблицу абонентов в модуле [[Таблицы абонентов]]. <br />
* <div id="TableAbonentMethods"></div>Метод работы с таблицей. Доступно только для исходящих задач. Определяет один из нескольких вариантов работы с данными в таблице абонентов. <br />
** '''Загрузка в память и синхронизация'''. Выставляется по умолчанию. В оперативной памяти создается кэш с данными по идентификаторам и телефонам всех абонентов таблицы. Периодически производится полная синхронизация с БД. Следует иметь в виду, что ресурсы системы ограничены, и поэтому использование этого метода ограничено определенными объемами данных в таблице абонентов. Рост объема влияет как на время синхронизации, так и на общее время обработки. При объеме таблицы более 100 тысяч абонентов рекомендуется использовать альтернативные методы работы с таблицей. В зависимости от производительности и объема оперативной памяти сервера указанное число может возрастать до 1 млн (на все активные задачи). <br />
** <div id="DBCache"></div>'''Кэш внутри БД, встроенный метод'''. Методы кэширования в БД существенно снижают нагрузку и могут быть использованы в любом случае и на любых объемах. Однако при этом исключается возможность использования уникальных приоритетов обхода таблицы, приведенных ниже. Активный в этом случае приоритет обхода аналогичен комбинации {По абонентам, поочередно, поочередно}. В случае массовых задач это не играет большой роли, поскольку оповещение занимает достаточно длительный период. В ходе синхронизации на основе прикрепленной таблицы абонентов в БД строится кэш-таблица (<span style="color:green;">A_TaskManager_Idx_{Идентификатор задачи}</span>), содержащая идентификаторы и состояния абонентов, на которой затем базируется алгоритм поиска абонента для совершения очередного звонка. Не исключается внешнее воздействие на таблицу кэша в целях управления алгоритмом выборки. <br />
** '''Сценарий поиска абонента'''. Менеджер задач позволяет использовать совершенно внешний алгоритм поиска абонентов. Делается это посредством служебного сценария поиска абонентов, на каждой итерации вызова которого ожидается получение трех значений: числовой идентификатор абонента в списке, номер для набора, признак завершенности списка/задачи. В этом режиме синхронизация не проводится, так как кэш из управления сервером Oktell вынесен в логику сценария. Любая возвращенная сценарием связка (ид абонента, номер абонента) отправляется в набор вне зависимости от фактического присутствия указанной пары в прикрепленной к задаче таблице абонентов. Однако с проверкой состояния по таблицам собственной оперативной статистики - если проставлен конечный результат или превышено установленное число неудачных попыток дозвона, то сервер воздерживается от набора и вызывает сценарий еще раз. Прикрепленная таблица абонентов используется только для получения доступа к информационным полям и отображения операторам, для операций с переменными типа «Поле таблицы», а также возможно для последующих статистических операций. Для работы метода требуется указание служебного сценария поиска абонента (ниже). <br />
<br />
<span style="color:red;">ВНИМАНИЕ! В обязательном порядке проверяйте наличие индексов по полю идентификатора прикрепленной таблицы абонентов. Особенно это важно при выборе метода работы с таблицей через кэш в БД на больших объемах (более 100 тысяч записей)</span>. <br />
<br />
<span style="color:red;">ВНИМАНИЕ! Процесс поиска оператора/линии/абонента производится менеджером задач линейно. В случае, если сценарий поиска абонентов работает долго, это отразится на отсутствии исходящих звонков по всем исходящим голосовым задачам</span>. <br />
<br />
* Служебный сценарий поиска абонента. Доступно только для исходящих задач, работающих с таблицей через сценарий поиска абонентов (выше). Устанавливает служебный сценарий (в списке предлагается выбор среди проектных сценариев, однако вручную можно указать название любого общего служебного сценария), который вызывается всякий раз, когда менеджер задач принимает решение о необходимости запуска очередного набора номера. Цель сценария определить идентификатор абонента, а также номер, который следует набирать при этом (сохраняются соответственно в служебных переменных «Возвращаемое значение 1» и «Возвращаемое значение 2»). В случае, если сценарий не возвращает корректного идентификатора, он должен указать, является ли это временным, или задача завершена (в этом случае необходимо установить значение «1» в служебную переменную «Возвращаемое значение 3»). <br />
<br />
На вход сценарий в качестве стандартных функций служебного сценария принимает информацию о задаче. В качестве неявных параметров передаются: 1 - идентификатор списка, 2 - режим вызова («1»-выполнение в потоке менеджера задач с инициативой одиночного запуска, «2»-выполнение в потоке прогрессивного пула с инициативой множественного запуска), 3 - идентификатор сессии поиска, чтобы иметь возможность определять циклы, 4 - идентификатор оператора (для задач [[#ByScriptForOperator|с поиском абонента для оператора]]''). Код инициатора запуска служебного сценария - 21. <br />
<br />
<span style="color:red;">ВНИМАНИЕ! Рекомендуется, но не требуется, чтобы возвращаемые номера и даже идентификаторы однозначно соответствовали таблице абонентов. При выбранном режиме поиска абонентов через сценарий таблица абонентов может быть вовсе пуста, при этом набор будет осуществляться, пока сценарий возвращает уникальные корректные значения идентификаторов и номеров</span>. <br />
<br />
Задача проверяет возвращаемые сценарием поиска номер и идентификатор абонента и осуществляет фильтрацию по общим правилам. Так например, набор номера не начнется, если предыдущая попытка набора этого же номера еще не завершена, или оператором было ранее установлено и еще не достигнуто время следующего звонка на номер, или число звонков на номер уже превысило допустимое значение. Чтобы оказать влияние на применение тех или иных фильтров следует устанавливать специальные значения служебной переменной «возвращаемое значение 3»: <br />
<br />
- 10 - не использовать фильтры вообще, всегда начинать набор номера; <br />
<br />
- 11 - проверять только количество занято; <br />
<br />
- 12 - проверять только количество не отвечает; <br />
<br />
- 13 - проверять только таймауты номера; <br />
<br />
- 14 - проверять только таймауты абонента; <br />
<br />
- 15 – проверять завершен ли абонент по признаку «FullSuccess»; <br />
<br />
- 16 – проверять завершен ли абонент по признаку «Finished»; <br />
<br />
- 17 – проверять завершен ли абонент по признаку «Stop». <br />
<br />
- Для значений 11-17 возможно указание перечислений, например «11, 12, 16». <br />
<br />
* Отправлять оператору запрос на подтверждение дозвона абоненту. Доступно для задач ''[[#FixOperator|с закреплением за оператором]]'' и ''[[#ByScriptForOperator|поиска абонента для оператора]]''. Определяет, следует ли давать оператору право принятия окончательного решения о совершении звонка конкретному выбранному системой абоненту.<br />
<br />
* Заполнение таблицы. Доступно только для входящих задач. Определяет формат поиска строки в таблице абонентов. Среди вариантов: <br />
** '''Каждый звонок модифицирует информацию'''. При поступлении вызова в таблице по определившемуся номеру ищется запись с информацией об абоненте и в случае обнаружения запись используется (отдает на модификацию в формах ввода, используется при маршрутизации). Если запись не найдена, или номер не определился – создается новая запись с пустыми значениями, куда сразу подставляются только новый идентификатор абонента и телефон, а работа аналогична. <br />
** '''Каждый звонок создает новую запись'''. Вне зависимости от того, определился номер или нет, существует номер в таблице или нет, создается новая запись с новым идентификатором и сценарий происходит независимо от истории абонента и его предыдущих звонков. <br />
<br />
* Пытаться соединять с оператором, обслуживавшим предыдущий звонок абонента. Доступно для входящих задач, обслуживаемых операторами. При задействовании метода во время поступления звонка производится анализ статистики и установка оператора, который последним обслуживал текущего абонента. Если оператор оказывается свободным, производится соединение с ним, в противном случае происходит постановка звонка в общую очередь задачи. Поиск последнего звонка в зависимости от выбранного типа будет производиться по статистике текущей задачи, либо по всей статистике call-центра. Текущий абонент идентифицируется определившимся при звонке номером, либо кодом в прикрепленной таблице абонентов (в этом случае одному абоненту может принадлежать несколько номеров). <br />
* Интервал синхронизации. Доступно только для исходящих задач, работающих с кэшем в памяти или в БД. Определяет промежуток времени до следующей обязательной синхронизации. От 1 минуты до 1 суток. Синхронизация проводится периодически и без учета интервала, в том случае, если список обработан до конца и необходим повторный проход. <br />
* Интервал синхронизации при отсутствии активности. Доступно только для исходящих задач, работающих с кэшем в памяти или в БД, остановка которых не предусматривается (параметр «завершить задачу» установлен в «никогда»). В случае, если в списке не осталось ни одного абонента, куда бы задача могла позвонить, она переходит в ожидание с учащенной синхронизацией. Период этой синхронизации указан в данном свойстве. От 1 минуты до 2 часов. Значение 0 в поле фактически соответствует интервалу в 10 секунд. <br />
* Синхронизировать со списком при каждой активации. Доступно только для исходящих задач, работающих с кэшем в памяти или в БД. При использовании больших списков с механизмом кэширования в БД процедура синхронизации может занимать некоторое достаточно длительное время. В этой связи синхронизация принудительно проводится лишь при первом обращении к таблице-кэшу после запуска системы (для активных задач при обнаружении возможности совершения звонка, для неактивных задач после первой активации). В задачах, где допускается изменение данных в таблице, использование этого флага позволяет не пользоваться контекстным меню для запуска процедуры синхронизации, а автоматически проводить ее после очередной активации задачи. <br />
* Использовать алгоритм перезвона абонентам строго в назначенное время. Доступно только для исходящих задач, работающих с кэшем в памяти и автоматизированным поиском абонента (не посредством ручного выбора). В случае активации режима система осуществляет автоматический постоянный мониторинг находящихся в кэше задачи абонентов на предмет возможности осуществления звонка. Производится отслеживание только тех абонентов, звонок которым уже производился, был выбран результат звонка «Перезвонить абоненту..» (именно абоненту!) и указан период ожидания или время, не ранее которого очередной вызов должен быть произведен. Выставление результата может произойти как в стоп-форме (оператором), так и в сценарии (автоматически на основе заложенного алгоритма). <br />
* <div id="skills"></div> Использовать скилл-тэги. Доступно для исходящих задач всех типов, за исключением тех, которые осуществляют поиска абонента для оператора. Режим активируется только в случае использования таблицы абонентов с выбранным типом поля ''[[Таблицы абонентов#skills|скилл-тэги]]''. Среди операторов задачи для обслуживания конкретного абонента привлекаются только те, у которых в списке [[Операторы#skills|скилл-тэгов]] присутствуют [[Таблицы абонентов#skills|требуемые таблицей абонентов скиллы]].<br />
<br />
При отключенном режиме производится стандартный однопотоковый обход всей таблицы и возврат к абонентам для перезвона происходит в соответствии с общими принципами выставленного приоритета обхода. <br />
<br />
<span style="color:red;">ВНИМАНИЕ! При формировании задания на перезвон в указанное время для номера автоматически сбрасываются счетчики попыток с результатами «Занято» и «Не отвечает». Если указаны один или несколько альтернативных номеров, то все они считаются приоритетными. Если альтернативный номер не указывается, то приоритетным считается текущий номер, в ходе которого был получен результат «Перезвонить абоненту..». В случае истечения допустимого количества неудачных попыток дозвона производится возврат абонента из приоритетных в общий список со сбросом счетчиков попыток с результатами «Занято» и «Не отвечает». <br />
<br />
<span style="color:red;">ВНИМАНИЕ! Следует иметь в виду, что для решения поставленной задачи автоматического перезвона строго в назначенное время автоматика работает оптимально только при определенных ограниченных объемах поступающих на перезвон абонентов. Если их количество таково, что последовательная их обработка при средней продолжительности звонка на используемом количестве линий и операторов не укладывается в разумное время, задача перестанет корректно функционировать, полностью сосредоточив внимание на абонентах для перезвона с применением «нестрогого» алгоритма их обхода. В ряде случаев имеет смысл отключать механизм перезвона или использовать альтернативные методы работы с таблицей абонентов в целях более тонкой наладки корректного процесса перезвона</span>. <br />
<br />
<br />
Несколько следующих параметров определяют большое множество вариантов обхода абонентов. Практически любую постановку можно приближенно настроить в задаче, выставив их соответствующим образом. После описания будет приведено несколько примеров для более четкого понимания. Приоритеты обхода доступны только для задач, осуществляющих дозвон до абонентов по единому списку (все типы кроме задач с ручным выбором абонентов и распределенным списком).<br />
* Приоритет обхода абонентов. Доступно только для исходящих задач. Определяет способ поиска очередного абонента в таблице при необходимости осуществить звонок на иных абонентов. <br />
** Строгий. Список абонентов всегда обрабатывается с самого начала. Второй абонент не будет обрабатываться, пока по первому абоненту не будет получен конечный результат (положительный или отрицательный). <br />
** Нестрогий. Список абонентов всегда обрабатывается с самого начала. Обрабатывается тот абонент, который находится ближе всех к началу списка и на который есть возможность осуществить звонок (результат по абоненту еще не достигнут, на абонента не установлены таймауты ожидания). <br />
** Отсутствует. Производится обработка следующего по списку абонента (циклический обход). <br />
** Случайный. Производится случайная выборка из равномерного распределения по таблице абонентов. <br />
<br />
* Приоритет обхода номеров. Доступно только для исходящих задач. Определяет способ поиска очередного номера абонента в таблице при необходимости осуществить звонок на иные номера конкретного абонента. <br />
** Строгий. Список номеров текущего абонента всегда обрабатывается с самого начала. Второй номер не будет обрабатываться, пока по первому номеру не будет получен конечный результат (положительный или отрицательный). <br />
** Нестрогий. Список номеров абонента всегда обрабатывается с самого начала. В реализацию идет тот номер, который ближе всех к началу списка и на который есть возможность осуществить звонок (результат по абоненту еще не достигнут, номер не отбракован, ни на абонента, ни на номер не установлены таймауты ожидания). <br />
** Отсутствует. Производится обработка следующего по списку номера абонента (циклический обход). <br />
** Случайный. Производится случайная выборка из равномерного распределения по номерам абонента. <br />
<br />
* Общий приоритет обхода. Доступно только для исходящих задач. При необходимости (или если угодно возможности) произвести очередной звонок, определяет каким способом искать номер – отдать предпочтение выбору нового абонента или попробовать другие номера текущего абонента. Возможные варианты: <br />
** Абоненты; <br />
** Номера. <br />
<br />
* Прогрессивный обход. Доступно только для исходящих задач с активированной прогрессивной схемой. Определяет способ выбора множества номеров при необходимости произвести одновременно несколько звонков: возьмутся несколько номеров у одного абонента, либо по одному номеру у разных абонентов. Возможные варианты: <br />
** Абоненты; <br />
** Номера. <br />
<br />
* Лояльность к абонентам. Определяет для логики принятия решений, каким образом проводить действия, где затрагивается время абонента, отличное от разговора с оператором. На итоговую лояльность влияет множество других параметров задачи, в частности настройки очереди, тип выбранной задачи (как было отмечено выше, прогрессивная схема менее лояльна, чем резервирующая операторов). Несмотря на большой диапазон, для простоты среди возможных вариантов в списке приведены только три: <br />
** Отсутствует; <br />
** Средняя лояльность; <br />
** Полная лояльность; <br />
<br />
<br />
Словами их можно описать так: Отсутствующая лояльность не помнит причиненных абоненту неудобств, средняя лояльность ограничивает неудобства определенным значением, полная лояльность после первого неудобства берет абонента в отдельную категорию и работает с ним как с единственным.<br />
<br />
<br />
<br />
Задачи с ручным выбором абонентов и распределенным списком имеют несколько индивидуальных свойств и возможностей. При создании такой задачи супервизору необходимо провести разбиение списка по операторам. <br />
<br />
<br />
[[Файл:cl_cc_task_f3a.png|center|800px]]<br />
<br />
<br />
Распределение абонентов. Поровну или вручную. В первом случае список делится на всех операторов задачи равномерно. Во втором случае супервизору необходимо задать правила распределения. <br />
<br />
<br />
Таблица распределения. Доступно указание начальных букв, диапазонов букв, количества абонентов (берется подряд после операций с буквами) или процента. После нажатия кнопки «Перераспределить» в БД создается кэш-таблица, согласно которой производится обработка задачи модулем управления. <br />
<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Добавление операторов в реальном времени в задачу с распределенным списком в модуле управления ресурсами не даст результата, если при разбиении списка оператор не присутствовал в задаче. Необходимо также произвести переброс части абонентов на оператора. Это можно сделать в модуле управления ресурсами на вкладке «Абоненты».<br />
<br />
<br />
<span style="color:red;">ВНИМАНИЕ! После выполнения одним из операторов всех своих заданий (в соответствии с установками задачи) супервизоры получат соответствующее уведомление</span>.<br />
<br />
<br />
<br />
<br />
===Дополнительно===<br />
<br />
<br />
Все числовые элементы вкладки доступны только для исходящих задач. Здесь указываются параметры, определяющие не характер, а влияющие на ход выполнения задачи. Позволяют регулировать нагрузку на ресурсы конкретного call-центра наиболее оптимальным способом.<br />
* Максимальное число звонков при прогрессивном наборе на каждого оператора. Ограничивает прогрессивный набор установленным числом разрешенных дозвонов. Например, при стандартном значении 5 для трех операторов, ожидающих соединения, будет осуществлено не более 15 дозвонов. При выходе одного из операторов или при получении им звонка, оставшиеся 4 не урезаются, а остаются в очереди. Однако при получении негативных ответов от линий, новые дозвоны не будут осуществляться, пока их больше 10. <br />
* Ограничение на вероятность преждевременного звонка. Принуждает систему тщательно анализировать статистику, не переступая за рамки заданного значения вероятности (или в этом случае частоты). <br />
* Пауза после получения сигнала «Занято». Устанавливает минимальный таймаут ожидания до следующей попытки набора номера этого же абонента после получения от линии сигнала «Занято». <br />
<br />
<br />
[[Файл:cl_cc_task_f4.png|center|800px]]<br />
<br />
<br />
* Число попыток при ответе «Занято». Устанавливает число попыток дозвона до абонента, если система постоянно получает сигнал «Занято», несмотря на установленные таймауты. После проведения последней из указанного числа попыток, система переводит абонента в «Завершенные» с пометкой «Занято». <br />
* Пауза после получения сигнала «Не отвечает». Устанавливает минимальный таймаут ожидания до следующей попытки набора номера этого же абонента после получения от линии сигнала «Не отвечает», или истечении времени ожидания ответа абонента <br />
* Число попыток при ответе «Не отвечает». Устанавливает число попыток дозвона до абонента, если система постоянно получает сигнал «Не отвечает», несмотря на установленные таймауты. После проведения последней из указанного числа попыток, система переводит абонента в «Завершенные» с пометкой «Не отвечает». <br />
* Время ожидания коммутации. Устанавливает время ожидания, после которого звонку будет присвоен статус «Абонент не отвечает» и увеличен счетчик числа попыток при сигнале «Не отвечает» <br />
* Подставляемый номер телефона. При осуществлении исходящих задач на потоке E1 с множеством зарезервированных за ним номеров, система будет подставлять установленный здесь телефонный номер в качестве CallerId. <br />
* Пропускать обработку вызова при ответе факс-автомата. Доступна только для исходящих задач. При выключенном флаге любой ответ абонента считается корректным и переводится в обработку - оператором или IVR, даже если он распознан как факс-автомат. Активировав свойство такие вызовы (распознан факс) по задаче не считаются корректно отвеченными и прекращаются, не попадая в обработку на коммутацию с оператором или IVR. В статистику попыток попадает результат «Факс». <br />
* Поведение при переключении абонента на сценарий IVR. <br />
** Продолжать выполнение в рамках задачи с освобождением оператора. Стандартный режим, при котором после перевода оператор освобождается, а сценарий диалога продолжает выполняться у пользователя, на которого произведено переключение, если настройки позволяют передавать диалоговые формы данному пользователю (задача, права, присутствие в списке операторов, наличие клиентского интерфейса и т.д.), либо диалоговый сценарий прекращает свое исполнение в момент переключения. В случае, если перевод осуществляется на очередь, диалоговый сценарий сворачивается у переводившего вызов оператора, а принятие решения о дальнейшем его поведении ожидает снятия трубки абонентом, на которого было произведено переключение. Переключение на IVR также производит вывод текущего оператора из задачи с обрыванием сценария диалога. <br />
** Осуществлять выход из задачи (с возможностью входа в другую задачу). Устанавливает режим, при котором любая коммутация с IVR после перевода на него звонка оператором будет автоматически прерывать выполнение текущей задачи, что даст возможность осуществить для линии абонента вход в другую задачу в контексте текущей цепочки коммутаций. Если организовывать таким образом многозадачную реализацию обработки звонка, то в конечном счете в пространственную таблицу коммутаций будет помещена информация по всем коммутациям и служебным предкоммутационным состояниям (ожидание в очереди) со ссылкой на одну и ту же цепочку. Это необходимо иметь в виду при построении сложных отчетов, опирающихся на данные по цепочкам. Все последующие задачи в цепочке - входящие, так как запуск их обработки осуществляется из сценария IVR. Также этот режим может быть использован для перевода звонка на пользователя с сохранением диалоговой формы у оператора, осуществившего перевод. <br />
<br />
Режим выхода работает только если переключение осуществляется посредством сценария IVR и вне зависимости от того, была ли коммутация абонента непосредственно со сценарием, или сначала было произведено соединение оператора с пользователем через IVR и последующий перевод на абонента. <br />
<br />
В случае использования [[Параметры АТС|сценария входа в АТС]], который всегда активируется при переключениях, заблокирована эта функциональность. При необходимости осуществить аналогичное действие с переключением через сценарий входа в АТС можно использовать компонент [[Общие компоненты сценариев#Статус объекта|Статус объекта]]: раздел «Установить состояние линии» параметр «Выход из задачи». При настройке компонента потребуется номер или идентификатор внешней линии (доступен в качестве функции как в диалоговом, так и в IVR сценарии).<br />
<br />
* Оставлять оператора ожидающим обратного вызова. Режим используется для организации сервисов, в ходе обработки звонка в которых необходимо производить переключение абонента на внешний источник (сценарий, внешнего абонента, некоторого пользователя системы и т.д.) и оставлять оператора со сценарием диалога ожидать соединения с абонентом вновь. Для возврата абонента на оператора в сценарии IVR после успешного соединения с внешним источником необходимо не останавливать сценарий компонентом СТОП, а осуществлять ожидание (пауза, DTMF, появление в БД каких то данных и т.п.), и далее компонентом сценария IVR [[Компоненты сценариев IVR#Переключение на номер|Переключение]] с установленным свойством Назначение => [[Компоненты сценариев IVR#Переключение на номер|Возврат]] к оператору производить обратный вызов сквозь резервирование. <br />
<br />
* Режим вывода абонентов из очереди при освобождении операторов. Абонент помещается в очередь только в случае, когда все операторы заняты. По умолчанию осуществляется конкурентный вывод абонента из очереди, то есть первый абонент очереди соединяется с оператором, первым снявшим трубку. При этом вызов рассылается всем операторам по мере их освобождения и вплоть до снятия первым из них трубки. При наличии в очереди нескольких абонентов второй снявший трубку оператор коммутируется со вторым абонентом и т.д. Конкурентный режим обеспечивает максимально строгое соответствие процесса соединений с изначальной очередностью абонентов - впередистоящий абонент всегда соединится с оператором первым. <br />
<br />
Свойство позволяет взамен стандартного конкурентного режима установить режим однократного индивидуального закрепления. То есть при освобождении первого из операторов первый абонент очереди закрепляется за ним, и другим операторам по мере освобождения вызов не рассылается (при отсутствии других абонентов в очереди). За вторым освободившимся оператором закрепляется второй абонент из очереди. Если же оператор не снимет трубку в течение установленного времени, звонок абонента станет считаться приоритетным, разместится в первой позиции очереди, и в целях обеспечения лояльности и очередности обработки при следующем выводе из очереди будет применен конкурентный режим вывода.<br />
* Режим набора номеров. Доступно только для исходящих задач. Позволяет задать индивидуальные значения, либо сослаться на общие настройки. Определяет режим набора номеров по списку абонентов. Используется для гибкой маршрутизации звонков. Подробнее в разделе [[Менеджер задач|Администрирование. Общие настройки. Менеджер задач. Сценарий набора номера]]. <br />
* Служебный сценарий набора номера абонента. Доступно только для исходящих задач. Используется только в случае индивидуальной установки режима набора номеров «через сценарий». В этом случае для набора номеров именно по настраиваемой задаче будет использован указанный служебный сценарий. Ищется в проектном каталоге задачи, если не обнаружен - в общем. В случае ошибочного указания используетя обычный режим прямого набора номеров без преобразования и маршрутизации. В качестве неявных параметров: 1 - номер для дозвона, 2 - идентификатор оператора, 3 - время ожидания в секундах. В качестве явных параметров - информация об абоненте и о задаче. Код инициатора запуска - 11.<br />
* Использовать очередь. Активирует очередь. Без очереди во входящих задачах, если все операторы заняты, управление будет возвращено в обрабатывающий звонок сценарий IVR по ветке «Занято». Исходящие задачи при неактивной очереди полностью исключают возможность ее использования. В этом случае невозможно сохранение недовведенных до конца звонков в очереди для еще пока занятых операторов в случае прогрессивного набора. <br />
* Помещать в очередь при прогрессивном наборе. Отрезает возможность использования ее при прогрессивном наборе. <br />
* Ограничивать максимальное число абонентов в очереди. Для исходящих задач с активированным прогрессивным набором устанавливает порог на количество помещаемых в очередь абонентов. <br />
* <div id="QueueTimeout"></div>Ограничивать время в очереди. При превышении времени нахождения в очереди больше заданного, происходит выход в управляющий сценарий IVR по ветке «Таймаут очереди ожидания». <br />
* Воспроизведение в очереди. Для входящей задачи позволяет выбрать файл (wav, mp3), каталог или сценарий IVR, которые будут применены в случае необходимости воспроизведения позвонившему абоненту мелодии/информации на время очереди. При указании файла в соответствующий момент осуществляется его цикличное воспроизведение. При указании каталога осуществляется случайный выбор и воспроизведение одного из находящихся в нем файлов; после завершения одного файла начинается воспроизведение другого, также выбранного случайно. При указании IVR-сценария осуществляется его запуск в [[Фоновый IVR-сценарий медиа-взаимодействия|фоновом режиме медиа-взаимодействия]] с линией на время ожидания. <br />
<br />
Индивидуально указанное в задаче музыкальное сопровождение пребывания в очереди имеет больший приоритет по сравнению с [[Музыкальное сопровождение|общими настройками]]. Однако не применяются, если в основном сценарии, осуществляющем вход в задачу, было запущено и не завершено [[Компоненты сценариев IVR#Воспроизведение звукового файла|фоновое воспроизведение]] или [[Фоновый IVR-сценарий медиа-взаимодействия|фоновый IVR сценарий медиа-взаимодействия]]. <br />
<br />
* Задача не выполнена при времени коммутации менее. Для сценариев автоматического голосового меню устанавливает время, необходимое сценарию, для донесения основной информации. В случае, если абонент кладет трубку раньше установленного времени, дозвон считается неуспешным, в статистику по такому звонку проставляется описание «Время в сценарии недостаточно», и абонент в ходе реализации задачи будет оповещен вновь. <br />
* Учитывать результат о недостаточном времени коммутации по аналогии с результатом «Занято». Установка свойства приводит к увеличению счетчика попыток с результатом «Занято» и выставления соответствующего настройке таймаута перед началом повторного звонка абоненту по текущему номеру. <br />
* Максимальная продолжительность разговора. Задает время (от начала обработки вызова), по истечению которого наступает контрольное событие, а в диалоговых формах оператора отображается признак превышения установленного времени. <br />
* <div id="PostTimeout"></div> Максимальная продолжительность поствызывной обработки. Позволяет ограничить время нахождения оператора в поствызывной обработке с автоматическим завершением с фиксацией результата по умолчанию.<br />
* Воспроизведение во FLASH-буфере. В случае активации и указания файла (wav, mp3), каталога или сценария IVR, осуществляется индивидуальное для задачи медиа-взаимодействие с линией обслуживаемого абонента задачи при размещении его во FLASH-буфере. <br />
* <div id="EffortResultScript"></div> Служебный сценарий обработки результата звонка/попытки. После завершения каждого звонка/попытки набора номера осуществляется размещение данных в таблицах оперативной статистики БД. При необходимости учитывать результаты во внешней системе, обеспечивающей управление дозвоном или контроль за ходом процесса, можно использовать служебный сценарий. В списке предлагается перечень служебных сценариев проекта, однако вручную можно ввести название любого общего служебного сценария. На вход сценарий в качестве стандартных функций служебных сценариев получает информацию о задаче, идентификатор абонента в списке, идентификатор и номер обслуживаемой линии, код сессии сценария (цепочки коммутаций в случае существования успешных соединений), а в качестве неявных параметров передаются: 1 - номер абонента, 2 - идентификатор последнего оператора, 3 - целочисленный код результата звонка (перечень находится в пространственной БД в таблице <span style="color:green;">A_Cube_CC_Cat_TaskResultTypes</span>), 4 - целочисленный код [[Системные настройки#Call-центр|пользовательского результата]] звонка, 5 - код ответа-отказа SIP в случае неудачного исходящего вызова. Код инициатора запуска служебного сценария - 22. <br />
* Переводить сценарий диалога только на операторов задачи. При переключении звонка оператором (или IVR) на другого пользователя системы устанавливает режим перевода сценария диалога. При установке флага (по умолчанию установлен) текущая отображаемая диалоговая форма переходит к оператору, на которого произошло переключение, только в том случае, если он назначен в данную задачу. В противном случае сценарий диалога завершается и обработка звонка продолжается без него. Если флаг не установлен, то диалоговая форма отображается и сценарий продолжается у любого пользователя в случае, если его рабочее место оснащено клиентским интерфейсом. <br />
* Разрешить прикрепление звонка к задаче. Для всех типов задач за исключением [[#ManualCall|исходящих с дозвоном вручную]] определяет возможность для операторов и сценариев осуществлять привязку существующего активного разговора оператора с внешним абонентом к задаче со всеми вытекающими последствиями: диалоговый сценарий, размещение номера в таблице абонентов, поствызывная обработка, статистика, возможно дальнейшие автоматизированные перезвоны абоненту. [[#ManualCall|Подробнее]].<br />
* Режим записи. Позволяет установить индивидуальный режим записи для настраиваемой задачи. Если определен индивидуальный режим записи, то вне зависимости от установок в разделе [[Запись разговоров|Общие настройки. Запись разговоров]] запись всех коммутаций в рамках задачи будет активирована или наоборот деактивирована. <br />
* Поведение сценария диалога после разрыва коммутации. Действует для задач, обслуживаемых оператором. Позволяет индивидуально для задачи выставить значение параметра, задаваемого в модуле общих настроек. ([[Менеджер задач|Общие настройки. Менеджер задач]]) <br />
* При нажатии СТОП в диалоговой форме. Действует для задач, обслуживаемых оператором. Позволяет индивидуально для задачи выставить значение параметра, задаваемого в модуле общих настроек. (Подробнее см. [[Менеджер задач|Общие настройки. Менеджер задач]]) <br />
* Момент запуска сценария диалога. Действует для задач, обслуживаемых оператором. Позволяет индивидуально для задачи выставить значение параметра, задаваемого в модуле общих настроек. (Подробнее см. [[Менеджер задач|Общие настройки. Менеджер задач]]) <br />
* Резервирование внешней линии. Действует для задач, обслуживаемых оператором в режиме с запросом на дозвон. Позволяет индивидуально для задачи выставить значение параметра, задаваемого в модуле общих настроек. (Подробнее см. [[Менеджер задач|Общие настройки. Менеджер задач]]) <br />
* <div id="ScriptQuery"></div> Сценарий запроса на дозвон. Действует для задач, обслуживаемых оператором в режиме с запросом на дозвон. При установке флага и назначении диалогового сценария, принадлежащего проекту, вместо стандартного окна запроса на дозвон с информацией об абоненте из полей прикрепленной таблицы, обозначенных как «Информационное поле», запускается выбранный сценарий диалога с произвольным наполнением. Решение оператора определяется значением служебной переменной «Результат запроса»: 0-дозвон, 1-пропуск абонента, 2-удаление абонента из списка (отказ). <br />
<br />
<br />
Для применения изменений задачи нажмите кнопку «Сохранить» внизу.<br />
<br />
<br />
Некоторые моменты, касающиеся работы менеджера задач и не связанные явно с модулем редактирования задач приведены в разделе [[Менеджер голосовых задач|Принципы работы логики. Менеджер задач]]. <br />
<br />
<br />
Для повторного запуска исходящей задачи голосового оповещения необходимо очистить ее оперативную информацию. Убедитесь, что задача завершила свое выполнение и в контекстном меню выберите пункт «Очистить оперативную статистику». После активации задача вновь приступит к выполнению.<br />
<br />
<br />
В контекстном меню исходящих задач также доступна команда «Синхронизировать с БД» для принудительной синхронизации кэша с таблицей абонентов в базе данных.</div>Peter%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B_%D0%B0%D0%B1%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2Таблицы абонентов2014-06-30T06:05:08Z<p>Peter: </p>
<hr />
<div>[[Call-центр|Наверх]]<br />
<br />
<br />
Модуль доступен администраторам БД и пользователям, имеющим соответствующее право. Для пользования модулем необходимо зарегистрироваться в call-центре системы.<br />
<br />
Выполнение задач на исходящее оповещение или рассылку SMS-сообщений невозможно без указания списков абонентов. Таблица абонентов предоставляет задаче доступ к соответствующей информации. В ней содержится код абонента, перечень номеров его телефонов, а также дополнительная информация для отображения оператору. Помимо предопределенной информации в таблице абонентов могут содержаться поля для ввода информации после запроса ее у абонента в ходе обработки звонка.<br />
<br />
Таблица абонентов не лишена смысла и для входящей задачи. В этом случае каждый входящий звонок может либо создавать новую запись в таблице для ввода сопутствующей или запрошенной у абонента информации, либо искать по определившемуся номеру запись соответствующего абонента в таблице и предоставлять данные для модификации или вовсе отклонять звонок от абонента, не содержащегося в списке. Вид производимых действий зависит от реализуемого сценария и настроек каждой конкретной задачи.<br />
<br />
Раздел дает возможность создавать и настраивать соответствующие таблицы. <br />
<br />
Таблицы абонентов подчиняются политике прав доступа. Параметры доступа к ним определяются на соответствующей вкладке «Доступ». Доступные привилегии: чтение, изменение.<br />
<br />
<br />
[[Файл:cl_cc_tab1.png|center|800px]]<br />
<br />
<br />
В приведенном двойном списке выделите слева интересующий проект. Справа отобразятся все существующие в нем таблицы абонентов. Выделив необходимую, Вы можете редактировать и удалить ее, а также можете создать новую таблицу в выбранном проекте.<br />
<br />
По характеру создания и доступа к информации они делятся на «локальные» и «внешние».<br />
<br />
<br />
__TOC__<br />
<br />
<br />
===Локальная таблица===<br />
<br />
<br />
Создается внутри оперативной базы данных Oktell автоматически. Пользователю необходимо указать столбцы, заполнить таблицу данными. Информация внутри созданной таблицы доступна для редактирования и просмотра лишь через описываемый модуль, хотя и не закрыта для пользования непосредственно через БД. В связи с этим локальная таблица больше подходит для ограниченных списков, использующихся в небольших задачах, не имеющих продолжения и не требующих полномасштабного анализа статистики. В локальную таблицу возможна вставка табличных данных из буфера, а также импорт из файлов MS Excel.<br />
<br />
[[Файл:cl_cc_tab_f1.png|center]]<br />
<br />
<br />
По умолчанию для локальной таблицы при сохранении в БД автоматически генерируется уникальное название. Однако пользователь имеет возможность задать явное имя таблице для последующего обращения к ней из модуля статистических отчетов, диалговых форм или внешних приложений.<br />
<br />
[[Файл:cl_cc_tab2.png|center]]<br />
<br />
Все столбцы по умолчанию имеют строковый тип (nvarchar) с авторазмерностью (до 2000). Пользователь может по своему усмотрению задать любой другой тип данных для столбца. При смене типа данных столбца осуществляется попытка автоматического преобразования данных к новому типу. Однако следует помнить, что при обнаружении некорректных данных, преобразование которых невозможно, весь столбец с данными очищается (удаляется, а вместо него создается новый).<br />
<br />
[[Файл:cl_cc_tab_f4.png|center]]<br />
<br />
<br />
В локальной таблице всегда существует столбец Id, являющийся идентификатором абонента. Поэтому каждая строка в отличие от внешних таблиц представляет собой информацию по отдельному абоненту.<br />
<br />
Создание локальной таблицы может производиться на базе уже существующей таблицы в БД. В этом случае она будет подключена и автоматически сформируется информация о столбцах, доступная к редактированию (название, тип данных, назначение, описание). <br />
<br />
<span style="color:red;"> ВНИМАНИЕ! Если изменить название таблицы БД во время редактирования локального списка, то физическая таблица в БД будет переименована в новое указанное имя, сохранив все данные. Однако, если имя занято (таблица с указанным новым именем уже существует в БД), то локальный список будет переподключен к существующей таблице, а прежняя таблица будет удалена..</span><br />
<br />
После создания таблицы при редактировании появляется возможность задания фильтрующего запроса на выборку данных из таблицы для осуществления звонков по задачам.<br />
<br />
Смена имени таблицы БД внутри локального списка при редактировании производится с сохранением данных, но с удалением текущей таблицы БД (фактически производится переименование таблицы БД). При удалении локального списка осуществляется запрос к пользователю на предмет необходимости удаления физической таблицы БД (как вариант таблица может быть оставлена в БД).<br />
<br />
<br />
<br />
<div id="ExtTables"></div><br />
===Внешняя таблица===<br />
<br />
<br />
Пользователю предоставляется возможность подключить в качестве таблицы абонентов набор данных из собственной таблицы или запрос в БД, возвращающий произвольный набор данных. Одно другого не исключает. «Таблица» здесь не всегда понимается в буквальном смысле.<br />
<br />
[[Файл:cl_cc_tab3.png|center]]<br />
<br />
* Способ подключения. Позволяет выбрать, каким образом подключаться к базе данных с таблицей. Таблица абонентов может быть расположена в любой базе данных на любом сервере, в том числе в файлах Microsoft Excel. Выбрав требуемый механизм доступа (ADO, OLE, ODBC, Oracle), можно организовать прямое подключение к внешней базе, указав строку подключения и провайдер данных. По умолчанию подключение к собственной БД. При этом все требуемые данные будут браться и сохраняться в подключенной БД. Такой способ подключения является более оптимальной альтернативой [[Подключение_внешних_БД|линковке]] базы к серверу БД.<br />
<br />
* Строка подключения. В случае, если выбран способ подключения, отличный от подключения к собственной БД, требуется указание строки подключения. Строка подключения не должна содержать указание названия провайдера данных (он указывается отдельно и в случае необходимости подставляется автоматически), так как указанная строка используется в качестве параметра команды T-SQL OPENROWSET в хранимых процедурах MS SQL Server. Например, для доступа к файлу Microsoft Excel, строка подключения должна выглядеть «<span style="color:blue;">Excel 8.0;Database=D:\monitor.xls;</span>», а для доступа к MS SQL Server - «<span style="color:blue;>server=DOMAIN;database=databasename;uid=login;pwd=password;</span>»<br />
<br />
* Провайдер данных. OLE, ODBC и Oracle подключения требуют указания здесь провайдера данных. Это имя подставляется в качестве аргумента в команду OPENROWSET в хранимых процедурах MS SQL Server, а также дополняет указанную строку подключения для доступа непосредственно из службы сервера телефонии. Например Microsoft.Jet.OLEDB.4.0 или SQLOLEDB. <br />
<br />
<span style="color:red;"> ВНИМАНИЕ! Подключение больших таблиц в задачах с «ручным выбором абонентов» и «распределением по операторам», а также работающих с таблицей абонентов через «кэш в БД» требует полного перекачивания данных таблицы с удаленного сервера БД на локальный сервер БД в хранимых процедурах всякий раз при синхронизации. Это может требовать дополнительного времени.<br />
<br />
<span style="color:red;"> ВНИМАНИЕ! Подключение драйверов, не поддерживающих T-SQL лишает возможности использовать некоторые функции. Например, при подключении в качестве источника файлов Microsoft Excel становится недоступным распределение абонентов по операторам с указанием начальных символов имен из-за отсутствия поддержки команд <span style="color:blue;>Substring</span> и <span style="color:blue;>Cast</span>. А при отсутствии поддержки команды <span style="color:blue;>like</span> и символа <span style="color:red;>'%'</span> становится невозможным поиск по номерам.<br />
<br />
<br />
* Таблица БД. Используется для сохранения данных, полученных от абонента в ходе реализации сценариев по задаче, а также при выборе режима вставки новых записей по поступающим звонкам во входящей задаче. Помимо этого таблица используется для получения информации, если отдельно не указан запрос на выборку данных. <br />
<br />
* Запрос в БД. Если указан запрос, то выборка данных по абонентам для исходящей задачи будет формироваться на его основе, также как и загрузка данных по абонентам в сценарии и диалоговые формы. Запрос может быть сколь угодно сложным с разумным ограничением на время исполнения. В качестве примера использования можно привести задачу формирования данных по абоненту из нескольких таблиц, где раздельно хранятся телефоны и прочая информация, а также, если в ходе реализации задачи необходимо производить работу не со всеми абонентами в таблице, а по какому то заранее известному условию, например, где долг более 1000 рублей. Если в дополнение к запросу не указана базовая таблица с идентификаторами абонентов, то сохранение вводимых данных невозможно. Следует отметить, что запрос с течением времени может возвращать разные данные. При работе с исходящей задачей в моменты синхронизации перечень абонентов будет корректироваться в соответствии с возвращаемой выборкой. <br />
<br />
<span style="color:red;"> ВНИМАНИЕ! Введенный текст используется для формирования более сложного запроса на получение данных. Вы можете использовать запрос любой сложности с учетом того, что он позже будет заключен в еще один ''select * from ([Ваш запрос])''. Например, не допускается использование операторов ''declare'' и ''set''. Для более подробной информации изучите правила вложенных запросов <br />
[http://technet.microsoft.com/ru-ru/library/ms189543(v=sql.105).aspx по этой ссылке] (ORDER-группа допускается только вместе с использованием TOP). <br />
<br />
<br />
* Осуществлять запрос информационных данных по абоненту только из прикрепленной таблицы. Поле доступно только если одновременно выбраны и таблица, и запрос. Система при работе кэширует только идентификаторы абонентов, вся остальная информация берется при необходимости непосредственно из БД. При получении информации об абоненте для вывода в диалоговых формах, в уведомлениях о входящем вызове и ряде других мест осуществляется запрос на выборку одной записи по указанному идентификатору. В ряде случаев запрос носит характер фильтрующего и поиск по нему смысла не имеет при том, что выполняется со значительно большей загрузкой сервера БД. Рекомендуется всегда держать это поле включенным для ускорения взаимодействия с сервером БД. Исключением может являться ситуация, когда запрос собирает отображаемые данные, физически располагающиеся в нескольких таблицах. Например, телефоны лежат отдельно от названий. <br />
<br />
<br />
===Работа с данными===<br />
<br />
<br />
Работа сервера логики не зависит от типа представления таблицы («внешняя» или «локальная»). Исключение составляют внешние таблицы баз данных, обслуживающимися другими серверами БД.<br />
<br />
После выбора типа таблицы и указания способа получения данных производится переход на вкладку проверки и назначения типов столбцов. <br />
<br />
Для локальной таблицы, как было отмечено выше, здесь доступно изменение таблицы. Выделите соответствующую запись, и щелкните в поле, которое хотите отредактировать. Появится курсор ввода текста, позволяющий изменять данные. Каждая строка представляет собой отдельного абонента, его идентификатор назначается автоматически и не виден пользователю. Чтобы создать новую запись вставьте курсор ввода в последнюю строку (пустую) и введите данные. При редактировании последнего столбца последней записи появится новая пустая строка. Пользователь может создавать/удалять столбцы, изменять данные в ячейках вручную, а также импортировать табличные данные из файлов Microsoft Excel и из буфера обмена, столбцы при этом автоматически создаются по необходимости. Из локальной таблицы возможен экспорт данных в файлы Excel. Соответствующая команда находится в контекстном меню. <br />
<br />
<br />
<span style="color:red;"> ВНИМАНИЕ! Все создаваемые для локальной таблицы поля имеют строковый тип. Длина поля для хранения данных рассчитывается как максимальное значение длины среди всех сохраняемых данных в столбце, но не менее 50 символов. Это необходимо иметь в виду при формировании пустых локальных таблиц (для вставки данных) для использования с внешними задачами. Если прогнозируются объемные данные, то рекомендуется первой и единственной строчкой вставлять «бессмысленные» данные с целью формирования полей с соответствующим ограничением на длину. <br />
<br />
<br />
Для внешней таблицы выполняется указанный запрос, или производится выборка из указанной таблицы при его отсутствии. Возвращаются первые 10 записей.<br />
<br />
[[Файл:cl_cc_tab_f3.png|center]]<br />
<br />
<br />
В обоих случаях (локальный и внешний тип таблиц) имеющимся в списке столбцам необходимо назначить типы. Среди обязательных типов: <br />
<br />
<br />
* Поле идентификатора абонента. Числовое значение, уникально определяющее запись абонента. В таблице могут существовать несколько записей с одним идентификатором. При синхронизации поля всех таких записей считаются принадлежащими одному абоненту. Номера телефонов из разных записей объединяются. Прочая информация при загрузке берется из первой строки, при записи заносится во все строки. Поле идентификатора может быть только одно для таблицы абонентов. <br />
<br />
* Поле номера телефона. В таблице может быть один или несколько столбцов типа «Номер». В каждой ячейке может лежать номер телефона или несколько номеров телефонов, разделенных запятыми, пробелами или прочими символами, отличными от +()-Ww и цифр. Полей номеров телефонов может быть неограниченное число. В случае, если соответствующие поля не заполнены данными, они игнорируются менеджером задач. <br />
<br />
* Информационное поле. Значение полей с непустыми значениями подставляются в диалоговую форму оператора, а также в форму уведомления оператора о его резервировании на выполнение исходящей голосовой задачи в момент осуществления дозвона по номеру абонента (действует для типов задач «С резервированием оператора» и «С уведомлением оператора»). Информационных полей может быть неограниченное число. Все незаполненные данными значения игнорируются менеджером задач. <br />
<br />
* Наименование. Значение поля наименование является аналогичным обычному информационному полю, однако наименование может быть только одно. Значение поля является первым и основным текстовым полем в списке, на которое оператор в первую очередь обращает внимание. Выводится в список информационных полей в том случае, если задано описание для поля. <br />
<br />
* Идентификатор оператора. В таблице может быть один столбец типа «Идентификатор оператора». Тип может быть проставлен только полю, имеющему тип данных ''uniqueidentifier''. Применяется при синхронизации задач с закреплением абонента за оператором, автоматически перестраивая кэш и формируя привязки. Является альтернативой ручному способу перераспределения абонентов по операторам в настройках задачи.<br />
<br />
* Скилл-тэги. В таблице может быть один столбец типа «Скилл-тэги». Тип может быть проставлен только полю, имеющему строковый тип данных. Применяется в исходящих задачах со включенной функцией использования скилл-тэгов. Поле позволяет задать через запятую скилл-тэги, требуемые от операторов для обслуживания конкретного абонента. Можно быть уверенным, что абонент будет обслужен только тем оператором, среди [[Операторы#skills|скилл-тэгов]] которого присутствуют все перечисленные в данном поле таблицы абонентов тэги, требуемые для обслуживания этого абонента.<br />
<br />
* Прочие поля. Другие поля, а также перечисленные выше могут быть использованы для отображения данных в форме, для ввода данных из формы, для маршрутизации сценария, для озвучивания в IVR, а также для других необходимых действий. Доступ к ним осуществляется в сценариях посредством переменных типа «Поле таблицы» или непосредственными запросами на основании текущего идентификатора абонента. <br />
<br />
<br />
Сохраненный список становится доступным для прикрепления к задачам внутри текущего проекта.<br />
<br />
Любые поля таблицы абонентов доступны в сценариях всех типов, выполняемых по задачам, в которых таблица абонентов используется. Абсолютно любые поля доступны в сценариях для чтения с использованием переменных типа «Поле таблицы», имя которых совпадает с именем соответствующих полей. Однако аналогичным образом для записи доступны только поля, которые находятся в прикрепленной таблице в случае внешнего списка и все поля из локального списка. То есть, если в качестве источника для исходящей задачи используется внешняя таблица абонентов с типом «Запрос в БД», то запись не будет производиться в поля, не принадлежащие к прикрепленной таблице. И запись не будет производиться вообще, если прикрепленная таблица вовсе не указана. <br />
<br />
<br />
<span style="color:red;"> ВНИМАНИЕ! При вставке в реальную таблицу БД в строковое поле с определенным ограничением на длину данных большей длины, вставка не осуществляется. Происходит генерация исключения с выводом информации в лог-журнал исключительных ситуаций. Если требуется избежать этого и вместо генерации исключения обрезать переходящие за рамки ограничения данные, в запросах необходимо явно приводить SQL-типы. Это можно сделать, например, так (здесь @a – внутренняя переменная):<br />
<br />
<br />
<pre>Select cast ( @a as nvarchar ( 50 ) )</pre><br />
<br />
<br />
<br />
<span style="color:red;"> ВНИМАНИЕ! При вставке новых столбцов, а равно и при использовании внешних таблиц используйте в качестве имен латинские буквы и цифры. Несмотря на возможность использовать и другие символы, делать этого не рекомендуется во избежание ошибок, которые обычно длительно устраняются, и часто в этом случае не обходится без помощи технической поддержки. Чтобы представить оператору адекватные названия на родном языке, необходимо задать свойство «Описание» столбцам таблицы абонентов.<br />
<br />
<br />
<span style="color:red;"> ВНИМАНИЕ! В задачах по умолчанию используется буфер синхронизации, позволяющий реализовывать различные варианты обхода таблицы абонентов (в задаче метод работы с таблицей «Загрузка в память и синхронизация»). Это подразумевает периодическую синхронизацию данных (загрузку из БД и сопоставление), что в случае большого количества абонентов в таблице требует от сервера существенных временных и ресурсных затрат. В среднем синхронизация с таблицей из 10 тыс. абонентов происходит 0.5 секунды, 100 тыс. абонентов - 3 секунды, 500 тыс. абонентов - 9 секунд. Значительно возрастает объем используемой памяти (кэш по таблице из 100 тыс. абонентов, где у каждого по одному номеру, требует ~40 МБ). Синхронизационный буфер (кэш в памяти) при формировании задач рекомендуется оставлять для таблиц с числом записей менее 100 тысяч. При настройке работы нескольких задач одновременно обращайте внимание на объем используемой памяти во избежание зависания системы. При необходимости использования значительно больших таблиц применяйте при настройке задач метод работы с таблицей «кэш внутри БД» или «сценарий поиска абонента».<br />
<br />
<br />
<span style="color:red;"> ВНИМАНИЕ! При организации массовых исходящих кампаний с большим числом операторов рекомендуется выносить БД на отдельную рабочую станцию или сервер, организовать распределение БД по нескольким жестким дискам. В обязательном порядке необходимо проверить наличие индекса по полю идентификатора основной прикрепленной таблицы. В случае отсутствия его необходимо создать.</div>Peter%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8BОператоры2014-06-30T06:04:48Z<p>Peter: </p>
<hr />
<div>[[Call-центр|Наверх]]<br />
<br />
<br />
Модуль доступен супервизорам и пользователям, имеющим соответствующее право. Для пользования модулем необходимо зарегистрироваться в call-центре системы. Позволяет настраивать графики работы операторов, видеть их состояния в реальном времени, а также назначенные на них задачи и минимальную статистику авторизаций в call-центре. Пользователь становится оператором в разделе [[Пользователи|Администрирование.Пользователи]]. Флаг «Является оператором» и право доступа к разделу «Call-центр» в совокупности дают возможность пользователю участвовать в работе call-центра.<br />
<br />
<br />
В режиме просмотра списка операторов помимо просмотра состояний доступны функции обмена сообщениями внутри системы, а также просмотра текущего содержания экрана оператора. При обладании супервизора соответствующими правами доступа эти команды размещаются в контекстном меню списка операторов. Подробнее о возможности просмотра экранов в разделе [[Мониторинг#Подключения|Администрирование.Мониторинг подключений]].<br />
<br />
<br />
Cупервизор может по своему усмотрению выводить операторов из режима «Call-центр», освобождая лицензии. Если оператор активен в это время, будет произведено действие, аналогичное нажатию им на пункт главного меню «Выйти из call-центра». Команда доступна в контекстном меню.<br />
<br />
С помощью контекстного меню доступно управление ручным режимом call-центра для операторов, обеспечивающим возможность отключить использование оператора исходящими задачами.<br />
<br />
<br />
В модуле происходит настройка индивидуального недельного графика работы оператора, в соответствии с которым производится учет рабочего времени, а также автоматическое назначение и исключение оператора в активных задачах.<br />
<br />
[[Файл:cl_cc_oper1.png|center|800px]]<br />
<br />
Для настройки индивидуального графика используется блок управления в виде таблицы. В левом верхнем углу выбирается режим выделения: основное рабочее время или график перерывов. Выделением некоторой зоны в таблице блока управления с нажатой кнопкой мыши производится назначение соответствующих интервалов времени в текущем выбранном режиме. В любой момент нажатие правой кнопки мыши над зоной таблицы детализирует текущий отмеченный час по минутам. Кнопка Shift на клавиатуре инвертирует выделение, кнопка Ctrl - снимает.<br />
<br />
На вкладке «Информация» доступны сведения по оператору, аналогичные информационному блоку модуля [[Мое рабочее место]]. Сводные отчеты по операторам строятся в модуле [[Статистика]].<br />
<br />
<div id="skills"></div> Здесь же задаются [[Голосовые задачи#skills|скилл-тэги]] оператора (через запятую), которые учитываются в задачах, требующих для обслуживания абонентов привлекать определенные группы операторов из общего списка операторов задачи.<br />
<br />
Командой «Присоединиться к разговору» контекстного меню, возникающего при выделении оператора в списке, активируется режим прослушивания разговора выбранного оператора в реальном времени. В рамках процесса прослушивания может быть активирован режим помощи оператору (подсказок, которые слышит оператор, и не слышит абонент). Управление режимами осуществляется из модуля [[Телефон]]. <br />
<br />
Режим доступен для супервизоров. Допускается прослушивание разговоров операторов, участвующих в подчиненных супервизору задачах. Также прослушивание возможно, если у супервизора установлены права контроля выбранного оператора.<br />
<br />
Подробнее о режиме в разделе [[Прослушивание и помощь|Телефон. Прослушивание и помощь]].</div>Peter%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8BОператоры2014-06-30T05:53:29Z<p>Peter: </p>
<hr />
<div>[[Call-центр|Наверх]]<br />
<br />
<br />
Модуль доступен супервизорам и пользователям, имеющим соответствующее право. Для пользования модулем необходимо зарегистрироваться в call-центре системы. Позволяет настраивать графики работы операторов, видеть их состояния в реальном времени, а также назначенные на них задачи и минимальную статистику авторизаций в call-центре. Пользователь становится оператором в разделе [[Пользователи|Администрирование.Пользователи]]. Флаг «Является оператором» и право доступа к разделу «Call-центр» в совокупности дают возможность пользователю участвовать в работе call-центра.<br />
<br />
<br />
В режиме просмотра списка операторов помимо просмотра состояний доступны функции обмена сообщениями внутри системы, а также просмотра текущего содержания экрана оператора. При обладании супервизора соответствующими правами доступа эти команды размещаются в контекстном меню списка операторов. Подробнее о возможности просмотра экранов в разделе [[Мониторинг#Подключения|Администрирование.Мониторинг подключений]].<br />
<br />
<br />
Cупервизор может по своему усмотрению выводить операторов из режима «Call-центр», освобождая лицензии. Если оператор активен в это время, будет произведено действие, аналогичное нажатию им на пункт главного меню «Выйти из call-центра». Команда доступна в контекстном меню.<br />
<br />
С помощью контекстного меню доступно управление ручным режимом call-центра для операторов, обеспечивающим возможность отключить использование оператора исходящими задачами.<br />
<br />
<br />
В модуле происходит настройка индивидуального недельного графика работы оператора, в соответствии с которым производится учет рабочего времени, а также автоматическое назначение и исключение оператора в активных задачах.<br />
<br />
[[Файл:cl_cc_oper1.png|center|800px]]<br />
<br />
Для настройки индивидуального графика используется блок управления в виде таблицы. В левом верхнем углу выбирается режим выделения: основное рабочее время или график перерывов. Выделением некоторой зоны в таблице блока управления с нажатой кнопкой мыши производится назначение соответствующих интервалов времени в текущем выбранном режиме. В любой момент нажатие правой кнопки мыши над зоной таблицы детализирует текущий отмеченный час по минутам. Кнопка Shift на клавиатуре инвертирует выделение, кнопка Ctrl - снимает.<br />
<br />
На вкладке «Информация» доступны сведения по оператору, аналогичные информационному блоку модуля [[Мое рабочее место]]. Сводные отчеты по операторам строятся в модуле [[Статистика]].<br />
<br />
Здесь же задаются [[Голосовые задачи#skills|скилл-тэги]] оператора (через запятую), которые учитываются в задачах, требующих для обслуживания абонентов привлекать определенные группы операторов из общего списка операторов задачи.<br />
<br />
Командой «Присоединиться к разговору» контекстного меню, возникающего при выделении оператора в списке, активируется режим прослушивания разговора выбранного оператора в реальном времени. В рамках процесса прослушивания может быть активирован режим помощи оператору (подсказок, которые слышит оператор, и не слышит абонент). Управление режимами осуществляется из модуля [[Телефон]]. <br />
<br />
Режим доступен для супервизоров. Допускается прослушивание разговоров операторов, участвующих в подчиненных супервизору задачах. Также прослушивание возможно, если у супервизора установлены права контроля выбранного оператора.<br />
<br />
Подробнее о режиме в разделе [[Прослушивание и помощь|Телефон. Прослушивание и помощь]].</div>Peter%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8BОператоры2014-06-30T05:53:06Z<p>Peter: </p>
<hr />
<div>[[Call-центр|Наверх]]<br />
<br />
<br />
Модуль доступен супервизорам и пользователям, имеющим соответствующее право. Для пользования модулем необходимо зарегистрироваться в call-центре системы. Позволяет настраивать графики работы операторов, видеть их состояния в реальном времени, а также назначенные на них задачи и минимальную статистику авторизаций в call-центре. Пользователь становится оператором в разделе [[Пользователи|Администрирование.Пользователи]]. Флаг «Является оператором» и право доступа к разделу «Call-центр» в совокупности дают возможность пользователю участвовать в работе call-центра.<br />
<br />
<br />
В режиме просмотра списка операторов помимо просмотра состояний доступны функции обмена сообщениями внутри системы, а также просмотра текущего содержания экрана оператора. При обладании супервизора соответствующими правами доступа эти команды размещаются в контекстном меню списка операторов. Подробнее о возможности просмотра экранов в разделе [[Мониторинг#Подключения|Администрирование.Мониторинг подключений]].<br />
<br />
<br />
Cупервизор может по своему усмотрению выводить операторов из режима «Call-центр», освобождая лицензии. Если оператор активен в это время, будет произведено действие, аналогичное нажатию им на пункт главного меню «Выйти из call-центра». Команда доступна в контекстном меню.<br />
<br />
С помощью контекстного меню доступно управление ручным режимом call-центра для операторов, обеспечивающим возможность отключить использование оператора исходящими задачами.<br />
<br />
<br />
В модуле происходит настройка индивидуального недельного графика работы оператора, в соответствии с которым производится учет рабочего времени, а также автоматическое назначение и исключение оператора в активных задачах.<br />
<br />
[[Файл:cl_cc_oper1.png|center|800px]]<br />
<br />
Для настройки индивидуального графика используется блок управления в виде таблицы. В левом верхнем углу выбирается режим выделения: основное рабочее время или график перерывов. Выделением некоторой зоны в таблице блока управления с нажатой кнопкой мыши производится назначение соответствующих интервалов времени в текущем выбранном режиме. В любой момент нажатие правой кнопки мыши над зоной таблицы детализирует текущий отмеченный час по минутам. Кнопка Shift на клавиатуре инвертирует выделение, кнопка Ctrl - снимает.<br />
<br />
На вкладке «Информация» доступны сведения по оператору, аналогичные информационному блоку модуля [[Мое рабочее место]]. Сводные отчеты по операторам строятся в модуле [[Статистика]].<br />
Здесь же задаются [[Голосовые задачи#skills|скилл-тэги]] оператора (через запятую), которые учитываются в задачах, требующих для обслуживания абонентов привлекать определенные группы операторов из общего списка операторов задачи.<br />
<br />
Командой «Присоединиться к разговору» контекстного меню, возникающего при выделении оператора в списке, активируется режим прослушивания разговора выбранного оператора в реальном времени. В рамках процесса прослушивания может быть активирован режим помощи оператору (подсказок, которые слышит оператор, и не слышит абонент). Управление режимами осуществляется из модуля [[Телефон]]. <br />
<br />
Режим доступен для супервизоров. Допускается прослушивание разговоров операторов, участвующих в подчиненных супервизору задачах. Также прослушивание возможно, если у супервизора установлены права контроля выбранного оператора.<br />
<br />
Подробнее о режиме в разделе [[Прослушивание и помощь|Телефон. Прослушивание и помощь]].</div>Peter%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B1%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85Управление базами данных2014-06-30T05:42:40Z<p>Peter: </p>
<hr />
<div>[[Системные настройки|Наверх]]<br />
<br />
<br />
'''Задействовать ограничение на количество одновременных потоков пакетной обработки БД'''<br />
<br />
Устанавливает режим, при котором внутри комплекса производится принудительное разграничение доступа к БД с использованием очереди. Пропускная способность (количество потоков) задается параметром. Включение режима рекомендуется во избежание регламентированного замедления работы ядра MS SQL SERVER, если его версия имеет ограничение на количество потоков (Desktop Edition и Personal Edition). В случае интенсивной работы с доступом к БД (например прогрессивный набор номеров на значительном числе каналов) возможна блокировка ресурсов и замедление работы, что сказывается на стабильности работы системы и появлении пауз. Ситуация усугубляется тем, что блокировка ресурсов, происходящая в замедленных подключениях может приводить и к торможению выполнения запросов основных 5-8 потоков. Подробнее об ограничениях в документации к MS SQL Server.<br />
<br />
<br />
'''Удалить несуществующие связи (проекты, задачи, операторы) из пространственной БД с сохранением статистики'''<br />
<br />
Осуществляет очистку списков операторов, проектов и задач в пространственной БД. Удаляются те элементы, которые уже удалены из основной базы (не присутствуют в списках операторов, проектов и задач соответственно). Статистика пространственной БД, связанная с удаляемыми элементами, остается не затронутой. Однако привязка осуществлена уже быть не может. Доступным остается только построение сводных отчетов. <br />
<br />
<br />
'''Удалить статистику call-центра из пространственной БД, связанную с уже несуществующими ресурсами'''<br />
<br />
Осуществляет очистку списков операторов, проектов и задач в пространственной БД. Удаляются те элементы, которые уже удалены из основной базы (не присутствуют в списках операторов, проектов и задач соответственно). Удаляется также статистика из пространственной БД, связанная с удаляемыми элементами. Становится невозможным получить даже сводные показатели. Например, при удалении статистики по удаленному проекту становится невозможным получить корректные сведения о средней загрузке линий за тот период, где осуществлялась работа с удаленным проектом. <br />
<br />
Операция может занять значительное время и ресурсы сервера баз данных. Относится к перечню операций обслуживания БД (единовременно сервером может производиться не более одной такой операции).<br />
<br />
<br />
'''Очистка оперативной статистики по задачам'''<br />
<br />
Осуществляет очистку оперативной базы данных от информации, связанной с работой задач. Аналогично вызову команды «Очистить оперативную статистику» для каждой задачи.<br />
<br />
Операция может занять значительное время и ресурсы сервера баз данных. Относится к перечню операций обслуживания БД (единовременно сервером может производиться не более одной такой операции).<br />
<br />
<br />
'''Автоматическая профилактика базы данных'''<br />
<br />
Принудительно запускает процедуру переиндексации основных таблиц базы данных, с которыми менеджером задач производится непрерывная плотная работа. После переиндексации сервер сжимает базы до минимально возможного размера и очищает логи транзакций. <br />
<br />
Операция может занять значительное время и ресурсы сервера баз данных. Относится к перечню операций обслуживания БД (единовременно сервером может производиться не более одной такой операции).<br />
<br />
<span style="color:red;">ВНИМАНИЕ! При реализации массовых кампаний рекомендуется регулярно пользоваться режимом профилактики.<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Не стоит только лишь уповать на автоматику. При плотной работе необходимо размещать базу на нескольких жестких дисках, использовать средства ускорения доступа к жестким дискам (RAID5, RAID10), разносить базу по файловым группам, регулярно производить оценку состояния базы, сохранять резервные копии, очищать данные при возможности, перемещать неактуальные данные на другие серверы и т.д. Без принятия описанных мер при сильном разрастании базы снижается производительность системы, и в отдельных особых случаях возможно появление некорректных ситуаций в АТС.</span><br />
<br />
<br />
'''Автоматическая профилактика базы данных и очистка'''<br />
<br />
Помимо вышеописанного режима профилактики производит очистку таблиц для снижения общего размера базы данных. Подобная фукнция может потребоваться при реализации массовых кампаний для сохранения скорости обработки информации в БД. В случае необходимости удаляемые данные можно предварительно переносить в сторонние БД.<br />
<br />
Операция может занять значительное время и ресурсы сервера баз данных. Относится к перечню операций обслуживания БД (единовременно сервером может производиться не более одной такой операции).<br />
<br />
<br />
'''Резервное копирование основной базы данных'''<br />
<br />
Осуществляет создание резервной копии основной базы данных, где хранятся настройки, данные по звонкам и задачам (без статистики колл-центра). Файлы архивных копий размещаются в каталоге Backup корневого каталога серверной службы и называются db_[дата].bak. <br />
<br />
Операция может занять значительное время и ресурсы сервера баз данных. Относится к перечню операций обслуживания БД (единовременно сервером может производиться не более одной такой операции).<br />
<br />
<br />
'''Резервное копирование сценариев'''<br />
<br />
Осуществляет создание архива с резервными копиями всех сценариев системы (только структур самих сценариев без файлов-вложений). Файлы архивных копий размещаются в каталоге Backup корневого каталога серверной службы и называются scr_[дата].zip.<br />
<br />
<br />
'''Производить ежедневную автоматическую оптимизацию БД'''<br />
<br />
Включает/отключает механизм ежедневного запуска процедуры переиндексации таблиц базы данных. Переиндексация стартует раз в сутки в указанное время. В случае, если сервер перезапускался, в этот день запуска автоматической оптимизации не производится.<br />
<br />
Для режима актуальны предупреждения, указанные выше в описании действия «Автоматическая профилактика базы данных».<br />
<br />
Операция может занять значительное время и ресурсы сервера баз данных. Относится к перечню операций обслуживания БД (единовременно сервером может производиться не более одной такой операции).<br />
<br />
Описываемые ниже свойства предоставляют возможность снизить плотность обращений к серверу баз данных за счет исключения некоторых направлений и видов работ. По умолчанию все работы активированы. Однако в объемных базах данных, где не производится периодическая архивация данных, отсутствуют ускоряющие работу RAID-массивы, не используются разнесенные файловые группы, каждое лишнее обращение может быть критичным. Торможение базы может сказываться на качестве работ в реальном времени, когда call-центр ведет активную работу со множеством абонентов. При возникновении заметных торможений можно воспользоваться и отключить некоторые из перечисленных режимов работы с БД.<br />
<br />
<br />
'''Активировать расчет пространственной таблицы состояний операторов'''<br />
<br />
Расчет пространственной таблицы состояний операторов в базе данных call-центра производится для обеспечения call-центра статистикой по операторам. Расчет производится с определенными интервалами времени, обеспечивая статистикой, максимально приближенной к статистике реального времени. При работе сервером выполняется ряд быстрых процедур по сохранению измененных состояний пользователей (операторов) в различных модулях системы. В одно и то же время оператор может находиться в call-центре, быть занят в задаче, осуществлять разговор с другим оператором. Каждый из модулей системы заносит информацию при учитываемой им смене состояния пользователя. Сложность выполняемой процедуры заключается в синтезе совокупных данных, учитывающих данные из нескольких таблиц, и просчитывающих время нахождения в каждом элементарном состоянии.<br />
<br />
Получаемая в итоге статистика доступна для внешних отчетных систем, используется в статистических модулях Oktell таких как «Ресурсы», «Индикаторы», «Отчеты».<br />
<br />
Одна итерация расчета данных может длиться до 20-30 секунд и существенно увеличивать загрузку процессора на сервере баз данных. Дорогостоящей операцией в ходе процесса является обращение к таблицам на выборку данных.<br />
<br />
Подробно о пространственной таблице состояний операторов в разделе [[Структура пространственной БД]].<br />
<br />
<br />
'''Период таймера обработки БД call-центра'''<br />
<br />
Расчет пространственной таблицы состояний операторов в базе данных call-центра производится по умолчанию один раз в минуту. Этот процесс при достаточно большом числе операторов происходит в течение заметного времени (до 20-30 секунд) с увеличением загрузки процессора на сервере баз данных. В большинстве случаев это не сказывается на работе системы, однако с помощью данного свойства можно увеличить промежуток между расчетами. Это отразится на индикаторах и статистике, строящихся на базе пространственной таблицы состояний операторов, включающих еще не рассчитанное время. <br />
<br />
Дорогостоящей операцией в ходе процесса является обращение к таблицам на выборку данных. Каждая новая итерация производит расчет данных с момента последнего выполнения до текущего времени. При этом на длительность исполнения и загрузку процессора практически не влияет то, за какой промежуток времени производится расчет пространственной таблицы. В любом случае после завершения итерации в таблице будут содержаться актуальные данные.<br />
<br />
<br />
'''Активировать расчет пространственной таблицы состояний очереди'''<br />
<br />
Расчет пространственной таблицы состояний очереди производится для обеспечения call-центра статистикой по состояниям очередей всех задач. Каждое точечное изменение очереди (изменение числа операторов, изменение числа абонентов) вызывает сохранение в пространственную таблицу новой строки. При достаточно большой нагрузке на call-центр и большом количестве задач использование этой процедуры может сказываться на качестве работы. Если статистика по состоянию очередей не используется или ей можно пожертвовать, снятием этого флага можно исключить обращение к БД на сохранение данных.<br />
<br />
Подробно о пространственной таблице состояний очередей в разделе [[Структура пространственной БД]].<br />
<br />
<br />
'''Способ внесения данных о состоянии очереди в БД'''<br />
<br />
Пространственная таблица, хранящая состояния очереди всех задач, претерпевает изменения данных (вставку) при каждом изменении в состоянии очереди каждой задачи - количества операторов, абонентов. В особых случаях ее заполнение можно производить в асинхронном режиме, чтобы блокировка базы данных при попытке обращения к таблице не сказывалась на работе пула входящей задачи. Синхронный режим заполнения таблицы подразумевает приостановку пула на время вставки данных в таблицу.<br />
<br />
<br />
'''Сохранять в БД статистику сценариев диалога'''<br />
<br />
Сохранение статистики [[Сценарии диалога|сценариев диалога]] производится для обеспечения данными встроенного модуля [[Отчеты#Карточки|Отчеты сценариев]] в режиме построения диаграмм на основе элементов управления диалоговых форм. Даже если не используется модуль, каждый запуск диалогового сценария тем не менее инициирует обращение в БД с размещением информации о начале и завершении работы сценария. <br />
<br />
<br />
'''Производить сохранение уведомлений'''<br />
<br />
Уведомления служат для информирования пользователей об определенных изменениях на сервере и в клиентском приложении. Далеко не все из них сохраняются в БД. Сохраненные же доступны в разделе [[Кабинет#Системные уведомления|Кабинет. Уведомления]]. Удаление этой статистики не производится в автоматическом режиме, и при росте объема базы данных сохранение может занимать ресурсы сервера БД. Снятием флага производится отключение сохранения всех уведомлений (даже если в компоненте сценария явно установлено свойство «Сохранять в БД») . Уведомления продолжают доставляться в реальном времени авторизованным пользователям.<br />
<br />
<br />
'''Производить сохранение статистики контрольных событий'''<br />
<br />
При возникновении в call-центре контрольного события осуществляется связанное с ним действие - уведомление и/или запуск служебного сценария. Факт возникновения КС также сохраняется в БД для возможности последующего доступа к нему из модуля [[Контрольные события|Call-центр. Контрольные события]]. Сохранение может быть отключено снятием флага.<br />
<br />
<br />
'''Обновлять состояния задач при сохранении результатов каждой попытки'''<br />
<br />
При завершении каждой попытки исходящего оповещения производится дополнительное обращение к БД на обновление состояния задачи. Это необязательная процедура, осуществляемая для поддержания корректности данных. При массовых исходящих кампаниях, где одновременно производится множество вызовов, исключение этой процедуры может привести к незначительному снижению нагрузки.<br />
<br />
<br />
<div id="EnableDBUpdateTaskStateOnEveryResult"></div> <br />
'''Обновлять состояния абонентов задачи при каждом обращении к кэшу в БД'''<br />
<br />
При работе сервера с задачами, использующими кэш внутри БД (свойство задач [[Голосовые задачи#Абоненты|Метод работы с таблицей абонентов]]), каждое очередное обращение к БД на предмет поиска абонента сопровождается обращением к таблицам с оперативной статистикой по задаче на восстановление состояний (количество отбоев, количество попыток без ответа, дата/время следующей попытки, время в очереди и т.д.). Если задача массовая, и эти сведения некритичны, то снятием флага можно исключить это обращение и привнести снижение нагрузки на БД. Некритичными сведения могут считаться, например, если осуществляется первый проход по таблице, или если не используется установка дат/времени следующего обращения.<br />
<br />
<br />
<div id="MissedCalls"></div> <br />
'''Сохранять информацию о пропущенных вызовах'''<br />
<br />
Активация режима приведет к формированию таблицы A_Stat_MissedCalls, содержащей информацию о пропущенных звонках. Пропущенным (не путать с потерянным) для пользователя называется звонок, который поступил на индивидуальный или групповой внутренний номер и не был обработан пользователем. При этом система не делает различий, был ли обработан звонок на этот внутренний номер кем-то другим или получил отказ, был ли это первый вызов в рамках цепочки коммутаций или повторный, был ли пользователь свободен или занят. <br />
<br />
Информация о пропущенных звонках доступна пользователям в разделе [[Мои звонки|Офис. Мои звонки]].<br />
<br />
<br />
<div id="FailedCalls"></div><br />
'''Сохранять информацию о неудачных исходящих вызовах'''<br />
<br />
Активация режима приведет к формированию таблицы A_Stat_FailedCalls, содержащей информацию о неудачных исходящих звонках. Неудачным считается такой исходящий вызов, который не завершился коммутацией по любой из причин. <br />
<br />
Информация о неудачных исходящих звонках доступна в разделе [[Мои звонки|Офис. Статистика АТС]] при указании в фильтре нулевой длительности разговоров.<br />
<br />
<br />
'''Сохранять RingTime (время вызова пользователей и операторов)'''<br />
<br />
Активация режима приведет к формированию таблицы A_Stat_RingTime, содержащей информацию о каждой сессии вызова каждого пользователя и/или оператора. Сессия вызова может включать как одного, так и нескольких вызывающих абонентов, при этом обработанным может быть только один - последний. В таблице фиксируется идентификатор линии пользователя и его собственный идентификатор, время начала вызова его внутренней линии, время в миллисекундах, прошедшее до отбоя или снятия трубки, факт снятия/неснятия пользователем трубки. Если за время вызова произошел отбой одного или нескольких абонентов из очереди (были перехвачены другими пользователями, положили трубки, были возвращены в сценарии по таймауту, были отклонены пользователем) - фиксируется количество таких абонентов, находящихся в первой позиции очереди пользователя и сменившихся при текущей сессии вызова. Количество отклоненных вызовов, а также количество вызовов, приведших к таймауту вызова (в рамках первой позиции очереди) также попадает в таблицу. Если настройка системы такова, что при таймауте вызываемый пользователь переводится в состояние «Нет на месте», то этот момент также будет отражен в таблице.<br />
<br />
Может применяться при анализе времени ответа пользователями/операторами безотносительно конкретных звонков и вызывающих абонентов. <br />
<br />
Подобная независимая от звонков статистика продиктована наличием групповых номеров, различных возможных настроек системы - перехватов, переадресаций, перевода в Off, совмещения нескольких номеров и задач одним пользователем, единой очередью для нескольких пользователей, различными очередями на одного пользователя и всевозможными миксами. В целях соблюдения строгой очередности обслуживания в любых условиях вызов внутреннего пользователя для обработки одного звонка или очереди производится еще до определения конкретного абонента. Поэтому в рамках одной сессии вызова пользователя может быть изменено несколько потенциальных абонентов. И рассматривать время вызова пользователя в рамках одного звонка в общем случае не следует, так как иначе будут объединены случайные независимые величины и их анализ будет существенно затруднен. Взамен предлагается анализировать их отдельно: максимальное время ожидания абонентами в очереди (первая случайная величина), время снятия трубки операторами от начала вызова (вторая случайная величина). Другие факторы, такие как размер и количество очередей, количество пользователей, уровень пересечения разных очередей и разных пользователей, также не стоит объединять с анализом случайных величин.<br />
<br />
<br />
<div id="DTMFflow"></div><br />
'''Сохранять в БД все получаемые по внешним линиям DTMF-символы'''<br />
<br />
При активации режима все поступающие в систему DTMF символы будут сохраняться в таблице основной базы данных A_Stat_DTMF (символ, время, Guid-идентификатор линии, Guid-идентификатор цепочки коммутаций).<br />
<br />
<br />
<div id="ComputeVoices"></div><br />
'''Рассчитывать время владения разговором участниками'''<br />
<br />
Позволяет активировать вычисление процентов владения разговором каждой из сторон в каждой коммутации. Полученная статистика отображается при воспроизведении файла во встроенном плеере.<br />
Использование режима налагает дополнительные требования на вычислительную мощность сервера. Расчет производится непосредственно перед микшированием/упаковкой звуковых файлов в едином потоке с пониженным приоритетом. Рассчитанные данные хранятся в таблице БД ''oktell.dbo.A_Stat_Connections_VoicePerc''.<br />
<br />
<br />
<div id="VoiceMap"></div><br />
'''Рассчитывать детальную карту владения разговором участниками'''<br />
<br />
Позволяет активировать вычисление карты владения разговором участниками при завершении коммутаций. Каждый отрезок времени разговора анализируется отдельно с целью выяснить, кто из абонентов говорил. Полученная статистика может быть использована во внешних системах и веб-клиенте. <br />
Использование режима налагает дополнительные требования на вычислительную мощность сервера. Расчет производится непосредственно перед микшированием/упаковкой звуковых файлов в едином потоке с пониженным приоритетом. Рассчитанные данные хранятся в таблице БД ''oktell.dbo.A_Stat_Connections_1x1_VoiceMap''.</div>Peter%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2_%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8Параметры файлов конфигурации2014-03-20T14:53:39Z<p>Peter: </p>
<hr />
<div>[[Дополнительно|Наверх]]<br />
<br />
<br />
Ряд настроек комплекса хранится в файлах конфигурации соответствующих приложений. Файл конфигурации загружается однократно в момент запуска приложения, и хранящиеся в нем настройки не могут быть изменены в ходе работы. Любые изменения файлов конфигурации применяются только при следующем запуске соответствующего приложения. <br />
<br />
Настройки файла конфигурации клиентского приложения влияют на работу только конкретного клиента.<br />
<br />
<br />
Файлы конфигурации находятся в том же каталоге, в котором расположен запускаемый модуль.<br />
<br />
Файл конфигурации клиентского приложения: oktell.ClientStarter4.exe.config<br />
<br />
Файл конфигурации серверной службы: oktell.ServerService.exe.config (приложения - oktell.ServerForm.exe.config)<br />
<br />
Файлы конфигурации есть также у ряда сопутствующих сервисов: служба файл-сервера, служба обмена межсерверными сообщениями, служба туннелирования запросов в БД, служба сервера видео-конференций, и т.д.<br />
<br />
<br />
Изменять файлы необходимо в редакторах, не изменяющих кодировку (рекомендуется стандартный редактор «Блокнот»). Такие редакторы как «Microsoft Word» и «Wordpad» сбивают кодировку, в следствие чего запуск приложения системы становится невозможным. При попытке запуска с некорректным конфигурационном файлом возникает системное окно с описанием ошибки.<br />
<br />
Конфигурационные файлы содержат ряд служебных настроек, поэтому в целях сохранения целостности и работоспособности не рекомендуется изменять формат файла и параметры, у которых нет описания.<br />
<br />
Формат представляет собой стандартный XML-документ со специфическими элементами. Допустимые настройки находятся в разделе между тегами <span style="color:red;"><appSettings></span> и <span style="color:red;"></appSettings></span>. Каждый конкретный параметр представляет собой строку <br />
<br />
<pre> <add key="KEY_STRING" value="VALUE_STRING" /></pre><br />
<br />
где <span style="color:blue;">KEY_STRING</span>-название параметра,<span style="color:blue;">VALUE_STRING</span>-значение параметра.Комментарии располагаются между строками <span style="color:blue;"><nowiki><!--</nowiki></span> и <span style="color:blue;"><nowiki>--></nowiki></span>.<br />
<br />
<br />
<br />
__TOC__<br />
<br />
<br />
===Обновление клиентских конфигураций===<br />
<br />
<br />
При необходимости обновить настройки файлов конфигурации у всех или некоторых клиентов можно воспользоваться системой обновления (каталог LiveUpdate сервера). Размещение клиентского конфигурационного файла целиком возможно только в том случае, когда все настройки, включая адрес сервера, идентичны у всех клиентов. При различиях можно воспользоваться служебным механизмом частичного обновления: файлы update*.config, находящиеся в каталоге LiveUpdate, сортируются лексикографически и применяются к тем клиентам, которые определены в настройках каждого из этих файлов. При этом могут быть указаны конкретные клиентские места, или исключения. Клиентские места указываются с помощью идентификатора, определяющего его в карте сети (любой принадлежащий ему IP-адрес, имя хоста, либо хеш-идентификатор, определенный ключом [[#ManualHostAddress|ManualHostAddress]]).<br />
<br />
Например, нижеприведенный файл update1.config применится на всех клиентах, локальный адрес которых 192.168.0.12 или 192.168.0.13.<br />
При этом будут добавлены/обновлены ключи "xxx" и "yyy", а ключ "zzz" будет удален.<br />
<br />
<pre><br />
<?xml version="1.0"?><br />
<configuration><br />
<br />
<updateAddress><br />
<include address="192.168.0.12"/><br />
<include address="192.168.0.13"/><br />
</updateAddress><br />
<br />
<appSettings><br />
<br />
<add key="xxx" value="111" /><br />
<add key="yyy" value="555" /><br />
<add key="zzz" /><br />
<br />
</appSettings><br />
<br />
</configuration><br />
</pre><br />
<br />
<br />
По умолчанию при отсутствии раздела ''updateAddress'' изменение конфигурационного файла производится на всех клиентских рабочих местах, подключающихся к серверу.<br />
Могут быть обновлены конкретные (<include address="*"/>), или все кроме указанных (<exclude address="*"/>), где * - IP-адрес, имя хоста или хеш-идентификатор.<br />
<br />
Обновиться самостоятельно могут только те клиенты, которые в силу текущих настроек конфигурационного файла способны подключиться к серверу.<br />
<br />
<br />
<br />
===Параметры файла конфигурации серверного приложения===<br />
<br />
<br />
<br />
<span style="color:blue;">Language</span>. Определяет языковую схему, используемую комплексом. В основном каталоге приложения находятся файлы Lang*.xml, представляющие собой наборы текстов для отображения в клиентских интерфейсах и БД. Для выбора того или иного языка необходимо в качестве значения данного параметра выставить соответствующее расширение имени файла (*). Например для использования файла LangRus.xml необходимо прописать значение «rus».<br />
<br />
Язык по умолчанию – русский (применяется, если в конфигурационном файле не указан язык, или если не найден файл указанного языка).<br />
<br />
Русский также является базовым языком. То есть если какого-либо кода не найдено в файле языка, то в альтернативу будет применен русский текст, заданный в коде программы. Язык также определяется в конфигурационном файле клиентского приложения, но после подключения к серверу клиентское приложение синхронизирует язык с установленным на сервере. <br />
<br />
Локализация программы производится компаниями-партнерами, файлы с текстами могут распространяться в открытом и шифрованном виде. В последнем случае осуществляется привязка к лицензии.<br />
<br />
<span style="color:blue;">HALSeparate</span>. Режим запуска модуля поддержки оборудования. «0» - в текущем процессе, «1» - в отдельном процессе используя взаимодействие через NET.Remoting, «2» - в отдельном процессе используя собственный альтернативный канал связи по протоколу TCP. <br />
<br />
В случае, если оборудование в некоторых случаях вызывает критические ошибки, подгрузка модуля поддержки оборудования в отдельном процессе позволяет не терять основной работоспособности сервера. В моменты падения процесса основная служба перезапускает его, производит фоновую регистрацию и продолжает работу. <br />
<br />
В момент перерегистрации все линии переходят в состояние «Отключена», пользователи переходят в состояние «Без телефона», все коммутации разрываются, логика резервирований очищается. Менеджер задач реагирует способом, аналогичным тому случаю, когда абоненты на внешних линиях положили трубки. Возможно файлы записей оборвавшихся разговоров будут иметь некорректный заголовок, что сделает невозможным их прослушивание стандартными средствами. Полностью процесс автоматической переинициализации занимает 5-10 секунд.<br />
<br />
<span style="color:blue;">HALRemoteAddress</span>. Адрес расположения вынесенной в отдельной процесс службы HAL. По умолчанию localhost.<br />
<br />
<span style="color:blue;">HALRemotePort</span>. Порт доступа к вынесенной в отдельный процесс службе HAL. По умолчанию 4052.<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">Настройки серверов HAL</span>.'''<br />
<br />
<span style="color:blue;">START_SERVER</span>. Индексированные параметры, определяющие запускаемые серверы аппаратуры. Доступные серверы: Сервер CTI плат Ольха-9, Сервер CTI плат Ольха-14, сервер CTI плат Synway, сервер SIP, серверы VoIP телефонии. При установке системы параметры выставляются согласно выбранным в дистрибутиве значениям. Однако в сложных системах могут потребоваться модификации. Например, в случае если происходит замена типа платы на рабочей системе, использование нескольких разных типов плат, а также при запуске нескольких VoIP серверов, обслуживающих разные подсети. Загрузке подлежат серверы с индексами от 1 до 32 (в примере - часть строки XX).<br />
<br />
<br />
Сервер плат «Ольха 9», «Ольха 14»:<br />
<br />
<pre><add key="START_SERVER_XX" value="Alder9 Server;oktell.HALAlder9Srv.dll;Alder9;_Loaders\" /><br />
<br />
<add key="START_SERVER_XX" value="Alder14 Server;oktell.HALAlder9Srv.dll;Alder14;_Loaders\" /></pre><br />
<br />
Последний элемент строки после точки с запятой указывает путь к файлам-загрузчикам. По умолчанию это подкаталог серверной службы _Loaders.<br />
<br />
<br />
Сервер плат «Synway»:<br />
<br />
<pre><add key="START_SERVER_XX" value="Synway Server;oktell.HALSynwaySrv.dll;ShCti;" /></pre><br />
<br />
<br />
Сервер плат «Yeastar»:<br />
<br />
<pre><add key="START_SERVER_XX" value="E1 Yeastar Server;oktell.HALYeastarSrv.dll;YeaCTI" /><br />
<br />
<add key="START_SERVER_XX" value="TDM800 Yeastar Server;oktell.HALYeastarSrv.dll;TDM800" /></pre><br />
<br />
<br />
Сервер SIP:<br />
<br />
<pre><add key="START_SERVER_XX" value="SIP Server;oktell.HALSipSrv.dll;SIP;sip:*:5060" /></pre><br />
<br />
Последний элемент строки после точки с запятой устанавливает детальные настройки сетевого интерфейса и порта, на которых запускаемый SIP-сервер будет активен. По умолчанию «sip:*:5060», то есть сервер слушает все интерфейсы на порте 5060. При необходимости установить какой-либо конкретный интерфейс необходимо вместо «*» указать его адрес.<br />
<br />
<br />
Серверы VoIP:<br />
<br />
<pre><add key="START_SERVER_XX" value="Buildin VOIP Server;;Voip;localhost:4003" /></pre><br />
<br />
Последний элемент строки после точки с запятой указывает сетевой интерфейс и порт слушателя регистраций локальных устройств. При необходимости использования сервера для поддержки локальных устройств разных подсетей возможно запустить несколько VoIP-серверов - несколько однотипных строчек файла конфигурации с разными индексами и разными сетевыми интерфейсами.<br />
<br />
<br />
Сервер виртуальных каналов<br />
<br />
<pre><add key="START_SERVER_XX" value="Virtual Server;oktell.HALVirtualSrv.dll;VS;12/10" /></pre><br />
<br />
Последний элемент строки указывает количество используемых каналов - внешних/внутренних.<br />
<br />
<br />
<br />
<span style="color:blue;">RTP_PORT_START</span>. Начальный порт для обмена RTP-трафиком медиа-подсистемой (SIP, VoIP). По умолчанию 9000.<br />
<br />
<span style="color:blue;">RTP_PORT_COUNT</span>. Количество портов, начиная со стартового, доступные для медиа-подсистемы (SIP, VoIP). По умолчанию 10000.<br />
<br />
<span style="color:blue;">RTP_MAX_CHANNELS</span>. Количество сокетов получения RTP-трафика на один поток-слушатель. От 1 до 32. (SIP, VoIP). По умолчанию 8.<br />
<br />
<span style="color:blue;">USE_AFFINITY_MASK</span>. «1» - использовать разделение задач по процессорам. Половина процессоров для сервера логики, другая половина для сервера HAL. «0» - значение по умолчанию. В этом случае операционная система самостоятельно занимается распределением.<br />
<br />
<span style="color:blue;">JITTER_DEPTH</span>. Значение глубины джиттер-буфера на сервере. Минимальное значение - «4», по умолчанию - «4». При увеличении значения происходит рост задержки в голосовом обмене по направлению звука к серверу, эффективнее исключая влияние проблем сети.<br />
<br />
<span style="color:blue;">TIMER_TYPE</span>. Тип используемого таймера высокой разрешающей способности для тактирования звуковых пакетов. На разных операционных системах и компьютерах различные варианты таймеров могут иметь достаточно сильную погрешность, влияющую на итоговое качество звука. Основная задача при выборе таймера состоит в обеспечении корректного среднего промежутка времени между тиками. Замечены случаи, когда некоторые из вариантов таймеров ОС тактируют постоянно увеличенные интервалы времени (например постоянно 46 мс вместо 40 положенных). Если не происходит корректировок, то такой таймер следует заменить на другой тип. Для определения значений всех вариантов таймеров можно использовать специальное тестовое приложение.<br />
<br />
Возможные значения:<br />
<br />
:::0 - Системный таймер по умолчанию. Дает более точное тактирование по сравнению с таймером на ожидании. Выдает точное тактирование в Windows Vista и некоторую погрешность в предыдущих версиях Windows. Система буферизации звука в этом случае сглаживает разброс, однако существуют компьютеры, где погрешность таймера постоянна. Это влечет пропуск пакетов и заметное ухудшение итогового качества звука. На таких компьютерах необходимо использовать другие типы таймеров. Рекомендуется мультимедийный.<br />
<br />
:::1 - Системный таймер в собственном потоке приложения.<br />
<br />
:::2 - Имплементация таймера в потоке с использованием функции WaitForSingleObject(). <br />
<br />
:::3 - Мультимедийный таймер. Дает наиболее точное тактирование, однако имеет общее ограничение на количество одновременно существующих таймеров в системе (16 объектов). Сервер Oktell использует 3 объекта таймера высокой разрешающей способности.<br />
<br />
:::4 - Автоопределение. На старте системы осуществляется тестовый прогон всех вариантов таймеров и определяется средне наиболее точный. В случае, если все имеют одинаковую среднюю точность, предпочтение отдается таймеру с меньшим индексом (таймер по умолчанию, системный, таймер ожидания, мультимедийный). На прогон теста на старте системы выделяется лишняя секунда.По умолчанию «4».<br />
<br />
<br />
<span style="color:blue;">TIMER_HIGHRES</span>. Тип используемого счетчика интервалов времени. «0» - миллисекундный системный счетчик GetTickCount, «1» - Query Performance Counter. По умолчанию «1».<br />
<br />
<div id="FORCE_BRACKETS_FOR_URI"></div><br />
<span style="color:blue;">FORCE_BRACKETS_FOR_URI</span>. «1» - значения заголовков To и From отправляемых SIP-пакетов размещаются в треугольных скобках. По умолчанию «0».<br />
<br />
<br />
<div id="EnableSipTransportFilter"></div><br />
<span style="color:blue;">EnableSipTransportFilter</span>. «1» - активирует на сервере спам-фильтр, защищающий от атак на SIP-подсистему. При поступлении с одного IP-адреса за короткий отрезок времени чрезмерно большого количества регистрационных пакетов, завершающихся неудачей по причине неверной авторизационной информации, осуществляется блокирование адреса на период времени, указанный в параметре и исчислимый в минутах. На все попытки регистрации с заблокированного IP-адреса сервер не отвечает никаким образом. По умолчанию 1440 минут (= 1 сутки), 1 - не отключать фильтрацию адреса вплоть до перезагрузки сервера, остальные действительные значения являются непосредственными значениями интервала в минутах. 0 - режим отключен.<br />
<br />
<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">Настройки клиентских подключений</span>.'''<br />
<br />
<span style="color:blue;">PBXServerPort</span>. Порт для подключения собственных клиентских приложений через механизм NET.Remoting (устаревш.).<br />
<br />
<span style="color:blue;">InternalClientPort</span>. Порт для подключения собственных клиентских приложений и приложений на базе клиентского ядра через встроенную надстройку над протоколом TCP. По умолчанию 4054.<br />
<br />
<span style="color:blue;">ExternalClientPort</span>. Порт для подключения внешних приложений 4053.<br />
<br />
<span style="color:blue;">SIP_ENABLE_TCP</span>. Разрешает TCP-подключение по протоколу SIP. Конкретный порт зависит от настроек SIP-сервера (по умолчанию, 5060). «0» - не активно, «1» - активно. По умолчанию «0».<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">Настройки рабочего каталога</span>.'''<br />
<br />
<span style="color:blue;">WORK_ROOTDIR</span>. Устанавливает в явном виде путь к рабочей папке серверной службы. Временные файлы, сценарии, проекты, плагины, каталог по умолчанию для записи разговоров, резервные копии - все, кроме основных сборок службы, размещается именно там.<br />
<br />
<span style="color:blue;">WORK_ROOTDIR_TYPE</span>. Устанавливает один из нескольких возможных вариантов размещения рабочей папки. Используется, если не задана рабочая папка в явном виде. Возможные варианты: 0 – папка запустившего процесс выполняемого файла, 2 – Documents And Settings\All Users, 3 – Documents And Settings\CurrentUser.<br />
<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">Настройки доступа к БД</span>.'''<br />
<br />
<span style="color:blue;">DBServerName</span>. Адрес сервера, на котором находится база данных MSSQL. По умолчанию «(local)».<br />
<br />
<span style="color:blue;">DBName</span>. Имя основной оперативной базы данных, к которой производится подключение. По умолчанию «oktell».<br />
<br />
<span style="color:blue;">DBNameCC</span>. Имя базы данных статистики call-центра. По умолчанию «oktell_cc_temp».<br />
<br />
<span style="color:blue;">DBNameSettings</span>. Имя базы данных с настройками системы. По умолчанию «oktell_settings».<br />
<br />
<span style="color:blue;">DBLogin</span>. Имя пользователя, учетной записью которого пользуется система. По умолчанию «AutelService».<br />
<br />
<span style="color:blue;">DBInstanceName</span>. Имя экземпляра сервера MSSQL. По умолчанию «MSSQLSERVER». Для доступа к службе, обеспечивающей работу БД. В момент запуска службы Oktell осуществляется проверка доступности БД. Если SQLServer, обслуживающий БД коммуникационного сервера, находится на том же компьютере, что и служба Oktell, то при невозможности обращения к БД Oktellпроверяет и перезапускает локальную службу SQLServer (указанный instance). <br />
<br />
Если работа SQLServer осуществляется на другом компьютере, то во избежании запуска службы SQLServer на локальной машине в значение поля можно поставить «0». Октелл будет осуществлять бесконечное ожидание корректного подключения к БД перед началом загрузки, а сервер баз данных не будет загружать в ОЗУ свои данные, тем самым коммуникационный сервер будет гарантирован от кэширования данных на диск, и, как следствие, временных приостановок операционной системой работы всех служб и приложений в ожидании завершения операции, что достаточно критично при активных коммутациях.<br />
<br />
<span style="color:blue;">DBConnectionString</span>. Строка подключения, задаваемая явно. Используется при настройке подключения к службам SQL с индивидуальными параметрами, при которых не подходят параметры по умолчанию. При отсуствии этого свойства, или пустом его значении, подставляется строка: <br />
<br />
<pre>"server=(local);database=oktell;uid=AutelService;pwd=[pwd];pooling=true",</pre><br />
<br />
где значения параметров server, database и uid подставляются из вышеописанных свойств. При явном указании строки подключения пароль может быть указан явно, либо использована последовательность символов «[pwd]», указывающая системе на необходимость подстановки пароля для логина AutelService.<br />
<br />
<span style="color:blue;">DBTransactionLogSize_1, DBTransactionLogSize_2</span>. Размеры транзакционных лог-файлов баз данных - основной и пространственной. По умолчанию по 500 МБ.<br />
<br />
<span style="color:blue;">DBBackupDir</span>. Путь к каталогу на сервере баз данных, в котором осуществляется создание резервных копий баз данных. По умолчанию это Backup в рабочей папке сервера. Однако в случае, если сервер баз данных работает на отдельном компьютере, путь должен существовать именно на нём. <br />
<br />
<span style="color:blue;">DBAutoDailyBackup</span>. «1» - устанавливает режим автоматического ежедневного резервного копирования баз данных одновременно с оптимизацией используемых баз данных. Режим оптимизации сам по себе настраивается в разделе [[Управление базами данных|Администрирование. Общие настройки. Управление базами данных]]. Если режим ежедневной оптимизации отключен, то вне зависимости от значения описываемого параметра резервная копия создана не будет. Cоздание файлов резервных копий производится на компьютере, где установлен текущий используемый MSSQLServer. Файлы размещаются в каталоге, установленном параметром [[#Параметры файла конфигурации серверного приложения|DBBackupDir]], а при его отсутствии в каталоге, путь к которому совпадает с рабочей папкой службы сервера в подкаталоге \Backup. Файлы резервных копий баз имеют названия db_ok.bak, db_okcc.bak, db_okset.bak, при ежедневном автоматическом создании резервных копий предыдущие резервные копии автоматически заменяются новыми. При необходимости осуществлять хранение нескольких копий за некоторый промежуток времени необходимо налаживать схему бэкапа или копирования файлов самостоятельно.<br />
<br />
<span style="color:blue;">ScrBackupDir</span>. Путь к каталогу на сервере АТС, в котором осуществляется создание резервных архивов со сценариями. По умолчанию это каталог Backup в рабочей папке сервера.<br />
<br />
<span style="color:blue;">RepUpdateDir</span>. Каталог с обновлениями отчетов call-центра.<br />
<br />
<span style="color:blue;">DBUpdateDir</span>. Каталог с обновлениями для БД.<br />
<br />
<span style="color:blue;">DBUpdateDirExtern</span>. Каталог с внешними обновлениями для БД. Расположенные здесь файлы с текстом, представляющим собой один совокупность нескольких SQL-batch, исполняются в БД по очередности их имен в момент запуска сервера. После успешного исполнения файлы удаляются. В случае возникновения ошибок их описание можно обнаружить в лог-журнале Exception. <br />
<br />
<span style="color:blue;">PauseTMOnDbQueueLength</span>. Определяет количество сообщений в очереди на сохранение в БД, при котором менеджер задач приостанавливает совершение звонков по исходящим голосовым задачам. Система считает, что таким образом нагрузка уменьшается, и БД имеет больше шансов к уменьшению очереди запросов. По умолчанию 100. Бывают случаи временной загрузки БД, когда своп происходит редко и длится в течение минуты или более того, а в остальные случаи сервер БД не подвержен притормаживанию. В этом случае имеет смысл оценить производительность сервера и увеличить максимальный предел очереди вплоть до нескольких тысяч. Отсутствие предела может привести в особо критичных случаях к тому, что данных в очереди накопится чрезмерно много, что выльется либо в нехватку памяти процессу, либо в несохранение результатов звонков после их совершения в случае сбоя сервера или базы данных.<br />
<br />
<span style="color:blue;">PauseProgressiveOnDbQueueLength</span>. Аналогичный предыдущему параметр для прогрессивного пула задач. Может иметь обособленную настройку и сказывается на запуск прогрессивных исходящих звонков. По умолчанию 50;<br />
<br />
<br />
<div id="DbRemote"></div><br />
<span style="color:blue;">UseDbRemote</span>. Довольно большое количество обращений из клиентских приложений к серверу являются суть запросами к БД. 1 - использует отдельный процесс туннелирования (oktell.DbRemoteService.exe) для прямых обращений к БД из клиентских приложений. 0 - все обращения к БД через основную службу. По умолчанию 0. При подключении к службе туннелирования все клиенты проходят аутентификацию. Служба туннелирования получает параметры доступа к БД из конфигурационного файла основной службы Oktell. Собственный конфигурационный файл необходим лишь для определения способа старта (служба или приложение), порта слушателя TCP подключений, а также возможно некоторых настроек логирования. <br />
<br />
<span style="color:blue;">CheckStartDbRemote</span>. Применяется в случае использования отдельного процесса туннелирования доступа клиентских приложений к БД. 1 - указывает серверу на необходимость самостоятельного запуска процесса; процесс при этом запускается на том же физическом сервере, где и основная служба Oktell; при завершении службы при этом процесс выгружается. 0 - указывает на необходимость подключения к постоянно запущенной службе (при этом служба может находиться на другом физическом сервере). По умолчанию 1. В конфигурационном файле службы туннелирования устанавливается, какой способ запуска используется - как служба или как приложение (ключ IsService). Настройки доступа к процессу туннелирования и самого процесса должны соответствовать друг другу.<br />
<br />
<span style="color:blue;">DbRemoteServer</span>. Применяется в случае использования отдельного процесса туннелирования доступа клиентских приложений к БД. Определяет адрес и порт для TCP доступа к приложению («address:port»). Сервер с помощью них осуществляет самостоятельное подключение для управления, а также выдает этот адрес клиентам для организации их собственных каналов связи. В случае, если указан localhost (используется по умолчанию), сервер выдает клиентам свой публичный адрес. Порт указывается в конфигурационном файле приложения/службы oktell.DbRemoteService.exe, по умолчанию 4086. <br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">Настройки службы</span>.'''<br />
<br />
<span style="color:blue;">EnableEmptyAdmin</span>. «1» - активирует на сервере возможность пользования учетной записью системного администратора. По умолчанию запись доступна только на сервере, где неактивен сервер состояний или среди учетных записей пользователей которого не существует ни одной, обладающей базовой ролью администратора. Может понадобиться в случае, если пароль учетной записи администратора утерян. Для применения требуется перезапуск службы сервера. По умолчанию «0».<br />
<br />
<div id="EnableAutoMap"></div><br />
<span style="color:blue;">EnableAutoMap</span>. «1» - активирован режим, при котором авторизация с рабочего места, не имеющего в карте сети учетной записи, приводит к автоматической временной регистрации на сервере рабочего места, снабженного USB-телефоном. «0» - доступ с неизвестных рабочих станций заблокирован. В целях обеспечения работы веб-клиентов, значение по умолчанию «1».<br />
<br />
<div id="EnableAutoMapSip"></div><br />
<span style="color:blue;">EnableAutoMapSip</span>. «1» - активирован режим, при котором при динамической регистрации вместо создания динамической линии USB-телефона производится связка с существующим в карте сети SIP-телефоном. Связка осуществляется по совпадению логина телефона с логином пользователя, либо по совпадению назначенного «пользователя по умолчанию» с авторизующимся пользователем. Для работы требуется включение параметра [[#EnableAutoMap|EnableAutoMap]]. «0» - связка динамических рабочих мест с SIP-телефонами не используется.<br />
<br />
<span style="color:blue;">UseWlockForDynamicReg</span>. «1» - использовать блокировку писателя при добавлении/удалении динамических рабочих мест. По умолчанию «0» - использовать блокировку читателя.<br />
<br />
<span style="color:blue;">ManualHostAddress</span>. Устанавливает уникальное имя сервера для идентификации в карте сети на старте службы. В случае, если в качестве адреса сервера в карте сети указано это значение - позволяет устранить зависимость от смены DNS-имени, а также смены и назначения динамических адресов сервера. <br />
<br />
Следует обратить внимание, что сервер может являться также и клиентской рабочей станцией. В этом случае необходимо в файл конфигурации клиентского приложения на сервере задать аналогичный параметр тем же значением, либо создать в карте сети отдельный компьютер с указанным реальным адресом или любой другой уникальной строкой (в случае использования на клиенте аналогичной схемы подмены адреса).<br />
<br />
<span style="color:blue;">ProcessPriority</span>. Приоритет серверного процесса. По умолчанию «0» - Нормальный. «1» - выше среднего, «2» - высокий, «3» - реального времени.<br />
<br />
<span style="color:blue;">HALRemoteProcessPriority</span>. Приоритет процесса HALRemote. «0» - нормальный, «1» - выше среднего (по умолчанию), «2» - высокий, «3» - реального времени.<br />
<br />
<span style="color:blue;">Default_DateTime_Format</span>. Индексированные параметры, определяющие нестандартныей варианты преобразования типа СТРОКА к типу ДАТАВРЕМЯ. Используются строки с индексами от 0 до 99, перебор в ходе работы осуществляется в порядке увеличения индексов.<br />
<br />
<span style="color:blue;">MixerDeleteSourceRecords</span>. «1» - удалять исходные файлы записей коммутаций после упаковки и/или микширования, «0» - оставлять на месте. По умолчанию «1».<br />
<br />
<span style="color:blue;">CheckRecordDriveEmptySpace</span>. «1» - осуществляет слежение за объемом свободного места на диске для записи разговоров. «0» - игнорирует проверку. Игнорирование может потребоваться при использовании сетевых дисков для записи, размер свободного пространства которых системой определяется нулевым, а также при использовании файлового сервера. По умолчанию «1».<br />
<br />
<span style="color:blue;">TaskListAbonentUseLikeNumber</span>. «1» - позволяет активировать поиск абонентской строчки в таблице абонентов с фильтром "number like '%x%'". По умолчанию «0» и поиск осуществляется только по идентификатору абонента.<br />
<br />
<span style="color:blue;">SkipCloseMutexCommand</span>. Режим автоматического закрытия сервера через мьютекс-команду необходим в целях исключения проблем с операциями обнаружения процессов. Встречаются системы, в которых отключены или недееспособны службы, необходимые для обнаружения внешнего процесса. В этом случае процесс копира не в состоянии при необходимости остановить серверный процесс перед обновлением и/или для перезапуска. «1» - пропускать команду закрытия, отданную через системные мьютексы процессом копира. «0» и другие значения - команда будет распознаваться и сервер будет реагировать на нее автоматическим закрытием.<br />
<br />
<div id="UseSimpleLineState"></div><br />
<span style="color:blue;">UseSimpleLineState</span>. Определяет способ привязки состояний внутренних номеров, ссылающихся на линии к состоянию самих линий. Если указать 0, то состояние номера, в случае свободности подчиненной ему линии, будет оцениваться по состоянию привязанного к ней пользователя. По умолчанию 1.<br />
<br />
<div id="HideGhostMonitor"></div><br />
<span style="color:blue;">HideGhostMonitor</span>. 1 - скрывает [[Прослушивание и помощь|слушателей разговора]] друг от друга, 0 - делает их доступными друг другу. По умолчанию 1.<br />
<br />
<div id="GCCollectorPeriodMin"></div><br />
<span style="color:blue;">GCCollectorPeriodMin</span>. Определяет периодичность принудительного запуска сборщика мусора .NET в минутах. По умолчанию 1 минута.<br />
<br />
<div id="UseNumStateChangedEventDelayer"></div><br />
<span style="color:blue;">UseNumStateChangedEventDelayer</span>. Интервал в мс, определяющий задержку перед рассылкой уведомлений о смене состояния номеров в номерном плане. 0 - выключено. По умолчанию 500. Применяется при большом количестве номеров и пользователей, следящих за их изменением. За время задержки происходит накопление данных и отправка одним пакетом. Позволяет экономить вычислительную мощность.<br />
<br />
<span style="color:blue;">DEBUG_incomingemail</span>. Логирование в common логе сервера принимаемых e-mail сообщений (pop3) "1" - включено. По умолчанию выключено.<br />
<br />
<div id="DEBUG_LogActiveThreadStackTrace"></div><br />
<span style="color:blue;">DEBUG_LogActiveThreadStackTrace</span>. При установке значения «1» производит вывод в лог ''DEBUG'' информации о стеке всех активных потоков основной службы сервера.<br />
<br />
<div id="UsePriorSwitchCallername"></div><br />
<span style="color:blue;">UsePriorSwitchCallername</span>. При осуществлении переключения из сценария на внутренний номер определяет, что будет отображаться в качестве имени абонента (callername) на sip-телефоне. 0 - автоопределение; если пусто, то callername из компонента «Переключение на номер» сценария IVR. 1 - наоборот, с приоритетом заданного в компоненте значения. По умолчанию 1.<br />
<br />
<span style="color:blue;">UserMessageCheckPeriodSec</span>. Позволяет активировать отслеживание появления новых сообщений между пользователями в базе данных и отправить их на отображение. Применяется в случае индивидуальной или внешней настройки и отправки сообщений путем размещения в таблицу A_UserMessages в БД. Указывается период отслеживания появления новых в секундах. 0 - выключено. По умолчанию 0.<br />
<br />
<div id="UserMessageCheckMakeViewed"></div><br />
<span style="color:blue;">UserMessageCheckMakeViewed</span>. В случае периодического отслеживания появления новых сообщений между пользователями в БД, указывает, отмечать ли их сразу как прочитанные с тем, чтобы при следующей итерации они не возникали вновь.<br />
<br />
<div id="DBPluginCommandTimeoutSec"></div><br />
<span style="color:blue;">DBPluginCommandTimeoutSec</span>. Позволяет задать таймаут в секундах на исполнение запросов от плагинов к БД. По умолчанию 600. Начиная с версии 120911.<br />
<br />
<div id="AllowDownloadFilesDirectlyOnlyFromTemp"></div><br />
<span style="color:blue;">AllowDownloadFilesDirectlyOnlyFromTemp</span>. 1 - блокирует скачивание файлов с сервера через HTTP интерфейс отовсюду, кроме как из временной папки Temp и [[Настройки веб-сервера#LocalStoragePath|локального хранилища]]. 0 - разрешает скачивать произвольные файлы с диска сервера по прямой ссылке. По умолчанию 1 (блокировать).<br />
<br />
<div id="BanUserAgent"></div><br />
<span style="color:blue;">BanUserAgentXX</span>, XX - порядковый номер от 00 до 99. Позволяет установить SIP-транспортный фильтр для определенных значений поля User-Agent. По умолчанию банится "Friendly-Scanner" в целях снижения нагрузки и уменьшения вероятности взлома.<br />
<br />
<div id="UpdateSelectorOnDirectorDisconnect"></div><br />
<span style="color:blue;">UpdateSelectorOnDirectorDisconnect</span>. 1 - при выходе/выпадении управляющего из селекторного совещания производит преобразование селектора к общей конференции. 0 - оставляет селектор с теми правами и в том виде, в котором он находился в последний момент присутствия управляющего. По умолчанию «1».<br />
<br />
<div id="PBX_Use180SdpAs183"></div><br />
<span style="color:blue;">PBX_Use180SdpAs183</span>. 1 - воспринимает команду ''180 Ringing'' с SDP содержимым как команду ''183 Progress'' и начинает сеанс медиасвязи. Используется в режиме ''прослушивание медиа-потока'' компонента [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние линии]]. 0 - генерирует стандартный сигнал КПВ (длинные гудки). По умолчанию 1.<br />
<br />
<div id="PBX_BackFrom183To180"></div><br />
<span style="color:blue;">PBX_BackFrom183To180</span>. 1 - воспринимает команду ''180 Ringing'' к обязательному исполнению - начинает генерацию сигнала КПВ (длинные гудки), даже если предварительно был получен ответ ''183 Progress'' и канал находится в медиа-коммутации. Используется в режиме ''прослушивание медиа-потока'' компонента [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние линии]]. 0 - пропускает такую команду. По умолчанию 0.<br />
<br />
<div id="ScreenShotSize"></div><br />
<span style="color:blue;">AutoScreenshotWidth</span>, <span style="color:blue;">AutoScreenshotHeight</span>. Определяют максимальные размеры скриншотов экранов, снимаемых с помощью компонента сценариев [[Общие компоненты сценариев#UserState|Статус объекта]].<br />
<br />
<div id="PredictivePoolTimerIntervalMs"></div><br />
<span style="color:blue;">PredictivePoolTimerIntervalMs</span>. Устанавливает общий для всей системы интервал пересчета параметров предиктивных задач в мс, в ходе которого могут быть начаты новые дозвоны (по умолчанию 5000). <br />
<br />
<div id="PredictivePoolClearStatOnDeactivate"></div><br />
<span style="color:blue;">PredictivePoolClearStatOnDeactivate</span>. Устанавливает общий для всей системы режим очистки статистики в предиктивных задачах при деактивации (по умолчанию 0).<br />
<br />
<div id="PredictivePoolExtraShiftTimeoutMs"></div><br />
<span style="color:blue;">PredictivePoolExtraShiftTimeoutMs</span>. Устанавливает общий для всей системы дополнительный интервал в мс, применяемый безусловно к спрогнозированным параметрам. Может быть отрицательным и положительным. По умолчанию 0.<br />
<br />
<div id="WebServerNoAuth_Loopback"></div><br />
<span style="color:blue;">WebServerNoAuth_Loopback</span>. Позволяет отменить требование базовой авторизации при обращении к веб-серверу по loopback-интерфейсу (из приложений на самом сервере). По умолчанию 0.<br />
<br />
<br />
<div id="FileServer"></div><br />
<span style="color:blue;">FileServer_Log</span>, <span style="color:blue;">FileServer_Record</span>. Позволяет активировать сохранение соответственно лог-журналов и записей разговоров на удаленный файл-сервер. Значение задается в формате «address:port», например «192.168.0.199:4088». В качестве файлсервера может выступать любой компьютер с установленной и активированной службой oktell.FileService.exe из каталога серверной службы Oktell. О настройке и способах работы файл-сервера доступна [[http://r.oktell.ru/wiki/306/ статья]] в базе знаний.<br />
<br />
<div id="FileServerRecDir"></div><br />
Хранение записей может происходить в разных каталогах в соответствии с настройкой в Oktell. При использовании файл-сервера в качестве хранилища записей может потребоваться подключать дополнительные хранилища и изменять путь для сохранения записей и последующего доступа к ним. Чтобы это обеспечить, необходимо подвергать корректировке совместно настройку каталога для записи в Oktell и конфиг файлового-сервера. При этом в конфигурационном файле файлового сервера требуется указание соответствия переданного службой Oktell пути с локальным путем (ключ ''BaseDir_*'', где * - это subdir.ToLower(recordedfiles\dirname), а dirname - название последнего внутреннего каталога по выбранному службой Oktell пути; значение - локальный путь на файловом сервере. Например <add key="BaseDir_recordedfiles\path2" value="D:\_OktellWorkDir\Files\Base2\"/>. При настройке Oktell следует указывать пути, последний каталог которых имеет уникальное название и ранее не использовалось).<br />
<br />
<br />
<br />
<div id="FaceTime"></div><br />
'''Раздел <span style="color:green;">Настройки сервера видео-конференций</span>.'''<br />
<br />
<span style="color:blue;">FaceTimeLocalPort</span>. Определяет порт локального сервиса видео-конференций. По умолчанию 4090.<br />
<br />
<span style="color:blue;">FaceTimeServer</span>. Определяет доступные серверы видео-конференций. Перечисляются через запятую с помощью алиасов, которые затем определяются отдельными ключами конфигурации. По умолчанию доступен только локальный сервер, но могут быть вместо или дополнительно настроены один или несколько обособленных серверов. Локальный сервер определяется алиасом «local». Например <br />
<pre><add key="FaceTimeServer" value="local, futurama, videoserver"/></pre><br />
<br />
<span style="color:blue;">FaceTime_*</span>. Определяет адрес и порт обособленного сервера видео-конференций. Вместо символа * подлежит указанию алиас сервера. Эта настройка должна присутствовать для каждого упомянутого алиаса кроме «local». Например <br />
<pre><add key="FaceTime_futurama" value="192.168.0.10:4092"/></pre><br />
<br />
<br />
<br />
<div id="ThreadManagement"></div><br />
'''Раздел <span style="color:green;">Управление потоками</span>.'''<br />
<br />
Позволяет ограничивать максимальное количество потоков-обработчиков для отдельных видов работ.<br />
<br />
<br />
<span style="color:blue;">ThreadCountLowLimit</span>. Количество потоков в общем пуле системы, свободно доступных службе сервера. По умолчанию 500.<br />
<br />
<span style="color:blue;">ThreadCountHighLimit</span>. Максимально допустимое количество потоков в общем пуле системы, доступных службе сервера. Потоки, находящиеся в разнице между нижним и верхним ограничениями, выделяются системой с запаздыванием. По умолчанию 700.<br />
<br />
<br />
<br />
<span style="color:blue;">CachedThreadFreeMode</span>. Режим работы пула асинхронных потоков. «0» по умолчанию - использовать пул, никогда не уничтожать потоки, «1» - не использовать пул, уничтожать потоки сразу после использования, «2» - размещать в пул на 1 секунду, уничтожать по истечении в случае простоя.<br />
<br />
<br />
<span style="color:blue;">CheckReleaseRWOnAbort</span>. По умолчанию «1» - производить дополнительную проверку блокировки критической секции сервера состояний перед освобождением асинхронного потока и освобождать в случае обнаружения. «0» - не производить.<br />
<br />
<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimit</span>. 0 - отключает ограничение на количество потоков, обслуживающих клиентские запросы. <br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitHighest</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки высокоприоритетных клиентских запросов, таких как Ping. По умолчанию 10.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitData</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов, возвращающих большие объемы данных. По умолчанию 10. В момент длительной отправки данных по сети поток не считается использующимся.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitDownload</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов на скачивание и закачивание файлов. По умолчанию 10. В момент длительной отправки данных по сети поток не считается использующимся.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitSetup</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов из раздела администрирования. По умолчанию 5.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitLiveupdate</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов в части проверки обновлений, подготовки архива и его скачивания. По умолчанию совпадает с половиной общего количества ядер всех процессоров сервера, но не менее 2. В момент длительной отправки данных по сети поток не считается использующимся.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitNormal</span>. Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов в части проверки обновлений, подготовки архива и его скачивания. По умолчанию 100.<br />
<br />
<span style="color:blue;">OKTCP_CP_ThreadCountLimitEvent</span>. Устанавливает максимально допустимое количество потоков, доступных системе для рассылки событий клиентским приложениям. По умолчанию 10.<br />
<br />
<br />
Этот же набор параметров с другим префиксом действует для службы туннелирования клиентских запросов в БД. Их указание требуется в конфигурационном файле сервера, так как конфигурационные параметры передаются в службу туннелирования из основной службы.<br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimit</span>. <br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimitHighest</span>. <br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimitData</span>. <br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimitDownload</span>. <br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimitSetup</span>. <br />
<span style="color:blue;">OKTCP_DB_ThreadCountLimitNormal</span>. <br />
<br />
<br />
<span style="color:blue;">OKTCP_HALL_ThreadCountLimit</span>. Устанавливает максимально допустимое количество потоков, доступных системе для взаимодействия с внешним процессом HAL. По умолчанию 0 - не ограничено.<br />
<br />
<span style="color:blue;">OKTCP_HALR_ThreadCountLimit</span>. Применяется в конфигурационном файле внешнего процесса HAL (oktell.HALRemoteApp.exe) или в собственном (если процесс настроен на работу с конфигурационным файлом основной службы). Устанавливает максимально допустимое количество потоков, доступных внешнему процессу HAL для взаимодействия с основным процессом службы. По умолчанию 0 - не ограничено.<br />
<br />
<span style="color:blue;">Line_ThreadCountLimit</span>. Устанавливает максимально допустимое количество потоков, обслуживающих каналы АТС. По умолчанию 20.<br />
<br />
<span style="color:blue;">Script_ThreadCountLimit</span>. Устанавливает максимально допустимое количество потоков, обслуживающих сценарии. По умолчанию 20.<br />
<br />
<span style="color:blue;">TML_ThreadCountLimit</span>. Устанавливает максимально допустимое количество потоков, обслуживающих звонки в голосовых задачах. По умолчанию 10.<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">LOG</span>.'''<br />
<br />
Хранит настройки лог-сервера комплекса. Среди неописываемых настроек - пути к папкам для сбора журналов.<br />
<br />
<span style="color:blue;">LOG_storedays</span>. Длительность хранения лог-журналов в днях. По умолчанию «7». По истечении указанного периода журналы удаляются системой. В некоторых случаях объем журналов может достигать нескольких гигабайтов за день.<br />
<br />
<span style="color:blue;">LOG_maxfilesize</span>. Максимальный размер одного файла лог-журнала в МБ. При достижении лог-журналом указанного размера логирование прекращается. Имеет воздействие на все лог-журналы, исключая HAL (Hardware). По умолчанию 3 ГБ.<br />
<br />
<span style="color:blue;">LOG_maxpartsize</span>. Позволяет настроить максимальный размер одного файла в МБ. По умолчанию 500 МБ. При достижении лог-журналом указанного размера формируется новый файл. Имеет воздействие на все лог-журналы, исключая HAL (Hardware).<br />
<br />
<span style="color:blue;">LOG_root</span>. Абсолютный или относительный путь к папке с лог-журналами. По умолчанию «Log», то есть относительный путь в каталоге серверной службы/приложения.<br />
<br />
<br />
<div id="DebugLogTcpBufferSizeKB"></div><br />
<span style="color:blue;">DebugLogTcpBufferSizeKB</span>. Позволяет включить логирование информации обо всех объемных пакетах, переданных или отправленных сервером. Указывается размер в KB, выше которого пакеты логируются в Debug лог. По умолчанию 0 - не логировать.<br />
<br />
<div id="DebugLogCPEventTypes"></div><br />
<span style="color:blue;">DebugLogCPEventTypes</span>. 1 - включает логирование информации обо всех событиях, отправляемых в клиентские приложения в Debug-лог. По умолчанию 0 - выключено.<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">DEBUGGING</span>.'''<br />
<br />
Хранит настройки, согласно которым ведется заполнение служебного сервисного лог-журнала. По умолчанию все параметры выставлены в «1», что влечет полное логирование служб сервера. Полное или частичное отключение уменьшает размер журнала, однако не даст информации в случае возникновения сбоев и общением с технической поддержкой.<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">KEYREMOTE</span>.'''<br />
<br />
Хранит настройки для подключения к внешнему серверу, управляющему ключом защиты. Необходимо в редких случаях, если USB-порт на сервере не функционирует должным образом.<br />
<br />
<br />
<br />
<br />
<br />
===Параметры файла конфигурации клиентского приложения===<br />
<br />
<br />
<br />
<span style="color:blue;">Language</span>. Определяет языковую схему, используемую клиентским приложением до момента подключения к соответствующему серверу. После подключения производится принудительная синхронизация языковой схемы. Фактически это происходит в момент отображения окна авторизации. Подробнее в [[#Параметры файла конфигурации серверного приложения|описании ключа]] в разделе серверного приложения.<br />
<br />
<span style="color:blue;">ServerSelectMode</span>. Определяет, каким образом происходит выбор сервера в случае, если указано несколько адресов (нижеперечисленные ключи конфигурации). «0» - в окне авторизации отображается список серверов в соответствии с перечислением в конфигурационном файле. При автоматическом переподключении всегда берется последний активный сервер. «1» - осуществляется автоматический перебор серверов начиная с самого первого. Подключение производится к тому, который дал положительный ответ. При автоматическом подключении без окна авторизации в учет берется не только подключение, но и ответ авторизации. Таким образом будет активирован сервер, успешно подключенный и разрешивший вход. В этом случае в окне авторизации список серверов для выбора не отображается. «2» - перебор серверов осуществляется автоматически, начиная с последнего активированного. «3» - случайный выбор сервера. «4» - основной сервер единственный, при потере связи с ним подключение осуществляется к одному из резервных на основании случайного выбора. По умолчанию - 0.<br />
<br />
<span style="color:blue;">ConnectBackReserve</span>. «1» - активирует режим мониторинга за появлением основного сервера в случае, если текущее подключение установлено с резервным сервером. Применяется при настройке резервных схем с преимущественной привязкой к одному серверу.<br />
<br />
<br />
'''Раздел <span style="color:green;">Подключения к серверу</span>.'''<br />
<br />
<span style="color:blue;">NetConnectionName</span>. Название подключения (сервера) для отображения в окне авторизации (при указании нескольких возможных подключений).<br />
<br />
<span style="color:blue;">LogicServerAddress</span>. Адрес для подключения к серверу логики.<br />
<br />
<span style="color:blue;">LogicServerPort</span>. Порт для подключения к серверу логики.<br />
<br />
<span style="color:blue;">ConnectProtocol</span>. Устанавливает протокол, по которому осуществляется подключение клиента к серверу. 0 - по умолчанию, 1 - Remoting, 2 - OkTCP.<br />
<br />
<span style="color:blue;">NETCLIENT_SERVER_ADDRESS</span>. Адрес для подключения к серверу аппаратуры.<br />
<br />
<span style="color:blue;">NETCLIENT_SERVER_PORT</span>. Порт на сервере для подключения к нему по сигнальному протоколу.<br />
<br />
<span style="color:blue;">NETCLIENT_LOCAL_PORT</span>. Локальный порт для обмена сигнальным трафиком по UDP.<br />
<br />
<span style="color:blue;">NETCLIENT_VOICE_PORT</span>. Локальный порт для обмена голосовым трафиком по UDP. <br />
<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Вышеперечисленные параметры (NetConnectionName, ..., NETCLIENT_VOICE_PORT) определяют различные адреса и порты для организации сетевого канала подключения к серверу. Эти параметры могут присутствовать в конфигурационном файле несколько раз с добавлением к концу строки-ключа разных целочисленных индексов. Например NetConnectionName_1 и NetConnectionName_2. Индекс 0 не указывается, вместо него используется значение без индекса. В случае указания в конфигурационном файле нескольких подключений в окне авторизации будет отображен список их имен и доступен выбор одного из них. Это удобно использовать при работе с несколькими серверами с одних и тех же клиентских рабочих станций.</span><br />
<br />
<br />
<br />
<span style="color:blue;">WORK_ROOTDIR</span>. Устанавливает в явном виде путь к рабочей папке клиентского приложения. Временные файлы, сценарии, проекты, плагины, каталог по умолчанию для записи разговоров - все кроме основных сборок службы размещается именно там.<br />
<br />
<span style="color:blue;">WORK_ROOTDIR_TYPE</span>. Устанавливает один из нескольких возможных вариантов размещения рабочей папки. Используется, если не задана рабочая папка в явном виде. Возможные варианты: 0 – папка запустившего процесс выполняемого файла, 1 – папка размещения основных сборок приложения, 2 – Documents And Settings\All Users, 3 – Documents And Settings\CurrentUser.<br />
<br />
<span style="color:blue;">AutoUpdate</span>. «1» - обновлять клиента автоматически. «0» - не обновлять автоматически при запуске, если обнаружено отличие версий. По умолчанию «1». Настоятельно не рекомендуется оставлять рабочую версию программы со значением «0» и использовать этот режим только для отладочных целей.<br />
<br />
<span style="color:blue;">AutoUpdateGateway</span>. «1» - обновлять шлюз автоматически. «0» - не трогать. По умолчанию «0». В список шлюзов требуется добавить адрес сервера, если подключение производится к серверу с несколькими сетевыми интерфейсами через интерфейс с индексом более 1. В большинстве случаев указания не требуется.<br />
<br />
<div id="ManualHostAddress"></div><br />
<span style="color:blue;">ManualHostAddress</span>. Альтернативный псевдо-адрес клиентского компьютера для идентификации на сервере в карте сети. Может быть использован для подключения к серверу при динамически выделяемом IP-адресе и сложностях с идентификацией по HostName. Каждый клиент должен иметь уникальное значение ключа, не совпадающее с реальными возможными адресами и именами других компьютеров сети.<br />
<br />
<div id="TerminalMode"></div><br />
<span style="color:blue;">TerminalMode</span>. Определяет режим подстановки адреса (для организации работы в терминальном режиме) - какой адрес берется, какое терминальное расширение для идентификации в карте сети используется (''address/terminalkey'').<br />
0 — адрес локальный, без терминального расширения: ''address''.<br />
1 — адрес локальный, терминальное расширение из текущего конфигурационного файла [[#TerminalAddress|TerminalAddress]]: ''address/terminalkey''.<br />
2 — адрес локальный, терминальное расширение с помощью текущего авторизованного Win-User: ''address/user''.<br />
3 — адрес клиентского терминала (ищется активная сессия авторизованная под совпадающим с текущим win-user), терминальное расширение из текущего конфигурационного файла [[#TerminalAddress|TerminalAddress]]: ''clientaddress/terminal''. Если удовлетворяющая условиям терминальная сессия не найдена, то используется локальный адрес. Если терминальное расширение не задано - не используется. <br />
По умолчанию 1.<br />
<br />
<span style="color:blue;">TerminalAddress</span>. Строка, определяющая уникальный адрес клиентского места. Приписывается ко всем адресам компьютера для определения клиентского места в карте офиса (например «FUTURAMA/terminal1»). Именно эту строку необходимо будет указать в карте офиса для идентификации. Решает проблему терминальных подключений, где все клиенты физически запускаются с одного компьютера. По умолчанию «».<br />
<br />
<span style="color:blue;">TimeSynchronization</span>. «1» - синхронизировать время с сервером при запуске, «0» - не синхронизировать. По умолчанию «1».<br />
<br />
RestartApplicationWithProcess</span>. «1» - любой перезапуск клиента производится с выгрузкой процесса. «0» - выгрузка процесса производится только для применения обновлений, другие перезапуски осуществляются внутри процесса. По умолчанию «0». <br />
<br />
ProcessPriority</span>. Приоритет процесса клиентского приложения и процесса обслуживания внешних звуковых устройств. «0» - нормальный, «1» - выше среднего, «2» - высокий, «3» - реального времени. По умолчанию «1».<br />
<br />
<span style="color:blue;">HAL_skip_loading</span>. «1» - пропускать загрузку модуля обслуживания устройств работы со звуком. «0» - нормальный режим.<br />
<br />
<span style="color:blue;">Register_ocx</span>. «1» - регистрировать библиотеки обслуживаемых устройств перед запуском, «0» - не регистрировать. По умолчанию «1».<br />
<br />
<span style="color:blue;">ClientWebServerPort</span>. Устанавливает порт слушателя [[Клиентский интерфейс|HTTP-запросов]] к клиентскому приложению (например запрос http://localhost:4059/callto?number=184 - команда на звонок через Oktell). Доступ возможен только по локальному loopback интерфейсу.<br />
<br />
<span style="color:blue;">ComAsyncEventing</span>. Применяется для форсированной активации/отключения соответствующего режима COM-ядра без изменения кода приложения. Активирует/деактивирует режим раздачи событий COM-объекта в асинхронных служебных потоках. Применяется только в случае указания значений «1» или «0». По умолчанию применяется режим, установленный в коде внешнего интегрирующего приложения. Подробно в руководстве по интеграции (раздел «Октелл в других проектах», статья «Загрузка и выгрузка модуля»).<br />
<br />
<span style="color:blue;">ComXmlFullLogging</span>. Применяется для форсированной активации/отключения соответствующего режима COM-ядра без изменения кода приложения. Активирует/деактивирует режим полного логирования всех событий и вызовов управляющего объекта. Применяется только в случае указания значений «1» или «0». По умолчанию применяется режим, установленный в коде внешнего интегрирующего приложения. Подробно в руководстве по интеграции (раздел «Октелл в других проектах», статья «Загрузка и выгрузка модуля»).<br />
<br />
<span style="color:blue;">TRACE_HARDWARE</span>. Уровень трассировки аппаратного модуля. Битовая маска xxxx. C конца: 0 - TraceCall, 1-TraceEvents, 2-TraceVoice, 3-TraceNet. По умолчанию «1». Для полной трассировки значение «1111111111».<br />
<br />
<span style="color:blue;">SEPARATE_PROCESS</span>. «1» - запускать отдельный процесс для работы с устройствами. «0» - работать с устройствами в собственном процессе. По умолчанию «1».<br />
<br />
<span style="color:blue;">JITTER_DEPTH</span>. Значение глубины джиттер-буфера на клиенте, измеряемое в количестве пакетов по 20 мс. Минимальное значение - «0», по умолчанию - «6». При увеличении значения происходит рост задержки в голосовом обмене по направлению звука в локальное устройство, эффективнее устраняя влияние проблем сети. При указании «0» джиттер буфер не используется.<br />
<br />
Если наблюдается поступление пакетов вперемешку с незначительным разбросом, и/или периодические задержки с последующим одновременным поступлением серии пакетов, увеличение значения может способствовать выравниванию звука. Для диагностики этого явления можно активировать логирование голосового трафика (TRACE_HARDWARE) или использовать программы-перехватчики трафика (снифферы), например WireShark.<br />
<br />
<span style="color:blue;">WAVE_COUNT</span>. Значение, определяющее количество буферов для обмена звуком со звуковым устройством. Минимальное значение - «2», по умолчанию - «2». При увеличении значения происходит рост задержки в голосовом обмене по направлению звука в локальное устройство, эффективнее устраняя влияние проблем в медлительности звукового устройства.<br />
<br />
Если при ровно поступающем звуке из сети (диагностировать можно с помощью отладочной записи на входе - WAVE_COUNT, либо с помощью программ-перехватчиков трафика, например WireShark) наблюдается щелканье или пропадание кусков голосового потока, увеличение значения может способствовать выравниванию звука.<br />
<br />
<span style="color:blue;">WRITE_VOICE</span>. Отладочный параметр для оценки звукового потока на входе в клиентский HAL из сети до воспроизведения непосредственно в устройстве. «1» - отладочная запись в файл включена, файл с именем, соответствующим текущему времени размещается в корне клиентского приложения . «0» - отладочная запись отключена. По умолчанию «0».<br />
<br />
<span style="color:blue;">WAVEIN_AUTOCLOSE</span>. «1» - закрывать устройство ввода звука после завершения коммутации. «0» - оставлять открытым. По умолчанию «0». <br />
<br />
<span style="color:blue;">WAVEOUT_AUTOCLOSE</span>. «1» - закрывать устройство вывода звука после завершения коммутации. «0» - оставлять открытым. По умолчанию «0».<br />
<br />
<span style="color:blue;">USE_DIRECTSOUND</span>. Тип работы со звуком по умолчанию. Выбирается в клиентском интерфейсе. «1» - использовать для работы со звуком библиотеки DirectSound. «0» - обычный режим через системные функции Windows Multimedia (WMM). По умолчанию «0».<br />
<br />
<span style="color:blue;">NETCLIENT_PAYLOAD</span>. Кодек по умолчанию для обмена голосовым трафиком. Выбирается в клиентском интерфейсе. Здесь служит для задания начальной настройки. 0 - 711mulaw, 8 - 711alaw, 41 - gsm610. По умолчанию «8».<br />
<br />
<span style="color:blue;">PHONEDEVICE_WAVEOUT</span>. Устройство вывода звука (спикер) по умолчанию. Выбирается в клиентском интерфейсе. Здесь служит для задания начальной настройки.<br />
<br />
<span style="color:blue;">PHONEDEVICE_WAVEIN</span>. Устройство ввода звука (микрофон) по умолчанию. Выбирается в клиентском интерфейсе. Здесь служит для задания начальной настройки.<br />
<br />
<span style="color:blue;">PHONEDEVICE</span>. Имя устройства по умолчанию. Выбирается в клиентском интерфейсе. Здесь служит для задания начальной настройки.<br />
<br />
<span style="color:blue;">SIGNAL_VOLUME</span>. 0-100. Уровень громкости генерируемых в локальное устройство системных звуков и тонов. По умолчанию 50.<br />
<br />
<div id="UseKeyHook"></div><br />
<span style="color:blue;">UseKeyHook</span>. Параметр позволяет принудительно отключить режим перехвата действий клавиатуры для управления гарнитурой. Отключение может понадобиться при обнаружении проблем и конфликтов с операционной системой. «1» - режим перехвата активирован. «0» - режим перехвата деактивирован. По умолчанию «1». Выключение требуется на 64 разрядных ОС при работе версий до 2.8.130325.<br />
<br />
<span style="color:blue;">default_HeadSet_AutoHookUp</span>. Определяет используемый по умолчанию режим автоподнятия трубки на гарнитуре при поступлении входящего звонка. После фактического изменения настроек пользователем в параметрах локального устройства значение из конфигурационного файла теряет актуальность. По умолчанию «1».<br />
<br />
<span style="color:blue;">default_HeadSet_UseKeyBoard</span>. Определяет используемый по умолчанию режим перехвата нажатий на клавиатуре для управления гарнитурой. После фактического изменения настроек пользователем в параметрах локального устройства значение из конфигурационного файла теряет актуальность. По умолчанию «1».<br />
<br />
<span style="color:blue;">default_HeadSet_UseACM</span>. Определяет, активен ли по умолчанию режим автодозвона для гарнитуры. После фактического изменения настроек пользователем в параметрах локального устройства значение из конфигурационного файла теряет актуальность. По умолчанию «1».<br />
<br />
<span style="color:blue;">default_Phone_ShowRingPopup</span>. Определяет используемый по умолчанию способ отображения информации о вызывающем абоненте (всплывающее окно/всплывающее уведомление). После фактического изменения настроек пользователем в параметрах локального устройства значение из конфигурационного файла теряет актуальность. По умолчанию «1».<br />
<br />
<span style="color:blue;">WatcherResourceLogType</span>. Формат логирования ресурсов. С помощью параметра можно настроить вывод в клиентский лог-журнал WATCHER информации по использованию процессом ресурсов системы. Объем используемой памяти, количество открытых дескрипторов, количество потоков, пользовательские системные ресурсы, ориентировочное среднее процессорное время по всему процессу и отдельно по всем его потокам. 0 - не логировать, 1 - информация о процессе каждую секунду, 2 - информация о процессе и активным потокам каждую секунду, 3 - информация о процессе и всем его потокам каждую секунду, 4 - информация о процессе каждую минуту. По умолчанию 4.<br />
<br />
<span style="color:blue;">RestoreLastModules</span>. «1» - осуществляет при загрузке приложения загрузку и восстановление модулей, активных перед закрытием программы. «0» - запускает приложение с пустым фоном без дополнительной загрузки модулей; это экономит время на загрузке, так как некоторые модули требуют достаточно длительного времени для полной загрузки, однако пользователь при необходимости сам может активировать модуль по стандартной схеме из главного меню. По умолчанию «1».<br />
<br />
<span style="color:blue;">ShowVideoNoise</span>. «1» - в видео-окне модуля ТЕЛЕФОН при отсутствии видео-сигнала отображается черно-белый шум, «0» - черное окно. По умолчанию «1».<br />
<br />
<span style="color:blue;">CameraFrameFrequencyLimit</span>. Устанавливает ограничение на количество передаваемых кадров из клиентского приложения в сеть в ходе видео-сессии. Может использоваться при необходимости снизить исходящий трафик при видео-коммутациях с настраиваемой клиентской рабочей станцией.<br />
<br />
<span style="color:blue;">CameraJitterDepth</span>. Глубина джиттер-буфера фреймов с камеры. Позволяет нивелировать задержку в выдаче кадров в целях выравнивания отправляемого видео-потока. По умолчанию «3». «0» - не использовать джиттер. <br />
<br />
<span style="color:blue;">Phone_UseBlockedDelay</span>. «1» - использует асинхронный отложенный механизм по выставлению заблокированного состояния модулю [[Телефон]]. «0» - заблокированное состояние выставляется сразу (может потребоваться при работе на медленных машинах, где асинхронность сказывается отрицательно с приведением телефона в недееспособное состояние. Рекомендуется изменять только при соответствующем запросе службы технической поддержки). По умолчанию «1».<br />
<br />
<span style="color:blue;">Phone_ACMMode</span>. Определяет порядок действий при нажатии на кнопку «Позвонить» в модуле [[Телефон]]. «0» - стандартная последовательность действий: сначала производится вызов абонента, потом обратный вызов пользователя. «1» - обратная последовательность: сначала производится вызов самого пользователя, потом абонента. См. раздел [[Звонки и сервис автодозвона|Телефон. Звонки]].<br />
<br />
<span style="color:blue;">HeadsetNonACMMode</span>. Режим вызова с гарнитуры без использования автодозвона. «0» - сначала обратный вызов пользователя, потом набор абонента. «1» - поднятие трубки, таймаут, набор номера. По умолчанию «1».<br />
<br />
<span style="color:blue;">UseAutoReconnectOnFly</span>. При установке значения «1» в случае потери связи по каналу TCP между клиентом и сервером клиентское приложение будет пытаться переподключиться без перезагрузки. Неактуально при использовании протокола Remoting (по умолчанию порт 4050).<br />
<br />
<span style="color:blue;">ShowHelpInside</span>. Определяет, где отображать справку по системе. «0» - в отдельных процессах браузера по умолчанию, «1» - во встроенном браузере в окне клиентского приложения. По умолчанию «0».<br />
<br />
<div id="PlugRegLoadType"></div><br />
<span style="color:blue;">PlugRegLoadType</span>. Устанавливает режим загрузки при настройке plugin-программ. «1» - стандартный режим в отдельном домене с последующей выгрузкой. «2» - загрузка plugin-программ в отдельный процесс для настройки. Для загрузки plugin-библиотек используется запускающий модуль oktell.PluginStarter.exe, который может быть скопирован под другим названием. Используемая версия .NET Framework для работы плагина в отдельном процессе определяется в конфигурационном файле этого процесса (по умолчанию oktell.PluginStarter.exe.config). Сам же запускающий модуль (название файла в каталоге клиентского приложения) определяется в конфигурационном файле oktell (клиентском и возможно серверном) с ключом, зависящим от названия основной библиотеки plugin-программы. Например <add key="PluginTcp_libnamewithoutextension" value="oktell.PluginStarter2.exe"/>. Существующий модуль oktell.PluginStarter.exe может скопирован под другим именем и снабжен таким образом индивидуальным конфигурационным файлом. Это может понадобиться в частности для применения разных версий .NET Framework к разным plugin-программам.<br />
<br />
<span style="color:blue;">AutoSortGroups</span>. Устанавливает режим сортировки отделов для модуля [[Сотрудники]] по названиям. По умолчанию «1». В случае отключения ожидается, что сортировкой занимается хранимая процедура, результаты ее исполнения выводятся последовательно.<br />
<br />
<span style="color:blue;">PersonalHandleDepartments</span>. При установке значения «1» обновление состояний внутренних номеров в разделе [[Сотрудники|«Сотрудники. Отделы»]] производится только для номеров, входящих в выделенный отдел. Имеет смысл применять для сокращения трафика. <br />
<br />
<div id="SplitDepartmentsTreeByDot"></div><br />
<span style="color:blue;">SplitDepartmentsTreeByDot</span>. «1» - осуществлять построение глубокого дерева вложенных отделов в модуле «Сотрудники», разбивая указанные для сотрудников отделы на категории по символу «.». «0» - одноуровневое дерево отделов. По умолчанию «0».<br />
<br />
<span style="color:blue;">HandleSessionToChangeUserState</span>. «1» - при блокировании сессии авторизованного пользователя windows производится автоматический перевод состояния авторизованного пользователя oktell в «Нет на месте». При возврате в сессию производится автоматический перевод в «На месте». При этом перевод не осуществляется, если в момент блокировки пользователь не был свободен (находился в разговоре, в резерве или в состоянии перерыва), при этом не производится и обратного перевода при входе в сессию. «0» - действие по автоматической смене состояний не применяется. По умолчанию «1».<br />
<br />
<span style="color:blue;">RecordDownloadNameAddInfo</span>. «1» - устанавливает режим выгрузки записей разговоров статистики с включением в имена файлов имен участвующих абонентов.<br />
<br />
<span style="color:blue;">Memory_UseSameDialogForms</span>. «1» - активирует режим использования одних и тех же окон в режиме операторских диалоговых форм без уничтожения и создания при каждом показе. Используется на компьютерах с минимальным объемом оперативной памяти во избежание скачкообразного роста используемой памяти. «0» - деактивирует режим. По умолчанию «0».<br />
<br />
<span style="color:blue;">Debug_PingErrorRestart</span>. «0» - отключает автоматическую перезагрузку клиентского приложения при отсутствии откликов сервера на команды Ping. Используется для отладочных режимов, в основном при отладке plugin-программ. «1» - обычный режим. По умолчанию «1».<br />
<br />
<span style="color:blue;">PingTimeoutNotify</span>. Устанавливает период в миллисекундах, при превышении которого в момент вызова метода Ping возникает уведомление о плохой связи с сервером. <br />
<br />
<span style="color:blue;">ActivationServer</span>. Ссылка на сайт активаций для режима автоматической активации тестовой версии. По умолчанию «http://activate.telsystems.ru».<br />
<br />
<br />
<span style="color:blue;">ShowLoadingBar</span>. Отображает полосу загрузки при открытии модулей клиентского приложения. В некоторых случаях, улучшает работу отрисовки приложения. «0» - не отображает, «1» - отображает. По умолчанию «1».<br />
<br />
<span style="color:blue;">helplinks</span>. Тип используемой справки: «0» - встроенная справка в файле manual.chm, «1» - ссылка на вики. По умолчанию «1».<br />
<br />
<span style="color:blue;">FaxPreperformProcess</span>. Режим работы факса при отправке с клиентского приложения: «0» - обычный режим отправки изображений с преобразованием на сервере к необходимому виду. «1» - использование локального XPS-принтера для изготовления общего многостраничного файла TIFF из нескольких выбранных документов (для этого режима необходимы .NET Framework 3.0, установленный Microsoft Office версии 2003 или старше, установленный XPS принтер). По умолчанию «0».<br />
<br />
<div id="">AutoUserStateChangeOnSystemLock</div><br />
<span style="color:blue;">AutoUserStateChangeOnSystemLock</span>. 1 - активирует режим автоматического перевода состояния пользователя в ''Отключен'' или ''Перерыв'' (в зависимости от присутствия пользователя в режиме Call-центра) при блокировке ОС и автоматический перевод обратно при входе в систему снова. 0 - не использует режим. По умчоланию 1.<br />
<br />
<div id="">PhoneDirectDigit</div><br />
<span style="color:blue;">PhoneDirectDigit</span>. Определяет поведение софт-телефона. 1 - в активном состоянии набор символов осуществляется по одному, ввод в текстовое поле невозможен, кнопка «Набрать» недоступна. 0 - набор осуществляется в текстовое поле, после чего кнопкой «Набрать» отправляется на сервер. По умолчанию 0. Это касается состояний набора номера, коммутаций с абонентами, коммутаций с IVR, ожидания ответа, ожидания факс-сеанса.<br />
<br />
<span style="color:blue;">PhoneIvrDirectDigit</span>. Определяет поведение софт-телефона в состоянии коммутации с IVR при отключенном режиме прямого набора символов. 1 - позволяет активировать прямой набор только для случая коммутации с IVR. 0 - оставляет доступным только набор в текстовое поле с последующей отправкой по нажатию на «Набрать», при этом сценарий завершается и осуществляется набор номера по-новой. По умолчанию 0.<br />
<br />
<span style="color:blue;">PhoneLineDirectDigit</span>. Определяет поведение софт-телефона в состоянии коммутации с абонентом при отключенном режиме прямого набора символов. 1 - позволяет активировать прямой набор только для случая коммутации с абонентом. 0 - оставляет доступным только набор в текстовое поле с последующей отправкой по нажатию на «Набрать», при этом осуществляется переключение. По умолчанию 1.<br />
<br />
<br />
<br />
'''Раздел <span style="color:green;">LOG</span>.'''<br />
<br />
Хранит настройки лог-сервера комплекса. Среди неописываемых настроек - пути к папкам для сбора журналов.<br />
<br />
<span style="color:blue;">LOG_storedays</span>. Длительность хранения лог-журналов в днях. По умолчанию «7». По истечении указанного периода журналы удаляются системой. В некоторых случаях объем журналов может достигать нескольких гигабайтов за день.<br />
<br />
<span style="color:blue;">LOG_maxfilesize</span>. Максимальный размер одного файла лог-журнала в байтах. Имеет воздействие на все лог-журналы, исключая HAL (Hardware). По умолчанию 3 ГБ.<br />
<br />
<span style="color:blue;">LOG_root</span>. Абсолютный или относительный путь к папке с лог-журналами. По умолчанию «Log», то есть относительный путь в каталоге клиентского приложения.</div>Peter%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%B0%D1%80%D1%82%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8Динамическое управление картой сети2014-02-28T16:25:32Z<p>Peter: </p>
<hr />
<div>Компонент [[Общие компоненты сценариев#UserState|Статус объекта]] позволяет управлять составом карты сети с помощью [http://ru.wikipedia.org/wiki/JSON JSON]-форматированных команд. Это может быть полезно для решения интеграционных задач, в многосерверных решениях с внешней логикой управления, а также в проектах с постоянно изменяющимися параметрами карты сети.<br />
<br />
<br />
__TOC__<br />
<br />
=== Описание ===<br />
<br />
Определенным образом формируемые параметры позволяют:<br />
* Добавлять шлюзы (операция ''gate-add'').<br />
* Добавлять потоки (операция ''stream-add'').<br />
* Добавлять телефоны (операция ''phone-add'').<br />
* Удалять шлюзы со всеми потоками (операция ''gate-del'').<br />
* Удалять отдельные потоки (операция ''stream-add'').<br />
* Удалять отдельные телефоны (операция ''phone-add'').<br />
* Изменять параметры шлюзов (операция ''gate-set'').<br />
* Изменять параметры потоков (операция ''stream-set'').<br />
* Изменять параметры телефонов (операция ''phone-set'').<br />
* Удалять единовременно все динамические объекты (команда ''clear'').<br />
<br />
Добавленные динамические объекты не появляются среди отображаемых объектов в [[Карта сети|карте сети]], но доступны в [[Мониторинг|мониторинге линий]], [[Настройки оборудования|параметрах аппаратуры]], и прочих модулях системы, связанных с исполнением в реальном времени.<br />
<br />
Жизненный цикл динамических объектов протекает от момента создания до момента удаления или перезапуска системы. Таким образом при необходимости формирования постоянных настроек карты сети с помощью динамических объектов, необходимо реализовывать однократное исполнение служебной задачи, загружающей требуемые динамические объекты всякий раз после перезапуска системы. Гарантировать однократность можно в том числе с помощью [[Переменные|глобальных переменных]] сценариев.<br />
<br />
После исполнения любой операции, связанной с динамическими объектами, автоматически происходит перезагрузка сервера состояний. Это затратная операция. В этой связи настоятельно рекомендуется комбинировать все операции в один запрос, и не исполнять их в цикле одну за другой.<br />
<br />
При создании динамических объектов, создаются динамические линии с идентификаторами, задаваемыми в запросе. Формирование этих уникальных идентификаторов возложено на администратора, создающего сценарий, поскольку привязка к ним может потребоваться в бизнес-логике реализуемого процесса для решения внешних задач.<br />
Ожидается, что идентификаторы будут уникальны.<br />
<br />
Создание динамических потоков в шлюзах может сопровождаться автоматическим созданием направления, состоящего из всех вновь-созданных линий потока.<br />
<br />
При создании объектов и изменении их параметров могут указываться как настройки из [[Карта сети|«Карты сети»]], так и настройки из [[Настройки оборудования|«Параметров аппаратуры»]].<br />
<br />
<br />
<br />
=== Лицензирование ===<br />
<br />
<br />
При добавлении динамических объектов расходуются свободные лицензии на соответствующие линии. При удалении объектов лицензии высвобождаются. Таким образом можно использовать конкурентный механизм в отличие от [[Карта сети|статической карты сети]]. <br />
<br />
В случае, если после добавления очередного объекта итоговое количество линий превосходит количество линий в лицензии, сервер произведет стандартную процедуру отключения части линий по своему усмотрению (преимущественно выключенные, неактивные).<br />
<br />
<br />
<br />
=== Формат команд ===<br />
<br />
<br />
Команды управления динамической картой сети передаются в строковом виде в формате [http://ru.wikipedia.org/wiki/JSON JSON].<br />
<br />
Структура команд, передаваемых серверу через компонент сценария в общем виде выглядит следующим образом:<br />
<br />
<pre><br />
{<br />
"actions":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
<br />
Команда полной очистки динамических объектов <br />
<br />
<pre><br />
{<br />
"method":"clear"<br />
}<br />
</pre><br />
<br />
<br />
<br />
Каждая команда представляет собой одну или несколько операций, возможно различных. В простейшем случае в одной команде содержится одна операция.<br />
В каждой операции может присутствовать один или несколько объектов. Так, операция добавления шлюзов может содержать мета-данные нескольких шлюзов, операция добавления потоков - несколько потоков, операция добавления телефонов - несколько SIP-телефонов. То же самое с удалением и изменением параметров.<br />
<br />
<br />
<br />
=== Структура операций ===<br />
<br />
<br />
Структура одной операции добавления шлюза:<br />
<br />
<pre><br />
{<br />
"method":"gate-add",<br />
"gates":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''gates'' могут перечисляться несколько шлюзов. Каждый шлюз представляет собой совокупность настроек: обязательных и необязательных параметров. Администратор, производящий настройку, должен гарантировать уникальность идентификаторов, а также отличия в настройках шлюзов.<br />
<br />
При добавлении шлюзов можно сразу в той же операции определить потоки, соответствующие каждому шлюзу. Для этого среди свойств шлюза необходимо размещение свойства ''streams'' с информацией, эквивалентной операции создания потока. Управление отдельными потоками динамического шлюза может производиться и позже.<br />
<br />
Структура операции изменения шлюза отличается значением ключа ''method'' (''gate-set''), а также невозможностью одновременно изменять параметры потоков внутри шлюза и изменять тип регистрации (''regtype''). <br />
<br />
Операция удаления шлюза (''gate-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении шлюза удаляются все его потоки, линии и динамические направления, с ними связанные.<br />
<br />
<br />
<br />
Структура одной операции добавления потока:<br />
<br />
<pre><br />
{<br />
"method":"stream-add",<br />
"gates":[<br />
{<br />
"id":"_guid_шлюза_",<br />
"streams":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''gates'' могут перечисляться несколько шлюзов. Каждый шлюз должен содержать идентификатор и набор добавляемых потоков (''streams''), другие его свойства игнорируются. Создаваемые потоки привязываются к содержащим их шлюзам. Каждый поток в наборе представляет собой совокупность настроек: обязательных и необязательных параметров.<br />
<br />
Структура операции изменения потока отличается значением ключа ''method'' (''stream-set'').<br />
<br />
Операция удаления потока (''stream-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении потока удаляются динамическое направление и все линии, с ним связанные.<br />
<br />
<br />
<br />
<br />
Структура одной операции добавления SIP-телефона:<br />
<br />
<pre><br />
{<br />
"method":"phone-add",<br />
"phones":[<br />
{<br />
"id":"_guid_телефона_",<br />
...<br />
},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''phones'' могут перечисляться несколько телефонов. Каждый телефон представляет собой совокупность настроек: обязательных и необязательных параметров. Администратор, производящий настройку, должен гарантировать уникальность идентификаторов, а также уникальность и '''сложность''' авторизационных параметров телефонов.<br />
<br />
Структура операции изменения телефона отличается значением ключа ''method'' (''phone-set'').<br />
<br />
Операция удаления потока (''phone-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении потока удаляются динамическое направление и все линии, с ним связанные.<br />
<br />
<br />
=== Свойства объектов ===<br />
<br />
Ниже приводится список свойств различных объектов, используемый при создании. Свойства разделены на группы: обязательные свойства при создании объекта, необязательные свойства при создании объекта, у которых существуют значения по умолчанию, а также внутренние SIP-свойства объектов, доступные также в модуле [[Настройки оборудования|«Параметры аппаратуры»]].<br />
<br />
<br />
<br />
==== Шлюзы ====<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">01010101-0101-0101-0101-010101010101</span>" - Guid-идентификатор шлюза. <br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicGate</span>" - Название шлюза для отображения в модуле [[Настройки оборудования|«Параметры аппаратуры»]].<br />
* "<span style="color:red;">regtype</span>":<span style="color:gray;">2</span> - Тип регистрации (0 - без регистрации, 1 - регистрация на сервере, 2 - регистрация на шлюзе).<br />
<br />
Обязательные параметры (кроме шлюзов с регистрацией на сервере):<br />
<br />
* "<span style="color:red;">address</span>":"<span style="color:gray;">192.168.0.1</span>" - Доменное имя, подставляемое в запрос.<br />
* "<span style="color:red;">sipproxyaddress</span>":"<span style="color:gray;">192.168.0.1:5060</span>" - Адрес и порт удаленного узла, на который отправлять пакеты.<br />
<br />
<br />
Необязательные параметры:<br />
<br />
* "<span style="color:red;">expire</span>":<span style="color:gray;">3600</span> - Период регистрации в секундах для шлюзов с внешней регистрацией. По умолчанию ''3600''.<br />
* "<span style="color:red;">freegate</span>":<span style="color:gray;">false</span> - Для шлюза без регистрации признак разрешения обработки неизвестных входящих. В системе не должно быть более одного шлюза для приема неизвестных входящих. По умолчанию ''false''.<br />
* "<span style="color:red;">aliases</span>":["<span style="color:gray;">Domain1</span>", "<span style="color:gray;">Domain2</span>", "<span style="color:gray;">212.212.121.121</span>"] - Список дополнительных доменных имен, которые ассоциируются со шлюзом при поступлении входящих запросов. По умолчанию список пуст.<br />
<br />
<br />
Дополнительные параметры SIP:<br />
<br />
* "<span style="color:red;">interface-address</span>":"<span style="color:gray;">default</span>" - Сетевой интерфейс сервера (или ''default'' - автоопределение). По умолчанию ''default''.<br />
* "<span style="color:red;">search-in-from</span>":"<span style="color:gray;">0</span>" - Поиск соответствия между аккаунтом и входящим INVITE (0 - contact, 1 - contact+from). По умолчанию ''0''.<br />
* "<span style="color:red;">def-caller-id</span>":"<span style="color:gray;">1234567</span>" - Источник определения CallerId (0 - From:URI, 1 - From:DisplayName, 2 - Contact:URI, 3 - INVITE целиком). По умолчанию ''0''.<br />
* "<span style="color:red;">disabled-answer</span>":"<span style="color:gray;">503</span>" - SIP-ответ при вызове на отключенный поток.<br />
* "<span style="color:red;">declined-answer</span>":"<span style="color:gray;">486</span>" - SIP-ответ при отсутствии свободных транков.<br />
* "<span style="color:red;">error-answer</span>":"<span style="color:gray;">500</span>" - SIP-ответ при ошибке резервирования транка.<br />
* "<span style="color:red;">disconnect-answer</span>":"<span style="color:gray;">480</span>" - SIP-ответ при отказе сценария IVR.<br />
<br />
<br />
<br />
==== Потоки ====<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">12341234-1234-1234-1234-123412341234</span>" - Guid-идентификатор потока.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicStream</span>" - Название потока для отображения.<br />
* "<span style="color:red;">displayname</span>":"<span style="color:gray;">stream1</span>" - SIP DisplayName.<br />
* "<span style="color:red;">username</span>":"<span style="color:gray;">stream1</span>" - SIP UserName.<br />
* "<span style="color:red;">login</span>":"<span style="color:gray;">stream1</span>" - SIP Login.<br />
* "<span style="color:red;">password</span>":"<span style="color:gray;">u74S3iiB</span>" - SIP Password.<br />
* "<span style="color:red;">lines</span>":[{...}, ..., {...}] - список новых линий с параметрами, соответствующих потоку (рассмотрено ниже).<br />
<br />
<br />
Необязательные параметры<br />
<br />
* "<span style="color:red;">defaultcallerid</span>":"<span style="color:gray;">1234567</span>" - Подставляемый по умолчанию CallerId.<br />
* "<span style="color:red;">codecs</span>":[<span style="color:gray;">0</span>, <span style="color:gray;">1</span>] - Список используемых кодеков через запятую в порядке уменьшения приоритета (возможные значения: 0-711u, 1-711a, 2-gsm, 3-729). По умолчанию ''[0, 1]''.<br />
* "<span style="color:red;">numbers</span>":["<span style="color:gray;">account1</span>", "<span style="color:gray;">account2</span>"] - Список дополнительных номеров для ассоциации входящих звонков с потоком. По умолчанию список пуст.<br />
* "<span style="color:red;">dialmode</span>":<span style="color:gray;">0</span> - Способ набора номеров для шлюзов с регистрацией на сервере (0-сначала аккаунт потом номер, 1-сразу номер). По умолчанию ''0''.<br />
* "<span style="color:red;">route</span>":{...} - Свойства направления, которое будет создано и привязано к линиям (рассмотрено ниже).<br />
<br />
<br />
Свойства линий:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">79797979-7979-7979-7979-797979797979</span>" - Guid-идентификатор линии.<br />
* "<span style="color:red;">caption</span>":"<span style="color:gray;">LineCaption</span>" - Имя линии для отображения.<br />
* "<span style="color:red;">code</span>":"<span style="color:gray;">LineCode</span>" - Код линии.<br />
<br />
<br />
Свойства направления:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">68686868-6868-6868-6868-686868686868</span>" - Guid-идентификатор направления.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">RouteName</span>" - Название направления.<br />
* "<span style="color:red;">description</span>":"<span style="color:gray;">Route description</span>" - Описание направления.<br />
* "<span style="color:red;">code</span>":"<span style="color:gray;">routecode</span>" - Код направления (для указания в сценариях).<br />
* "<span style="color:red;">commandtype</span>":"<span style="color:gray;">0</span>" - Режим преобразования номера перед набором (0 - нет, 1 - выражение, 2 - служебный сценарий).<br />
* "<span style="color:red;">command</span>":"<span style="color:gray;"></span>" - Выражение или название служебного сценария для преобразования номера.<br />
<br />
<br />
<div id="sipstreamprops"></div><br />
Дополнительные параметры SIP:<br />
<br />
* "<span style="color:red;">enabled</span>":<span style="color:gray;">0</span> - Включен/выключен.<br />
* "<span style="color:red;">expires</span>":<span style="color:gray;">0</span> - Максимальный период регистрации в секундах для шлюзов с регистрацией на сервере, 0 - не ограничено. По умолчанию ''3600''.<br />
* "<span style="color:red;">replace-user-name</span>":<span style="color:gray;">0</span> - Место подстановки набранного номера при исходящем вызове (0 - To+RequestURI, 1 - To, 2 - RequestURI). По умолчанию ''0''. <br />
* "<span style="color:red;">dtmftype</span>":<span style="color:gray;">0</span> - Способ отправки DTMF (0 - rfc 2833, 1 - SIP INFO, 2 - InBand). По умолчанию ''0''.<br />
* "<span style="color:red;">enable-inband-dtmf</span>":<span style="color:gray;">0</span> - Включение детектора звукового DTMF во входящем rtp-потоке (0 -выключен, 1 - включен). По умолчанию ''0'', так как операция ресурсо-затратная.<br />
* "<span style="color:red;">wait-ack</span>":<span style="color:gray;">1</span> - Ожидать поступления сообщения ACK перед продолжением обработки входящего звонка (0 - нет, 1 - да). По умолчанию ''1''.<br />
* "<span style="color:red;">can-reinvite</span>":<span style="color:gray;">0</span> - Разрешить изменять параметры связи во время коммутации (0 - нет, использовать транскодинг; 1 - да). По умолчанию ''1''.<br />
* "<span style="color:red;">fax-enable</span>":<span style="color:gray;">0</span> - Разрешить прием/передачу факсов T.30 (0 - нет, 1-да). По умолчанию 0.<br />
* "<span style="color:red;">fax-outgoing-timeout</span>":<span style="color:gray;">60</span> - Время ожидания ответа факса в секундах при исходящем сеансе. По умолчанию ''60''.<br />
* "<span style="color:red;">fax-enable-ecm</span>":<span style="color:gray;">1</span> - Error Correction Mode (ECM) для факсов (0 - выключено, 1-включено). По умолчанию ''1''.<br />
* "<span style="color:red;">use-remote-address</span>":<span style="color:gray;">1</span> - Адрес назначения для RTP трафика (0 - адрес/порт из SDP, 1 - адрес/порт отправителя). По умолчанию ''1''.<br />
* "<span style="color:red;">g711-size</span>":<span style="color:gray;">0</span> - Размен звукового пакета при отправке RTP данных в кодеке 711a/711u (0 - 40мс, 1 - 20мс). По умолчанию ''1''.<br />
<br />
<br />
<br />
==== Телефоны ====<br />
<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">35353535-3535-3535-3535-353535353535</span>" - Guid-идентификатор телефона и связанной с ним линии.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicPhone</span>" - Название телефона для отображения.<br />
* "<span style="color:red;">address</span>":"<span style="color:gray;">192.168.0.231:5060</span>" - Адрес устройства для работы в режиме без регистрации.<br />
* "<span style="color:red;">username</span>":"<span style="color:gray;">user</span>" - SIP UserName.<br />
* "<span style="color:red;">login</span>":"<span style="color:gray;">phone</span>" - SIP Login (по умолчанию совпадает с SIP UserName).<br />
* "<span style="color:red;">password</span>":"<span style="color:gray;">7thNx2wf</span>" - SIP Password.<br />
<br />
<br />
Необязательные параметры: <br />
<br />
* "<span style="color:red;">codecs</span>":[<span style="color:gray;">0</span>, <span style="color:gray;">1</span>] - Список используемых кодеков через запятую в порядке уменьшения приоритета (возможные значения: 0-711u, 1-711a, 2-gsm, 3-729). По умолчанию ''[0, 1]''.<br />
* "<span style="color:red;">defaultuserid</span>":"<span style="color:gray;">84848484-8484-8484-8484-848484848484</span>" - Guid-идентификатор пользователя, привязанного к телефону как [[Свойства компонентов#SipPhone|«пользователь по умолчанию»]]. По умолчанию без привязки.<br />
* "<span style="color:red;">websocketuserid</span>":"<span style="color:gray;">84848484-8484-8484-8484-848484848484</span>" - Guid-идентификатор пользователя, привязанного к телефону как [[Свойства компонентов#SipPhone|«пользователь webcrm»]]. По умолчанию без привязки.<br />
* "<span style="color:red;">citystraight</span>":<span style="color:gray;">-1</span> - (-1 - по умолчанию БД, 0 - нет, 1 - да). По умолчанию ''-1''.<br />
* "<span style="color:red;">busymode</span>":<span style="color:gray;">-1</span> - Режим отбоя (-1 - по умолчанию БД, 0 - SIP-disconnect, 1 - генерировать короткие гудки). По умолчанию ''-1''.<br />
* "<span style="color:red;">translit</span>":<span style="color:gray;">-1</span> - Производить транслитерацию (-1 - согласно общим настройкам, 0 - нет, 1 - да). По умолчанию ''-1''.<br />
* "<span style="color:red;">linecode</span>":"<span style="color:gray;">DynamicPhoneCode</span>" - Код линии.<br />
* "<span style="color:red;">department</span>":"<span style="color:gray;">57575757-5757-5757-5757-575757575757</span>" - Идентификатор существующего подразделения для привязки и отображения в разделе «Сотрудники». <br />
<br />
<br />
Дополнительные параметры SIP аналогичны [[#sipstreamprops|параметрам потоков]].<br />
<br />
<br />
=== Пример сценария ===<br />
<br />
[[Special:FilePath/(Example) Dynamic SIP.oscr|(Example) Dynamic SIP.oscr]]</div>Peter%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9._%D0%9D%D0%BE%D0%B2%D1%8B%D0%B5_%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8История обновлений. Новые возможности2014-02-18T06:58:36Z<p>Peter: </p>
<hr />
<div>[[Дополнительно|Наверх]]<br />
<br />
<br />
__TOC__<br />
<br />
<br />
<br />
====Новые возможности 2.10 (20.01.2014)====<br />
<br />
<br />
* В веб-клиент включена первая версия раздела ''[[Oktell_Web_Оператор#Дашборды|Дашборды]]''.<br />
* Веб-клиент получил возможность отображать ''[[Компоненты сценариев диалога#WebForm|веб-формы]]'' диалоговых сценариев (без подстановки значений в поля).<br />
* Реализовано сохранение сессий веб-клиентов в БД в целях сохранения между производимыми перезагрузками сервера.<br />
* Реализована политика прав доступа пользователей к объектам Call-центра. Проекты, таблицы абонентов, задачи, индикаторы, отчеты и дашборды получили возможность определять индивидуальные права доступа. Соответствующие общие привилегии в ролях на изменение и удаление объектов ликвидированы.<br />
* ''[[Таблицы абонентов]]'' получили возможность назначать столбцам с типом данных ''uniqueidentifier'' смысловой тип ''Идентификатор оператора''. Применяется в задачах с закреплением абонентов за операторами.<br />
* В задачах ''[[Голосовые задачи#FixOperator|с закреплением абонента за оператором]]'' активирована периодическая синхронизация с таблицей абонентов для задач этого типа. Реализована возможность выбора - запрос на дозвон или уведомление оператору. Скорректирована процедура очистки кэша.<br />
* Произведена оптимизация и корректировка механизма поиска очередного абонента для звонка по [[Голосовые задачи|задаче]] при использовании ''[[Голосовые задачи#DBCache|кэша в БД]]''.<br />
* Реализован новый тип задач ''Поиск абонента для оператора''.<br />
* Реализовано состояние ''ручного режима в Call-центре'', фактически приостанавливающее использование оператора исходящими задачами. В пространственной таблице операторских состояний для этого выделено отдельное состояние (код 12). В запросы [[Oktell_Web-Socket_Protocol|WebSocket-интерфейса]] (''setuserstate'') и COM-интерфейса введено свойство для управления состоянием. В модулях ''[[Ресурсы]]'' и ''[[Операторы]]'' отображение состояния в виде пиктограммы ''«М»'' и доступ к управлению состоянием для супервизора.<br />
* Реализована первая версия задач с прогрессивно-предиктивным набором. В конфигурационный файл вынесены константы ''[[Параметры_файлов_конфигурации#PredictivePoolTimerIntervalMs|PredictivePoolTimerIntervalMs]]'', ''[[Параметры_файлов_конфигурации#PredictivePoolClearStatOnDeactivate|PredictivePoolClearStatOnDeactivate]]'', ''[[Параметры_файлов_конфигурации#PredictivePoolExtraShiftTimeoutMs|PredictivePoolExtraShiftTimeoutMs]]''.<br />
* Реализована возможность выдачи прав доступа к записям разговоров по внешним направлениям. Ранее была доступна установка права доступа для всех внешних линий сразу.<br />
* Добавлены новые фирменные мелодии ожидания. Применяются автоматически, если в системе используются мелодии по умолчанию. <br />
* Работа локальных устройств и гарнитур в клиентском приложении переведена на протокол SIP. Как результат незначительно изменилось управление модулем ''[[Телефон]]''.<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлен ряд новых функций. Присоединение звонка к задаче с возможностью указания ид абонента (задание параметра через json-хеш с ключами ''{task|user, idinlist}''). Определение расписания задачи (по текущему времени). Определение рабочего времени офиса с учетом настроенных праздников (по указанному времени). Перезагрузка общих настроек из БД. Изменение ограничения максимального количества внешних линий для задач (-1 - снятие лимита). Установить для пользователя: статус, занятость, переадресация, перерыв, кц, ручной режим кц.<br />
* В компонент IVR-сценариев ''[[Компоненты сценариев IVR#Switch|Переключение]]'' добавлена возможность сохранять код отказа SIP, а также при переключении на внутренние номера указывать сигнал вызова (значение SIP-заголовка ''Alert-Info'').<br />
* Компонент диалоговых сценариев ''[[Компоненты сценариев диалога#WebForm|Веб-форма]]'' получил возможность определять поведение при нажатии на кнопку ''ДАЛЕЕ''. Возможность заблокировать кнопку в принципе, продолжить, а также ''SUBMIT'' веб-документу.<br />
* Исправлена ошибка в работе компонента сценариев ''[[Общие компоненты сценариев#EmailReceive|Получение E-mail]]'' в режиме работы с IMAP сервером.<br />
* Исправлена ошибка компонента сценариев ''[[Общие компоненты сценариев#EmailSend|Отправка E-mail]]'', связанная с блокировкой выбранных файлов вложений на некоторое время после завершения работы компонента. <br />
* В компонентах сценариев ''[[Компоненты служебных сценариев#Call|Дозвон]]'', ''[[Компоненты сценариев IVR#SwitchExt|Переключение на внешние линии]]'' и ''[[Компоненты сценариев IVR#Switch|Переключение]]'' реализовано защитное преобразование выбранного режима перед началом работы в соответствии с модулем-инициатором запуска.<br />
* В компоненте сценариев ''[[Общие компоненты сценариев#WebRequest|WEB-запрос]]'' добавлена возможность осуществлять запросы ''PUT'', ''HEAD'', ''DELETE''. Исправлена работа с Cookies.<br />
* Ряд мелких исправлений в компонентах сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'', ''[[Общие компоненты сценариев#WebRequest|WEB-запрос]]''.<br />
* Оптимизирована передача данных из веб-сервиса 1C в сценарий с помощью компонента ''[[Общие компоненты сценариев#1CQuery|Запрос к 1С]]''.<br />
* Служебные сценарии получили возможность запускать процессы на клиенте с помощью нового компонента (через указание пользователя, который должен быть авторизован через толстое приложение или COM-ядро).<br />
* В модуле ''[[Сценарии АТС#SvcUserChanged|общих настроек]]'' добавлена возможность выбора служебного сценария уведомления об изменении учетной записи пользователя с передачей кода операции (1-создание, 2-изменение, 3-удаление), ид пользователя, логина, незашифрованного пароля, имени. Пароль передается только при создании или при изменении с модификацией пароля, иначе просто пустая строка. При удалении только идентификатор передается.<br />
* В модуле ''[[Сценарии АТС#SvcUserStateChanged|общих настроек]]'' добавлена возможность выбора сценария уведомления о входе/выходе пользователя в систему.<br />
* В модуле ''[[Настройки_Call-центра#SvcSupervisorHelp|общих настроек]]'' добавлена возможность выбора служебного сценария обработки запроса помощи супервизора.<br />
* [[Oktell_Web-Socket_Protocol|WebSocket-интерфейс]] дополнен пользовательскими методами: ''checkmyuserprivilege'', ''getmyuserprivileges'', ''pbxanswercall'', ''updatesession''. Серверными методами: ''wp_setuserstate'', ''wp_getuserstate'', ''closecallbychain'', ''getalluserstates'', ''subscribeevent'', ''unsubscribeevent'' и серверным событием ''srv_userstate''.<br />
* В [[Oktell_Web-Socket_Protocol|WebSocket-интерфейсе]] реализована возможность хранения файлов, прикрепленных к сообщениям чата, под уникальными именами (свойство ''hidefiles'' метода ''chatsendmessage'').<br />
* В COM интерфейс добавлены методы ''Conf_AttachToGhost(string ghostid)'', ''string Conf_SetGhostMode(string xml)'', позволяющие организовать прослушивание в реальном времени. Исправлены некоторые ошибки.<br />
* Расширена функциональность [[Серверный_HTTP_интерфейс|веб-сервера]]. Реализована возможность исполнять служебные сценарии без прохождения авторизации на сервере (с помощью запроса специальным образом настроенных веб-страниц в подпапке ''WWW''). Обработка запросов с ''transfer-encoding:chunked''. Запросы ''checklicenseactual'', ''closecallbychain''.<br />
* Добавлен ключ конфигурации ''[[Параметры_файлов_конфигурации#WebServerNoAuth_Loopback|WebServerNoAuth_Loopback]]'', позволяющий отключить требование авторизации при обращении к [[Серверный_HTTP_интерфейс|веб-серверу]] с собственного адреса сервера.<br />
* Исправлен ряд недочетов в менеджере голосовых задач. Таймеры и периоды активности задач. Пауза перед резервированием освободившегося оператора. Отбой внешней линии во время длительного исполнения запроса в БД перед входом в задачу приводил к зависанию линии оператора после попытки соединения. Корректное размещение в статистику информации о звонке при присоединение существующего звонка к задаче. Корректное полное удаление оператора из обработчика входящей задачи. При использовании сценария поиска абонента не применялось указание на завершение задачи, если идентификатор абонента не установлен сценарием в служебную переменную.<br />
* Косметические исправления в модуле ''[[Пользователи]]''.<br />
* Добавлена новая ролевая привилегия ''Возможность редактирования запросов SQL''. <br />
* Исправлены незначительные ошибки в модуле ''[[Настройки_SIP-модуля|Настройки аппаратуры]]''.<br />
* Исправлено отображение таблицы журнала звонков в модуле ''[[Мои контакты]]''.<br />
* Исправлены ошибки в модуле ''[[Статистика#Диаграммы и настройка|Статистика call-центра]]'', а также реализована возможность использовать предопределенную переменную ''@authorizeduserid'' (в отчетах из хранимых процедур - таблицу ''#authorizeduserid'') для привязки отчетов к конкретным пользователям.<br />
* Косметические исправления в модуле ''[[Ресурсы]]''. Ошибка скрытия неактивных пользователей. Ошибка при отрисовке списка задач при определенных условиях. Кэширование данных по запросу производилось без учета выбранного интервала расчета.<br />
* Косметические исправления в ''[[Редактор_web-форм|дизайнере диалоговых веб-форм]]''. Назначение переменных в качестве значений (слетало в константу). Удалена привязка выпадающих списков к начальным значениям.<br />
* Добавлено управление масштабом в диалоговых веб-формах и других модулях, использующих встроенный браузер.<br />
* Из ''[[Редактор_карты_сети|карты сети]]'' удалены USB-телефоны. Теперь учетной записью для работы локального устройства снабжаются компьютеры, не связанные с объектами SIP-телефонов и аналоговых телефонов, а также динамические рабочие места.<br />
* Устранен рост памяти в SIP-сервере при работе с динамическими транками.<br />
* Исправлены обнаруженные ошибки и недочеты в SIP-сервере. При forking-вызове не всегда отправлялся CANCEL. При одновременном поступлении SIP-ответов 180 и 183 не всегда была успешной последующая коммутация. Отключение таймеров при определенных условиях. <br />
* Исправлена ошибка в определении пути для сохранения резервных копий БД, если в конфигурационном файле установлено нестандартное значение базового каталога для резервных копий. Симптом: файл всегда перезаписывался и хранился в единственном экземпляре.<br />
* Исправлена ошибка сервера, приводившая к остановке периодических процессов, в том числе автоматического управления графиком перерывов операторов.<br />
* Исправлена ошибка, связанная с неотображением в статистике причины перерыва, выставленной оператором, после осуществления оператором звонка вручную.<br />
* Некоторые незначительные исправления в АТС. Сброс состояний, приводивших в некоторых случаях к отсутствию сигнала КПВ при исходящих звонках.<br />
* В модуле автодозвона реализован обратный вызов оператора с использованием интеркома.<br />
* Исправлена ошибка в автоматическом удалении записей разговоров по истечении времени хранения, приводившая к пропуску некоторых файлов.<br />
* Исправлено значение свойства ''TimeStop'' в [[Сценарии_АТС#SvcContent|контенте линии]], ранее всегда имел нулевое значение.<br />
* Введен отладочный конфигурационный параметр ''[[Параметры_файлов_конфигурации#DEBUG_LogActiveThreadStackTrace|DEBUG_LogActiveThreadStackTrace]]'' для периодического вывода в лог Debug информации о стеке всех активных потоков.<br />
<br />
<br />
<br />
<br />
====версия 2.9 (02.10.2013)====<br />
<br />
<br />
* Обнаружена и исправлена ошибка SIP-сервера, в ходе которой полученные повторные ответы 200 OK на сообщения REGISTER приводили к блокировке аккаунта вплоть до перезагрузки<br />
* Исправлен выбор расширения для файла в компоненте IVR сценариев ''[[Компоненты сценариев IVR#Record|Запись]]'' в соответствии с выбранным кодеком.<br />
* Исправлена ошибка элемента управления ''таблица'' клиентского приложения, приводившая в ходе удаления нескольких выделенных строк к некорректному определению индексов.<br />
* Реализовано определение номеров и доступ к функциям ''CallerId'' и ''CalledId'' из сценария для шлюзов с внутренними линиями.<br />
* Восстановлен разбор мультипартовых SIP-INVITE сообщений.<br />
* Обнаружена и исправлена проблема периодического отсутствия отчета об успешной работе факса, несмотря на удачное завершение приема/передачи.<br />
* Реализовано сохранение кода отказа SIP в статистике исходящих попыток звонков в колл-центре, а также их передача в сценарий обработки результата попытки звонка по задаче.<br />
* Реализовано перенаправление звонков на указанный адрес при получении SIP-ответа ''3xx Moved''. Для звонков по шлюзам без регистрации и шлюзам межсерверного взаимодействия, а также для звонков на внутренние номера, не использующие SIP-forking.<br />
* Обеспечена возможность генерации сигналов КПВ в SIP-линии, по которым был отправлен предварительный ответ ''183 Session Progress''.<br />
* Обнаружена и исправлена проблема неверного отображения свойств компонента ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' в режиме ''установить для линии''.<br />
* Реализована предварительная проверка параметров лицензии при добавлении [[Динамическое_управление_картой_сети|динамических транков]].<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлена возможность определения параметров лицензии, количества используемых линий, пользователей, а также команда принудительного обновления сертификата.<br />
* Исправлена привязка звонка к задаче с помощью компонента ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' через пользователя. <br />
* Исправлена ошибка SIP-сервера при работе за NAT. Симптом: в поле Contact подставлялся локальный адрес.<br />
* Реализовано обновление состояния входящих регистрационных сессий по динамическим потокам при перезагрузке сервера, если динамические потоки загружаются на старте).<br />
* Исправлена функция ''CallerId'' в сценариях IVR для внутренних линий SIP шлюзов. Симптом: возвращает пустоту.<br />
* Исправлена работа компонента сценариев ''[[Общие компоненты сценариев#WebRequest|WEB-запрос]]''. Симптом: после перехода на .NET v4.0 многократная работа компонента в различных сценариях после нескольких сот тысяч запросов прекращает отправку.<br />
* Реализован дополнительный вариант фильтрации по правам компонентов ''[[Компоненты сценариев IVR#SwitchExt|Переключение на внешние линии]]'' и ''[[Компоненты служебных сценариев#Call|Дозвон]]'' - по приоритетам линий.<br />
* Размещение информации по вручную прикрепленному к задаче звонку в пространственной таблице колл-центра ''EffortConnections''.<br />
* Исправлено отображение задач в модуле ''[[Ресурсы]]''. Симптом: при некоторых обстоятельствах выводятся не все задачи.<br />
* Исправлена ошибка SIP-forking: множественный звонок при исходящем же отбое не инициировал завершение одной из сессий.<br />
* Обнаружена и исправлена некорректная обработка одновременных встречных Cancel <-> Ok, приводившая к подвисанию звонка вплоть до разрыва вручную.<br />
* Исправлена генерация номеров динамических линий. Некорректное дублирование приводит к проблемам в коммутировании линий.<br />
* Исправлена загрузка сильно вложенного и взаимозамкнутого [[Внутренние номера#Rules|номерного плана]].<br />
* Исправлена ошибка WebRTC, возникающая при закрытии вкладки браузера с активной сессией разговора.<br />
* В интерфейс [[Oktell Web-Socket Protocol|WebSocket]] добавлены методы ''сс_addoperatortotask'', ''cc_removeoperatorfromtask'', ''cc_settaskactive''.<br />
* Реализован обмен сообщениями в веб-клиенте в виде диалогов. Интерфейс [[Oktell Web-Socket Protocol|WebSocket]] сервера пополнен рядом методов.<br />
* Добавлен режим запуска [[Служебные задачи|служебных задач]] - ''На старте сервера''.<br />
* Реализовано сохранение в БД информации о текущем состоянии регистрации всех SIP-потоков системы (таблица A_StreamRegistration).<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' внесены функции добавления/удаления оператора в задачу.<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлена возможность определения заголовков из входящего SIP INVITE или 200OK сообщения.<br />
* В выражения сценариев добавлена функция ''[[Выражения#Translit|translit]]''.<br />
* Исправлена [[Серверный HTTP интерфейс#upload|закачка файлов]] на веб-сервер Oktell при отсутствии заголовка Content-transfer-encoding.<br />
* Добавлена ролевая привилегия редактирования групп [[Мои контакты|контактов]].<br />
* Добавлена ролевая привилегия работы с [[Мои контакты|контактами]] из общих групп. Запрещает удалять и редактировать общие контакты, назначать личным контактам общие группы, а также создавать, редактировать и удалять общие группы.<br />
* Восстановлена работа функции ''Время отсутствия звука в линии'', возвращаемая компонентом ''[[Общие компоненты сценариев#UserState|Статус объекта]]''.<br />
* Оптимизирована с точки зрения объема используемой памяти обработка входящих SIP-сообщений.<br />
* Оптимизировано обновление [[Динамическое_управление_картой_сети|динамической карты сети]] в случае, когда изменений фактически не производится.<br />
* Обнаружена и исправлена ошибка сохранения имен контактов и пользователей с символом перевода строки, который отрицательно влияет на формирование SIP-сообщений.<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлена возможность определения локальных адресов сервера.<br />
* Исправлена работа компонента ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' в части установки свойств конференциям.<br />
* Исправлена функция ''UrlDecode'' в разделе [[Выражения|выражений сценариев]].<br />
* Обнаружена и обработана проблема фильтрации отправляемого SIP сообщения CANCEL при моментальной отмене до получения предварительного ответа.<br />
* В модулях клиентского приложения заменен браузер. Встроено ядро браузера CHROME.<br />
* В режиме дизайнера веб-форм добавлена возможность выбирать в качестве источника файлы MHT.<br />
* В компонент сценариев «Файловая операция» добавлена функции взятия хеша MD5 от содержимого.<br />
<br />
<br />
<br />
<br />
====версия 2.8 (26.07.2013)====<br />
<br />
<br />
* Реализована возможность [[Параметры_АТС#StrongPassword|запрета использования простых паролей]].<br />
* Реализована возможность [[Параметры_АТС#PaidNumbers|автоматического запрета всех исходящих звонков на несанкционированные номера]].<br />
* Реализована возможность использования динамических рабочих мест [[Параметры файлов конфигурации#EnableAutoMapSip|с автоматической привязкой к существующим в карте сети SIP-телефонам]].<br />
* Реализован альтернативный способ управления гарнитурой с клавиатуры, поддерживающий работу в x64 системах.<br />
* Обнаружена и устранена причина периодических зависаний клиентского приложения в совершенно различных модулях.<br />
* Реализовано рабочее место оператора в web-клиенте, поддерживающее отображение [[Компоненты сценариев диалога#Диалоговая форма|диалоговых форм стандартного типа]].<br />
* Добавлен ряд новых функций в компонент сценариев [[Общие_компоненты_сценариев#Статус объекта|«Статус объекта»]]: определить для линии время отсутствия входящего звука, определить вхождение линии в направление, определить идентификатор и номер скоммутированной линии/конференции, определить наличие привилегии у пользователя, принудительно перерегистрировать сип-аккаунт или все сип-аккаунты, определить внешний IP-адрес сервера через STUN-запрос, сохранить скриншот пользователя.<br />
* Реализована возможность использовать одновременно связь с CRM и web-клиентов на основе OktellJS.<br />
* Реализована возможность использовать защищенные каналы связи (TLS) для работы c web-сервером Oktell. Касается взаимодействия по [[Серверный_HTTP_интерфейс|HTTP-API]], а также для работы [[Oktell_Web-Socket_Protocol|web-socket]] каналов.<br />
* Реализована возможность подключаться к CRM по http/https в альтернативу [[Oktell_Web-Socket_Protocol#Arch1|websocket-соединениям]].<br />
* Обнаружена и исправлена проблема версии Oktell 2.8 по использованию плагинов внутри собственного процесса.<br />
* Добавлены ролевые привилегии: возможность исполнять методы Web-API, доступ к скачиванию записей разговоров.<br />
* Изменена настройка [[Настройки_веб-сервера|HTTP-веб-сервера]], WebSocket-сервера, [[Интеграция_с_Web-Socket_CRM|подключения к WebCRM]] и Web-клиента, настройка сертификатов X509 для работы TLS.<br />
* Исправлена проблема проверки и отключения лицензий в случае одновременного использования динамических рабочих мест и плат телефонии, а также превышения общего количества линий.<br />
* Исправлены некоторые обнаруженные ошибки отображения в клиентском приложении.<br />
* Исправлена проблема менеджера задач по работе с индивидуальными операторскими задачами в режиме запроса на звонок. Симптом: если оператор оставляет окно запроса на звонок на срок более получаса, абонент подвисает и задача не может быть завершена до перезагрузки сервера.<br />
* Исправлена выдача страниц [[Серверный_HTTP_интерфейс|HTTP-веб-сервером]]. Симптом: неверный content-type, вследствие чего ответы скачивались, а не отображались браузерами.<br />
* Добавлена автоматическая выдача веб-сервером файлов index.html из подпапок.<br />
* Добавлена возможность управления поведением компонента [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние]] в режиме ''прослушивания медиа-потока'' через [[Параметры_файлов_конфигурации#PBX_Use180SdpAs183|конфигурационный файл]]. Решается задача переключения между генерацией КПВ (длинных гудков) и медиа-соединением при получении последовательности различных ответов 180, 183.<br />
* В сценариях реализован новый [[Переменные#Types|тип переменных]] с глобальной серверной областью видимости без привязки к сессиям. Существующие глобальные переменные преобразованы в сессионные.<br />
* Реализована функция [[Управление базами данных#ComputeVoices|расчета времени владения разговором в коммутациях]].<br />
* Добавлена функция NowTick в [[Выражения|выражения сценариев]].<br />
* При удалении нелицензированных внутренних линий внедрена функция выбора преимущественно каналов, не находящихся в коммутации.<br />
* При отправке факс-сообщения установлено принятие за успешный результат отправки хотя бы одной страницы.<br />
* Реализована возможность [[Динамическое управление картой сети|динамического управления]] объектами в карте сети с помощью сценариев (json-структура в компоненте [[Общие компоненты сценариев#UserState|«Статус объекта»]]).<br />
* При обновлении клиентского приложения с сервера реализовано отображение процента завершения скачивания архива.<br />
* Добавлен разбор [http://ru.wikipedia.org/wiki/JSON JSON]-форматированных строк в сценариях с помощью компонента [[Общие компоненты сценариев#Parser|«Парсер»]].<br />
* Реализована [[Свойства компонентов#SipPhone|поддержка WebRTC]] в HAL.SIP.<br />
* Реализована функция [[Свойства компонентов#SipPhone|SIP.forking]] - множественная регистрация устройств под одной учетной записью.<br />
* В веб-операторе реализована поддержка WebRTC и регистрация телефона на сервере Oktell (нового или вторым подключением к существующему).<br />
* Добавлен ряд возможных событий-команд для работы плагинов: ''declinecall'', ''connectabonents'', ''makeflash''<span style="color:gray;">(mode=''abort''|''next''|''switch'')</span>.<br />
* Модернизировано сохранение пользовательских сообщений через очередь доступа к БД.<br />
* В компоненте сценариев [[Общие компоненты сценариев#UserState|«Статус объекта»]] реализованы дополнительные функции для взаимодействия с конференциями.<br />
* В компоненте сценариев [[Общие компоненты сценариев#UserState|«Статус объекта»]] реализованы дополнительные функции для взаимодействия с направлениями.<br />
* В АТС внедрена функция отказа от вызова без фиксации пропущенного вызова на телефоне, если отказ производится по причине снятия трубки другим абонентом вызываемого группового номера.<br />
* Реализована функция сквозной коммутации в состоянии early-media (SIP-сообщение ''183 Session Progress'') с обеих сторон.<br />
* Реализована функция подключения текущего звонка к задаче через клиентский модуль [[Мое рабочее место|«Мое рабочее место»]], через компонент [[Общие компоненты сценариев#UserState|«Статус объекта»]], а также через компонент сценариев [[Компоненты служебных сценариев#Connector|«Коммутатор»]] и командой [[Oktell_Web-Socket_Protocol#attachcalltotask|cc_attachcalltotask]] в интерфейсе websocket.<br />
* Добавлены задачи нового типа [[Голосовые задачи#ManualCall|«Дозвон вручную»]] для организации кампаний с полностью ручным определением абонентов и их вызовом.<br />
* Реализована поддержка gzip в [[Серверный_HTTP_интерфейс|веб-сервере]] при отправке скриптов и документов.<br />
* Реализована функция динамической регистрации учетной записи SIP-телефона и привязки ее к рабочему месту в браузере с использованием webrtc.<br />
* Оптимизировано сохранение [[Карта сети|карты сети]] путем частичного изменения.<br />
* Оптимизировано сохранение [[Настройки оборудования|настроек аппаратуры]].<br />
* В контекстное меню модуля [[Ресурсы|«Ресурсы»]] добавлены команды ''Позвонить'', ''Подключиться к разговору'', ''Отправить сообщение операторам задачи''.<br />
* В модуле «Ресурсы» по умолчанию удалены из отображения линии. Включить можно в разделе «Администрирование. Клиентское приложение».<br />
* В интерфейс websocket добавлена команда [[[[Oktell_Web-Socket_Protocol#pbxmakeflash|''pbxmakeflash'']]. В функцию [[Oktell_Web-Socket_Protocol#login|''login'']] добавлено свойство ''usewebrtc'', в ответе приводятся параметры для подключения SIP-софтфона или WebRTC-софтфона.<br />
* Изменено хранение пользовательских сообщений в БД, произведена нормализация с учетом массовых сообщений. <br />
* Реализована функция прослушивания канала, являющегося участником конференции. Теперь в момент прослушивания доступен звук со всех участников конференции.<br />
* В компонент сценариев IVR [[Компоненты сценариев IVR#PlayFile|«Воспроизведение»]] добавлен режим генерации DTMF.<br />
* Обновлены стандартные [[Статистика|отчеты коллцентра]].<br />
* Реализована нормальная обработка комбинации HOLD + Soft Flash в АТС.<br />
* Изменен порядок привязки SIP-сообщений к сессиям. Теперь одинаковые callid не являются проблемой, если используются в рамках разных учетных записей.<br />
* Реализовано сохранение в статистике и проброс в [[Голосовые задачи#EffortResultScript|сценарий обработки результата попытки]] в качестве 5-го неявного параметра кода ответа-отказа SIP при исходящих звонках.<br />
* В сценарии IVR добавлена возможность определять файл записи/воспроизведения с помощью выражения.<br />
* Добавлен новый тип отображения отчетов - [[Статистика#VertHysto|вертикальная гистограмма]].<br />
* Изменено отображение отчетов типа [[Статистика#Plane|«Плоскость»]]. Теперь в качестве значений допускаются ''NULL''.<br />
* Добавлено сохранение идентификаторов сессии и коммутации в [[Управление базами данных#DTMFflow|таблицу DTMF сигналов]].<br />
* Реализована возможность [[[[Конференц-связь#Управление конференцией с помощью DTMF|управления конференцией с телефона через DTMF]]. Преобразование коммутации в конференцию, приглашение участников, отключение участников, завершение конференции.<br />
* Реализовано хранение данных в БД о регистрациях клиентских SIP устройств, и применение их при перезапуске HAL и сервера.<br />
* Исправлено прослушивание записей конференций. Происходила ошибка при нахождении клиента и сервера в разных часовых поясах.<br />
* Исправлены некоторые проблемы в HAL.VoIP сервере, связанные с отключением устройств из-за потери связи.<br />
* Исправлена ошибка, связанная с невозможностью изменить базовый порт SIP (5060).<br />
* Исправлена ошибка предварительного преобразования многостраничных .tiff изображений в клиентском приложении при отправке факсов. При использовании клиентского модуля преобразований оставалась только первая страница.<br />
* Добавлено описание прослушиваемой конференции во встроенный плеер.<br />
* Исправлена проблема изредка наблюдаемого явления отсутствия звука в SIP-телефонах после изменения параметров сессии.<br />
* Обнаружены и устранены некоторые оставшиеся проблемы при работе шлюза без регистрации из-за NAT.<br />
* Обнаружена и исправлена ошибка в сохранении приоритета [[Запись разговоров|общих правил записи коммутаций]].<br />
* Обнаружена и устранена проблема загрузки ресурсов плагина в версии 2.8, работающей в среде .NET Framework v4.0. <br />
* Обнаружена и устранена проблема в триггере БД при сохранении пользовательских сообщений, приводящая при больших нагрузках к блокировкам и откату транзакций сохранения.<br />
* Обнаружена и устранена проблема общего торможения АТС при массовых задержках ответов на отправляемые сервером SIP-сообщения CANCEL.<br />
* При использования сценария набора номеров для приглашения новых участников конференции организована передача данных о пользователе-инициаторе вызова.<br />
* Обнаружена и исправлена ошибка АТС, приводящая при определенных условиях использования режима HOLD к подвисанию канала вплоть до ручного сброса в мониторинге.<br />
* Исправлена ошибка раздела [[Настройки оборудования|«Параметры аппаратуры»]] клиентского приложения, связанная с невозможностью сохранить измененные значения после повторного переключения в модуль.<br />
* Понижены минимальные возможные границы для некоторых настроек (мин время в очереди, макс время переключения на оператора, время Hunt-вызова)<br />
* Исправлена работа функции управления гарнитурой с клавиатуры в COM-ядре клиентского приложения.<br />
* Обнаружена и исправлена ошибка [[Серверный_HTTP_интерфейс|веб-сервера]], связанная с использованием одного порта в нескольких настройках. При переключениях порт может быть фантомно занят вплоть до перезагрузки службы.<br />
* Исправлена функция мягкого разрыва. Не производился разрыв существующей коммутации, что в случае использования [[Сценарии АТС#ScrInsteadBusy|«сценария вместо отбоя»]] могло приводить к неожиданным эффектам.<br />
* Исправлена ошибка обратного отзвона из удержания. При определенных обстоятельствах первым на дозвон мог разместиться абонент из общей очереди, и лишь затем удерживаемый ранее абонент.<br />
* Исправлена ошибка набора номеров при вызове шлюзов с регистрацией на сервере через аккаунт. Символы w, z, q воспринимались как служебные.<br />
* Понижен приоритет отложенных операций микширования, упаковки и расчета владения разговором.<br />
* Исправлена ошибка в автодозвоне при звонках на быстрые номера. При неудачном вызове и отказе от звонка возможно зависание линии до сброса вручную в мониторинге.<br />
* Исправлен ряд ошибок, добавлены новые функции в рабочее место оператора в вебе.<br />
* Реализовано нелимитированное сохранение резервных копий БД и сценариев с фильтрацией по временным интервалам.<br />
* Изменено поведение входящей задачи при неснятой оператором трубке и запрещенной к использованию очереди. Ранее вызов отправлялся всем операторам сразу. Теперь звонок возвращается в IVR.<br />
* Изменено значение [[Параметры файлов конфигурации#EnableAutoMap|конфигурационного ключа ''EnableAutoMap'']]. По умолчанию теперь включено для поддержки работы веб-софтфона из рабочего места оператора.<br />
* Исправлена ошибка перевода в перерыв в колл-центре, влекущая разрыв текущей коммутации.<br />
* Исправлена ошибка АТС, оставляющая пустыми значения callerid и calledid при звонках со шлюзов с внутренними линиями.<br />
* В конфигурационный файл клиентского приложения внесен параметр (''ShowLoadingBar = 0''), позволяющий отключить окно ожидания загрузки.<br />
* Исправлена ошибка в модуле [[Переадресация|«Переадресация»]]. Не происходило перетаскивание правил.<br />
* В модуле [[Кабинет#Заказы на встречные звонки|«Кабинет. Встречные звонки»]] восстановлено контекстное меню.<br />
* Выявлена проблема подключения плагинов из сторонних каталогов в версии 2.8. В конфигурационных файлах клиентского приложения и oktell.PluginStarter требуется указание <span style="color:green;">''<runtime><loadFromRemoteSources enabled="true"/></runtime>''</span>.<br />
* Исправлена функция переключения на сценарий IVR путем подмены. Состояние не выставлялось требуемое.<br />
* Исправлена проблема некорректного пересчета SeqNum в исходящем RTP потоке при смене SSRC. В некоторых случаях после смены звук пропадает.<br />
* Исправлена проблема загрузки гарнитуры с неопределенными устройствами ввода-вывода.<br />
* Исправлена ошибка SIP, заключавшаяся в неотправке дублирующих пакетов ACK на повторные сообщения 200OK.<br />
* Исправлен алгоритм менеджера задач в части работы с абонентским списком через кэш в памяти и с номерами для перезвона.<br />
* Снято ограничение [[Карта сети|карты сети]], блокирующее сохранение шлюзов с одинаковым адресом прокси-сервера.<br />
* Обнаружена и решена проблема утечки памяти при [[Управление записями разговоров|микшировании в формат MP3]].<br />
* Обнаружена и устранена причина ухудшения работы факсов в версии 2.8.<br />
<br />
<br />
<br />
====версия 2.8 (30.01.2013)====<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Версия 2.8.130130 работает в среде .NET Framework v4.0. Перед обновлением с версии 2.7 и более ранних версий настоятельно рекомендуется ознакомиться [[Версия 2.8 на базе .NET Framework v4.0|со статьей]].<br />
<br />
* Произведена миграция в среду .NET Framework v4.0.<br />
* Реализована возможность сохранения [[Управление_базами_данных#FailedCalls|неудачных исходящих звонков]]. Отображение происходит в разделе «Статистика АТС» при указании в фильтре нулевой длительности.<br />
* Исправлена работа сервера за NAT с телефонами за NAT.<br />
* Реализована возможность активировать автоматическую блокировку звонков на платные номера. Список платных номеров хранится в БД. Активация режима в разделе "Сервер АТС" модуля "Общие настройки".<br />
* Добавлена функция «Код направления» в служебные и диалоговые сценарии. Применима только в режимах, связанных с АТС.<br />
* Исправлена ошибка отображения количества отключенных внутренних линий.<br />
* Изменена функция ограничения задачи по количеству внешних линий. Учитывает резервированное состояние линии.<br />
* Исправлена ошибка в диаграмме количества звонков по номерам в модуле «Статистика АТС».<br />
* Восстановлен нечувствительный к регистру поиск в выпадающем списке при наборе текста.<br />
* Реализован веб-сервер, выдающий страницы из папки WWW, слушающий стандартный 80 порт. Сильно ограничен по функционалу. Может быть отключен в конфигурационном файле сервера ключом ''UseWebServer80''.<br />
* Исправлена проблема некорректного звука гудков на платах Ольха. Проявлялось после коммутации с SIP каналами.<br />
* Реализовано разбиение лог-файлов HAL согласно настройкам в конфигурационном файле по максимальному размеру части.<br />
* Реализована возможность частичного обновление клиентских конфигурационных файлов (всех, указанных клиентов или кроме указанных клиентов).<br />
* В компоненте сценариев «Статус объекта» реализована функция «Проверить наличие привилегии у пользователя» по коду.<br />
* Добавлена ролевая привилегия на скачивание файлов записей.<br />
* В рамках авторизации по websocket реализована возможность создавать сессии и указывать время их жизни (до 2х недель).<br />
* При отсутствии ролевой привилегии пользования пользования автодозвоном и использовании гарнитуры с отключенным автодозвоном реализован вызов в обратной последовательности. Ранее выдавало уведомление о невозможности совершения вызова.<br />
* Реализована автоматическая отправка запроса в техническую поддержку из меню в статусной строке (на основе сервисной лицензии).<br />
* Реализована возможность [[Клиентское_приложение#ActiveDirectory|авторизоваться с помощью ActiveDirectory]].<br />
* Исправлена проблема COM-API, связанная с возвратом различных идентификаторов сессии при автодозвоне до и после снятия трубки пользователем.<br />
* Исправлена проблема в АТС, связанная с переключением на сценарий IVR путем подмены. Симптом: вместо продолжения обработки сценария производится разрыв.<br />
<br />
<br />
<br />
====версия 2.7 (25.12.2012)====<br />
<br />
<br />
* Реализован переподъем слушателей сетевых интерфейсов после временной недоступности интерфейса.<br />
* В режиме обмена номерным планом между серверами поправлен случай, когда служба обмена размещена на одном из серверов.<br />
* Обнаружена и исправлена проблема отсутствия каталога для пользовательских фотографий.<br />
* Микширование и упаковка записей по умолчанию в mp3-16.<br />
* Исправлена проблема в HAL.SIP, связанная с работой за NAT при наличии нескольких интерфейсов.<br />
* Обнаружена и исправлена проблема вызова группового номера из нескольких линий, не привязанных к пользователям. Симптом: в случае использования одной из них DND, вызов обрывается всем сразу.<br />
* Исправлены некоторые интерфейсные проблемы.<br />
* Исправлена проблема некорректного обновления конфигурационного файла websock.config, влекущая невозможность работы в веб-клиенте.<br />
<br />
<br />
<br />
====версия 2.7 (12.12.2012)====<br />
<br />
''21.12.2012 состоялся вебинар посвященный обзору релиза 12.12.2012 [http://www.oktell.ru/company/press/view/224/ Посмотреть запись вебинара]''<br />
<br />
* Добавлена возможность автоматического преобразования селектора в конференцию при выходе и управляющего, и создателя. Ключ UpdateSelectorOnDirectorDisconnect серверного конфигурационного файла.<br />
* Для компонента "SQL-запрос" увеличен до 4000 максимальная длина передаваемых в БД строковых параметров.<br />
* Реализована возможность повторного размещения звонка по задаче в начале очереди в случае, если операторский телефон находился в режиме DND.<br />
* Исправлена ошибка отображения предыдущего номера при автозвонке через HTTP интерфейс сервера.<br />
* Исправлена ошибка в пуле прогрессивного набора. Симптом: при одновременном ответе нескольких линий, все кроме первой подвисают в состоянии с поднятой трубкой до ручного сброса.<br />
* В контенте звонка изменена процедура расчета стороны, инициировавшей завершение.<br />
* Исправлена проблема компонента "Дозвон" служебных сценариев. Симптом: если номер пустой, то завершается без освобождения линии, та остается в резервированном состоянии до сброса вручную.<br />
* Исправлена проблема микшера записей при настройке в стандартную папку после применения нестандартной. Возможны были перебои и микшированием, и с записью.<br />
* В клиентском приложении заменены все базовые элементы управления.<br />
* Исправлено отображение стрелок перехода, линий связи, а также перемещаемых объектов в редакторе сценариев и карты сети, наблюдавшиеся в режиме AERO Windows 7.<br />
* Исправлена работа приложения на нескольких экранах.<br />
* Реализован поиск в модуле администрирования внутренних номеров.<br />
* Добавлена возможность сохранять код отказа SIP в переменную в компоненте "Дозвон" служебного сценария.<br />
* Исправлены мелкие ошибки при сохранении параметров аппаратуры, приводящие к сбросу в дефолтные значения при перезагрузке службы, а также к выставлению неверных значений.<br />
* Реализована возможность автоматического бана SIP-пакетов по полю User-Agent. В список всегда блокируемых внесен friendly-scanner. Дополнительные задаются в конфигурационном файле сервера ключами BanUserAgent{0-99}<br />
* Оптимизирована процедура определения IP-адресов по доменным именам. Введена асинхронность и независимость. Ранее была возможна ситуация, при которой из-за недоступности одного внешних из шлюзов все входящие звонки стопорились в ожидании таймаута.<br />
* В HAL.SIP исправлены некоторые ошибки, связанные с работой сервера за NAT. <br />
* B HAL.SIP исправлена проблема при обновлении регистрации на сервере, из-за которой раньше времени истекал срок жизни сессии и шлюз переходил в несинхронизированное состояние.<br />
* Реализована поддержка работы внешних VoIP клиентов (usb-телефонов и гарнитур), если сервер работает за NAT.<br />
* Исправлена проблема режима помощи при онлайн-подслушивании в случае, когда канал-донор находится в конференции.<br />
* Исправлена ошибка, при которой после входящего INVITE с предложением T.38 на следующий INVITE сервер отвечает RequestPending.<br />
* Исправлены проблемы сохранения и работы с нестандартными портами у SIP-телефонов. <br />
* Исправлена ошибка, при которой Expires сбивается с 0 на 3600 без необходимости.<br />
* Существенно оптимизирована рассылка событий конференциями внутренним пользователям.<br />
* Исправлена проблема АТС при работе с вынесенным в отдельный процесс HAL. Симптом: при большом количестве линий и большой нагрузке возможно подвисание линий в несвободном состоянии и наблюдается это часто.<br />
* Экспорт в Excel заменен на экспорт в обменный формат CSV.<br />
* Исправлена ошибка, из-за которой при переходе пользователя из недоступного состояние в готовность не производился автоматический анализ очереди и вызов, и требовалось ручное участие.<br />
* Исправлена ошибка, при которой в записях разговоров с плат YEASTAR слышен шум и треск, хотя в разговоре не наблюдался.<br />
* Исправлена проблема отображения сокращенного рабочего места при показе модуля СОТРУДНИКИ.<br />
* Исправлено скачивание больших файлов с HTTP, отправленное из Web-Socket клиентов.<br />
* Восстановлено прохождение трафика в видео-конференциях.<br />
* Реализован автоматический перевод всех контактов в тип "неизвестные" при удалении типа контакта.<br />
* CLI. Проблема передачи даты из стоп-формы в менеджер задач при определенных языковых настройках.<br />
* Решена проблема отображения выпадающих списков за главным окном приложения.<br />
* Существенно оптимизирована работа компонента "Парсер" сценариев. Скорость ряда запросов увеличена на три порядка.<br />
* Добавлена подсказка адреса веб-клиента в строку состояния главного окна, а также регистрация доменных имен для доступа к веб-клиенту непосредственно в разделе общих настроек.<br />
* Существенно оптимизированы диалоговые формы по скорости загрузки и построения на клиенте, а также объему передаваемых данных. Для скрытых групп также введен параметр, позволяющий применить отложенный расчет и загрузку данных по требованию.<br />
* Подготовлена база для миграции на FrameWork v4.0.<br />
<br />
<br />
<br />
====версия 2.7 (28.09.2012)====<br />
<br />
* В компонент [[Общие_компоненты_сценариев#UserState|Статус объекта]] добавлены свойства задачи для чтения: ''количество линий в дозвоне'' и ''количество линий в ожидании оператора''; добавлены свойства линии для чтения: ''Контент цепочки (xml)'', ''Контент цепочки (json)'', ''Контент линии (xml)'', ''Поле контента цепочки (заголовок)'', ''Поле контента цепочки (коммутация)'', ''Поле контента линии''; добавлены свойства линии для записи ''Поле контента цепочки (заголовок)'', ''Поле контента цепочки (коммутация)'', ''Поле контента линии''.<br />
* В компонент сценариев IVR [[Компоненты_сценариев_IVR#SwitchTask|Вход в задачу]] добавлено свойство ''Идентификатор оператора в переменную''.<br />
* В компонент [[Общие_компоненты_сценариев#UserState|Статус объекта]] добавлено свойство линии для записи: ''Разрешать FLASH'', позволяющее активировать функционал переключений для внешних линий.<br />
* В компонент сценариев IVR [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние]] добавлено свойство ''Идентификатор выбранной линии в переменную''.<br />
* Добавлена возможность переключения на номер перехвата с указанием дополнительного номера с помощью компонента [[Компоненты_сценариев_IVR#Switch|Переключение]].<br />
* В компоненты [[Общие_компоненты_сценариев#ExecProcess|Запуск процесса]] и [[Компоненты_сценариев_диалога#Внешнее приложение|Внешнее приложение]] добавлена возможность вывода консольного результата в переменную.<br />
* Реализован новый компонент служебных сценариев [[Компоненты_служебных_сценариев#Коммутатор|Коммутатор]], позволяющих произвольным способом осуществлять дозвон и коммутацию двух абонентов.<br />
* В компонент [[Общие_компоненты_сценариев#webrequest|WEB-запрос]] добавлена поддержка Digest-авторизации.<br />
* В компонент [[Общие_компоненты_сценариев#webrequest|WEB-запрос]] добавлена возможность указания дополнительных заголовков и дополнительных cookies.<br />
* В компоненты сценариев IVR [[Компоненты_сценариев_IVR#Switch|Переключение]] и [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние]] добавлена возможность указания/переопределения CallerName.<br />
* В компонент [[Общие_компоненты_сценариев#EmailSend|Отправка e-mail]] добавлена возможность задания аргументом логина и пароля.<br />
* Исправлена ошибка сохранения текстовых вложений принятой электронной почты в случае использования кодировки 7-bit, а также невозможность перезаписи вложений поверх существующих файлов.<br />
* Добавлен конфигурационный параметр ''[[Параметры файлов конфигурации#UseSimpleLineState|UseSimpleLineState]]'', позволяющий корректировать способ привязки состояний номерного плана к состояниям объектов.<br />
* Добавлен конфигурационнй параметр серверного и клиентского приложения ''[[Параметры файлов конфигурации#ADLoginChecker|ADLoginChecker]]'', позволяющий совместно с дополнительным приложением активировать вход в систему от учетных записей ActiveDirectory.<br />
* Исправлено воспроизведение файлов в клиентском приложении.<br />
* Исправлена ошибка АТС, связанная с подвисанием внутренних линий в резервированном состоянии при определенном стечени обстоятельств в call-центре при использовании оператора одновременно в Call-центре и в групповых номерах.<br />
* Добавлена возможность в [[Карта сети|карте сети]] при настройке шлюза без регистрации указывать отдельно Domain и SIP Proxy.<br />
* Исправлена ошибка в статистике в случае, если звонок участвует в нескольких задачах.<br />
* Добавлено отображение IP-адресов подключенных устройств в разделе [[Мониторинг#Линии|мониторинга линий]].<br />
* Реализована возможность отправки SMS и Email сообщений из модуля [[Передача_e-mail_и_SMS-сообщений|Телефон]] во время коммутаций. Отправка производится централизованно через [[Сценарии_АТС#SvcSendEmail|специальные сценарии]], задаваемые в разделе [[Системные_настройки|общих настроек]].<br />
* Онлайн-прослушивание разговоров снабжено по умолчанию функцией скрытия слушателя (слушатели не видят друг друга), если иное не установлено конфигурационным параметром [[Параметры файлов конфигурации#HideGhostMonitor|HideGhostMonitor]].<br />
* Исправлена ошибка АТС, связанная с обработкой HOLD в режиме использования сценария исходящей маршрутизации, влекущая в некоторых случаях прогрессирующее подвисание внешних линий.<br />
* Добавлена возможность хранения записей в MP3-формате, а также выбор формата для микшера в разделе [[Управление записями разговоров]].<br />
* Добавлена возможность совершать исходящие звонки на произвольный URI, используя транки шлюзов без регистрации.<br />
* Реализована предварительная функция [[Взаимосвязанная работа серверов Oktell|взаимодействия серверов Oktell между собой]] путем использования общих транков, а также службы обмена сообщениями об абонентах звонков и номерных планах.<br />
* Реализовано отображение состояний групповых номеров в разделе [[Сотрудники]].<br />
* Оптимизирован расчет [[Ресурсы|ресурсов]] при отображении нескольким супервизорам.<br />
* Обнаружена и исправлена редко-возникающая ошибка обработчика задачи, подвешивающая оператора в занятом состоянии вплоть до перезагрузки сервера.<br />
* Обнаружена и исправлена редко-возникающая ошибка АТС, подвешивающая линии в занятом состоянии вплоть до перезагрузки сервера.<br />
* Реализована внешняя служба/приложение туннельного доступа клиентов к БД мимо службы АТС в целях уменьшения объема пика используемой виртуальной памяти процессом сервера. Подробнее в описании [[Параметры_файлов_конфигурации#DbRemote|конфигурационных настроек]].<br />
* Существенно оптимизирован способ закачивания и скачивания больших файлов через веб-сервер.<br />
* Реализовано автоматическое применение установленного времени ожидания ответа абонента в компоненте [[Компоненты_служебных_сценариев#Call|Дозвон]] при наборе внешних номеров через [[Сценарии_АТС#SvcDialExt|служебный сценарий набора номера]] из задач и стандартных номеров в соответствии с исходным значением.<br />
* Реализовано хранение изображений пользователей на диске и в разных разрешениях для нужд веб-клиента.<br />
* В конфигурационный файл сервера добавлен параметр [[Параметры_файлов_конфигурации#GCCollectorPeriodMin|GCCollectorPeriodMin]], позволяющий регулировать период принудительного запуска сборщика мусора .NET.<br />
* Найден способ наладки счетчиков производительности в случае сбоя, влекущего невозможность работы .NET с процессами.<br />
* В качестве дополнительного параметра для [[Контрольные события|контрольного события]] ''Оператор пропустил вызов'' добавлен номер звонившего абонента.<br />
* Исправлена ошибка АТС, отбивающая SIP телефон, на котором был нажат HOLD.<br />
* Добавлена возможность изменять CalledId наравне с CallerId в сценарии [[Сценарии_АТС#SvcCallerIdModify|Преобразования CallerId]].<br />
* Исправлена ошибка, в некоторых случаях мешающая прослушать файл записи конференции, связанная с неверным именованием файла или отсутствием упакованного файла.<br />
* Реализована передача на [[файловый сервер]] информации о всех каталогах с записями разговоров, делающая возможным хранение записей на разных дисках. [[Параметры_файлов_конфигурации#FileServerRecDir|Подробно о необходимой настройке]].<br />
* Добавлена функция автоматического перевода оператора в состояние перерыва со служебным кодом 1003 при блокировке системы в случае, если он свободен. Если иное не установлено параметром конфигурационного файла клиентского приложения [[Параметры_файлов_конфигурации#AutoUserStateChangeOnSystemLock|AutoUserStateChangeOnSystemLock]].<br />
* Оптимизировано взаимодействие пользователей с сервером при большом количестве подключений.<br />
* Введен ряд новых параметров в конфигурационный файл сервера, позволяющий модифицировать стандартное выделение асинхронных потоков для различных служб сервера. [[Параметры_файлов_конфигурации#ThreadManagement|Подробнее]].<br />
* Повышен приоритет использования параметра CallerName, задаваемого в компоненте сценария IVR [[Компоненты_сценариев_IVR#Switch|Переключение]]. Обратное поведение доступно конфигурационным ключом [[Параметры_файлов_конфигурации#UsePriorSwitchCallername|UsePriorSwitchCallername]].<br />
* Для IP-телефонов в карте сети добавлен параметр, позволяющий индивидуально выставлять настройки транслитерации CallerName. В общие настройки добавлен параметр, задающий поведение по умолчанию.<br />
* Оптимизирована процедура сохранения результатов звонка по задаче. Значительный эффект достигается в случае большой нагруженности сервера БД, и большого количества учетных записей пользователей в системе.<br />
* Выявлен и устранен ряд проблем, влекущих торможение сервера при больших нагрузках.<br />
* Устранена ошибка АТС, добавляющая нагрузку к серверу при звонке на групповой номер, одним из абонентов которого является SIP-телефон в режиме DND.<br />
* Исправлена ошибка менеджера задач при использовании сценария поиска абонента, влекущая после неудачной попытки звонка в некоторых обстоятельствах застревание абонента в списке вплоть до перезапуска службы сервера.<br />
* Исправлена ошибка менеджера задач, влекущая застревание абонента в обработчике задачи при одновременном использовании переключения абонента на IVR, настройке выхода из задачи при переключении на IVR, а также сценария IVR вместо отбоя.<br />
* Реализовано отображение новостей администраторам Oktell в статусной строке клиентского приложения. Может быть отключено в общих настройках для всех или индивидуально в конфигурационном файле клиентского приложения.<br />
* Обнаружена и исправлена ошибка, мешающая сохранению поля ICode в пространственной таблице oktell_cc_temp.dbo.A_Cube_CC_OperatorStates в случае, если оператор переходит в перерыв во время звонка.<br />
* Обнаружена и устранена проблема подключения VoIP каналов к системе в случае массового логина. Симптом: некоторые пользователи находятся в состоянии ''без телефона'' вплоть до повторного перезапуска клиентского приложения.<br />
* Изменено поведение [[Телефон|Телефона]] в части набора номера. Теперь набор осуществляется в поле для ввода с последующей разовой отправкой на сервер по нажатию на кнопку ''Набрать''. Подробное поведение, а также способы настройки и возврата прежнего поведения приведены в описании конфигурационного параметра [[Параметры_файлов_конфигурации#PhoneDirectDigit|PhoneDirectDigit]].<br />
* Исправлена ошибка менеджера задач, влекущая в редких случаях проставление в статистике статуса N/A в качестве результата звонка.<br />
* Добавлена функция мониторинга сервером таблицы пользовательских сообщений в БД (A_UserMessages) и рассылка сообщений пользователям при появлении новых. Подробнее в описании конфигурационного параметра [[Параметры_файлов_конфигурации#UserMessageCheckPeriodSec|UserMessageCheckPeriodSec]]<br />
* Реализована возможность автоматического отключения фильтра адресов для SIP-пакетов в соответствии со значением параметра конфигурационного файла [[Параметры_файлов_конфигурации#EnableSipTransportFilter|EnableSipTransportFilter]].<br />
* Реализована возможность подключения внешних [[Таблицы абонентов#ExtTables|таблиц абонентов]] непосредственно из других источников данных, минуя [[Подключение внешних БД|линковку]].<br />
* Изменено значение таймаута для исполнения SQL-запросов из плагинов с 30 секунд до 10 минут, а также добавлен параметр серверного конфигурационного файла DBPluginCommandTimeoutSec для управления этим значением.<br />
* Исправлена ошибка АТС, связанная с использованием стандартных номеров, включающих набор нескольких внешних номеров, влекущая при определенных обстоятельствах подвисание внешних линий в состоянии занятости до разрыва вручную.<br />
* Реализован учет выставленного, но еще не примененного состояния ''Перерыв'' при совершении звонков внутри АТС. Ранее учитывалось только при звонках из задач.<br />
* Исправлена ошибка автодозвона, подставляющая при звонке на внутренний номер в качестве CallerId всегда номера 101.<br />
* Модифицирована процедура периодического подтверждения активаций. Ранее была возможна ситуация, когда добавление нового дополнительного винчестера влекло изменение активационного кода привязки и требовалась переактивация вручную, связанная с выяснением пароля. При этом при прохождении подтверждения вручную в качестве кода активации используется прежний, а при прохождении переактивации вручную, код изменяется на текущий актуальный.<br />
* Управление настройками веб-сервера перенесено в раздел [[Настройки_веб-сервера|общих настроек]], включая порт, пароли доступа, а также способ авторизации. По умолчанию служба отключена.<br />
* Расширена функция ''[[Серверный HTTP интерфейс#upload|upload]]'' веб-сервера, позволяющая теперь указывать место размещения файла и способ обработки.<br />
* [[Серверный HTTP интерфейс]] пополнен функциями ''[[Серверный HTTP интерфейс#getavatar|getavatar]]'', ''[[Серверный HTTP интерфейс#getversion|getversion]]'', ''[[Серверный HTTP интерфейс#getsharedfile|getsharedfile]]'', ''[[Серверный HTTP интерфейс#download|download/files]]'', ''[[Серверный HTTP интерфейс#gettotalqueueinfo|gettotalqueueinfo]]''.<br />
* [[Клиентский HTTP интерфейс]] пополнен функцией ''[[Клиентский HTTP интерфейс#pbxstatplaybyidconn|pbxstatplaybyidconn]]''.<br />
* Расширен интерфейс [[Oktell_Web-Socket_Protocol|Web-Socket протокола]].<br />
* Реализован веб-плагин [http://js.oktell.ru oktell.js].<br />
* Реализована поддержка работы сервера за NAT с прямым пробросом портов по SIP-протоколу. Подробнее в разделе [[Настройки SIP-модуля]].<br />
* Выявлен и исправлен ряд проблем в аппаратной подсистеме обслуживания VoIP каналов, связанных с нестабильностью массового подключения и подвисания в занятом состоянии.<br />
* Существенно оптимизирован алгоритм микшера конференции.<br />
* Устранена незначительная утечка памяти в Subscribe-Notify модуле.<br />
* Выявлены и исправлены ошибки разного характера в SIP подсистеме, добавлены некоторые дополнительные параметры настройки. Подробнее в разделе [[Настройки SIP-модуля]].<br />
<br />
<br />
<br />
====версия 2.7 (28.03.2012)====<br />
<br />
* Добавлены функции управления конференциями в ядро клиентского приложения.<br />
* Произведена существенная оптимизация процесса перезагрузки сервера состояний. Обнаружены и устранены лишние устаревшие операции в БД.<br />
* Исправлена ошибка удаления пользователей после перезапуска сервера состояний при работе через веб-сокет.<br />
* Реализовано адекватное отсоединение веб-сокет пользователей по инициативе сервера.<br />
* Оптимизирована работа функции ping с клиентских приложений на сервер, имеющая целью стабилизировать поведение системы при нехватке ресурсов.<br />
* Оптимизировано сетевое взаимодействие между узлами системы в целях экономии асинхронных обработчиков.<br />
* Реализована запись лог-журналов на диск/в сеть через асинхронную очередь, не влияющую на приостановку работы системы из-за занятости дискового ресурса.<br />
* Исправлена ошибка в синхронизации абонентского списка с кэшем в памяти, возникшая после перевода процедуры сохранения результата звонка по задаче в асинхронный режим. Связана со звонком одному и тому же абоненту несколько раз при получении успешного результата.<br />
* Добавлена авторегулировка нагрузки менеджера задач по исходящим кампаниям в зависимости от загрузки системы и БД.<br />
* Оптимизирована функция сервера состояний поиска свободных внешних линий для менеджера задач.<br />
* Обнаружена и исправлена ошибка совместного доступа к конференции, влекущая невозможность завершить конференцию.<br />
* Рассылка событий из конференций выведена в асинхронную очередь рассылки в целях ускорения работы конференций с большим количеством участников.<br />
* В интерфейс веб-сокета добавлены методы getmyuserinfo, setusertextmessageviewed, событие usertextmessageviewed. Изменен метод sendusertextmessage.<br />
* В реализации веб-сокета обнаружена и исправлена ошибка с отправкой multiframe-сообщений.<br />
* При отмене вызова на гарнитуру клиентского приложения не сбрасывался таймер автоматического снятия трубки. Исправлено.<br />
* Исправлена ошибка входа в конференцию через сценарий. В случае, если разрыв линии происходит до окончания входа, конференция блокируется на 5 секунд. Массовый доступ в такую конференцию вызывает цепную реакцию и как следствие длительную блокировку всего сервера.<br />
* В компонент «Числовое воспроизведение» добавлено воспроизведение евроцентов.<br />
* Обнаружена и устранена фиксация пропущенных звонков при звонке через автодозвон.<br />
* Пароль пользователя с символами [, ], # заменялся пустым. Исправлено.<br />
* Изменен режим доступа к веб-камере. Добавлена возможность настройки разрешения и битрейта при работе с камерой.<br />
* В компонент «Статус объекта» добавлены функции, возвращающие количество занятых задачей линий, линий участвующих в разговоре по задаче. <br />
* В компонент «Статус объекта» добавлены функции очистки оперативной статистики задач, принудительной синхронизации таблицы абонентов. <br />
* Восстановлена сортировка в выпадающих списках клиентского приложения.<br />
* В компонент «Воспроизведение числа» добавлена возможность выбора языкового алгоритма (русский, английский, украинский, чешский).<br />
* Компонент «Воспроизведение числа» получил возможность воспроизведения англоязычных порядковых числительных.<br />
* Добавлена возможность указания дополнительных номеров, привязанных к sip-потокам (учетным записям), на которые осуществляется адресация INVITE пакетов от SIP-провайдера.<br />
<br />
<br />
<br />
====версия 2.7 (15.02.2012)====<br />
<br />
* Устранена утечка памяти в сессиях при отбое входящих звонков.<br />
* Исправлена невозможность отжатия кнопки «Хочу сказать» в селекторном совещании.<br />
* Добавлена возможность настраивать прерывание воспроизведения компонентом «Числовое воспроизведение».<br />
* Обнаружена и устранена невозможность сохранить дату окончания работы текстовой задачи.<br />
* Обнаружена и устранена ошибка, влекущая неполноценную очистку после работы компонента «Действие web-crm».<br />
* Реализован режим вызова «Интерком» на внешние и внутренние sip-каналы. Добавлены соответствующие настройки в компоненты «Переключение», «Переключение на внешние», «Дозвон».<br />
* Оптимизирована рассылка событий о смене состояний внутренних номеров по клиентским приложениям, а также менеджера задач в целях экономии асинхронных обработчиков.<br />
* Добавлена реализация протокола веб-сокет версии 13 согласно RFC6455.<br />
<br />
<br />
====версия 2.6 (31.12.2011)====<br />
<br />
* Реализовано сохранение сессии между сценариями набора номера и обработки результата звонка по задаче в случае, если звонок неудачен был.<br />
* В HAL.SIP отправлялось пустое значение поля realm в ответе 401.<br />
* Добавлены алиасы для шлюзов при настройке в карте сети для обработки случая входящих звонков с альтернативных серверов при регистрации на основном.<br />
* При поиске номера в АТС лексикографическая сортировка заменена на числовую.<br />
* Устранен разрыв соединения при вызове метода веб-сервера «setbusyinexternaltask» со значением «0».<br />
* При перезагрузке аппаратного модуля на сервере состояний не обновлялись коды для привязки вновь регистрирующихся VOIP устройств. Исправлено.<br />
* Из ответа веб-сервера удалены концевые символы \r\n, подмешивающиеся и мешающие организовывать второй запрос в рамках подключения.<br />
* Скорректирована работа таймеров в HAL.<br />
* Исправлена ошибка отображения в клиентском модуле «Администрирование.Права».<br />
* В веб-сервер добавлен метод upload для закачки файлов.<br />
* Исправлена ошибка менеджера БД при организации запросов к полям таблицы абонентов, если таблица со связями (constraint). Симптом: возвращается пустое значение.<br />
* Исправлена ошибка в HAL.SIP при завершении SUBSCRIBE-сессии. Ведет к исключению по неверному доступу к памяти и невозможности продолжения работы аппаратного модуля.<br />
* Исправлена ошибка в компоненте «Запуск процесса» в режиме ожидания выхода. Симптом: если процесс выполняется достаточно долго, компонент вешает сценарий до ручного разрыва.<br />
* Налажено обращение к строковым полям БД при исполнении запросов из сценариев через кодировку Unicode.<br />
* Веб-сокет получил возможность работать непосредственно с браузерами. Введен режим «Браузеры к октелл» для подключения web-crm без собственного web-socket сервера.<br />
* Добавлена поддержка версии 8 в веб-сокет.<br />
* В протокол веб-сокета добавлен метод execpredefineddbstoredproc для прямого исполнения разрешенных конфигом веб-сокета процедур в БД.<br />
* Добавлена настройка в клиентский конфигурационный файл HeadsetNonACMMode для выбора режима звонка без использования автодозвона.<br />
* Исправлено воспроизведение порядковых числительных. Симптом: вместо среднего и женского родов воспроизводился мужской.<br />
* В клиентский веб-интерфейс добавлены методы flashcall, getcurrentuserlogin, getcurrentserveraddress.<br />
* Исправлена ошибка автодозвона при звонке внутри АТС на несуществующий номер. Симптом: линия подвисает в состоянии reserved.<br />
* Реализовано автоматическое создание направления «Все линии».<br />
* Существенно оптимизирована работа с БД в нагруженных проектах за счет организации очередей по направлениям: статистика коммутаций, состояния пользователей, диалоговые сценарии, результаты звонков и попыток, уведомления пользователям.<br />
* Обнаружена и устранена ошибка АТС, ведущая к некорректному завершению исходящего звонка по SIP при моментальном обрыве после начала вызова. <br />
* Оптимизирован массовый запрос на получение статистики рабочего места оператора. Устранена проблема нехватки потоков на обработку клиентских запросов из-за длительного исполнения запроса в БД.<br />
* В интерфейс веб-сокета добавлены методы getflashedabonentinfo, getversion, pbxclearflash, getextendedlineinfo. В запрос login добавлено свойство showid.<br />
* Исправлена процедура авторизации на веб-сокет сервере при использовании русских букв в логине.<br />
* Исправлена процедура хендшейка к веб-сокет серверу. Симптом: при наличии в HTTP запросе дополнительных полей и дополнительных значений в стандартных полях, хендшейк не производился.<br />
* Изменена процедура рисования динамических линий при связи объектов в сценариях и карте сети для более быстрой работы в win7-aero.<br />
* Исправлена ошибка при открытии диалоговых сценариев, сохраненных в версиях до 10.08.2010, при использовании в них переменных с односимвольными именами.<br />
* Добавлен параметр серверного конфигурационного файла TaskListAbonentUseLikeNumber, позволяющий активировать поиск абонентской строчки в таблице с фильтром "number like '%x%'". По умолчанию «0» и поиск осуществляется только по идентификатору абонента.<br />
* Обнаружена и устранена проблема в АТС, влекущая идентичность сессий у двух разных звонков, осуществивших дозвон на одну внутреннюю линию.<br />
* Реализована возможность записи лог-журналов и файлов записей коммутаций и конференций на удаленный сервер в целях снижения нагрузки на локальный диск. Требуется указание в конфигурационном файле сервера ключей FileServer_Log и/или FileServer_Record со значениями в формате "address:port", а также активность на указанном сервере специальной службы октелл-файл-сервера.<br />
* В настройку компонента служебного сценария «Дозвон» добавлена возможность указывать callerid и callername для внутренних и внешних вызовов.<br />
* Проведена корректирующая работа над доступом к критической секции сервера состояний. Симптом: замечены случаи зависания системы на несколько минут или вообще с невозможностью продолжения всяческой деятельности: звонков, авторизаций, и т.д.<br />
* Реализован режим видео-конференций.<br />
<br />
<br />
====версия 2.6 (14.09.2011)====<br />
<br />
* Исправлена проблема несохранения принятых файлов факса в случае, если произошел разрыв связи.<br />
* Скорректирована адресация в пакетах sip NOTIFY для поддержки работы телефонов LinkSys.<br />
* Исправлена ошибка обработчика входящей задачи, связанная с удалением правила распределения звонка на операторов при деактивации и перезагрузке сервера состояний.<br />
* Исправлена ошибка менеджера задач в режиме персонального вывода абонента из очереди на оператора. Симптом: несколько звонков поступали на одного оператора, и только один успешный, остальные отбивались сразу.<br />
* Исправлено отображение модуля софт-телефон в режиме входящего вызова. Симптом: если в очереди несколько абонентов, информация не изменяется при смене вызывающего.<br />
* Исправлена проблема HAL.SIP при обработке встречных BYE и reINVITE. Симптом: изредка возникает исключение, требующее перезапуска аппаратного модуля.<br />
* Исправлена проблема HAL.VOIP, связанная с отвалом устройства в состоянии HookUp и требующая перезагрузки аппаратного модуля.<br />
* Исправлена проблема с отправкой Keep-Alive пакетов с сервера.<br />
* Добавлена сортировка IP-телефонов в параметрах аппаратуры по названиям.<br />
* Исправлена ошибка начальной инициализации. Симптом: при добавлении в карту сети новых устройств с регистрацией сразу принимают готовое состояние.<br />
* Исправлена иногда возникавшая ошибка HAL.SIP при разрыве sip-соединения, требующая перезагрузки аппаратного модуля.<br />
* Устранена постоянная перезагрузка клиентского устройства после перезапуска аппаратного модуля на сервере.<br />
* Исправлена ошибка HAL.SIP, связанная с регистрацией каналов на внешнем шлюзе до инициализации сетевого канала.<br />
* Исправлена ошибка при логине пользователя, возникающая в случае регистрации с той же под другим именем, когда предыдущий отвалился, но еще не обработан сервером.<br />
* При автодозвоне через сценарий набора номера отсутствует информация о вызывающем в уведомлении. Исправлено.<br />
* В карту сети добавлен режим генерации паролей для телефонов.<br />
* В компонент «Статус объекта» добавлена функция мягкого сброса, переводящая линию в «Сценарий вместо отбоя».<br />
* Если в компоненте «Действие web-crm» не назначена ветка «Переход, ошибка», а компонент неудачен, сценарий обрывался. Исправлено.<br />
* Реализовано преобразование отправляемых с клиента по факсу данных в единый tiff-документ с использованием Office.COM. Требуется .NET framework 3.0 и установленный Microsoft Office 2003 или выше, а также установленный XPS принтер. Для работы в этом режиме необходимо в конфигурационном файле клиентского приложения изменить значение ключа «FaxPreperformProcess» на «1».<br />
* В клиентский веб-сервер добавлена поддержка метода setbusyexternaltask.<br />
* Исправлена ошибка при удалении доминирующей роли в модуле «Администрирование.Пользователи».<br />
* Обнаружена и исправлена блокировка в HAL.SIP.<br />
* Исправлена ошибка отсутствующего звука после FLASH из сценария IVR с воспроизведением в конференцию.<br />
* Отключенная линия могла использоваться при исходящих звонках в некоторых режимах. Исправлено.<br />
* Исправлена ошибка затирания кода линии в хранилище сервера состояний после сохранения карты сети.<br />
* Исправлен ряд проблем HAL.SIP при анализе некорректных сообщений: длинных или кривых значений, отсутствующих полей.<br />
* Исправлен ряд проблем HAL.SIP при нестандартном поведении ответной стороны, связанной с тестами реакции на некорректное поведение.<br />
* Реализована более полная проверка на валидность входящего sip-пакета.<br />
* Добавлен метод веб-сервера execsvcscriptplain для исполнения сценариев и возврата HTML/XML-ответа в прямом необернутом виде.<br />
* HAL.SIP обучен отвечать 481 в ответ на кривые CANCEL вместо прежнего 405.<br />
* Sip ответ 487 заменен на 480.<br />
* Снижено минимальное значение периода перерегистрации с 60 до 30 секунд.<br />
* Исправлен поиск сценария IVR при запуске проектного фонового сценария из другого сценария.<br />
* Исправлена ошибка АТС, приводящая в некоторых случаях к некорректному сбросу таймера отбоя. Симптом: канал подвисает до разрыва вручную.<br />
* Обнаружена и исправлена ошибка при одновременном запуске и остановке канала.<br />
* Добавлено ограничение на количество одновременно работающих асинхронных потоков по направлениям работы.<br />
* Оптимизирована схема отправки событий с сервера на клиентов.<br />
* В веб-сервер добавлен метод wp_setuserstate.<br />
* Устранен некорректный сброс настройки keep-alive после сохранения карты сети.<br />
* В компонент «Статус объекта» добавлены определяющие действия для элемента «Пользователь»: ид, имя, логин, линия, для элемента «Линия»: ид, номер, код, пользователь, цепочка(сессия).<br />
<br />
<br />
====версия 2.6 (25.07.2011)====<br />
<br />
* В модуле [[Мои контакты|«Офис. Контакты»]] введен запрет на создание типов контактов с одинаковыми именами.<br />
* Изменен механизм рассылки сообщений из конференции по клиентским рабочим местам. <br />
* В ролевую политику добавлен ряд новых привилегий, разграничивающих права доступа к отдельным модулям в<br />
* Исправлена ошибка при работе компонента IVR [[Компоненты сценариев IVR#Переключение на номер|Переключение]]. Симптом: при запрете использования очереди в настройке компонента после завершения периода прямого начального вызова свободных абонентов вызов прекращается, но вызывающий абонент продолжает слышать КПВ.<br />
* Введен режим запрета редактирования параметров системы в разделе администрирования. Подробнее [[Настройка клиентского приложения#BlockAdmin|в описании]].<br />
* Обнаружена и устранена возможная проблема в операции сохранения [[Карта сети|карты сети]]. Симптом: при большом количестве сохраняемых SIP-объектов возможна потеря части настроек аппаратуры при последующем перезапуске.<br />
* Реализована поддержка протокола web-socket для взаимодействия с Web-CRM системами. Подробно об интеграционной архитектуре и протоколе в разделе [[Oktell Web-Socket Protocol||«Интеграции. Web-Socket протокол»]]. Подробно о настройках в разделе [[Интеграция с Web-Socket CRM|«Общие настройки. Интеграция с Web-Socket CRM»]]. Подробно о настройке динамических вызовов в описании компонента сценариев [[Общие компоненты сценариев#Действие/карточка в plugin или WebCRM|«Действие/карточка в plugin или WebCRM»]].<br />
* Добавлен компонент [[Общие компоненты сценариев#Действие/карточка в plugin или WebCRM|«Действие/карточка в plugin или WebCRM»]].<br />
* В HAL.SIP реализована отправка 481 на запрос BYE, если нет сессии и транзакции или ранее произведена встречная отправка BYE.<br />
* В список параметров аппаратуры вынесены настройки для режима ECM софт-факса.<br />
* В список [[Выражения|функций выражений]] сценариев добавлены urlencode, urldecode, b64encode, b64decode, urlencodeUtf8, urldecodeUtf8, b64encodeUtf8, b64decodeUtf8.<br />
* Исправлена ошибка, в связи с которой не сохранялся указанный в служебной задаче стартовый параметр для сценария.<br />
* Устранены визуальные глюки в окне пользовательских сообщений встроенного чата: смещение вкладок, признак просмотренности, проблемы со сворачиванием/разворачиванием в win7.<br />
* Реализована кольцевая схема выделения медиа-портов для RTP сессий. В целях борьбы с подвисающими на некоторое время внешними устройствами-шлюзами, атакующими порты сервера Oktell с неактуальными данными.<br />
* Добавлено ограничение на возврат 1000 строк в журналы звонков, где раньше ограничение отсутствовало.<br />
* Исправлена ошибка при отправке тестового e-mail из раздела [[Настройки E-mail|общих настроек]].<br />
* Оптимизирована операция загрузки списка операторов в модуле ''[[Операторы|«Call-центр. Операторы»]]''.<br />
* Добавлена возможность заносить информацию в лог-журнал Common из компонента ''[[Общие компоненты сценариев#Уведомление|«Уведомление»]]'' сценариев.<br />
* Исправлена проблема, делающая возможным отображение одинаковых веб-форм у разных операторов, обслуживающих разные вызовы, но открывающих формы в один момент времени.<br />
* Добавлена http-функция скачивания файлов записей с веб-сервера Oktell по ссылкам в журналах разговоров, отправляемых через web-socket подключение. Подробнее в разделе [[Серверный интерфейс|методов веб-сервера]].<br />
* В интерфейс веб-сервера службы добавлен ряд http-функций управления звонком из доверенного веб-сервера от имени авторизованных пользователей по указанию ключа рабочего места, пользователя или линии. Подробнее в разделе [[Серверный интерфейс|методов веб-сервера]].<br />
* Реализована поддержка авторизации пользователей через web-socket протокол с привязкой к рабочим местам.<br />
* Реализована настройка, позволяющая активировать соединение внешней линии с IVR сценарием вместо отбоя при разрыве связи по инициативе сервера. Подробнее [[Параметры АТС#ScrInsteadBusy|в описании]].<br />
* Проведена работа над обнаруженными ошибками в реализации клиент-серверного протокола oktcp. В частности устранена причина утечки памяти.<br />
* Добавлена возможность делить карту на слои, упрощая визуальное отображение.<br />
* Добавлена настройка в параметры аппаратуры, позволяющая указывать caller-id в поле From отправляемых INVITE-пакетов.<br />
* В интерфейс веб-сервера клиентского приложения добавлен ряд http-функций управления звонком и карточкой диалогового сценария. Подробнее в разделе [[Клиентский интерфейс|методов веб-сервера]].<br />
* Запущен сервер сбора статистических данных с обновленных систем в целях выявления проблем. Режим включается/отключается в [[Информация о лицензиях#AllowSendStat|общих настройках]].<br />
* Справка перенесена в онлайн.<br />
* Обнаружена и исправлена ошибка обработки серверных сообщений, связанная с перемешиванием их последовательности.<br />
* Добавлена функция getcurrentuserid в интерфейс метода OnQuery plugin-программ. Подробнее в руководстве по интеграции.<br />
* Добавлена возможность множественного выделения узлов в дереве [[Настройки оборудования|параметров аппаратуры]] стандартным образом кнопкой SHIFT.<br />
* Добавлен параметр серверного конфигурационного файла [[Параметры файлов конфигурации#FORCE_BRACKETS_FOR_URI|FORCE_BRACKETS_FOR_URI]] для расстановки в SIP пакеты треугольных скобок в заголовки To и From.<br />
* Обнаружены и исправлены визуальные проблемы в отображении формы отправки межпользовательских сообщений, стоп-формы, софт-телефона в некоторых режимах.<br />
* В интерфейс клиентского веб-сервера добавлены команды headsetanswercall, disconnectcall, declinecall по работе с текущим звонком. Подробнее в разделе [[Клиентский интерфейс|методов веб-сервера]].<br />
* Реализована возможность использовать плагины, запущенные в [[Внешние модули#LoadMode|отдельных процессах]].<br />
* Исправлена ошибка АТС в работе Flash-перключения в редкой ситуации при специфических условиях. Симптом: заблокировалась линия, пользователь не может переподключиться.<br />
* Добавлена возможность корректировать громкость сигнала софт-факса в каналах CTI (Alder, Synway) из модуля [[Настройки оборудования|параметров аппаратуры]].<br />
* Добавлена возможность фиксировать в лог журналах значения [[Управление сервером#PerformanceCounters|счетчиков производительности]].<br />
* Компонент сценариев [[Общие компоненты сценариев#Запуск процесса|«Запуск процесса»]] получил возможность дожидаться завершения запущенного процесса (с возможностью установки таймаута и принудительного завершения).<br />
* В компоненте сценариев IVR [[Компоненты сценариев IVR#Запись звукового файла|«Запись»]] реализован выбор формата и кодека, в который производить запись.<br />
* Настроена и протестирована работа сервиса распознавания речи, записанной в сценарии.<br />
* Обнаружена и устранена причина заметного торможения при сохранении объемных карт сети.<br />
* В компонент сценариев [[Общие компоненты сценариев#Статус объекта|«Статус объекта»]] добавлены функции линии: текущая позиция в очереди, расчетное оставшееся время ожидания в секундах.<br />
* В компонент сценариев [[Общие компоненты сценариев#Статус объекта|«Статус объекта»]] добавлена функция сервера: обновить список задач.<br />
* Для более корректного определения адреса удаленного SIP-устройства в [[Настройки оборудования|параметры аппаратуры]] вынесена явная настройка для SIP-потоков, устанавливающая в качестве адреса обратный адрес отправителя или адрес контакта из SIP-пакета. Ранее определение велось автоматически, но существовал целый спектр условий, при которых возникала путаница и отправляемые пакеты не доходили до адресата.<br />
* Реализована возможность flash-перевода на сценарий IVR без перезапуска последнего, а путем подменой линии. Введена [[Сценарии IVR#VarFlash|служебная переменная]], определяющая режим, а также новый тип системного IVR сценария [[Параметры АТС#ScrFlash|маршрутизации при переводе]], единственный, где режим перевода с подменой по умолчанию установлен.<br />
* Добавлена возможность строить глубокое дерево отделов в модуле «Сотрудники». Для этого отделы необходимо именовать с разделителем (символ «.»), а также в конфигурационных файлах клиентских приложений установить значение «1» для ключа [[Параметры файлов конфигурации#SplitDepartmentsTreeByDot|«SplitDepartmentsTreeByDot»]].<br />
* Реализована возможность добавления участников в конференцию непосредственно в модуле управления в [[Конференц-связь|софт-телефоне]].<br />
* Изменен принцип поведения АТС при переключении с IP-телефонов. Коснулось отмены консультационного звонка и возврата к абоненту. Ранее кнопка «Отмена» на IP-телефоне производила соединение двух абонентов, сейчас производится отбой второго и возврат к режиму HOLD с удержанием первого.<br />
* Исправлен ряд мелких недочетов в различных модулях системы.<br />
* В течение нескольких месяцев проводилась работа над обнаруженными редко возникающими ошибками в медиа-ядре, в алгоритме работы с джиттер-буфером, в работе клиентских телефонных устройств.<br />
<br />
<br />
<br />
====версия 2.5 (03.12.2010)====<br />
<br />
* Модифицирован алгоритм разбора электронной почты, полученной по протоколу POP3. Реализована поддержка multipart/alternative, вложенных сообщений message/rfc822, в компонент сценария добавлено [[Общие компоненты сценариев#Прием входящего сообщения электронной почты|свойство]], позволяющее устанавливливать предпочитаемый тип контента (text/plain, text/html, text/xml и другие). <br />
* Реализован альтернативный стандартному режим вывода абонентов из очереди входящей задачи при освобождении операторов. В настройках задачи можно выбрать между стандартным конкурентным режимом и режимом с однократным индивидуальным распределением. Подробнее в [[Голосовые задачи#Дополнительно|описании свойства задачи]]. <br />
* В веб-интерфейс клиентского приложения добавлен метод [[Клиентский интерфейс|getcurrentcallinfo]]. <br />
* При исходящих звонках через SIP-шлюз без регистрации при формировании поля From организовано применение адреса локальной машины взамен указываемого ранее адреса шлюза. <br />
* По аналогии с очисткой статистики звонков реализовано удаление статистики и записей конференций. <br />
* Произведена несущественная модификация в организации транзакций с MS SQL SERVER, позволяющая активировать пул подключений. И при этом использовать прилинкованные базы данные, не поддерживающие усиление транзакций. <br />
* Исправлена ошибка в алгоритме перезвона строго в назначенное время. <br />
* Исправлена ошибка в обработчике каналов Yeastar E1. Симптом: у разных подряд идущих звонков одинаковые идентификаторы сессий. <br />
* Исправлена ошибка, делающая невозможным установить свойство задачи с помощью компонента сценариев [[Общие компоненты сценариев#Статус объекта|Статус объекта]] с помощью указания задачи по ключу.</div>Peter%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%B0%D1%80%D1%82%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8Динамическое управление картой сети2014-02-10T12:11:38Z<p>Peter: </p>
<hr />
<div>Компонент [[Общие компоненты сценариев#UserState|Статус объекта]] позволяет управлять составом карты сети с помощью [http://ru.wikipedia.org/wiki/JSON JSON]-форматированных команд. Это может быть полезно для решения интеграционных задач, в многосерверных решениях с внешней логикой управления, а также в проектах с постоянно изменяющимися параметрами карты сети.<br />
<br />
<br />
__TOC__<br />
<br />
=== Описание ===<br />
<br />
Определенным образом формируемые параметры позволяют:<br />
* Добавлять шлюзы (операция ''gate-add'').<br />
* Добавлять потоки (операция ''stream-add'').<br />
* Добавлять телефоны (операция ''phone-add'').<br />
* Удалять шлюзы со всеми потоками (операция ''gate-del'').<br />
* Удалять отдельные потоки (операция ''stream-add'').<br />
* Удалять отдельные телефоны (операция ''phone-add'').<br />
* Изменять параметры шлюзов (операция ''gate-set'').<br />
* Изменять параметры потоков (операция ''stream-set'').<br />
* Изменять параметры телефонов (операция ''phone-set'').<br />
* Удалять единовременно все динамические объекты (команда ''clear'').<br />
<br />
Добавленные динамические объекты не появляются среди отображаемых объектов в [[Карта сети|карте сети]], но доступны в [[Мониторинг|мониторинге линий]], [[Настройки оборудования|параметрах аппаратуры]], и прочих модулях системы, связанных с исполнением в реальном времени.<br />
<br />
Жизненный цикл динамических объектов протекает от момента создания до момента удаления или перезапуска системы. Таким образом при необходимости формирования постоянных настроек карты сети с помощью динамических объектов, необходимо реализовывать однократное исполнение служебной задачи, загружающей требуемые динамические объекты всякий раз после перезапуска системы. Гарантировать однократность можно в том числе с помощью [[Переменные|глобальных переменных]] сценариев.<br />
<br />
После исполнения любой операции, связанной с динамическими объектами, автоматически происходит перезагрузка сервера состояний. Это затратная операция. В этой связи настоятельно рекомендуется комбинировать все операции в один запрос, и не исполнять их в цикле одну за другой.<br />
<br />
При создании динамических объектов, создаются динамические линии с идентификаторами, задаваемыми в запросе. Формирование этих уникальных идентификаторов возложено на администратора, создающего сценарий, поскольку привязка к ним может потребоваться в бизнес-логике реализуемого процесса для решения внешних задач.<br />
Ожидается, что идентификаторы будут уникальны.<br />
<br />
Создание динамических потоков в шлюзах может сопровождаться автоматическим созданием направления, состоящего из всех вновь-созданных линий потока.<br />
<br />
При создании объектов и изменении их параметров могут указываться как настройки из [[Карта сети|«Карты сети»]], так и настройки из [[Настройки оборудования|«Параметров аппаратуры»]].<br />
<br />
<br />
<br />
=== Лицензирование ===<br />
<br />
<br />
При добавлении динамических объектов расходуются свободные лицензии на соответствующие линии. При удалении объектов лицензии высвобождаются. Таким образом можно использовать конкурентный механизм в отличие от [[Карта сети|статической карты сети]]. <br />
<br />
В случае, если после добавления очередного объекта итоговое количество линий превосходит количество линий в лицензии, сервер произведет стандартную процедуру отключения части линий по своему усмотрению (преимущественно выключенные, неактивные).<br />
<br />
<br />
<br />
=== Формат команд ===<br />
<br />
<br />
Команды управления динамической картой сети передаются в строковом виде в формате [http://ru.wikipedia.org/wiki/JSON JSON].<br />
<br />
Структура команд, передаваемых серверу через компонент сценария в общем виде выглядит следующим образом:<br />
<br />
<pre><br />
{<br />
"actions":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
<br />
Команда полной очистки динамических объектов <br />
<br />
<pre><br />
{<br />
"method":"clear"<br />
}<br />
</pre><br />
<br />
<br />
<br />
Каждая команда представляет собой одну или несколько операций, возможно различных. В простейшем случае в одной команде содержится одна операция.<br />
В каждой операции может присутствовать один или несколько объектов. Так, операция добавления шлюзов может содержать мета-данные нескольких шлюзов, операция добавления потоков - несколько потоков, операция добавления телефонов - несколько SIP-телефонов. То же самое с удалением и изменением параметров.<br />
<br />
<br />
<br />
=== Структура операций ===<br />
<br />
<br />
Структура одной операции добавления шлюза:<br />
<br />
<pre><br />
{<br />
"method":"gate-add",<br />
"gates":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''gates'' могут перечисляться несколько шлюзов. Каждый шлюз представляет собой совокупность настроек: обязательных и необязательных параметров. Администратор, производящий настройку, должен гарантировать уникальность идентификаторов, а также отличия в настройках шлюзов.<br />
<br />
При добавлении шлюзов можно сразу в той же операции определить потоки, соответствующие каждому шлюзу. Для этого среди свойств шлюза необходимо размещение свойства ''streams'' с информацией, эквивалентной операции создания потока. Управление отдельными потоками динамического шлюза может производиться и позже.<br />
<br />
Структура операции изменения шлюза отличается значением ключа ''method'' (''gate-set''), а также невозможностью одновременно изменять параметры потоков внутри шлюза и изменять тип регистрации (''regtype''). <br />
<br />
Операция удаления шлюза (''gate-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении шлюза удаляются все его потоки, линии и динамические направления, с ними связанные.<br />
<br />
<br />
<br />
Структура одной операции добавления потока:<br />
<br />
<pre><br />
{<br />
"method":"stream-add",<br />
"gates":[<br />
{<br />
"id":"_guid_шлюза_",<br />
"streams":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''gates'' могут перечисляться несколько шлюзов. Каждый шлюз должен содержать идентификатор и набор добавляемых потоков (''streams''), другие его свойства игнорируются. Создаваемые потоки привязываются к содержащим их шлюзам. Каждый поток в наборе представляет собой совокупность настроек: обязательных и необязательных параметров.<br />
<br />
Структура операции изменения потока отличается значением ключа ''method'' (''stream-set'').<br />
<br />
Операция удаления потока (''stream-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении потока удаляются динамическое направление и все линии, с ним связанные.<br />
<br />
<br />
<br />
<br />
Структура одной операции добавления SIP-телефона:<br />
<br />
<pre><br />
{<br />
"method":"phone-add",<br />
"phones":[<br />
{<br />
"id":"_guid_телефона_",<br />
...<br />
},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''phones'' могут перечисляться несколько телефонов. Каждый телефон представляет собой совокупность настроек: обязательных и необязательных параметров. Администратор, производящий настройку, должен гарантировать уникальность идентификаторов, а также уникальность и '''сложность''' авторизационных параметров телефонов.<br />
<br />
Структура операции изменения телефона отличается значением ключа ''method'' (''phone-set'').<br />
<br />
Операция удаления потока (''phone-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении потока удаляются динамическое направление и все линии, с ним связанные.<br />
<br />
<br />
=== Свойства объектов ===<br />
<br />
Ниже приводится список свойств различных объектов, используемый при создании. Свойства разделены на группы: обязательные свойства при создании объекта, необязательные свойства при создании объекта, у которых существуют значения по умолчанию, а также внутренние SIP-свойства объектов, доступные также в модуле [[Настройки оборудования|«Параметры аппаратуры»]].<br />
<br />
<br />
<br />
==== Шлюзы ====<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">01010101-0101-0101-0101-010101010101</span>" - Guid-идентификатор шлюза. <br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicGate</span>" - Название шлюза для отображения в модуле [[Настройки оборудования|«Параметры аппаратуры»]].<br />
* "<span style="color:red;">regtype</span>":<span style="color:gray;">2</span> - Тип регистрации (0 - без регистрации, 1 - регистрация на сервере, 2 - регистрация на шлюзе).<br />
<br />
Обязательные параметры (кроме шлюзов с регистрацией на сервере):<br />
<br />
* "<span style="color:red;">address</span>":"<span style="color:gray;">192.168.0.1</span>" - Доменное имя, подставляемое в запрос.<br />
* "<span style="color:red;">sipproxyaddress</span>":"<span style="color:gray;">192.168.0.1:5060</span>" - Адрес и порт удаленного узла, на который отправлять пакеты.<br />
<br />
<br />
Необязательные параметры:<br />
<br />
* "<span style="color:red;">expire</span>":<span style="color:gray;">3600</span> - Период регистрации в секундах для шлюзов с внешней регистрацией. По умолчанию ''3600''.<br />
* "<span style="color:red;">freegate</span>":<span style="color:gray;">false</span> - Для шлюза без регистрации признак разрешения обработки неизвестных входящих. В системе не должно быть более одного шлюза для приема неизвестных входящих. По умолчанию ''false''.<br />
* "<span style="color:red;">aliases</span>":["<span style="color:gray;">Domain1</span>", "<span style="color:gray;">Domain2</span>", "<span style="color:gray;">212.212.121.121</span>"] - Список дополнительных доменных имен, которые ассоциируются со шлюзом при поступлении входящих запросов. По умолчанию список пуст.<br />
<br />
<br />
Дополнительные параметры SIP:<br />
<br />
* "<span style="color:red;">interface-address</span>":"<span style="color:gray;">default</span>" - Сетевой интерфейс сервера (или ''default'' - автоопределение). По умолчанию ''default''.<br />
* "<span style="color:red;">search-in-from</span>":"<span style="color:gray;">0</span>" - Поиск соответствия между аккаунтом и входящим INVITE (0 - contact, 1 - contact+from). По умолчанию ''0''.<br />
* "<span style="color:red;">def-caller-id</span>":"<span style="color:gray;">1234567</span>" - Источник определения CallerId (0 - From:URI, 1 - From:DisplayName, 2 - Contact:URI, 3 - INVITE целиком). По умолчанию ''0''.<br />
* "<span style="color:red;">disabled-answer</span>":"<span style="color:gray;">503</span>" - SIP-ответ при вызове на отключенный поток.<br />
* "<span style="color:red;">declined-answer</span>":"<span style="color:gray;">486</span>" - SIP-ответ при отсутствии свободных транков.<br />
* "<span style="color:red;">error-answer</span>":"<span style="color:gray;">500</span>" - SIP-ответ при ошибке резервирования транка.<br />
* "<span style="color:red;">disconnect-answer</span>":"<span style="color:gray;">480</span>" - SIP-ответ при отказе сценария IVR.<br />
<br />
<br />
<br />
==== Потоки ====<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">12341234-1234-1234-1234-123412341234</span>" - Guid-идентификатор потока.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicStream</span>" - Название потока для отображения.<br />
* "<span style="color:red;">displayname</span>":"<span style="color:gray;">stream1</span>" - SIP DisplayName.<br />
* "<span style="color:red;">username</span>":"<span style="color:gray;">stream1</span>" - SIP UserName.<br />
* "<span style="color:red;">login</span>":"<span style="color:gray;">stream1</span>" - SIP Login.<br />
* "<span style="color:red;">password</span>":"<span style="color:gray;">u74S3iiB</span>" - SIP Password.<br />
* "<span style="color:red;">lines</span>":[{...}, ..., {...}] - список новых линий с параметрами, соответствующих потоку (рассмотрено ниже).<br />
<br />
<br />
Необязательные параметры<br />
<br />
* "<span style="color:red;">defaultcallerid</span>":"<span style="color:gray;">1234567</span>" - Подставляемый по умолчанию CallerId.<br />
* "<span style="color:red;">codecs</span>":[<span style="color:gray;">0</span>, <span style="color:gray;">1</span>] - Список используемых кодеков через запятую в порядке уменьшения приоритета (возможные значения: 0-711u, 1-711a, 2-gsm, 3-729). По умолчанию ''[0, 1]''.<br />
* "<span style="color:red;">numbers</span>":["<span style="color:gray;">account1</span>", "<span style="color:gray;">account2</span>"] - Список дополнительных номеров для ассоциации входящих звонков с потоком. По умолчанию список пуст.<br />
* "<span style="color:red;">dialmode</span>":<span style="color:gray;">0</span> - Способ набора номеров для шлюзов с регистрацией на сервере (0-сначала аккаунт потом номер, 1-сразу номер). По умолчанию ''0''.<br />
* "<span style="color:red;">route</span>":{...} - Свойства направления, которое будет создано и привязано к линиям (рассмотрено ниже).<br />
<br />
<br />
Свойства линий:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">79797979-7979-7979-7979-797979797979</span>" - Guid-идентификатор линии.<br />
* "<span style="color:red;">caption</span>":"<span style="color:gray;">LineCaption</span>" - Имя линии для отображения.<br />
* "<span style="color:red;">code</span>":"<span style="color:gray;">LineCode</span>" - Код линии.<br />
<br />
<br />
Свойства направления:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">68686868-6868-6868-6868-686868686868</span>" - Guid-идентификатор направления.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">RouteName</span>" - Название направления.<br />
* "<span style="color:red;">description</span>":"<span style="color:gray;">Route description</span>" - Описание направления.<br />
* "<span style="color:red;">code</span>":"<span style="color:gray;">routecode</span>" - Код направления (для указания в сценариях).<br />
* "<span style="color:red;">commandtype</span>":"<span style="color:gray;">0</span>" - Режим преобразования номера перед набором (0 - нет, 1 - выражение, 2 - служебный сценарий).<br />
* "<span style="color:red;">command</span>":"<span style="color:gray;"></span>" - Выражение или название служебного сценария для преобразования номера.<br />
<br />
<br />
<div id="sipstreamprops"></div><br />
Дополнительные параметры SIP:<br />
<br />
* "<span style="color:red;">enabled</span>":<span style="color:gray;">0</span> - Включен/выключен.<br />
* "<span style="color:red;">expires</span>":<span style="color:gray;">0</span> - Максимальный период регистрации в секундах для шлюзов с регистрацией на сервере, 0 - не ограничено. По умолчанию ''3600''.<br />
* "<span style="color:red;">replace-user-name</span>":<span style="color:gray;">0</span> - Место подстановки набранного номера при исходящем вызове (0 - To+RequestURI, 1 - To, 2 - RequestURI). По умолчанию ''0''. <br />
* "<span style="color:red;">dtmftype</span>":<span style="color:gray;">0</span> - Способ отправки DTMF (0 - rfc 2833, 1 - SIP INFO, 2 - InBand). По умолчанию ''0''.<br />
* "<span style="color:red;">enable-inband-dtmf</span>":<span style="color:gray;">0</span> - Включение детектора звукового DTMF во входящем rtp-потоке (0 -выключен, 1 - включен). По умолчанию ''0'', так как операция ресурсо-затратная.<br />
* "<span style="color:red;">wait-ack</span>":<span style="color:gray;">1</span> - Ожидать поступления сообщения ACK перед продолжением обработки входящего звонка (0 - нет, 1 - да). По умолчанию ''1''.<br />
* "<span style="color:red;">can-reinvite</span>":<span style="color:gray;">0</span> - Разрешить изменять параметры связи во время коммутации (0 - нет, использовать транскодинг; 1 - да). По умолчанию ''0''.<br />
* "<span style="color:red;">fax-enable</span>":<span style="color:gray;">0</span> - Разрешить прием/передачу факсов T.30 (0 - нет, 1-да). По умолчанию 0.<br />
* "<span style="color:red;">fax-outgoing-timeout</span>":<span style="color:gray;">60</span> - Время ожидания ответа факса в секундах при исходящем сеансе. По умолчанию ''60''.<br />
* "<span style="color:red;">fax-enable-ecm</span>":<span style="color:gray;">1</span> - Error Correction Mode (ECM) для факсов (0 - выключено, 1-включено). По умолчанию ''1''.<br />
* "<span style="color:red;">use-remote-address</span>":<span style="color:gray;">1</span> - Адрес назначения для RTP трафика (0 - адрес/порт из SDP, 1 - адрес/порт отправителя). По умолчанию ''1''.<br />
* "<span style="color:red;">g711-size</span>":<span style="color:gray;">0</span> - Размен звукового пакета при отправке RTP данных в кодеке 711a/711u (0 - 40мс, 1 - 20мс). По умолчанию ''1''.<br />
<br />
<br />
<br />
==== Телефоны ====<br />
<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">35353535-3535-3535-3535-353535353535</span>" - Guid-идентификатор телефона и связанной с ним линии.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicPhone</span>" - Название телефона для отображения.<br />
* "<span style="color:red;">address</span>":"<span style="color:gray;">192.168.0.231:5060</span>" - Адрес устройства для работы в режиме без регистрации.<br />
* "<span style="color:red;">username</span>":"<span style="color:gray;">user</span>" - SIP UserName.<br />
* "<span style="color:red;">login</span>":"<span style="color:gray;">phone</span>" - SIP Login (по умолчанию совпадает с SIP UserName).<br />
* "<span style="color:red;">password</span>":"<span style="color:gray;">7thNx2wf</span>" - SIP Password.<br />
<br />
<br />
Необязательные параметры: <br />
<br />
* "<span style="color:red;">codecs</span>":[<span style="color:gray;">0</span>, <span style="color:gray;">1</span>] - Список используемых кодеков через запятую в порядке уменьшения приоритета (возможные значения: 0-711u, 1-711a, 2-gsm, 3-729). По умолчанию ''[0, 1]''.<br />
* "<span style="color:red;">defaultuserid</span>":"<span style="color:gray;">84848484-8484-8484-8484-848484848484</span>" - Guid-идентификатор пользователя, привязанного к телефону как [[Свойства компонентов#SipPhone|«пользователь по умолчанию»]]. По умолчанию без привязки.<br />
* "<span style="color:red;">websocketuserid</span>":"<span style="color:gray;">84848484-8484-8484-8484-848484848484</span>" - Guid-идентификатор пользователя, привязанного к телефону как [[Свойства компонентов#SipPhone|«пользователь webcrm»]]. По умолчанию без привязки.<br />
* "<span style="color:red;">citystraight</span>":<span style="color:gray;">-1</span> - (-1 - по умолчанию БД, 0 - нет, 1 - да). По умолчанию ''-1''.<br />
* "<span style="color:red;">busymode</span>":<span style="color:gray;">-1</span> - Режим отбоя (-1 - по умолчанию БД, 0 - SIP-disconnect, 1 - генерировать короткие гудки). По умолчанию ''-1''.<br />
* "<span style="color:red;">translit</span>":<span style="color:gray;">-1</span> - Производить транслитерацию (-1 - согласно общим настройкам, 0 - нет, 1 - да). По умолчанию ''-1''.<br />
* "<span style="color:red;">linecode</span>":"<span style="color:gray;">DynamicPhoneCode</span>" - Код линии.<br />
* "<span style="color:red;">department</span>":"<span style="color:gray;">57575757-5757-5757-5757-575757575757</span>" - Идентификатор существующего подразделения для привязки и отображения в разделе «Сотрудники». <br />
<br />
<br />
Дополнительные параметры SIP аналогичны [[#sipstreamprops|параметрам потоков]].<br />
<br />
<br />
=== Пример сценария ===<br />
<br />
[[Special:FilePath/(Example) Dynamic SIP.oscr|(Example) Dynamic SIP.oscr]]</div>Peter%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%B0%D1%80%D1%82%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8Динамическое управление картой сети2014-02-10T12:11:03Z<p>Peter: </p>
<hr />
<div>Компонент [[Общие компоненты сценариев#UserState|Статус объекта]] позволяет управлять составом карты сети с помощью [http://ru.wikipedia.org/wiki/JSON JSON]-форматированных команд. Это может быть полезно для решения интеграционных задач, в многосерверных решениях с внешней логикой управления, а также в проектах с постоянно изменяющимися параметрами карты сети.<br />
<br />
<br />
__TOC__<br />
<br />
=== Описание ===<br />
<br />
Определенным образом формируемые параметры позволяют:<br />
* Добавлять шлюзы (операция ''gate-add'').<br />
* Добавлять потоки (операция ''stream-add'').<br />
* Добавлять телефоны (операция ''phone-add'').<br />
* Удалять шлюзы со всеми потоками (операция ''gate-del'').<br />
* Удалять отдельные потоки (операция ''stream-add'').<br />
* Удалять отдельные телефоны (операция ''phone-add'').<br />
* Изменять параметры шлюзов (операция ''gate-set'').<br />
* Изменять параметры потоков (операция ''stream-set'').<br />
* Изменять параметры телефонов (операция ''phone-set'').<br />
* Удалять единовременно все динамические объекты (команда ''clear'').<br />
<br />
Добавленные динамические объекты не появляются среди отображаемых объектов в [[Карта сети|карте сети]], но доступны в [[Мониторинг|мониторинге линий]], [[Настройки оборудования|параметрах аппаратуры]], и прочих модулях системы, связанных с исполнением в реальном времени.<br />
<br />
Жизненный цикл динамических объектов протекает от момента создания до момента удаления или перезапуска системы. Таким образом при необходимости формирования постоянных настроек карты сети с помощью динамических объектов, необходимо реализовывать однократное исполнение служебной задачи, загружающей требуемые динамические объекты всякий раз после перезапуска системы. Гарантировать однократность можно в том числе с помощью [[Переменные|глобальных переменных]] сценариев.<br />
<br />
После исполнения любой операции, связанной с динамическими объектами, автоматически происходит перезагрузка сервера состояний. Это затратная операция. В этой связи настоятельно рекомендуется комбинировать все операции в один запрос, и не исполнять их в цикле одну за другой.<br />
<br />
При создании динамических объектов, создаются динамические линии с идентификаторами, задаваемыми в запросе. Формирование этих уникальных идентификаторов возложено на администратора, создающего сценарий, поскольку привязка к ним может потребоваться в бизнес-логике реализуемого процесса для решения внешних задач.<br />
Ожидается, что идентификаторы будут уникальны.<br />
<br />
Создание динамических потоков в шлюзах может сопровождаться автоматическим созданием направления, состоящего из всех вновь-созданных линий потока.<br />
<br />
При создании объектов и изменении их параметров могут указываться как настройки из [[Карта сети|«Карты сети»]], так и настройки из [[Настройки оборудования|«Параметров аппаратуры»]].<br />
<br />
<br />
<br />
=== Лицензирование ===<br />
<br />
<br />
При добавлении динамических объектов расходуются свободные лицензии на соответствующие линии. При удалении объектов лицензии высвобождаются. Таким образом можно использовать конкурентный механизм в отличие от [[Карта сети|статической карты сети]]. <br />
<br />
В случае, если после добавления очередного объекта итоговое количество линий превосходит количество линий в лицензии, сервер произведет стандартную процедуру отключения части линий по своему усмотрению (преимущественно выключенные, неактивные).<br />
<br />
<br />
<br />
=== Формат команд ===<br />
<br />
<br />
Команды управления динамической картой сети передаются в строковом виде в формате [http://ru.wikipedia.org/wiki/JSON JSON].<br />
<br />
Структура команд, передаваемых серверу через компонент сценария в общем виде выглядит следующим образом:<br />
<br />
<pre><br />
{<br />
"actions":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
<br />
Команда полной очистки динамических объектов <br />
<br />
<pre><br />
{<br />
"method":"clear"<br />
}<br />
</pre><br />
<br />
<br />
<br />
Каждая команда представляет собой одну или несколько операций, возможно различных. В простейшем случае в одной команде содержится одна операция.<br />
В каждой операции может присутствовать один или несколько объектов. Так, операция добавления шлюзов может содержать мета-данные нескольких шлюзов, операция добавления потоков - несколько потоков, операция добавления телефонов - несколько SIP-телефонов. То же самое с удалением и изменением параметров.<br />
<br />
<br />
<br />
=== Структура операций ===<br />
<br />
<br />
Структура одной операции добавления шлюза:<br />
<br />
<pre><br />
{<br />
"method":"gate-add",<br />
"gates":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''gates'' могут перечисляться несколько шлюзов. Каждый шлюз представляет собой совокупность настроек: обязательных и необязательных параметров. Администратор, производящий настройку, должен гарантировать уникальность идентификаторов, а также отличия в настройках шлюзов.<br />
<br />
При добавлении шлюзов можно сразу в той же операции определить потоки, соответствующие каждому шлюзу. Для этого среди свойств шлюза необходимо размещение свойства ''streams'' с информацией, эквивалентной операции создания потока. Управление отдельными потоками динамического шлюза может производиться и позже.<br />
<br />
Структура операции изменения шлюза отличается значением ключа ''method'' (''gate-set''), а также невозможностью одновременно изменять параметры потоков внутри шлюза и изменять тип регистрации (''regtype''). <br />
<br />
Операция удаления шлюза (''gate-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении шлюза удаляются все его потоки, линии и динамические направления, с ними связанные.<br />
<br />
<br />
<br />
Структура одной операции добавления потока:<br />
<br />
<pre><br />
{<br />
"method":"stream-add",<br />
"gates":[<br />
{<br />
"id":"_guid_шлюза_",<br />
"streams":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''gates'' могут перечисляться несколько шлюзов. Каждый шлюз должен содержать идентификатор и набор добавляемых потоков (''streams''), другие его свойства игнорируются. Создаваемые потоки привязываются к содержащим их шлюзам. Каждый поток в наборе представляет собой совокупность настроек: обязательных и необязательных параметров.<br />
<br />
Структура операции изменения потока отличается значением ключа ''method'' (''stream-set'').<br />
<br />
Операция удаления потока (''stream-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении потока удаляются динамическое направление и все линии, с ним связанные.<br />
<br />
<br />
<br />
<br />
Структура одной операции добавления SIP-телефона:<br />
<br />
<pre><br />
{<br />
"method":"phone-add",<br />
"phones":[<br />
{<br />
"id":"_guid_телефона_",<br />
...<br />
},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''phones'' могут перечисляться несколько телефонов. Каждый телефон представляет собой совокупность настроек: обязательных и необязательных параметров. Администратор, производящий настройку, должен гарантировать уникальность идентификаторов, а также уникальность и '''сложность''' авторизационных параметров телефонов.<br />
<br />
Структура операции изменения телефона отличается значением ключа ''method'' (''phone-set'').<br />
<br />
Операция удаления потока (''phone-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении потока удаляются динамическое направление и все линии, с ним связанные.<br />
<br />
<br />
=== Свойства объектов ===<br />
<br />
Ниже приводится список свойств различных объектов, используемый при создании. Свойства разделены на группы: обязательные свойства при создании объекта, необязательные свойства при создании объекта, у которых существуют значения по умолчанию, а также внутренние SIP-свойства объектов, доступные также в модуле [[Настройки оборудования|«Параметры аппаратуры»]].<br />
<br />
<br />
<br />
==== Шлюзы ====<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">01010101-0101-0101-0101-010101010101</span>" - Guid-идентификатор шлюза. <br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicGate</span>" - Название шлюза для отображения в модуле [[Настройки оборудования|«Параметры аппаратуры»]].<br />
* "<span style="color:red;">regtype</span>":<span style="color:gray;">2</span> - Тип регистрации (0 - без регистрации, 1 - регистрация на сервере, 2 - регистрация на шлюзе).<br />
<br />
Обязательные параметры (кроме шлюзов с регистрацией на сервере):<br />
<br />
* "<span style="color:red;">address</span>":"<span style="color:gray;">192.168.0.1</span>" - Доменное имя, подставляемое в запрос.<br />
* "<span style="color:red;">sipproxyaddress</span>":"<span style="color:gray;">192.168.0.1:5060</span>" - Адрес и порт удаленного узла, на который отправлять пакеты.<br />
<br />
<br />
Необязательные параметры:<br />
<br />
* "<span style="color:red;">expire</span>":<span style="color:gray;">3600</span> - Период регистрации в секундах для шлюзов с внешней регистрацией. По умолчанию ''3600''.<br />
* "<span style="color:red;">freegate</span>":<span style="color:gray;">false</span> - Для шлюза без регистрации признак разрешения обработки неизвестных входящих. В системе не должно быть более одного шлюза для приема неизвестных входящих. По умолчанию ''false''.<br />
* "<span style="color:red;">aliases</span>":["<span style="color:gray;">Domain1</span>", "<span style="color:gray;">Domain2</span>", "<span style="color:gray;">212.212.121.121</span>"] - Список дополнительных доменных имен, которые ассоциируются со шлюзом при поступлении входящих запросов. По умолчанию список пуст.<br />
<br />
<br />
Дополнительные параметры SIP:<br />
<br />
* "<span style="color:red;">interface-address</span>":"<span style="color:gray;">default</span>" - Сетевой интерфейс сервера (или ''default'' - автоопределение). По умолчанию ''default''.<br />
* "<span style="color:red;">search-in-from</span>":"<span style="color:gray;">0</span>" - Поиск соответствия между аккаунтом и входящим INVITE (0 - contact, 1 - contact+from). По умолчанию ''0''.<br />
* "<span style="color:red;">def-caller-id</span>":"<span style="color:gray;">1234567</span>" - Источник определения CallerId (0 - From:URI, 1 - From:DisplayName, 2 - Contact:URI, 3 - INVITE целиком). По умолчанию ''0''.<br />
* "<span style="color:red;">disabled-answer</span>":"<span style="color:gray;">503</span>" - SIP-ответ при вызове на отключенный поток.<br />
* "<span style="color:red;">declined-answer</span>":"<span style="color:gray;">486</span>" - SIP-ответ при отсутствии свободных транков.<br />
* "<span style="color:red;">error-answer</span>":"<span style="color:gray;">500</span>" - SIP-ответ при ошибке резервирования транка.<br />
* "<span style="color:red;">disconnect-answer</span>":"<span style="color:gray;">480</span>" - SIP-ответ при отказе сценария IVR.<br />
<br />
<br />
<br />
==== Потоки ====<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">12341234-1234-1234-1234-123412341234</span>" - Guid-идентификатор потока.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicStream</span>" - Название потока для отображения.<br />
* "<span style="color:red;">displayname</span>":"<span style="color:gray;">stream1</span>" - SIP DisplayName.<br />
* "<span style="color:red;">username</span>":"<span style="color:gray;">stream1</span>" - SIP UserName.<br />
* "<span style="color:red;">login</span>":"<span style="color:gray;">stream1</span>" - SIP Login.<br />
* "<span style="color:red;">password</span>":"<span style="color:gray;">u74S3iiB</span>" - SIP Password.<br />
* "<span style="color:red;">lines</span>":[{...}, ..., {...}] - список новых линий с параметрами, соответствующих потоку (рассмотрено ниже).<br />
<br />
<br />
Необязательные параметры<br />
<br />
* "<span style="color:red;">defaultcallerid</span>":"<span style="color:gray;">1234567</span>" - Подставляемый по умолчанию CallerId.<br />
* "<span style="color:red;">codecs</span>":[<span style="color:gray;">0</span>, <span style="color:gray;">1</span>] - Список используемых кодеков через запятую в порядке уменьшения приоритета (возможные значения: 0-711u, 1-711a, 2-gsm, 3-729). По умолчанию ''[0, 1]''.<br />
* "<span style="color:red;">numbers</span>":["<span style="color:gray;">account1</span>", "<span style="color:gray;">account2</span>"] - Список дополнительных номеров для ассоциации входящих звонков с потоком. По умолчанию список пуст.<br />
* "<span style="color:red;">dialmode</span>":<span style="color:gray;">0</span> - Способ набора номеров для шлюзов с регистрацией на сервере (0-сначала аккаунт потом номер, 1-сразу номер). По умолчанию ''0''.<br />
* "<span style="color:red;">route</span>":{...} - Свойства направления, которое будет создано и привязано к линиям (рассмотрено ниже).<br />
<br />
<br />
Свойства линий:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">79797979-7979-7979-7979-797979797979</span>" - Guid-идентификатор линии.<br />
* "<span style="color:red;">caption</span>":"<span style="color:gray;">LineCaption</span>" - Имя линии для отображения.<br />
* "<span style="color:red;">code</span>":"<span style="color:gray;">LineCode</span>" - Код линии.<br />
<br />
<br />
Свойства направления:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">68686868-6868-6868-6868-686868686868</span>" - Guid-идентификатор направления.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">RouteName</span>" - Название направления.<br />
* "<span style="color:red;">description</span>":"<span style="color:gray;">Route description</span>" - Описание направления.<br />
* "<span style="color:red;">code</span>":"<span style="color:gray;">routecode</span>" - Код направления (для указания в сценариях).<br />
* "<span style="color:red;">commandtype</span>":"<span style="color:gray;">0</span>" - Режим преобразования номера перед набором (0 - нет, 1 - выражение, 2 - служебный сценарий).<br />
* "<span style="color:red;">command</span>":"<span style="color:gray;"></span>" - Выражение или название служебного сценария для преобразования номера.<br />
<br />
<br />
<div id="sipstreamprops"></div><br />
Дополнительные параметры SIP:<br />
<br />
* "<span style="color:red;">enabled</span>":<span style="color:gray;">0</span> - Включен/выключен.<br />
* "<span style="color:red;">expires</span>":<span style="color:gray;">0</span> - Максимальный период регистрации в секундах для шлюзов с регистрацией на сервере, 0 - не ограничено. По умолчанию 3600.<br />
* "<span style="color:red;">replace-user-name</span>":<span style="color:gray;">0</span> - Место подстановки набранного номера при исходящем вызове (0 - To+RequestURI, 1 - To, 2 - RequestURI). По умолчанию ''0''. <br />
* "<span style="color:red;">dtmftype</span>":<span style="color:gray;">0</span> - Способ отправки DTMF (0 - rfc 2833, 1 - SIP INFO, 2 - InBand). По умолчанию ''0''.<br />
* "<span style="color:red;">enable-inband-dtmf</span>":<span style="color:gray;">0</span> - Включение детектора звукового DTMF во входящем rtp-потоке (0 -выключен, 1 - включен). По умолчанию ''0'', так как операция ресурсо-затратная.<br />
* "<span style="color:red;">wait-ack</span>":<span style="color:gray;">1</span> - Ожидать поступления сообщения ACK перед продолжением обработки входящего звонка (0 - нет, 1 - да). По умолчанию ''1''.<br />
* "<span style="color:red;">can-reinvite</span>":<span style="color:gray;">0</span> - Разрешить изменять параметры связи во время коммутации (0 - нет, использовать транскодинг; 1 - да). По умолчанию ''0''.<br />
* "<span style="color:red;">fax-enable</span>":<span style="color:gray;">0</span> - Разрешить прием/передачу факсов T.30 (0 - нет, 1-да). По умолчанию 0.<br />
* "<span style="color:red;">fax-outgoing-timeout</span>":<span style="color:gray;">60</span> - Время ожидания ответа факса в секундах при исходящем сеансе. По умолчанию ''60''.<br />
* "<span style="color:red;">fax-enable-ecm</span>":<span style="color:gray;">1</span> - Error Correction Mode (ECM) для факсов (0 - выключено, 1-включено). По умолчанию ''1''.<br />
* "<span style="color:red;">use-remote-address</span>":<span style="color:gray;">1</span> - Адрес назначения для RTP трафика (0 - адрес/порт из SDP, 1 - адрес/порт отправителя). По умолчанию ''1''.<br />
* "<span style="color:red;">g711-size</span>":<span style="color:gray;">0</span> - Размен звукового пакета при отправке RTP данных в кодеке 711a/711u (0 - 40мс, 1 - 20мс). По умолчанию ''1''.<br />
<br />
<br />
<br />
==== Телефоны ====<br />
<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">35353535-3535-3535-3535-353535353535</span>" - Guid-идентификатор телефона и связанной с ним линии.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicPhone</span>" - Название телефона для отображения.<br />
* "<span style="color:red;">address</span>":"<span style="color:gray;">192.168.0.231:5060</span>" - Адрес устройства для работы в режиме без регистрации.<br />
* "<span style="color:red;">username</span>":"<span style="color:gray;">user</span>" - SIP UserName.<br />
* "<span style="color:red;">login</span>":"<span style="color:gray;">phone</span>" - SIP Login (по умолчанию совпадает с SIP UserName).<br />
* "<span style="color:red;">password</span>":"<span style="color:gray;">7thNx2wf</span>" - SIP Password.<br />
<br />
<br />
Необязательные параметры: <br />
<br />
* "<span style="color:red;">codecs</span>":[<span style="color:gray;">0</span>, <span style="color:gray;">1</span>] - Список используемых кодеков через запятую в порядке уменьшения приоритета (возможные значения: 0-711u, 1-711a, 2-gsm, 3-729). По умолчанию ''[0, 1]''.<br />
* "<span style="color:red;">defaultuserid</span>":"<span style="color:gray;">84848484-8484-8484-8484-848484848484</span>" - Guid-идентификатор пользователя, привязанного к телефону как [[Свойства компонентов#SipPhone|«пользователь по умолчанию»]]. По умолчанию без привязки.<br />
* "<span style="color:red;">websocketuserid</span>":"<span style="color:gray;">84848484-8484-8484-8484-848484848484</span>" - Guid-идентификатор пользователя, привязанного к телефону как [[Свойства компонентов#SipPhone|«пользователь webcrm»]]. По умолчанию без привязки.<br />
* "<span style="color:red;">citystraight</span>":<span style="color:gray;">-1</span> - (-1 - по умолчанию БД, 0 - нет, 1 - да). По умолчанию ''-1''.<br />
* "<span style="color:red;">busymode</span>":<span style="color:gray;">-1</span> - Режим отбоя (-1 - по умолчанию БД, 0 - SIP-disconnect, 1 - генерировать короткие гудки). По умолчанию ''-1''.<br />
* "<span style="color:red;">translit</span>":<span style="color:gray;">-1</span> - Производить транслитерацию (-1 - согласно общим настройкам, 0 - нет, 1 - да). По умолчанию ''-1''.<br />
* "<span style="color:red;">linecode</span>":"<span style="color:gray;">DynamicPhoneCode</span>" - Код линии.<br />
* "<span style="color:red;">department</span>":"<span style="color:gray;">57575757-5757-5757-5757-575757575757</span>" - Идентификатор существующего подразделения для привязки и отображения в разделе «Сотрудники». <br />
<br />
<br />
Дополнительные параметры SIP аналогичны [[#sipstreamprops|параметрам потоков]].<br />
<br />
<br />
=== Пример сценария ===<br />
<br />
[[Special:FilePath/(Example) Dynamic SIP.oscr|(Example) Dynamic SIP.oscr]]</div>Peter%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%B0%D1%80%D1%82%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8Динамическое управление картой сети2014-02-10T12:10:16Z<p>Peter: </p>
<hr />
<div>Компонент [[Общие компоненты сценариев#UserState|Статус объекта]] позволяет управлять составом карты сети с помощью [http://ru.wikipedia.org/wiki/JSON JSON]-форматированных команд. Это может быть полезно для решения интеграционных задач, в многосерверных решениях с внешней логикой управления, а также в проектах с постоянно изменяющимися параметрами карты сети.<br />
<br />
<br />
__TOC__<br />
<br />
=== Описание ===<br />
<br />
Определенным образом формируемые параметры позволяют:<br />
* Добавлять шлюзы (операция ''gate-add'').<br />
* Добавлять потоки (операция ''stream-add'').<br />
* Добавлять телефоны (операция ''phone-add'').<br />
* Удалять шлюзы со всеми потоками (операция ''gate-del'').<br />
* Удалять отдельные потоки (операция ''stream-add'').<br />
* Удалять отдельные телефоны (операция ''phone-add'').<br />
* Изменять параметры шлюзов (операция ''gate-set'').<br />
* Изменять параметры потоков (операция ''stream-set'').<br />
* Изменять параметры телефонов (операция ''phone-set'').<br />
* Удалять единовременно все динамические объекты (команда ''clear'').<br />
<br />
Добавленные динамические объекты не появляются среди отображаемых объектов в [[Карта сети|карте сети]], но доступны в [[Мониторинг|мониторинге линий]], [[Настройки оборудования|параметрах аппаратуры]], и прочих модулях системы, связанных с исполнением в реальном времени.<br />
<br />
Жизненный цикл динамических объектов протекает от момента создания до момента удаления или перезапуска системы. Таким образом при необходимости формирования постоянных настроек карты сети с помощью динамических объектов, необходимо реализовывать однократное исполнение служебной задачи, загружающей требуемые динамические объекты всякий раз после перезапуска системы. Гарантировать однократность можно в том числе с помощью [[Переменные|глобальных переменных]] сценариев.<br />
<br />
После исполнения любой операции, связанной с динамическими объектами, автоматически происходит перезагрузка сервера состояний. Это затратная операция. В этой связи настоятельно рекомендуется комбинировать все операции в один запрос, и не исполнять их в цикле одну за другой.<br />
<br />
При создании динамических объектов, создаются динамические линии с идентификаторами, задаваемыми в запросе. Формирование этих уникальных идентификаторов возложено на администратора, создающего сценарий, поскольку привязка к ним может потребоваться в бизнес-логике реализуемого процесса для решения внешних задач.<br />
Ожидается, что идентификаторы будут уникальны.<br />
<br />
Создание динамических потоков в шлюзах может сопровождаться автоматическим созданием направления, состоящего из всех вновь-созданных линий потока.<br />
<br />
При создании объектов и изменении их параметров могут указываться как настройки из [[Карта сети|«Карты сети»]], так и настройки из [[Настройки оборудования|«Параметров аппаратуры»]].<br />
<br />
<br />
<br />
=== Лицензирование ===<br />
<br />
<br />
При добавлении динамических объектов расходуются свободные лицензии на соответствующие линии. При удалении объектов лицензии высвобождаются. Таким образом можно использовать конкурентный механизм в отличие от [[Карта сети|статической карты сети]]. <br />
<br />
В случае, если после добавления очередного объекта итоговое количество линий превосходит количество линий в лицензии, сервер произведет стандартную процедуру отключения части линий по своему усмотрению (преимущественно выключенные, неактивные).<br />
<br />
<br />
<br />
=== Формат команд ===<br />
<br />
<br />
Команды управления динамической картой сети передаются в строковом виде в формате [http://ru.wikipedia.org/wiki/JSON JSON].<br />
<br />
Структура команд, передаваемых серверу через компонент сценария в общем виде выглядит следующим образом:<br />
<br />
<pre><br />
{<br />
"actions":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
<br />
Команда полной очистки динамических объектов <br />
<br />
<pre><br />
{<br />
"method":"clear"<br />
}<br />
</pre><br />
<br />
<br />
<br />
Каждая команда представляет собой одну или несколько операций, возможно различных. В простейшем случае в одной команде содержится одна операция.<br />
В каждой операции может присутствовать один или несколько объектов. Так, операция добавления шлюзов может содержать мета-данные нескольких шлюзов, операция добавления потоков - несколько потоков, операция добавления телефонов - несколько SIP-телефонов. То же самое с удалением и изменением параметров.<br />
<br />
<br />
<br />
=== Структура операций ===<br />
<br />
<br />
Структура одной операции добавления шлюза:<br />
<br />
<pre><br />
{<br />
"method":"gate-add",<br />
"gates":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''gates'' могут перечисляться несколько шлюзов. Каждый шлюз представляет собой совокупность настроек: обязательных и необязательных параметров. Администратор, производящий настройку, должен гарантировать уникальность идентификаторов, а также отличия в настройках шлюзов.<br />
<br />
При добавлении шлюзов можно сразу в той же операции определить потоки, соответствующие каждому шлюзу. Для этого среди свойств шлюза необходимо размещение свойства ''streams'' с информацией, эквивалентной операции создания потока. Управление отдельными потоками динамического шлюза может производиться и позже.<br />
<br />
Структура операции изменения шлюза отличается значением ключа ''method'' (''gate-set''), а также невозможностью одновременно изменять параметры потоков внутри шлюза и изменять тип регистрации (''regtype''). <br />
<br />
Операция удаления шлюза (''gate-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении шлюза удаляются все его потоки, линии и динамические направления, с ними связанные.<br />
<br />
<br />
<br />
Структура одной операции добавления потока:<br />
<br />
<pre><br />
{<br />
"method":"stream-add",<br />
"gates":[<br />
{<br />
"id":"_guid_шлюза_",<br />
"streams":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''gates'' могут перечисляться несколько шлюзов. Каждый шлюз должен содержать идентификатор и набор добавляемых потоков (''streams''), другие его свойства игнорируются. Создаваемые потоки привязываются к содержащим их шлюзам. Каждый поток в наборе представляет собой совокупность настроек: обязательных и необязательных параметров.<br />
<br />
Структура операции изменения потока отличается значением ключа ''method'' (''stream-set'').<br />
<br />
Операция удаления потока (''stream-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении потока удаляются динамическое направление и все линии, с ним связанные.<br />
<br />
<br />
<br />
<br />
Структура одной операции добавления SIP-телефона:<br />
<br />
<pre><br />
{<br />
"method":"phone-add",<br />
"phones":[<br />
{<br />
"id":"_guid_телефона_",<br />
...<br />
},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''phones'' могут перечисляться несколько телефонов. Каждый телефон представляет собой совокупность настроек: обязательных и необязательных параметров. Администратор, производящий настройку, должен гарантировать уникальность идентификаторов, а также уникальность и '''сложность''' авторизационных параметров телефонов.<br />
<br />
Структура операции изменения телефона отличается значением ключа ''method'' (''phone-set'').<br />
<br />
Операция удаления потока (''phone-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении потока удаляются динамическое направление и все линии, с ним связанные.<br />
<br />
<br />
=== Свойства объектов ===<br />
<br />
Ниже приводится список свойств различных объектов, используемый при создании. Свойства разделены на группы: обязательные свойства при создании объекта, необязательные свойства при создании объекта, у которых существуют значения по умолчанию, а также внутренние SIP-свойства объектов, доступные также в модуле [[Настройки оборудования|«Параметры аппаратуры»]].<br />
<br />
<br />
<br />
==== Шлюзы ====<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">01010101-0101-0101-0101-010101010101</span>" - Guid-идентификатор шлюза. <br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicGate</span>" - Название шлюза для отображения в модуле [[Настройки оборудования|«Параметры аппаратуры»]].<br />
* "<span style="color:red;">regtype</span>":<span style="color:gray;">2</span> - Тип регистрации (0 - без регистрации, 1 - регистрация на сервере, 2 - регистрация на шлюзе).<br />
<br />
Обязательные параметры (кроме шлюзов с регистрацией на сервере):<br />
<br />
* "<span style="color:red;">address</span>":"<span style="color:gray;">192.168.0.1</span>" - Доменное имя, подставляемое в запрос.<br />
* "<span style="color:red;">sipproxyaddress</span>":"<span style="color:gray;">192.168.0.1:5060</span>" - Адрес и порт удаленного узла, на который отправлять пакеты.<br />
<br />
<br />
Необязательные параметры:<br />
<br />
* "<span style="color:red;">expire</span>":<span style="color:gray;">3600</span> - Период регистрации в секундах для шлюзов с внешней регистрацией. По умолчанию ''3600''.<br />
* "<span style="color:red;">freegate</span>":<span style="color:gray;">false</span> - Для шлюза без регистрации признак разрешения обработки неизвестных входящих. В системе не должно быть более одного шлюза для приема неизвестных входящих. По умолчанию ''false''.<br />
* "<span style="color:red;">aliases</span>":["<span style="color:gray;">Domain1</span>", "<span style="color:gray;">Domain2</span>", "<span style="color:gray;">212.212.121.121</span>"] - Список дополнительных доменных имен, которые ассоциируются со шлюзом при поступлении входящих запросов. По умолчанию список пуст.<br />
<br />
<br />
Дополнительные параметры SIP:<br />
<br />
* "<span style="color:red;">interface-address</span>":"<span style="color:gray;">default</span>" - Сетевой интерфейс сервера (или ''default'' - автоопределение). По умолчанию ''default''.<br />
* "<span style="color:red;">search-in-from</span>":"<span style="color:gray;">0</span>" - Поиск соответствия между аккаунтом и входящим INVITE (0 - contact, 1 - contact+from). По умолчанию ''0''.<br />
* "<span style="color:red;">def-caller-id</span>":"<span style="color:gray;">1234567</span>" - Источник определения CallerId (0 - From:URI, 1 - From:DisplayName, 2 - Contact:URI, 3 - INVITE целиком). По умолчанию ''0''.<br />
* "<span style="color:red;">disabled-answer</span>":"<span style="color:gray;">503</span>" - SIP-ответ при вызове на отключенный поток.<br />
* "<span style="color:red;">declined-answer</span>":"<span style="color:gray;">486</span>" - SIP-ответ при отсутствии свободных транков.<br />
* "<span style="color:red;">error-answer</span>":"<span style="color:gray;">500</span>" - SIP-ответ при ошибке резервирования транка.<br />
* "<span style="color:red;">disconnect-answer</span>":"<span style="color:gray;">480</span>" - SIP-ответ при отказе сценария IVR.<br />
<br />
<br />
<br />
==== Потоки ====<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">12341234-1234-1234-1234-123412341234</span>" - Guid-идентификатор потока.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicStream</span>" - Название потока для отображения.<br />
* "<span style="color:red;">displayname</span>":"<span style="color:gray;">stream1</span>" - SIP DisplayName.<br />
* "<span style="color:red;">username</span>":"<span style="color:gray;">stream1</span>" - SIP UserName.<br />
* "<span style="color:red;">login</span>":"<span style="color:gray;">stream1</span>" - SIP Login.<br />
* "<span style="color:red;">password</span>":"<span style="color:gray;">u74S3iiB</span>" - SIP Password.<br />
* "<span style="color:red;">lines</span>":[{...}, ..., {...}] - список новых линий с параметрами, соответствующих потоку (рассмотрено ниже).<br />
<br />
<br />
Необязательные параметры<br />
<br />
* "<span style="color:red;">defaultcallerid</span>":"<span style="color:gray;">1234567</span>" - Подставляемый по умолчанию CallerId.<br />
* "<span style="color:red;">codecs</span>":[<span style="color:gray;">0</span>, <span style="color:gray;">1</span>] - Список используемых кодеков через запятую в порядке уменьшения приоритета (возможные значения: 0-711u, 1-711a, 2-gsm, 3-729). По умолчанию ''[0, 1]''.<br />
* "<span style="color:red;">numbers</span>":["<span style="color:gray;">account1</span>", "<span style="color:gray;">account2</span>"] - Список дополнительных номеров для ассоциации входящих звонков с потоком. По умолчанию список пуст.<br />
* "<span style="color:red;">dialmode</span>":<span style="color:gray;">0</span> - Способ набора номеров для шлюзов с регистрацией на сервере (0-сначала аккаунт потом номер, 1-сразу номер). По умолчанию ''0''.<br />
* "<span style="color:red;">route</span>":{...} - Свойства направления, которое будет создано и привязано к линиям (рассмотрено ниже).<br />
<br />
<br />
Свойства линий:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">79797979-7979-7979-7979-797979797979</span>" - Guid-идентификатор линии.<br />
* "<span style="color:red;">caption</span>":"<span style="color:gray;">LineCaption</span>" - Имя линии для отображения.<br />
* "<span style="color:red;">code</span>":"<span style="color:gray;">LineCode</span>" - Код линии.<br />
<br />
<br />
Свойства направления:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">68686868-6868-6868-6868-686868686868</span>" - Guid-идентификатор направления.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">RouteName</span>" - Название направления.<br />
* "<span style="color:red;">description</span>":"<span style="color:gray;">Route description</span>" - Описание направления.<br />
* "<span style="color:red;">code</span>":"<span style="color:gray;">routecode</span>" - Код направления (для указания в сценариях).<br />
* "<span style="color:red;">commandtype</span>":"<span style="color:gray;">0</span>" - Режим преобразования номера перед набором (0 - нет, 1 - выражение, 2 - служебный сценарий).<br />
* "<span style="color:red;">command</span>":"<span style="color:gray;"></span>" - Выражение или название служебного сценария для преобразования номера.<br />
<br />
<br />
<div id="sipstreamprops"></div><br />
Дополнительные параметры SIP:<br />
<br />
* "<span style="color:red;">enabled</span>":<span style="color:gray;">0</span> - Включен/выключен.<br />
* "<span style="color:red;">expires</span>":<span style="color:gray;">0</span> - Максимальный период регистрации в секундах для шлюзов с регистрацией на сервере. По умолчанию 3600.<br />
* "<span style="color:red;">replace-user-name</span>":<span style="color:gray;">0</span> - Место подстановки набранного номера при исходящем вызове (0 - To+RequestURI, 1 - To, 2 - RequestURI). По умолчанию ''0''. <br />
* "<span style="color:red;">dtmftype</span>":<span style="color:gray;">0</span> - Способ отправки DTMF (0 - rfc 2833, 1 - SIP INFO, 2 - InBand). По умолчанию ''0''.<br />
* "<span style="color:red;">enable-inband-dtmf</span>":<span style="color:gray;">0</span> - Включение детектора звукового DTMF во входящем rtp-потоке (0 -выключен, 1 - включен). По умолчанию ''0'', так как операция ресурсо-затратная.<br />
* "<span style="color:red;">wait-ack</span>":<span style="color:gray;">1</span> - Ожидать поступления сообщения ACK перед продолжением обработки входящего звонка (0 - нет, 1 - да). По умолчанию ''1''.<br />
* "<span style="color:red;">can-reinvite</span>":<span style="color:gray;">0</span> - Разрешить изменять параметры связи во время коммутации (0 - нет, использовать транскодинг; 1 - да). По умолчанию ''0''.<br />
* "<span style="color:red;">fax-enable</span>":<span style="color:gray;">0</span> - Разрешить прием/передачу факсов T.30 (0 - нет, 1-да). По умолчанию 0.<br />
* "<span style="color:red;">fax-outgoing-timeout</span>":<span style="color:gray;">60</span> - Время ожидания ответа факса в секундах при исходящем сеансе. По умолчанию ''60''.<br />
* "<span style="color:red;">fax-enable-ecm</span>":<span style="color:gray;">1</span> - Error Correction Mode (ECM) для факсов (0 - выключено, 1-включено). По умолчанию ''1''.<br />
* "<span style="color:red;">use-remote-address</span>":<span style="color:gray;">1</span> - Адрес назначения для RTP трафика (0 - адрес/порт из SDP, 1 - адрес/порт отправителя). По умолчанию ''1''.<br />
* "<span style="color:red;">g711-size</span>":<span style="color:gray;">0</span> - Размен звукового пакета при отправке RTP данных в кодеке 711a/711u (0 - 40мс, 1 - 20мс). По умолчанию ''1''.<br />
<br />
<br />
<br />
==== Телефоны ====<br />
<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">35353535-3535-3535-3535-353535353535</span>" - Guid-идентификатор телефона и связанной с ним линии.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicPhone</span>" - Название телефона для отображения.<br />
* "<span style="color:red;">address</span>":"<span style="color:gray;">192.168.0.231:5060</span>" - Адрес устройства для работы в режиме без регистрации.<br />
* "<span style="color:red;">username</span>":"<span style="color:gray;">user</span>" - SIP UserName.<br />
* "<span style="color:red;">login</span>":"<span style="color:gray;">phone</span>" - SIP Login (по умолчанию совпадает с SIP UserName).<br />
* "<span style="color:red;">password</span>":"<span style="color:gray;">7thNx2wf</span>" - SIP Password.<br />
<br />
<br />
Необязательные параметры: <br />
<br />
* "<span style="color:red;">codecs</span>":[<span style="color:gray;">0</span>, <span style="color:gray;">1</span>] - Список используемых кодеков через запятую в порядке уменьшения приоритета (возможные значения: 0-711u, 1-711a, 2-gsm, 3-729). По умолчанию ''[0, 1]''.<br />
* "<span style="color:red;">defaultuserid</span>":"<span style="color:gray;">84848484-8484-8484-8484-848484848484</span>" - Guid-идентификатор пользователя, привязанного к телефону как [[Свойства компонентов#SipPhone|«пользователь по умолчанию»]]. По умолчанию без привязки.<br />
* "<span style="color:red;">websocketuserid</span>":"<span style="color:gray;">84848484-8484-8484-8484-848484848484</span>" - Guid-идентификатор пользователя, привязанного к телефону как [[Свойства компонентов#SipPhone|«пользователь webcrm»]]. По умолчанию без привязки.<br />
* "<span style="color:red;">citystraight</span>":<span style="color:gray;">-1</span> - (-1 - по умолчанию БД, 0 - нет, 1 - да). По умолчанию ''-1''.<br />
* "<span style="color:red;">busymode</span>":<span style="color:gray;">-1</span> - Режим отбоя (-1 - по умолчанию БД, 0 - SIP-disconnect, 1 - генерировать короткие гудки). По умолчанию ''-1''.<br />
* "<span style="color:red;">translit</span>":<span style="color:gray;">-1</span> - Производить транслитерацию (-1 - согласно общим настройкам, 0 - нет, 1 - да). По умолчанию ''-1''.<br />
* "<span style="color:red;">linecode</span>":"<span style="color:gray;">DynamicPhoneCode</span>" - Код линии.<br />
* "<span style="color:red;">department</span>":"<span style="color:gray;">57575757-5757-5757-5757-575757575757</span>" - Идентификатор существующего подразделения для привязки и отображения в разделе «Сотрудники». <br />
<br />
<br />
Дополнительные параметры SIP аналогичны [[#sipstreamprops|параметрам потоков]].<br />
<br />
<br />
=== Пример сценария ===<br />
<br />
[[Special:FilePath/(Example) Dynamic SIP.oscr|(Example) Dynamic SIP.oscr]]</div>Peter%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%B0%D1%80%D1%82%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8Динамическое управление картой сети2014-02-10T12:09:14Z<p>Peter: </p>
<hr />
<div>Компонент [[Общие компоненты сценариев#UserState|Статус объекта]] позволяет управлять составом карты сети с помощью [http://ru.wikipedia.org/wiki/JSON JSON]-форматированных команд. Это может быть полезно для решения интеграционных задач, в многосерверных решениях с внешней логикой управления, а также в проектах с постоянно изменяющимися параметрами карты сети.<br />
<br />
<br />
__TOC__<br />
<br />
=== Описание ===<br />
<br />
Определенным образом формируемые параметры позволяют:<br />
* Добавлять шлюзы (операция ''gate-add'').<br />
* Добавлять потоки (операция ''stream-add'').<br />
* Добавлять телефоны (операция ''phone-add'').<br />
* Удалять шлюзы со всеми потоками (операция ''gate-del'').<br />
* Удалять отдельные потоки (операция ''stream-add'').<br />
* Удалять отдельные телефоны (операция ''phone-add'').<br />
* Изменять параметры шлюзов (операция ''gate-set'').<br />
* Изменять параметры потоков (операция ''stream-set'').<br />
* Изменять параметры телефонов (операция ''phone-set'').<br />
* Удалять единовременно все динамические объекты (команда ''clear'').<br />
<br />
Добавленные динамические объекты не появляются среди отображаемых объектов в [[Карта сети|карте сети]], но доступны в [[Мониторинг|мониторинге линий]], [[Настройки оборудования|параметрах аппаратуры]], и прочих модулях системы, связанных с исполнением в реальном времени.<br />
<br />
Жизненный цикл динамических объектов протекает от момента создания до момента удаления или перезапуска системы. Таким образом при необходимости формирования постоянных настроек карты сети с помощью динамических объектов, необходимо реализовывать однократное исполнение служебной задачи, загружающей требуемые динамические объекты всякий раз после перезапуска системы. Гарантировать однократность можно в том числе с помощью [[Переменные|глобальных переменных]] сценариев.<br />
<br />
После исполнения любой операции, связанной с динамическими объектами, автоматически происходит перезагрузка сервера состояний. Это затратная операция. В этой связи настоятельно рекомендуется комбинировать все операции в один запрос, и не исполнять их в цикле одну за другой.<br />
<br />
При создании динамических объектов, создаются динамические линии с идентификаторами, задаваемыми в запросе. Формирование этих уникальных идентификаторов возложено на администратора, создающего сценарий, поскольку привязка к ним может потребоваться в бизнес-логике реализуемого процесса для решения внешних задач.<br />
Ожидается, что идентификаторы будут уникальны.<br />
<br />
Создание динамических потоков в шлюзах может сопровождаться автоматическим созданием направления, состоящего из всех вновь-созданных линий потока.<br />
<br />
При создании объектов и изменении их параметров могут указываться как настройки из [[Карта сети|«Карты сети»]], так и настройки из [[Настройки оборудования|«Параметров аппаратуры»]].<br />
<br />
<br />
<br />
=== Лицензирование ===<br />
<br />
<br />
При добавлении динамических объектов расходуются свободные лицензии на соответствующие линии. При удалении объектов лицензии высвобождаются. Таким образом можно использовать конкурентный механизм в отличие от [[Карта сети|статической карты сети]]. <br />
<br />
В случае, если после добавления очередного объекта итоговое количество линий превосходит количество линий в лицензии, сервер произведет стандартную процедуру отключения части линий по своему усмотрению (преимущественно выключенные, неактивные).<br />
<br />
<br />
<br />
=== Формат команд ===<br />
<br />
<br />
Команды управления динамической картой сети передаются в строковом виде в формате [http://ru.wikipedia.org/wiki/JSON JSON].<br />
<br />
Структура команд, передаваемых серверу через компонент сценария в общем виде выглядит следующим образом:<br />
<br />
<pre><br />
{<br />
"actions":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
<br />
Команда полной очистки динамических объектов <br />
<br />
<pre><br />
{<br />
"method":"clear"<br />
}<br />
</pre><br />
<br />
<br />
<br />
Каждая команда представляет собой одну или несколько операций, возможно различных. В простейшем случае в одной команде содержится одна операция.<br />
В каждой операции может присутствовать один или несколько объектов. Так, операция добавления шлюзов может содержать мета-данные нескольких шлюзов, операция добавления потоков - несколько потоков, операция добавления телефонов - несколько SIP-телефонов. То же самое с удалением и изменением параметров.<br />
<br />
<br />
<br />
=== Структура операций ===<br />
<br />
<br />
Структура одной операции добавления шлюза:<br />
<br />
<pre><br />
{<br />
"method":"gate-add",<br />
"gates":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''gates'' могут перечисляться несколько шлюзов. Каждый шлюз представляет собой совокупность настроек: обязательных и необязательных параметров. Администратор, производящий настройку, должен гарантировать уникальность идентификаторов, а также отличия в настройках шлюзов.<br />
<br />
При добавлении шлюзов можно сразу в той же операции определить потоки, соответствующие каждому шлюзу. Для этого среди свойств шлюза необходимо размещение свойства ''streams'' с информацией, эквивалентной операции создания потока. Управление отдельными потоками динамического шлюза может производиться и позже.<br />
<br />
Структура операции изменения шлюза отличается значением ключа ''method'' (''gate-set''), а также невозможностью одновременно изменять параметры потоков внутри шлюза и изменять тип регистрации (''regtype''). <br />
<br />
Операция удаления шлюза (''gate-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении шлюза удаляются все его потоки, линии и динамические направления, с ними связанные.<br />
<br />
<br />
<br />
Структура одной операции добавления потока:<br />
<br />
<pre><br />
{<br />
"method":"stream-add",<br />
"gates":[<br />
{<br />
"id":"_guid_шлюза_",<br />
"streams":[<br />
{...},<br />
...<br />
{...}<br />
]<br />
},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''gates'' могут перечисляться несколько шлюзов. Каждый шлюз должен содержать идентификатор и набор добавляемых потоков (''streams''), другие его свойства игнорируются. Создаваемые потоки привязываются к содержащим их шлюзам. Каждый поток в наборе представляет собой совокупность настроек: обязательных и необязательных параметров.<br />
<br />
Структура операции изменения потока отличается значением ключа ''method'' (''stream-set'').<br />
<br />
Операция удаления потока (''stream-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении потока удаляются динамическое направление и все линии, с ним связанные.<br />
<br />
<br />
<br />
<br />
Структура одной операции добавления SIP-телефона:<br />
<br />
<pre><br />
{<br />
"method":"phone-add",<br />
"phones":[<br />
{<br />
"id":"_guid_телефона_",<br />
...<br />
},<br />
...<br />
{...}<br />
]<br />
}<br />
</pre><br />
<br />
В свойстве ''phones'' могут перечисляться несколько телефонов. Каждый телефон представляет собой совокупность настроек: обязательных и необязательных параметров. Администратор, производящий настройку, должен гарантировать уникальность идентификаторов, а также уникальность и '''сложность''' авторизационных параметров телефонов.<br />
<br />
Структура операции изменения телефона отличается значением ключа ''method'' (''phone-set'').<br />
<br />
Операция удаления потока (''phone-del'') требует указания среди свойств шлюза только идентификатора, остальное игнорируется. При удалении потока удаляются динамическое направление и все линии, с ним связанные.<br />
<br />
<br />
=== Свойства объектов ===<br />
<br />
Ниже приводится список свойств различных объектов, используемый при создании. Свойства разделены на группы: обязательные свойства при создании объекта, необязательные свойства при создании объекта, у которых существуют значения по умолчанию, а также внутренние SIP-свойства объектов, доступные также в модуле [[Настройки оборудования|«Параметры аппаратуры»]].<br />
<br />
<br />
<br />
==== Шлюзы ====<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">01010101-0101-0101-0101-010101010101</span>" - Guid-идентификатор шлюза. <br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicGate</span>" - Название шлюза для отображения в модуле [[Настройки оборудования|«Параметры аппаратуры»]].<br />
* "<span style="color:red;">regtype</span>":<span style="color:gray;">2</span> - Тип регистрации (0 - без регистрации, 1 - регистрация на сервере, 2 - регистрация на шлюзе).<br />
<br />
Обязательные параметры (кроме шлюзов с регистрацией на сервере):<br />
<br />
* "<span style="color:red;">address</span>":"<span style="color:gray;">192.168.0.1</span>" - Доменное имя, подставляемое в запрос.<br />
* "<span style="color:red;">sipproxyaddress</span>":"<span style="color:gray;">192.168.0.1:5060</span>" - Адрес и порт удаленного узла, на который отправлять пакеты.<br />
<br />
<br />
Необязательные параметры:<br />
<br />
* "<span style="color:red;">expire</span>":<span style="color:gray;">3600</span> - Период регистрации в секундах для шлюзов с внешней регистрацией. По умолчанию ''3600''.<br />
* "<span style="color:red;">freegate</span>":<span style="color:gray;">false</span> - Для шлюза без регистрации признак разрешения обработки неизвестных входящих. В системе не должно быть более одного шлюза для приема неизвестных входящих. По умолчанию ''false''.<br />
* "<span style="color:red;">aliases</span>":["<span style="color:gray;">Domain1</span>", "<span style="color:gray;">Domain2</span>", "<span style="color:gray;">212.212.121.121</span>"] - Список дополнительных доменных имен, которые ассоциируются со шлюзом при поступлении входящих запросов. По умолчанию список пуст.<br />
<br />
<br />
Дополнительные параметры SIP:<br />
<br />
* "<span style="color:red;">interface-address</span>":"<span style="color:gray;">default</span>" - Сетевой интерфейс сервера (или ''default'' - автоопределение). По умолчанию ''default''.<br />
* "<span style="color:red;">search-in-from</span>":"<span style="color:gray;">0</span>" - Поиск соответствия между аккаунтом и входящим INVITE (0 - contact, 1 - contact+from). По умолчанию ''0''.<br />
* "<span style="color:red;">def-caller-id</span>":"<span style="color:gray;">1234567</span>" - Источник определения CallerId (0 - From:URI, 1 - From:DisplayName, 2 - Contact:URI, 3 - INVITE целиком). По умолчанию ''0''.<br />
* "<span style="color:red;">disabled-answer</span>":"<span style="color:gray;">503</span>" - SIP-ответ при вызове на отключенный поток.<br />
* "<span style="color:red;">declined-answer</span>":"<span style="color:gray;">486</span>" - SIP-ответ при отсутствии свободных транков.<br />
* "<span style="color:red;">error-answer</span>":"<span style="color:gray;">500</span>" - SIP-ответ при ошибке резервирования транка.<br />
* "<span style="color:red;">disconnect-answer</span>":"<span style="color:gray;">480</span>" - SIP-ответ при отказе сценария IVR.<br />
<br />
<br />
<br />
==== Потоки ====<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">12341234-1234-1234-1234-123412341234</span>" - Guid-идентификатор потока.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicStream</span>" - Название потока для отображения.<br />
* "<span style="color:red;">displayname</span>":"<span style="color:gray;">stream1</span>" - SIP DisplayName.<br />
* "<span style="color:red;">username</span>":"<span style="color:gray;">stream1</span>" - SIP UserName.<br />
* "<span style="color:red;">login</span>":"<span style="color:gray;">stream1</span>" - SIP Login.<br />
* "<span style="color:red;">password</span>":"<span style="color:gray;">u74S3iiB</span>" - SIP Password.<br />
* "<span style="color:red;">lines</span>":[{...}, ..., {...}] - список новых линий с параметрами, соответствующих потоку (рассмотрено ниже).<br />
<br />
<br />
Необязательные параметры<br />
<br />
* "<span style="color:red;">defaultcallerid</span>":"<span style="color:gray;">1234567</span>" - Подставляемый по умолчанию CallerId.<br />
* "<span style="color:red;">codecs</span>":[<span style="color:gray;">0</span>, <span style="color:gray;">1</span>] - Список используемых кодеков через запятую в порядке уменьшения приоритета (возможные значения: 0-711u, 1-711a, 2-gsm, 3-729). По умолчанию ''[0, 1]''.<br />
* "<span style="color:red;">numbers</span>":["<span style="color:gray;">account1</span>", "<span style="color:gray;">account2</span>"] - Список дополнительных номеров для ассоциации входящих звонков с потоком. По умолчанию список пуст.<br />
* "<span style="color:red;">dialmode</span>":<span style="color:gray;">0</span> - Способ набора номеров для шлюзов с регистрацией на сервере (0-сначала аккаунт потом номер, 1-сразу номер). По умолчанию ''0''.<br />
* "<span style="color:red;">route</span>":{...} - Свойства направления, которое будет создано и привязано к линиям (рассмотрено ниже).<br />
<br />
<br />
Свойства линий:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">79797979-7979-7979-7979-797979797979</span>" - Guid-идентификатор линии.<br />
* "<span style="color:red;">caption</span>":"<span style="color:gray;">LineCaption</span>" - Имя линии для отображения.<br />
* "<span style="color:red;">code</span>":"<span style="color:gray;">LineCode</span>" - Код линии.<br />
<br />
<br />
Свойства направления:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">68686868-6868-6868-6868-686868686868</span>" - Guid-идентификатор направления.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">RouteName</span>" - Название направления.<br />
* "<span style="color:red;">description</span>":"<span style="color:gray;">Route description</span>" - Описание направления.<br />
* "<span style="color:red;">code</span>":"<span style="color:gray;">routecode</span>" - Код направления (для указания в сценариях).<br />
* "<span style="color:red;">commandtype</span>":"<span style="color:gray;">0</span>" - Режим преобразования номера перед набором (0 - нет, 1 - выражение, 2 - служебный сценарий).<br />
* "<span style="color:red;">command</span>":"<span style="color:gray;"></span>" - Выражение или название служебного сценария для преобразования номера.<br />
<br />
<br />
<div id="sipstreamprops"></div><br />
Дополнительные параметры SIP:<br />
<br />
* "<span style="color:red;">enabled</span>":<span style="color:gray;">0</span> - Включен/выключен.<br />
* "<span style="color:red;">expires</span>":<span style="color:gray;">0</span> - Максимальный период регистрации в секундах для шлюзов с регистрацией на сервере. По умолчанию 0 - не ограничено.<br />
* "<span style="color:red;">replace-user-name</span>":<span style="color:gray;">0</span> - Место подстановки набранного номера при исходящем вызове (0 - To+RequestURI, 1 - To, 2 - RequestURI). По умолчанию ''0''. <br />
* "<span style="color:red;">dtmftype</span>":<span style="color:gray;">0</span> - Способ отправки DTMF (0 - rfc 2833, 1 - SIP INFO, 2 - InBand). По умолчанию ''0''.<br />
* "<span style="color:red;">enable-inband-dtmf</span>":<span style="color:gray;">0</span> - Включение детектора звукового DTMF во входящем rtp-потоке (0 -выключен, 1 - включен). По умолчанию ''0'', так как операция ресурсо-затратная.<br />
* "<span style="color:red;">wait-ack</span>":<span style="color:gray;">1</span> - Ожидать поступления сообщения ACK перед продолжением обработки входящего звонка (0 - нет, 1 - да). По умолчанию ''1''.<br />
* "<span style="color:red;">can-reinvite</span>":<span style="color:gray;">0</span> - Разрешить изменять параметры связи во время коммутации (0 - нет, использовать транскодинг; 1 - да). По умолчанию ''0''.<br />
* "<span style="color:red;">fax-enable</span>":<span style="color:gray;">0</span> - Разрешить прием/передачу факсов T.30 (0 - нет, 1-да). По умолчанию 0.<br />
* "<span style="color:red;">fax-outgoing-timeout</span>":<span style="color:gray;">60</span> - Время ожидания ответа факса в секундах при исходящем сеансе. По умолчанию ''60''.<br />
* "<span style="color:red;">fax-enable-ecm</span>":<span style="color:gray;">1</span> - Error Correction Mode (ECM) для факсов (0 - выключено, 1-включено). По умолчанию ''1''.<br />
* "<span style="color:red;">use-remote-address</span>":<span style="color:gray;">1</span> - Адрес назначения для RTP трафика (0 - адрес/порт из SDP, 1 - адрес/порт отправителя). По умолчанию ''1''.<br />
* "<span style="color:red;">g711-size</span>":<span style="color:gray;">0</span> - Размен звукового пакета при отправке RTP данных в кодеке 711a/711u (0 - 40мс, 1 - 20мс). По умолчанию ''1''.<br />
<br />
<br />
<br />
==== Телефоны ====<br />
<br />
<br />
Обязательные параметры:<br />
<br />
* "<span style="color:red;">id</span>":"<span style="color:gray;">35353535-3535-3535-3535-353535353535</span>" - Guid-идентификатор телефона и связанной с ним линии.<br />
* "<span style="color:red;">name</span>":"<span style="color:gray;">DynamicPhone</span>" - Название телефона для отображения.<br />
* "<span style="color:red;">address</span>":"<span style="color:gray;">192.168.0.231:5060</span>" - Адрес устройства для работы в режиме без регистрации.<br />
* "<span style="color:red;">username</span>":"<span style="color:gray;">user</span>" - SIP UserName.<br />
* "<span style="color:red;">login</span>":"<span style="color:gray;">phone</span>" - SIP Login (по умолчанию совпадает с SIP UserName).<br />
* "<span style="color:red;">password</span>":"<span style="color:gray;">7thNx2wf</span>" - SIP Password.<br />
<br />
<br />
Необязательные параметры: <br />
<br />
* "<span style="color:red;">codecs</span>":[<span style="color:gray;">0</span>, <span style="color:gray;">1</span>] - Список используемых кодеков через запятую в порядке уменьшения приоритета (возможные значения: 0-711u, 1-711a, 2-gsm, 3-729). По умолчанию ''[0, 1]''.<br />
* "<span style="color:red;">defaultuserid</span>":"<span style="color:gray;">84848484-8484-8484-8484-848484848484</span>" - Guid-идентификатор пользователя, привязанного к телефону как [[Свойства компонентов#SipPhone|«пользователь по умолчанию»]]. По умолчанию без привязки.<br />
* "<span style="color:red;">websocketuserid</span>":"<span style="color:gray;">84848484-8484-8484-8484-848484848484</span>" - Guid-идентификатор пользователя, привязанного к телефону как [[Свойства компонентов#SipPhone|«пользователь webcrm»]]. По умолчанию без привязки.<br />
* "<span style="color:red;">citystraight</span>":<span style="color:gray;">-1</span> - (-1 - по умолчанию БД, 0 - нет, 1 - да). По умолчанию ''-1''.<br />
* "<span style="color:red;">busymode</span>":<span style="color:gray;">-1</span> - Режим отбоя (-1 - по умолчанию БД, 0 - SIP-disconnect, 1 - генерировать короткие гудки). По умолчанию ''-1''.<br />
* "<span style="color:red;">translit</span>":<span style="color:gray;">-1</span> - Производить транслитерацию (-1 - согласно общим настройкам, 0 - нет, 1 - да). По умолчанию ''-1''.<br />
* "<span style="color:red;">linecode</span>":"<span style="color:gray;">DynamicPhoneCode</span>" - Код линии.<br />
* "<span style="color:red;">department</span>":"<span style="color:gray;">57575757-5757-5757-5757-575757575757</span>" - Идентификатор существующего подразделения для привязки и отображения в разделе «Сотрудники». <br />
<br />
<br />
Дополнительные параметры SIP аналогичны [[#sipstreamprops|параметрам потоков]].<br />
<br />
<br />
=== Пример сценария ===<br />
<br />
[[Special:FilePath/(Example) Dynamic SIP.oscr|(Example) Dynamic SIP.oscr]]</div>Peter%D0%91%D0%B0%D0%B7%D0%B0_%D0%B7%D0%BD%D0%B0%D0%BD%D0%B8%D0%B9_OktellБаза знаний Oktell2014-01-27T06:15:21Z<p>Peter: </p>
<hr />
<div>__NOTOC__<br />
<h4> <p style="text-align:center"> <span style="color:black" > Найти нужную информацию в wiki поможет наш оператор: </span> </p> <br />
<br />
<p style="text-align:center"> <span style="color:darkblue" >'''тел. 8-800-555-15-86 (доб. 221) ; тел. +7 (495) 229-49-89 (доб. 221) пн.-пт. с 9 до 17 часов'''</span> </p> <br />
<br />
<center>[[Как пользоваться Wiki | ''' >>> Как пользоваться Wiki <<<''' ]]</center><br />
</h4><br />
----<br />
<h4><br />
::{|width = "100%"<br />
<br />
|width="33%" valign="top"|<br />
<br />
* [[Установка_Oktell | <span style="color:black">'''Установка Oktell'''</span>]]<br />
<br />
* [[ОПИСАНИЕ_ПРОГРАММЫ | <span style="color:black">'''Описание программы'''</span>]]<br />
<br />
* [http://r.oktell.ru/wiki/ <span style="color:black">'''База знаний'''</span>]<br />
<br />
|width="33%" valign="top"|<br />
<br />
* [[Практики | <span style="color:black">'''Практики''' </span> ]] <br />
<br />
* [[Возникающие_проблемы_и_способы_их_решения | <span style="color:black">'''Решение проблем''' </span>]]<br />
<br />
* [[Уроки| <span style="color:black">'''Уроки''' </span>]]<br />
<br />
|width="33%" valign="top"|<br />
<br />
* [[VoIP-провайдеры |<span style="color:black"> '''VoIP-провайдеры'''</span>]] <br />
<br />
* [[VoIP-оборудование |<span style="color:black"> '''VoIP-оборудование'''</span>]]<br />
<br />
|}<br />
</h4><br />
----<br />
<br />
----<br />
<br />
::{|width="100%"<br />
<br />
|width="33%" valign="top"|<br />
<br />
=== [[Установка Oktell]] ===<br />
:*[[Технические требования]]<br />
:*[[Введение Что такое Oktell Обзор и установка |Введение. Что такое Oktell. Обзор и установка ]]<br />
:*[[Урок 1 Клиентское приложение |Урок 1. Клиентское приложение ]]<br />
:*[[Урок 2 Добавляем пользователей и роли | Урок 2. Добавляем пользователей и роли]]<br />
:*[[Урок 3 Создание карты сети | Урок 3. Создание карты сети]]<br />
:*[[Активация системы]]<br />
:*[[Сценарий входящей маршрутизации]]<br />
:*[[Сценарий исходящей маршрутизации]]<br />
:*[[Сценарий набора быстрых и внешних номеров]]<br />
:*[[Сценарий переключения]]<br />
:*[[Использование клиентского web интерфейса]]<br />
:*[[Подключение к ТСОП и Е1 через VoIP шлюзы]]<br />
:*[[Настройка работы сервера за NAT]]<br />
:*[[Подключение IP телефонов и софтфонов]]<br />
:*[[Подключение аналоговых телефонов и факсов через VoIP шлюзы]]<br />
<br />
=== [[Уроки]] ===<br />
:*[[Уроки|...]]<br />
:*[[Урок 13 Статистика АТС| Урок 13. Статистика АТС]]<br />
:*[[Урок 14 Телефон| Урок 14. Телефон]]<br />
<br />
=== [[Видеоуроки]] ===<br />
<br />
:*[[Видеоурок 1. Установка, активация, первый звонок]]<br />
:*[[Видеоурок 2. IP телефоны. Принцип создания сценариев]]<br />
:*[[Видеоурок 3. Групповые номера и уведомления ]]<br />
:*[[Видеоурок 4. Исходящие звонки и отладка сценариев ]]<br />
:*[[Видеоурок 5. Актуализация телефонной базы ]]<br />
:*[[Настройка Oktell в устройстве Zyxel X8004]]<br />
<br />
=== [[Практики]] ===<br />
:*[[Сохранение архивной копии Oktell в облачной системе хранения данных 4Sync]]<br />
:*[[Защита IP АТС от внешних атак]]<br />
:*[[Настройка Firewall Сервера IP АТС]]<br />
:*[[Очереди ожидания и приоритеты]]<br />
:*[[Автоматический обзвон абонентов сценарием IVR]]<br />
:*[[Автоматический обзвон абонентов сценарием IVR с подключением оператора]]<br />
:*[[Групповые номера. Перебор номеров по неответу]]<br />
:*[[Выбор исходяшей линии по маске]]<br />
:*[[Маршрутизация звонка на основании параметров]]<br />
:*[[Сценарий IVR вместо отбоя внешней линии]]<br />
:*[[Праздники с Октелл]]<br />
:*[[Вывод пользователя из группового номера]]<br />
:*[[Добавление и удаление линии в номере. Управление групповым номером с телефона]]<br />
:*[[Практики|Другие практики]]<br />
<br />
[http://gosnorkokontrol.livejournal.com/ Дополнительно: Блог Алексея Клепова, содержащий массу полезных практик, настроек и неформальной критики.]<br />
<br />
|width="33%" valign="top"|<br />
<br />
=== [[ОПИСАНИЕ ПРОГРАММЫ]] ===<br />
:*[[Офис]]<br />
:*[[Call-центр]]<br />
:*[[Администрирование]]<br />
:*[[Телефон]]<br />
<br />
=== [[Веб-интерфейс]] ===<br />
:*[[Клиентский HTTP интерфейс]]<br />
:*[[Серверный HTTP интерфейс]]<br />
<br />
=== [[Дополнительно]] ===<br />
:*[[Серверное приложение|Серверная служба]]<br />
:*[[Принципы работы логики|Некоторые принципы работы логики]]<br />
:*[[Возможные проблемы и способы их устранения]]<br />
:*[[Ключ защиты]]<br />
:*[[Перечень_файлов,_необходимых_для_озвучивания_числовых_значений|Перечень файлов озвучивания числовых значений]]<br />
:*[[Структура пространственной БД]]<br />
:*[[Порты, используемые системой]]<br />
:*[[Параметры файлов конфигурации]]<br />
:*[[Форматы звуковых файлов]]<br />
:*[[Подключение внешних БД]]<br />
:*[[Обеспечение бесперебойности работы]]<br />
:*[[Резервное копирование баз данных]]<br />
:*[[Порядок обновления программы]]<br />
:*[[Версия 2.8 на базе .NET Framework v4.0]]<br />
:*[[Варианты резервирования системы]]<br />
:*[[SIP ответы и их значения]]<br />
:*[[Дополнительно | Прочее]]<br />
<br />
=== [[Утилиты]] ===<br />
:*[[Oktell Web Клиент]]<br />
:*[[Oktell Web Оператор]]<br />
:*[[Oktell Gооdock]]<br />
:*[[Oktell Chrome Call Plugin]]<br />
:*[[Oktell Antirobot ]]<br />
:*[[Oktell.js]]<br />
:*[[Oktell-panel.js]]<br />
<br />
<br />
|width="33%" valign="top"|<br />
<br />
=== [[Интеграции|Способы интеграции с другими продуктами]] ===<br />
<br />
:* [[Интеграция с Desktop приложениями ]]<br />
<br />
:* [[Общее руководство по Web-интеграции | WEB-интеграция ]]<br />
:*:* [[Общее руководство по Web-интеграции]]<br />
:*:* [[Серверный HTTP интерфейс|HTTP-интерфейс сервера Oktell]]<br />
:*:* [[Клиентский HTTP интерфейс|HTTP-интерфейс клиента Oktell]]<br />
:*:* [[Oktell_Web-Socket_Protocol|Web-Socket протокол Oktell-WebCRM]]<br />
:*:* [http://js.oktell.ru Веб-плагин Oktell.js]<br />
:*:* [http://www.oktell.ru/weboktell/ Веб-клиент Oktell]<br />
:*:* [[Компоненты сценариев диалога#WebForm|Веб-формы операторов Oktell]]<br />
:*:* [[Общие компоненты сценариев#WebRequest|Компонент сценариев «Web-запрос»]]<br />
<br />
:* [[Интеграция между базами данных]]<br />
:* [[Взаимосвязанная работа серверов Oktell]]<br />
<br />
=== [[Интеграции с CRM системами]] ===<br />
<br />
:* [[Oktell и Мегаплан]]<br />
<br />
=== [[Возникающие проблемы и способы их решения]] ===<br />
:*[[Возможные проблемы и способы их устранения]]<br />
:*[[Серверная служба не запускается]]<br />
:*[[Клиентское приложение не подключается к серверу]]<br />
:*[[Не устанавливается регистрация на сервере SIP провайдера]]<br />
:*[[Потеря регистрации на сервере SIP провайдера]]<br />
:*[[IP телефон не регистрируется на сервере]]<br />
:*[[Обрывы в сценарии IVR. Методика поиска неисправности]]<br />
:*[[Не устанавливается соединение с абонентом]]<br />
:*[[Отсутствие звука при соединении с абонентом]]<br />
:*[[Проблемы с приемом DTMF сигналов в сценарии IVR]]<br />
:*[[Возникающие проблемы и способы их решения|Другие проблемы]]<br />
<br />
=== [[История обновлений. Новые возможности]] ===<br />
<br />
=== [[Последние добавленные статьи]]===<br />
<br />
|}<br />
<br />
== Продукт: Oktell SIP-GSM Gateway==<br />
<br />
::{|width="100%"<br />
|width="33%" valign="top"|<br />
:*[[Настройка Oktell SIP-GSM|Настройка]]<br />
:*[[Применение Oktell SIP-GSM|Применение]]<br />
|width="33%" valign="top"|<br />
<br />
|}</div>PeterTestTest2014-01-27T06:05:35Z<p>Peter: Новая страница: «a»</p>
<hr />
<div>a</div>Peter%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9История изменений2014-01-24T19:51:21Z<p>Peter: </p>
<hr />
<div>[[Дополнительно|Наверх]]<br />
<br />
<br />
__TOC__<br />
<br />
<br />
<br />
<br />
====версия 2.9 (02.10.2013)====<br />
<br />
<br />
* Обнаружена и исправлена ошибка SIP-сервера, в ходе которой полученные повторные ответы 200 OK на сообщения REGISTER приводили к блокировке аккаунта вплоть до перезагрузки<br />
* Исправлен выбор расширения для файла в компоненте IVR сценариев ''[[Компоненты сценариев IVR#Record|Запись]]'' в соответствии с выбранным кодеком.<br />
* Исправлена ошибка элемента управления ''таблица'' клиентского приложения, приводившая в ходе удаления нескольких выделенных строк к некорректному определению индексов.<br />
* Реализовано определение номеров и доступ к функциям ''CallerId'' и ''CalledId'' из сценария для шлюзов с внутренними линиями.<br />
* Восстановлен разбор мультипартовых SIP-INVITE сообщений.<br />
* Обнаружена и исправлена проблема периодического отсутствия отчета об успешной работе факса, несмотря на удачное завершение приема/передачи.<br />
* Реализовано сохранение кода отказа SIP в статистике исходящих попыток звонков в колл-центре, а также их передача в сценарий обработки результата попытки звонка по задаче.<br />
* Реализовано перенаправление звонков на указанный адрес при получении SIP-ответа ''3xx Moved''. Для звонков по шлюзам без регистрации и шлюзам межсерверного взаимодействия, а также для звонков на внутренние номера, не использующие SIP-forking.<br />
* Обеспечена возможность генерации сигналов КПВ в SIP-линии, по которым был отправлен предварительный ответ ''183 Session Progress''.<br />
* Обнаружена и исправлена проблема неверного отображения свойств компонента ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' в режиме ''установить для линии''.<br />
* Реализована предварительная проверка параметров лицензии при добавлении [[Динамическое_управление_картой_сети|динамических транков]].<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлена возможность определения параметров лицензии, количества используемых линий, пользователей, а также команда принудительного обновления сертификата.<br />
* Исправлена привязка звонка к задаче с помощью компонента ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' через пользователя. <br />
* Исправлена ошибка SIP-сервера при работе за NAT. Симптом: в поле Contact подставлялся локальный адрес.<br />
* Реализовано обновление состояния входящих регистрационных сессий по динамическим потокам при перезагрузке сервера, если динамические потоки загружаются на старте).<br />
* Исправлена функция ''CallerId'' в сценариях IVR для внутренних линий SIP шлюзов. Симптом: возвращает пустоту.<br />
* Исправлена работа компонента сценариев ''[[Общие компоненты сценариев#WebRequest|WEB-запрос]]''. Симптом: после перехода на .NET v4.0 многократная работа компонента в различных сценариях после нескольких сот тысяч запросов прекращает отправку.<br />
* Реализован дополнительный вариант фильтрации по правам компонентов ''[[Компоненты сценариев IVR#SwitchExt|Переключение на внешние линии]]'' и ''[[Компоненты служебных сценариев#Call|Дозвон]]'' - по приоритетам линий.<br />
* Размещение информации по вручную прикрепленному к задаче звонку в пространственной таблице колл-центра ''EffortConnections''.<br />
* Исправлено отображение задач в модуле ''[[Ресурсы]]''. Симптом: при некоторых обстоятельствах выводятся не все задачи.<br />
* Исправлена ошибка SIP-forking: множественный звонок при исходящем же отбое не инициировал завершение одной из сессий.<br />
* Обнаружена и исправлена некорректная обработка одновременных встречных Cancel <-> Ok, приводившая к подвисанию звонка вплоть до разрыва вручную.<br />
* Исправлена генерация номеров динамических линий. Некорректное дублирование приводит к проблемам в коммутировании линий.<br />
* Исправлена загрузка сильно вложенного и взаимозамкнутого [[Внутренние номера#Rules|номерного плана]].<br />
* Исправлена ошибка WebRTC, возникающая при закрытии вкладки браузера с активной сессией разговора.<br />
* В интерфейс [[Oktell Web-Socket Protocol|WebSocket]] добавлены методы ''сс_addoperatortotask'', ''cc_removeoperatorfromtask'', ''cc_settaskactive''.<br />
* Реализован обмен сообщениями в веб-клиенте в виде диалогов. Интерфейс [[Oktell Web-Socket Protocol|WebSocket]] сервера пополнен рядом методов.<br />
* Добавлен режим запуска [[Служебные задачи|служебных задач]] - ''На старте сервера''.<br />
* Реализовано сохранение в БД информации о текущем состоянии регистрации всех SIP-потоков системы (таблица A_StreamRegistration).<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' внесены функции добавления/удаления оператора в задачу.<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлена возможность определения заголовков из входящего SIP INVITE или 200OK сообщения.<br />
* В выражения сценариев добавлена функция ''[[Выражения#Translit|translit]]''.<br />
* Исправлена [[Серверный HTTP интерфейс#upload|закачка файлов]] на веб-сервер Oktell при отсутствии заголовка Content-transfer-encoding.<br />
* Добавлена ролевая привилегия редактирования групп [[Мои контакты|контактов]].<br />
* Добавлена ролевая привилегия работы с [[Мои контакты|контактами]] из общих групп. Запрещает удалять и редактировать общие контакты, назначать личным контактам общие группы, а также создавать, редактировать и удалять общие группы.<br />
* Восстановлена работа функции ''Время отсутствия звука в линии'', возвращаемая компонентом ''[[Общие компоненты сценариев#UserState|Статус объекта]]''.<br />
* Оптимизирована с точки зрения объема используемой памяти обработка входящих SIP-сообщений.<br />
* Оптимизировано обновление [[Динамическое_управление_картой_сети|динамической карты сети]] в случае, когда изменений фактически не производится.<br />
* Обнаружена и исправлена ошибка сохранения имен контактов и пользователей с символом перевода строки, который отрицательно влияет на формирование SIP-сообщений.<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлена возможность определения локальных адресов сервера.<br />
* Исправлена работа компонента ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' в части установки свойств конференциям.<br />
* Исправлена функция ''UrlDecode'' в разделе [[Выражения|выражений сценариев]].<br />
* Обнаружена и обработана проблема фильтрации отправляемого SIP сообщения CANCEL при моментальной отмене до получения предварительного ответа.<br />
* В модулях клиентского приложения заменен браузер. Встроено ядро браузера CHROME.<br />
* В режиме дизайнера веб-форм добавлена возможность выбирать в качестве источника файлы MHT.<br />
* В компонент сценариев «Файловая операция» добавлена функции взятия хеша MD5 от содержимого.<br />
<br />
<br />
<br />
<br />
====версия 2.8 (26.07.2013)====<br />
<br />
<br />
* Реализована возможность [[Параметры_АТС#StrongPassword|запрета использования простых паролей]].<br />
* Реализована возможность [[Параметры_АТС#PaidNumbers|автоматического запрета всех исходящих звонков на несанкционированные номера]].<br />
* Реализована возможность использования динамических рабочих мест [[Параметры файлов конфигурации#EnableAutoMapSip|с автоматической привязкой к существующим в карте сети SIP-телефонам]].<br />
* Реализован альтернативный способ управления гарнитурой с клавиатуры, поддерживающий работу в x64 системах.<br />
* Обнаружена и устранена причина периодических зависаний клиентского приложения в совершенно различных модулях.<br />
* Реализовано рабочее место оператора в web-клиенте, поддерживающее отображение [[Компоненты сценариев диалога#Диалоговая форма|диалоговых форм стандартного типа]].<br />
* Добавлен ряд новых функций в компонент сценариев [[Общие_компоненты_сценариев#Статус объекта|«Статус объекта»]]: определить для линии время отсутствия входящего звука, определить вхождение линии в направление, определить идентификатор и номер скоммутированной линии/конференции, определить наличие привилегии у пользователя, принудительно перерегистрировать сип-аккаунт или все сип-аккаунты, определить внешний IP-адрес сервера через STUN-запрос, сохранить скриншот пользователя.<br />
* Реализована возможность использовать одновременно связь с CRM и web-клиентов на основе OktellJS.<br />
* Реализована возможность использовать защищенные каналы связи (TLS) для работы c web-сервером Oktell. Касается взаимодействия по [[Серверный_HTTP_интерфейс|HTTP-API]], а также для работы [[Oktell_Web-Socket_Protocol|web-socket]] каналов.<br />
* Реализована возможность подключаться к CRM по http/https в альтернативу [[Oktell_Web-Socket_Protocol#Arch1|websocket-соединениям]].<br />
* Обнаружена и исправлена проблема версии Oktell 2.8 по использованию плагинов внутри собственного процесса.<br />
* Добавлены ролевые привилегии: возможность исполнять методы Web-API, доступ к скачиванию записей разговоров.<br />
* Изменена настройка [[Настройки_веб-сервера|HTTP-веб-сервера]], WebSocket-сервера, [[Интеграция_с_Web-Socket_CRM|подключения к WebCRM]] и Web-клиента, настройка сертификатов X509 для работы TLS.<br />
* Исправлена проблема проверки и отключения лицензий в случае одновременного использования динамических рабочих мест и плат телефонии, а также превышения общего количества линий.<br />
* Исправлены некоторые обнаруженные ошибки отображения в клиентском приложении.<br />
* Исправлена проблема менеджера задач по работе с индивидуальными операторскими задачами в режиме запроса на звонок. Симптом: если оператор оставляет окно запроса на звонок на срок более получаса, абонент подвисает и задача не может быть завершена до перезагрузки сервера.<br />
* Исправлена выдача страниц [[Серверный_HTTP_интерфейс|HTTP-веб-сервером]]. Симптом: неверный content-type, вследствие чего ответы скачивались, а не отображались браузерами.<br />
* Добавлена автоматическая выдача веб-сервером файлов index.html из подпапок.<br />
* Добавлена возможность управления поведением компонента [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние]] в режиме ''прослушивания медиа-потока'' через [[Параметры_файлов_конфигурации#PBX_Use180SdpAs183|конфигурационный файл]]. Решается задача переключения между генерацией КПВ (длинных гудков) и медиа-соединением при получении последовательности различных ответов 180, 183.<br />
* В сценариях реализован новый [[Переменные#Types|тип переменных]] с глобальной серверной областью видимости без привязки к сессиям. Существующие глобальные переменные преобразованы в сессионные.<br />
* Реализована функция [[Управление базами данных#ComputeVoices|расчета времени владения разговором в коммутациях]].<br />
* Добавлена функция NowTick в [[Выражения|выражения сценариев]].<br />
* При удалении нелицензированных внутренних линий внедрена функция выбора преимущественно каналов, не находящихся в коммутации.<br />
* При отправке факс-сообщения установлено принятие за успешный результат отправки хотя бы одной страницы.<br />
* Реализована возможность [[Динамическое управление картой сети|динамического управления]] объектами в карте сети с помощью сценариев (json-структура в компоненте [[Общие компоненты сценариев#UserState|«Статус объекта»]]).<br />
* При обновлении клиентского приложения с сервера реализовано отображение процента завершения скачивания архива.<br />
* Добавлен разбор [http://ru.wikipedia.org/wiki/JSON JSON]-форматированных строк в сценариях с помощью компонента [[Общие компоненты сценариев#Parser|«Парсер»]].<br />
* Реализована [[Свойства компонентов#SipPhone|поддержка WebRTC]] в HAL.SIP.<br />
* Реализована функция [[Свойства компонентов#SipPhone|SIP.forking]] - множественная регистрация устройств под одной учетной записью.<br />
* В веб-операторе реализована поддержка WebRTC и регистрация телефона на сервере Oktell (нового или вторым подключением к существующему).<br />
* Добавлен ряд возможных событий-команд для работы плагинов: ''declinecall'', ''connectabonents'', ''makeflash''<span style="color:gray;">(mode=''abort''|''next''|''switch'')</span>.<br />
* Модернизировано сохранение пользовательских сообщений через очередь доступа к БД.<br />
* В компоненте сценариев [[Общие компоненты сценариев#UserState|«Статус объекта»]] реализованы дополнительные функции для взаимодействия с конференциями.<br />
* В компоненте сценариев [[Общие компоненты сценариев#UserState|«Статус объекта»]] реализованы дополнительные функции для взаимодействия с направлениями.<br />
* В АТС внедрена функция отказа от вызова без фиксации пропущенного вызова на телефоне, если отказ производится по причине снятия трубки другим абонентом вызываемого группового номера.<br />
* Реализована функция сквозной коммутации в состоянии early-media (SIP-сообщение ''183 Session Progress'') с обеих сторон.<br />
* Реализована функция подключения текущего звонка к задаче через клиентский модуль [[Мое рабочее место|«Мое рабочее место»]], через компонент [[Общие компоненты сценариев#UserState|«Статус объекта»]], а также через компонент сценариев [[Компоненты служебных сценариев#Connector|«Коммутатор»]] и командой [[Oktell_Web-Socket_Protocol#attachcalltotask|cc_attachcalltotask]] в интерфейсе websocket.<br />
* Добавлены задачи нового типа [[Голосовые задачи#ManualCall|«Дозвон вручную»]] для организации кампаний с полностью ручным определением абонентов и их вызовом.<br />
* Реализована поддержка gzip в [[Серверный_HTTP_интерфейс|веб-сервере]] при отправке скриптов и документов.<br />
* Реализована функция динамической регистрации учетной записи SIP-телефона и привязки ее к рабочему месту в браузере с использованием webrtc.<br />
* Оптимизировано сохранение [[Карта сети|карты сети]] путем частичного изменения.<br />
* Оптимизировано сохранение [[Настройки оборудования|настроек аппаратуры]].<br />
* В контекстное меню модуля [[Ресурсы|«Ресурсы»]] добавлены команды ''Позвонить'', ''Подключиться к разговору'', ''Отправить сообщение операторам задачи''.<br />
* В модуле «Ресурсы» по умолчанию удалены из отображения линии. Включить можно в разделе «Администрирование. Клиентское приложение».<br />
* В интерфейс websocket добавлена команда [[[[Oktell_Web-Socket_Protocol#pbxmakeflash|''pbxmakeflash'']]. В функцию [[Oktell_Web-Socket_Protocol#login|''login'']] добавлено свойство ''usewebrtc'', в ответе приводятся параметры для подключения SIP-софтфона или WebRTC-софтфона.<br />
* Изменено хранение пользовательских сообщений в БД, произведена нормализация с учетом массовых сообщений. <br />
* Реализована функция прослушивания канала, являющегося участником конференции. Теперь в момент прослушивания доступен звук со всех участников конференции.<br />
* В компонент сценариев IVR [[Компоненты сценариев IVR#PlayFile|«Воспроизведение»]] добавлен режим генерации DTMF.<br />
* Обновлены стандартные [[Статистика|отчеты коллцентра]].<br />
* Реализована нормальная обработка комбинации HOLD + Soft Flash в АТС.<br />
* Изменен порядок привязки SIP-сообщений к сессиям. Теперь одинаковые callid не являются проблемой, если используются в рамках разных учетных записей.<br />
* Реализовано сохранение в статистике и проброс в [[Голосовые задачи#EffortResultScript|сценарий обработки результата попытки]] в качестве 5-го неявного параметра кода ответа-отказа SIP при исходящих звонках.<br />
* В сценарии IVR добавлена возможность определять файл записи/воспроизведения с помощью выражения.<br />
* Добавлен новый тип отображения отчетов - [[Статистика#VertHysto|вертикальная гистограмма]].<br />
* Изменено отображение отчетов типа [[Статистика#Plane|«Плоскость»]]. Теперь в качестве значений допускаются ''NULL''.<br />
* Добавлено сохранение идентификаторов сессии и коммутации в [[Управление базами данных#DTMFflow|таблицу DTMF сигналов]].<br />
* Реализована возможность [[[[Конференц-связь#Управление конференцией с помощью DTMF|управления конференцией с телефона через DTMF]]. Преобразование коммутации в конференцию, приглашение участников, отключение участников, завершение конференции.<br />
* Реализовано хранение данных в БД о регистрациях клиентских SIP устройств, и применение их при перезапуске HAL и сервера.<br />
* Исправлено прослушивание записей конференций. Происходила ошибка при нахождении клиента и сервера в разных часовых поясах.<br />
* Исправлены некоторые проблемы в HAL.VoIP сервере, связанные с отключением устройств из-за потери связи.<br />
* Исправлена ошибка, связанная с невозможностью изменить базовый порт SIP (5060).<br />
* Исправлена ошибка предварительного преобразования многостраничных .tiff изображений в клиентском приложении при отправке факсов. При использовании клиентского модуля преобразований оставалась только первая страница.<br />
* Добавлено описание прослушиваемой конференции во встроенный плеер.<br />
* Исправлена проблема изредка наблюдаемого явления отсутствия звука в SIP-телефонах после изменения параметров сессии.<br />
* Обнаружены и устранены некоторые оставшиеся проблемы при работе шлюза без регистрации из-за NAT.<br />
* Обнаружена и исправлена ошибка в сохранении приоритета [[Запись разговоров|общих правил записи коммутаций]].<br />
* Обнаружена и устранена проблема загрузки ресурсов плагина в версии 2.8, работающей в среде .NET Framework v4.0. <br />
* Обнаружена и устранена проблема в триггере БД при сохранении пользовательских сообщений, приводящая при больших нагрузках к блокировкам и откату транзакций сохранения.<br />
* Обнаружена и устранена проблема общего торможения АТС при массовых задержках ответов на отправляемые сервером SIP-сообщения CANCEL.<br />
* При использования сценария набора номеров для приглашения новых участников конференции организована передача данных о пользователе-инициаторе вызова.<br />
* Обнаружена и исправлена ошибка АТС, приводящая при определенных условиях использования режима HOLD к подвисанию канала вплоть до ручного сброса в мониторинге.<br />
* Исправлена ошибка раздела [[Настройки оборудования|«Параметры аппаратуры»]] клиентского приложения, связанная с невозможностью сохранить измененные значения после повторного переключения в модуль.<br />
* Понижены минимальные возможные границы для некоторых настроек (мин время в очереди, макс время переключения на оператора, время Hunt-вызова)<br />
* Исправлена работа функции управления гарнитурой с клавиатуры в COM-ядре клиентского приложения.<br />
* Обнаружена и исправлена ошибка [[Серверный_HTTP_интерфейс|веб-сервера]], связанная с использованием одного порта в нескольких настройках. При переключениях порт может быть фантомно занят вплоть до перезагрузки службы.<br />
* Исправлена функция мягкого разрыва. Не производился разрыв существующей коммутации, что в случае использования [[Сценарии АТС#ScrInsteadBusy|«сценария вместо отбоя»]] могло приводить к неожиданным эффектам.<br />
* Исправлена ошибка обратного отзвона из удержания. При определенных обстоятельствах первым на дозвон мог разместиться абонент из общей очереди, и лишь затем удерживаемый ранее абонент.<br />
* Исправлена ошибка набора номеров при вызове шлюзов с регистрацией на сервере через аккаунт. Символы w, z, q воспринимались как служебные.<br />
* Понижен приоритет отложенных операций микширования, упаковки и расчета владения разговором.<br />
* Исправлена ошибка в автодозвоне при звонках на быстрые номера. При неудачном вызове и отказе от звонка возможно зависание линии до сброса вручную в мониторинге.<br />
* Исправлен ряд ошибок, добавлены новые функции в рабочее место оператора в вебе.<br />
* Реализовано нелимитированное сохранение резервных копий БД и сценариев с фильтрацией по временным интервалам.<br />
* Изменено поведение входящей задачи при неснятой оператором трубке и запрещенной к использованию очереди. Ранее вызов отправлялся всем операторам сразу. Теперь звонок возвращается в IVR.<br />
* Изменено значение [[Параметры файлов конфигурации#EnableAutoMap|конфигурационного ключа ''EnableAutoMap'']]. По умолчанию теперь включено для поддержки работы веб-софтфона из рабочего места оператора.<br />
* Исправлена ошибка перевода в перерыв в колл-центре, влекущая разрыв текущей коммутации.<br />
* Исправлена ошибка АТС, оставляющая пустыми значения callerid и calledid при звонках со шлюзов с внутренними линиями.<br />
* В конфигурационный файл клиентского приложения внесен параметр (''ShowLoadingBar = 0''), позволяющий отключить окно ожидания загрузки.<br />
* Исправлена ошибка в модуле [[Переадресация|«Переадресация»]]. Не происходило перетаскивание правил.<br />
* В модуле [[Кабинет#Заказы на встречные звонки|«Кабинет. Встречные звонки»]] восстановлено контекстное меню.<br />
* Выявлена проблема подключения плагинов из сторонних каталогов в версии 2.8. В конфигурационных файлах клиентского приложения и oktell.PluginStarter требуется указание <span style="color:green;">''<runtime><loadFromRemoteSources enabled="true"/></runtime>''</span>.<br />
* Исправлена функция переключения на сценарий IVR путем подмены. Состояние не выставлялось требуемое.<br />
* Исправлена проблема некорректного пересчета SeqNum в исходящем RTP потоке при смене SSRC. В некоторых случаях после смены звук пропадает.<br />
* Исправлена проблема загрузки гарнитуры с неопределенными устройствами ввода-вывода.<br />
* Исправлена ошибка SIP, заключавшаяся в неотправке дублирующих пакетов ACK на повторные сообщения 200OK.<br />
* Исправлен алгоритм менеджера задач в части работы с абонентским списком через кэш в памяти и с номерами для перезвона.<br />
* Снято ограничение [[Карта сети|карты сети]], блокирующее сохранение шлюзов с одинаковым адресом прокси-сервера.<br />
* Обнаружена и решена проблема утечки памяти при [[Управление записями разговоров|микшировании в формат MP3]].<br />
* Обнаружена и устранена причина ухудшения работы факсов в версии 2.8.<br />
<br />
<br />
<br />
====версия 2.8 (30.01.2013)====<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Версия 2.8.130130 работает в среде .NET Framework v4.0. Перед обновлением с версии 2.7 и более ранних версий настоятельно рекомендуется ознакомиться [[Версия 2.8 на базе .NET Framework v4.0|со статьей]].<br />
<br />
* Произведена миграция в среду .NET Framework v4.0.<br />
* Реализована возможность сохранения [[Управление_базами_данных#FailedCalls|неудачных исходящих звонков]]. Отображение происходит в разделе «Статистика АТС» при указании в фильтре нулевой длительности.<br />
* Исправлена работа сервера за NAT с телефонами за NAT.<br />
* Реализована возможность активировать автоматическую блокировку звонков на платные номера. Список платных номеров хранится в БД. Активация режима в разделе "Сервер АТС" модуля "Общие настройки".<br />
* Добавлена функция «Код направления» в служебные и диалоговые сценарии. Применима только в режимах, связанных с АТС.<br />
* Исправлена ошибка отображения количества отключенных внутренних линий.<br />
* Изменена функция ограничения задачи по количеству внешних линий. Учитывает резервированное состояние линии.<br />
* Исправлена ошибка в диаграмме количества звонков по номерам в модуле «Статистика АТС».<br />
* Восстановлен нечувствительный к регистру поиск в выпадающем списке при наборе текста.<br />
* Реализован веб-сервер, выдающий страницы из папки WWW, слушающий стандартный 80 порт. Сильно ограничен по функционалу. Может быть отключен в конфигурационном файле сервера ключом ''UseWebServer80''.<br />
* Исправлена проблема некорректного звука гудков на платах Ольха. Проявлялось после коммутации с SIP каналами.<br />
* Реализовано разбиение лог-файлов HAL согласно настройкам в конфигурационном файле по максимальному размеру части.<br />
* Реализована возможность частичного обновление клиентских конфигурационных файлов (всех, указанных клиентов или кроме указанных клиентов).<br />
* В компоненте сценариев «Статус объекта» реализована функция «Проверить наличие привилегии у пользователя» по коду.<br />
* Добавлена ролевая привилегия на скачивание файлов записей.<br />
* В рамках авторизации по websocket реализована возможность создавать сессии и указывать время их жизни (до 2х недель).<br />
* При отсутствии ролевой привилегии пользования пользования автодозвоном и использовании гарнитуры с отключенным автодозвоном реализован вызов в обратной последовательности. Ранее выдавало уведомление о невозможности совершения вызова.<br />
* Реализована автоматическая отправка запроса в техническую поддержку из меню в статусной строке (на основе сервисной лицензии).<br />
* Реализована возможность [[Клиентское_приложение#ActiveDirectory|авторизоваться с помощью ActiveDirectory]].<br />
* Исправлена проблема COM-API, связанная с возвратом различных идентификаторов сессии при автодозвоне до и после снятия трубки пользователем.<br />
* Исправлена проблема в АТС, связанная с переключением на сценарий IVR путем подмены. Симптом: вместо продолжения обработки сценария производится разрыв.</div>Peter%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9История изменений2014-01-24T19:50:50Z<p>Peter: Новая страница: «Наверх __TOC__ ====версия 2.9 (02.10.2013)==== * Обнаружена и исправлена ошибка SIP-с...»</p>
<hr />
<div>[[Дополнительно|Наверх]]<br />
<br />
<br />
__TOC__<br />
<br />
<br />
<br />
<br />
====версия 2.9 (02.10.2013)====<br />
<br />
<br />
* Обнаружена и исправлена ошибка SIP-сервера, в ходе которой полученные повторные ответы 200 OK на сообщения REGISTER приводили к блокировке аккаунта вплоть до перезагрузки<br />
* Исправлен выбор расширения для файла в компоненте IVR сценариев ''[[Компоненты сценариев IVR#Record|Запись]]'' в соответствии с выбранным кодеком.<br />
* Исправлена ошибка элемента управления ''таблица'' клиентского приложения, приводившая в ходе удаления нескольких выделенных строк к некорректному определению индексов.<br />
* Реализовано определение номеров и доступ к функциям ''CallerId'' и ''CalledId'' из сценария для шлюзов с внутренними линиями.<br />
* Восстановлен разбор мультипартовых SIP-INVITE сообщений.<br />
* Обнаружена и исправлена проблема периодического отсутствия отчета об успешной работе факса, несмотря на удачное завершение приема/передачи.<br />
* Реализовано сохранение кода отказа SIP в статистике исходящих попыток звонков в колл-центре, а также их передача в сценарий обработки результата попытки звонка по задаче.<br />
* Реализовано перенаправление звонков на указанный адрес при получении SIP-ответа ''3xx Moved''. Для звонков по шлюзам без регистрации и шлюзам межсерверного взаимодействия, а также для звонков на внутренние номера, не использующие SIP-forking.<br />
* Обеспечена возможность генерации сигналов КПВ в SIP-линии, по которым был отправлен предварительный ответ ''183 Session Progress''.<br />
* Обнаружена и исправлена проблема неверного отображения свойств компонента ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' в режиме ''установить для линии''.<br />
* Реализована предварительная проверка параметров лицензии при добавлении [[Динамическое_управление_картой_сети|динамических транков]].<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлена возможность определения параметров лицензии, количества используемых линий, пользователей, а также команда принудительного обновления сертификата.<br />
* Исправлена привязка звонка к задаче с помощью компонента ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' через пользователя. <br />
* Исправлена ошибка SIP-сервера при работе за NAT. Симптом: в поле Contact подставлялся локальный адрес.<br />
* Реализовано обновление состояния входящих регистрационных сессий по динамическим потокам при перезагрузке сервера, если динамические потоки загружаются на старте).<br />
* Исправлена функция ''CallerId'' в сценариях IVR для внутренних линий SIP шлюзов. Симптом: возвращает пустоту.<br />
* Исправлена работа компонента сценариев ''[[Общие компоненты сценариев#WebRequest|WEB-запрос]]''. Симптом: после перехода на .NET v4.0 многократная работа компонента в различных сценариях после нескольких сот тысяч запросов прекращает отправку.<br />
* Реализован дополнительный вариант фильтрации по правам компонентов ''[[Компоненты сценариев IVR#SwitchExt|Переключение на внешние линии]]'' и ''[[Компоненты служебных сценариев#Call|Дозвон]]'' - по приоритетам линий.<br />
* Размещение информации по вручную прикрепленному к задаче звонку в пространственной таблице колл-центра ''EffortConnections''.<br />
* Исправлено отображение задач в модуле ''[[Ресурсы]]''. Симптом: при некоторых обстоятельствах выводятся не все задачи.<br />
* Исправлена ошибка SIP-forking: множественный звонок при исходящем же отбое не инициировал завершение одной из сессий.<br />
* Обнаружена и исправлена некорректная обработка одновременных встречных Cancel <-> Ok, приводившая к подвисанию звонка вплоть до разрыва вручную.<br />
* Исправлена генерация номеров динамических линий. Некорректное дублирование приводит к проблемам в коммутировании линий.<br />
* Исправлена загрузка сильно вложенного и взаимозамкнутого [[Внутренние номера#Rules|номерного плана]].<br />
* Исправлена ошибка WebRTC, возникающая при закрытии вкладки браузера с активной сессией разговора.<br />
* В интерфейс [[Oktell Web-Socket Protocol|WebSocket]] добавлены методы ''сс_addoperatortotask'', ''cc_removeoperatorfromtask'', ''cc_settaskactive''.<br />
* Реализован обмен сообщениями в веб-клиенте в виде диалогов. Интерфейс [[Oktell Web-Socket Protocol|WebSocket]] сервера пополнен рядом методов.<br />
* Добавлен режим запуска [[Служебные задачи|служебных задач]] - ''На старте сервера''.<br />
* Реализовано сохранение в БД информации о текущем состоянии регистрации всех SIP-потоков системы (таблица A_StreamRegistration).<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' внесены функции добавления/удаления оператора в задачу.<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлена возможность определения заголовков из входящего SIP INVITE или 200OK сообщения.<br />
* В выражения сценариев добавлена функция ''[[Выражения#Translit|translit]]''.<br />
* Исправлена [[Серверный HTTP интерфейс#upload|закачка файлов]] на веб-сервер Oktell при отсутствии заголовка Content-transfer-encoding.<br />
* Добавлена ролевая привилегия редактирования групп [[Мои контакты|контактов]].<br />
* Добавлена ролевая привилегия работы с [[Мои контакты|контактами]] из общих групп. Запрещает удалять и редактировать общие контакты, назначать личным контактам общие группы, а также создавать, редактировать и удалять общие группы.<br />
* Восстановлена работа функции ''Время отсутствия звука в линии'', возвращаемая компонентом ''[[Общие компоненты сценариев#UserState|Статус объекта]]''.<br />
* Оптимизирована с точки зрения объема используемой памяти обработка входящих SIP-сообщений.<br />
* Оптимизировано обновление [[Динамическое_управление_картой_сети|динамической карты сети]] в случае, когда изменений фактически не производится.<br />
* Обнаружена и исправлена ошибка сохранения имен контактов и пользователей с символом перевода строки, который отрицательно влияет на формирование SIP-сообщений.<br />
* В компонент сценариев ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' добавлена возможность определения локальных адресов сервера.<br />
* Исправлена работа компонента ''[[Общие компоненты сценариев#UserState|Статус объекта]]'' в части установки свойств конференциям.<br />
* Исправлена функция ''UrlDecode'' в разделе [[Выражения|выражений сценариев]].<br />
* Обнаружена и обработана проблема фильтрации отправляемого SIP сообщения CANCEL при моментальной отмене до получения предварительного ответа.<br />
* В модулях клиентского приложения заменен браузер. Встроено ядро браузера CHROME.<br />
* В режиме дизайнера веб-форм добавлена возможность выбирать в качестве источника файлы MHT.<br />
* В компонент сценариев «Файловая операция» добавлена функции взятия хеша MD5 от содержимого.<br />
<br />
<br />
<br />
<br />
====версия 2.8 (26.07.2013)====<br />
<br />
<br />
* Реализована возможность [[Параметры_АТС#StrongPassword|запрета использования простых паролей]].<br />
* Реализована возможность [[Параметры_АТС#PaidNumbers|автоматического запрета всех исходящих звонков на несанкционированные номера]].<br />
* Реализована возможность использования динамических рабочих мест [[Параметры файлов конфигурации#EnableAutoMapSip|с автоматической привязкой к существующим в карте сети SIP-телефонам]].<br />
* Реализован альтернативный способ управления гарнитурой с клавиатуры, поддерживающий работу в x64 системах.<br />
* Обнаружена и устранена причина периодических зависаний клиентского приложения в совершенно различных модулях.<br />
* Реализовано рабочее место оператора в web-клиенте, поддерживающее отображение [[Компоненты сценариев диалога#Диалоговая форма|диалоговых форм стандартного типа]].<br />
* Добавлен ряд новых функций в компонент сценариев [[Общие_компоненты_сценариев#Статус объекта|«Статус объекта»]]: определить для линии время отсутствия входящего звука, определить вхождение линии в направление, определить идентификатор и номер скоммутированной линии/конференции, определить наличие привилегии у пользователя, принудительно перерегистрировать сип-аккаунт или все сип-аккаунты, определить внешний IP-адрес сервера через STUN-запрос, сохранить скриншот пользователя.<br />
* Реализована возможность использовать одновременно связь с CRM и web-клиентов на основе OktellJS.<br />
* Реализована возможность использовать защищенные каналы связи (TLS) для работы c web-сервером Oktell. Касается взаимодействия по [[Серверный_HTTP_интерфейс|HTTP-API]], а также для работы [[Oktell_Web-Socket_Protocol|web-socket]] каналов.<br />
* Реализована возможность подключаться к CRM по http/https в альтернативу [[Oktell_Web-Socket_Protocol#Arch1|websocket-соединениям]].<br />
* Обнаружена и исправлена проблема версии Oktell 2.8 по использованию плагинов внутри собственного процесса.<br />
* Добавлены ролевые привилегии: возможность исполнять методы Web-API, доступ к скачиванию записей разговоров.<br />
* Изменена настройка [[Настройки_веб-сервера|HTTP-веб-сервера]], WebSocket-сервера, [[Интеграция_с_Web-Socket_CRM|подключения к WebCRM]] и Web-клиента, настройка сертификатов X509 для работы TLS.<br />
* Исправлена проблема проверки и отключения лицензий в случае одновременного использования динамических рабочих мест и плат телефонии, а также превышения общего количества линий.<br />
* Исправлены некоторые обнаруженные ошибки отображения в клиентском приложении.<br />
* Исправлена проблема менеджера задач по работе с индивидуальными операторскими задачами в режиме запроса на звонок. Симптом: если оператор оставляет окно запроса на звонок на срок более получаса, абонент подвисает и задача не может быть завершена до перезагрузки сервера.<br />
* Исправлена выдача страниц [[Серверный_HTTP_интерфейс|HTTP-веб-сервером]]. Симптом: неверный content-type, вследствие чего ответы скачивались, а не отображались браузерами.<br />
* Добавлена автоматическая выдача веб-сервером файлов index.html из подпапок.<br />
* Добавлена возможность управления поведением компонента [[Компоненты_сценариев_IVR#SwitchExt|Переключение на внешние]] в режиме ''прослушивания медиа-потока'' через [[Параметры_файлов_конфигурации#PBX_Use180SdpAs183|конфигурационный файл]]. Решается задача переключения между генерацией КПВ (длинных гудков) и медиа-соединением при получении последовательности различных ответов 180, 183.<br />
* В сценариях реализован новый [[Переменные#Types|тип переменных]] с глобальной серверной областью видимости без привязки к сессиям. Существующие глобальные переменные преобразованы в сессионные.<br />
* Реализована функция [[Управление базами данных#ComputeVoices|расчета времени владения разговором в коммутациях]].<br />
* Добавлена функция NowTick в [[Выражения|выражения сценариев]].<br />
* При удалении нелицензированных внутренних линий внедрена функция выбора преимущественно каналов, не находящихся в коммутации.<br />
* При отправке факс-сообщения установлено принятие за успешный результат отправки хотя бы одной страницы.<br />
* Реализована возможность [[Динамическое управление картой сети|динамического управления]] объектами в карте сети с помощью сценариев (json-структура в компоненте [[Общие компоненты сценариев#UserState|«Статус объекта»]]).<br />
* При обновлении клиентского приложения с сервера реализовано отображение процента завершения скачивания архива.<br />
* Добавлен разбор [http://ru.wikipedia.org/wiki/JSON JSON]-форматированных строк в сценариях с помощью компонента [[Общие компоненты сценариев#Parser|«Парсер»]].<br />
* Реализована [[Свойства компонентов#SipPhone|поддержка WebRTC]] в HAL.SIP.<br />
* Реализована функция [[Свойства компонентов#SipPhone|SIP.forking]] - множественная регистрация устройств под одной учетной записью.<br />
* В веб-операторе реализована поддержка WebRTC и регистрация телефона на сервере Oktell (нового или вторым подключением к существующему).<br />
* Добавлен ряд возможных событий-команд для работы плагинов: ''declinecall'', ''connectabonents'', ''makeflash''<span style="color:gray;">(mode=''abort''|''next''|''switch'')</span>.<br />
* Модернизировано сохранение пользовательских сообщений через очередь доступа к БД.<br />
* В компоненте сценариев [[Общие компоненты сценариев#UserState|«Статус объекта»]] реализованы дополнительные функции для взаимодействия с конференциями.<br />
* В компоненте сценариев [[Общие компоненты сценариев#UserState|«Статус объекта»]] реализованы дополнительные функции для взаимодействия с направлениями.<br />
* В АТС внедрена функция отказа от вызова без фиксации пропущенного вызова на телефоне, если отказ производится по причине снятия трубки другим абонентом вызываемого группового номера.<br />
* Реализована функция сквозной коммутации в состоянии early-media (SIP-сообщение ''183 Session Progress'') с обеих сторон.<br />
* Реализована функция подключения текущего звонка к задаче через клиентский модуль [[Мое рабочее место|«Мое рабочее место»]], через компонент [[Общие компоненты сценариев#UserState|«Статус объекта»]], а также через компонент сценариев [[Компоненты служебных сценариев#Connector|«Коммутатор»]] и командой [[Oktell_Web-Socket_Protocol#attachcalltotask|cc_attachcalltotask]] в интерфейсе websocket.<br />
* Добавлены задачи нового типа [[Голосовые задачи#ManualCall|«Дозвон вручную»]] для организации кампаний с полностью ручным определением абонентов и их вызовом.<br />
* Реализована поддержка gzip в [[Серверный_HTTP_интерфейс|веб-сервере]] при отправке скриптов и документов.<br />
* Реализована функция динамической регистрации учетной записи SIP-телефона и привязки ее к рабочему месту в браузере с использованием webrtc.<br />
* Оптимизировано сохранение [[Карта сети|карты сети]] путем частичного изменения.<br />
* Оптимизировано сохранение [[Настройки оборудования|настроек аппаратуры]].<br />
* В контекстное меню модуля [[Ресурсы|«Ресурсы»]] добавлены команды ''Позвонить'', ''Подключиться к разговору'', ''Отправить сообщение операторам задачи''.<br />
* В модуле «Ресурсы» по умолчанию удалены из отображения линии. Включить можно в разделе «Администрирование. Клиентское приложение».<br />
* В интерфейс websocket добавлена команда [[[[Oktell_Web-Socket_Protocol#pbxmakeflash|''pbxmakeflash'']]. В функцию [[Oktell_Web-Socket_Protocol#login|''login'']] добавлено свойство ''usewebrtc'', в ответе приводятся параметры для подключения SIP-софтфона или WebRTC-софтфона.<br />
* Изменено хранение пользовательских сообщений в БД, произведена нормализация с учетом массовых сообщений. <br />
* Реализована функция прослушивания канала, являющегося участником конференции. Теперь в момент прослушивания доступен звук со всех участников конференции.<br />
* В компонент сценариев IVR [[Компоненты сценариев IVR#PlayFile|«Воспроизведение»]] добавлен режим генерации DTMF.<br />
* Обновлены стандартные [[Статистика|отчеты коллцентра]].<br />
* Реализована нормальная обработка комбинации HOLD + Soft Flash в АТС.<br />
* Изменен порядок привязки SIP-сообщений к сессиям. Теперь одинаковые callid не являются проблемой, если используются в рамках разных учетных записей.<br />
* Реализовано сохранение в статистике и проброс в [[Голосовые задачи#EffortResultScript|сценарий обработки результата попытки]] в качестве 5-го неявного параметра кода ответа-отказа SIP при исходящих звонках.<br />
* В сценарии IVR добавлена возможность определять файл записи/воспроизведения с помощью выражения.<br />
* Добавлен новый тип отображения отчетов - [[Статистика#VertHysto|вертикальная гистограмма]].<br />
* Изменено отображение отчетов типа [[Статистика#Plane|«Плоскость»]]. Теперь в качестве значений допускаются ''NULL''.<br />
* Добавлено сохранение идентификаторов сессии и коммутации в [[Управление базами данных#DTMFflow|таблицу DTMF сигналов]].<br />
* Реализована возможность [[[[Конференц-связь#Управление конференцией с помощью DTMF|управления конференцией с телефона через DTMF]]. Преобразование коммутации в конференцию, приглашение участников, отключение участников, завершение конференции.<br />
* Реализовано хранение данных в БД о регистрациях клиентских SIP устройств, и применение их при перезапуске HAL и сервера.<br />
* Исправлено прослушивание записей конференций. Происходила ошибка при нахождении клиента и сервера в разных часовых поясах.<br />
* Исправлены некоторые проблемы в HAL.VoIP сервере, связанные с отключением устройств из-за потери связи.<br />
* Исправлена ошибка, связанная с невозможностью изменить базовый порт SIP (5060).<br />
* Исправлена ошибка предварительного преобразования многостраничных .tiff изображений в клиентском приложении при отправке факсов. При использовании клиентского модуля преобразований оставалась только первая страница.<br />
* Добавлено описание прослушиваемой конференции во встроенный плеер.<br />
* Исправлена проблема изредка наблюдаемого явления отсутствия звука в SIP-телефонах после изменения параметров сессии.<br />
* Обнаружены и устранены некоторые оставшиеся проблемы при работе шлюза без регистрации из-за NAT.<br />
* Обнаружена и исправлена ошибка в сохранении приоритета [[Запись разговоров|общих правил записи коммутаций]].<br />
* Обнаружена и устранена проблема загрузки ресурсов плагина в версии 2.8, работающей в среде .NET Framework v4.0. <br />
* Обнаружена и устранена проблема в триггере БД при сохранении пользовательских сообщений, приводящая при больших нагрузках к блокировкам и откату транзакций сохранения.<br />
* Обнаружена и устранена проблема общего торможения АТС при массовых задержках ответов на отправляемые сервером SIP-сообщения CANCEL.<br />
* При использования сценария набора номеров для приглашения новых участников конференции организована передача данных о пользователе-инициаторе вызова.<br />
* Обнаружена и исправлена ошибка АТС, приводящая при определенных условиях использования режима HOLD к подвисанию канала вплоть до ручного сброса в мониторинге.<br />
* Исправлена ошибка раздела [[Настройки оборудования|«Параметры аппаратуры»]] клиентского приложения, связанная с невозможностью сохранить измененные значения после повторного переключения в модуль.<br />
* Понижены минимальные возможные границы для некоторых настроек (мин время в очереди, макс время переключения на оператора, время Hunt-вызова)<br />
* Исправлена работа функции управления гарнитурой с клавиатуры в COM-ядре клиентского приложения.<br />
* Обнаружена и исправлена ошибка [[Серверный_HTTP_интерфейс|веб-сервера]], связанная с использованием одного порта в нескольких настройках. При переключениях порт может быть фантомно занят вплоть до перезагрузки службы.<br />
* Исправлена функция мягкого разрыва. Не производился разрыв существующей коммутации, что в случае использования [[Сценарии АТС#ScrInsteadBusy|«сценария вместо отбоя»]] могло приводить к неожиданным эффектам.<br />
* Исправлена ошибка обратного отзвона из удержания. При определенных обстоятельствах первым на дозвон мог разместиться абонент из общей очереди, и лишь затем удерживаемый ранее абонент.<br />
* Исправлена ошибка набора номеров при вызове шлюзов с регистрацией на сервере через аккаунт. Символы w, z, q воспринимались как служебные.<br />
* Понижен приоритет отложенных операций микширования, упаковки и расчета владения разговором.<br />
* Исправлена ошибка в автодозвоне при звонках на быстрые номера. При неудачном вызове и отказе от звонка возможно зависание линии до сброса вручную в мониторинге.<br />
* Исправлен ряд ошибок, добавлены новые функции в рабочее место оператора в вебе.<br />
* Реализовано нелимитированное сохранение резервных копий БД и сценариев с фильтрацией по временным интервалам.<br />
* Изменено поведение входящей задачи при неснятой оператором трубке и запрещенной к использованию очереди. Ранее вызов отправлялся всем операторам сразу. Теперь звонок возвращается в IVR.<br />
* Изменено значение [[Параметры файлов конфигурации#EnableAutoMap|конфигурационного ключа ''EnableAutoMap'']]. По умолчанию теперь включено для поддержки работы веб-софтфона из рабочего места оператора.<br />
* Исправлена ошибка перевода в перерыв в колл-центре, влекущая разрыв текущей коммутации.<br />
* Исправлена ошибка АТС, оставляющая пустыми значения callerid и calledid при звонках со шлюзов с внутренними линиями.<br />
* В конфигурационный файл клиентского приложения внесен параметр (''ShowLoadingBar = 0''), позволяющий отключить окно ожидания загрузки.<br />
* Исправлена ошибка в модуле [[Переадресация|«Переадресация»]]. Не происходило перетаскивание правил.<br />
* В модуле [[Кабинет#Заказы на встречные звонки|«Кабинет. Встречные звонки»]] восстановлено контекстное меню.<br />
* Выявлена проблема подключения плагинов из сторонних каталогов в версии 2.8. В конфигурационных файлах клиентского приложения и oktell.PluginStarter требуется указание <span style="color:green;">''<runtime><loadFromRemoteSources enabled="true"/></runtime>''</span>.<br />
* Исправлена функция переключения на сценарий IVR путем подмены. Состояние не выставлялось требуемое.<br />
* Исправлена проблема некорректного пересчета SeqNum в исходящем RTP потоке при смене SSRC. В некоторых случаях после смены звук пропадает.<br />
* Исправлена проблема загрузки гарнитуры с неопределенными устройствами ввода-вывода.<br />
* Исправлена ошибка SIP, заключавшаяся в неотправке дублирующих пакетов ACK на повторные сообщения 200OK.<br />
* Исправлен алгоритм менеджера задач в части работы с абонентским списком через кэш в памяти и с номерами для перезвона.<br />
* Снято ограничение [[Карта сети|карты сети]], блокирующее сохранение шлюзов с одинаковым адресом прокси-сервера.<br />
* Обнаружена и решена проблема утечки памяти при [[Управление записями разговоров|микшировании в формат MP3]].<br />
* Обнаружена и устранена причина ухудшения работы факсов в версии 2.8.</div>Peter%D0%91%D0%B0%D0%B7%D0%B0_%D0%B7%D0%BD%D0%B0%D0%BD%D0%B8%D0%B9_OktellБаза знаний Oktell2014-01-24T19:50:22Z<p>Peter: </p>
<hr />
<div>__NOTOC__<br />
<h4> <p style="text-align:center"> <span style="color:black" > Найти нужную информацию в wiki поможет наш оператор: </span> </p> <br />
<br />
<p style="text-align:center"> <span style="color:darkblue" >'''тел. 8-800-555-15-86 (доб. 221) ; тел. +7 (495) 229-49-89 (доб. 221) пн.-пт. с 9 до 17 часов'''</span> </p> <br />
<br />
<center>[[Как пользоваться Wiki | ''' >>> Как пользоваться Wiki <<<''' ]]</center><br />
</h4><br />
----<br />
<h4><br />
::{|width = "100%"<br />
<br />
|width="33%" valign="top"|<br />
<br />
* [[Установка_Oktell | <span style="color:black">'''Установка Oktell'''</span>]]<br />
<br />
* [[ОПИСАНИЕ_ПРОГРАММЫ | <span style="color:black">'''Описание программы'''</span>]]<br />
<br />
* [http://r.oktell.ru/wiki/ <span style="color:black">'''База знаний'''</span>]<br />
<br />
|width="33%" valign="top"|<br />
<br />
* [[Практики | <span style="color:black">'''Практики''' </span> ]] <br />
<br />
* [[Возникающие_проблемы_и_способы_их_решения | <span style="color:black">'''Решение проблем''' </span>]]<br />
<br />
* [[Уроки| <span style="color:black">'''Уроки''' </span>]]<br />
<br />
|width="33%" valign="top"|<br />
<br />
* [[VoIP-провайдеры |<span style="color:black"> '''VoIP-провайдеры'''</span>]] <br />
<br />
* [[VoIP-оборудование |<span style="color:black"> '''VoIP-оборудование'''</span>]]<br />
<br />
|}<br />
</h4><br />
----<br />
<br />
----<br />
<br />
::{|width="100%"<br />
<br />
|width="33%" valign="top"|<br />
<br />
=== [[Установка Oktell]] ===<br />
:*[[Технические требования]]<br />
:*[[Введение Что такое Oktell Обзор и установка |Введение. Что такое Oktell. Обзор и установка ]]<br />
:*[[Урок 1 Клиентское приложение |Урок 1. Клиентское приложение ]]<br />
:*[[Урок 2 Добавляем пользователей и роли | Урок 2. Добавляем пользователей и роли]]<br />
:*[[Урок 3 Создание карты сети | Урок 3. Создание карты сети]]<br />
:*[[Активация системы]]<br />
:*[[Сценарий входящей маршрутизации]]<br />
:*[[Сценарий исходящей маршрутизации]]<br />
:*[[Сценарий набора быстрых и внешних номеров]]<br />
:*[[Сценарий переключения]]<br />
:*[[Использование клиентского web интерфейса]]<br />
:*[[Подключение к ТСОП и Е1 через VoIP шлюзы]]<br />
:*[[Настройка работы сервера за NAT]]<br />
:*[[Подключение IP телефонов и софтфонов]]<br />
:*[[Подключение аналоговых телефонов и факсов через VoIP шлюзы]]<br />
<br />
=== [[Уроки]] ===<br />
:*[[Уроки|...]]<br />
:*[[Урок 13 Статистика АТС| Урок 13. Статистика АТС]]<br />
:*[[Урок 14 Телефон| Урок 14. Телефон]]<br />
<br />
=== [[Видеоуроки]] ===<br />
<br />
:*[[Видеоурок 1. Установка, активация, первый звонок]]<br />
:*[[Видеоурок 2. IP телефоны. Принцип создания сценариев]]<br />
:*[[Видеоурок 3. Групповые номера и уведомления ]]<br />
:*[[Видеоурок 4. Исходящие звонки и отладка сценариев ]]<br />
:*[[Видеоурок 5. Актуализация телефонной базы ]]<br />
:*[[Настройка Oktell в устройстве Zyxel X8004]]<br />
<br />
=== [[Практики]] ===<br />
:*[[Сохранение архивной копии Oktell в облачной системе хранения данных 4Sync]]<br />
:*[[Защита IP АТС от внешних атак]]<br />
:*[[Настройка Firewall Сервера IP АТС]]<br />
:*[[Очереди ожидания и приоритеты]]<br />
:*[[Автоматический обзвон абонентов сценарием IVR]]<br />
:*[[Автоматический обзвон абонентов сценарием IVR с подключением оператора]]<br />
:*[[Групповые номера. Перебор номеров по неответу]]<br />
:*[[Выбор исходяшей линии по маске]]<br />
:*[[Маршрутизация звонка на основании параметров]]<br />
:*[[Сценарий IVR вместо отбоя внешней линии]]<br />
:*[[Праздники с Октелл]]<br />
:*[[Вывод пользователя из группового номера]]<br />
:*[[Добавление и удаление линии в номере. Управление групповым номером с телефона]]<br />
:*[[Практики|Другие практики]]<br />
<br />
[http://gosnorkokontrol.livejournal.com/ Дополнительно: Блог Алексея Клепова, содержащий массу полезных практик, настроек и неформальной критики.]<br />
<br />
|width="33%" valign="top"|<br />
<br />
=== [[ОПИСАНИЕ ПРОГРАММЫ]] ===<br />
:*[[Офис]]<br />
:*[[Call-центр]]<br />
:*[[Администрирование]]<br />
:*[[Телефон]]<br />
<br />
=== [[Веб-интерфейс]] ===<br />
:*[[Клиентский HTTP интерфейс]]<br />
:*[[Серверный HTTP интерфейс]]<br />
<br />
=== [[Дополнительно]] ===<br />
:*[[Серверное приложение|Серверная служба]]<br />
:*[[Принципы работы логики|Некоторые принципы работы логики]]<br />
:*[[Возможные проблемы и способы их устранения]]<br />
:*[[Ключ защиты]]<br />
:*[[Перечень_файлов,_необходимых_для_озвучивания_числовых_значений|Перечень файлов озвучивания числовых значений]]<br />
:*[[Структура пространственной БД]]<br />
:*[[Порты, используемые системой]]<br />
:*[[Параметры файлов конфигурации]]<br />
:*[[Форматы звуковых файлов]]<br />
:*[[Подключение внешних БД]]<br />
:*[[Обеспечение бесперебойности работы]]<br />
:*[[Резервное копирование баз данных]]<br />
:*[[Порядок обновления программы]]<br />
:*[[Версия 2.8 на базе .NET Framework v4.0]]<br />
:*[[Варианты резервирования системы]]<br />
:*[[SIP ответы и их значения]]<br />
:*[[Дополнительно | Прочее]]<br />
<br />
=== [[Утилиты]] ===<br />
:*[[Oktell Web Клиент]]<br />
:*[[Oktell Web Оператор]]<br />
:*[[Oktell Gооdock]]<br />
:*[[Oktell Chrome Call Plugin]]<br />
:*[[Oktell Antirobot ]]<br />
:*[[Oktell.js]]<br />
:*[[Oktell-panel.js]]<br />
<br />
<br />
|width="33%" valign="top"|<br />
<br />
=== [[Интеграции|Способы интеграции с другими продуктами]] ===<br />
<br />
:* [[Интеграция с Desktop приложениями ]]<br />
<br />
:* [[Общее руководство по Web-интеграции | WEB-интеграция ]]<br />
:*:* [[Общее руководство по Web-интеграции]]<br />
:*:* [[Серверный HTTP интерфейс|HTTP-интерфейс сервера Oktell]]<br />
:*:* [[Клиентский HTTP интерфейс|HTTP-интерфейс клиента Oktell]]<br />
:*:* [[Oktell_Web-Socket_Protocol|Web-Socket протокол Oktell-WebCRM]]<br />
:*:* [http://js.oktell.ru Веб-плагин Oktell.js]<br />
:*:* [http://www.oktell.ru/weboktell/ Веб-клиент Oktell]<br />
:*:* [[Компоненты сценариев диалога#WebForm|Веб-формы операторов Oktell]]<br />
:*:* [[Общие компоненты сценариев#WebRequest|Компонент сценариев «Web-запрос»]]<br />
<br />
:* [[Интеграция между базами данных]]<br />
:* [[Взаимосвязанная работа серверов Oktell]]<br />
<br />
=== [[Интеграции с CRM системами]] ===<br />
<br />
:* [[Oktell и Мегаплан]]<br />
<br />
=== [[Возникающие проблемы и способы их решения]] ===<br />
:*[[Возможные проблемы и способы их устранения]]<br />
:*[[Серверная служба не запускается]]<br />
:*[[Клиентское приложение не подключается к серверу]]<br />
:*[[Не устанавливается регистрация на сервере SIP провайдера]]<br />
:*[[Потеря регистрации на сервере SIP провайдера]]<br />
:*[[IP телефон не регистрируется на сервере]]<br />
:*[[Обрывы в сценарии IVR. Методика поиска неисправности]]<br />
:*[[Не устанавливается соединение с абонентом]]<br />
:*[[Отсутствие звука при соединении с абонентом]]<br />
:*[[Проблемы с приемом DTMF сигналов в сценарии IVR]]<br />
:*[[Возникающие проблемы и способы их решения|Другие проблемы]]<br />
<br />
=== [[История изменений]] ===<br />
<br />
=== [[Последние добавленные статьи]]===<br />
<br />
|}<br />
<br />
== Продукт: Oktell SIP-GSM Gateway==<br />
<br />
::{|width="100%"<br />
|width="33%" valign="top"|<br />
:*[[Настройка Oktell SIP-GSM|Настройка]]<br />
:*[[Применение Oktell SIP-GSM|Применение]]<br />
|width="33%" valign="top"|<br />
<br />
|}</div>Peter%D0%91%D0%B0%D0%B7%D0%B0_%D0%B7%D0%BD%D0%B0%D0%BD%D0%B8%D0%B9_OktellБаза знаний Oktell2014-01-24T19:47:19Z<p>Peter: </p>
<hr />
<div>__NOTOC__<br />
<h4> <p style="text-align:center"> <span style="color:black" > Найти нужную информацию в wiki поможет наш оператор: </span> </p> <br />
<br />
<p style="text-align:center"> <span style="color:darkblue" >'''тел. 8-800-555-15-86 (доб. 221) ; тел. +7 (495) 229-49-89 (доб. 221) пн.-пт. с 9 до 17 часов'''</span> </p> <br />
<br />
<center>[[Как пользоваться Wiki | ''' >>> Как пользоваться Wiki <<<''' ]]</center><br />
</h4><br />
----<br />
<h4><br />
::{|width = "100%"<br />
<br />
|width="33%" valign="top"|<br />
<br />
* [[Установка_Oktell | <span style="color:black">'''Установка Oktell'''</span>]]<br />
<br />
* [[ОПИСАНИЕ_ПРОГРАММЫ | <span style="color:black">'''Описание программы'''</span>]]<br />
<br />
* [http://r.oktell.ru/wiki/ <span style="color:black">'''База знаний'''</span>]<br />
<br />
|width="33%" valign="top"|<br />
<br />
* [[Практики | <span style="color:black">'''Практики''' </span> ]] <br />
<br />
* [[Возникающие_проблемы_и_способы_их_решения | <span style="color:black">'''Решение проблем''' </span>]]<br />
<br />
* [[Уроки| <span style="color:black">'''Уроки''' </span>]]<br />
<br />
|width="33%" valign="top"|<br />
<br />
* [[VoIP-провайдеры |<span style="color:black"> '''VoIP-провайдеры'''</span>]] <br />
<br />
* [[VoIP-оборудование |<span style="color:black"> '''VoIP-оборудование'''</span>]]<br />
<br />
|}<br />
</h4><br />
----<br />
<br />
----<br />
<br />
::{|width="100%"<br />
<br />
|width="33%" valign="top"|<br />
<br />
=== [[Установка Oktell]] ===<br />
:*[[Технические требования]]<br />
:*[[Введение Что такое Oktell Обзор и установка |Введение. Что такое Oktell. Обзор и установка ]]<br />
:*[[Урок 1 Клиентское приложение |Урок 1. Клиентское приложение ]]<br />
:*[[Урок 2 Добавляем пользователей и роли | Урок 2. Добавляем пользователей и роли]]<br />
:*[[Урок 3 Создание карты сети | Урок 3. Создание карты сети]]<br />
:*[[Активация системы]]<br />
:*[[Сценарий входящей маршрутизации]]<br />
:*[[Сценарий исходящей маршрутизации]]<br />
:*[[Сценарий набора быстрых и внешних номеров]]<br />
:*[[Сценарий переключения]]<br />
:*[[Использование клиентского web интерфейса]]<br />
:*[[Подключение к ТСОП и Е1 через VoIP шлюзы]]<br />
:*[[Настройка работы сервера за NAT]]<br />
:*[[Подключение IP телефонов и софтфонов]]<br />
:*[[Подключение аналоговых телефонов и факсов через VoIP шлюзы]]<br />
<br />
=== [[Уроки]] ===<br />
:*[[Уроки|...]]<br />
:*[[Урок 13 Статистика АТС| Урок 13. Статистика АТС]]<br />
:*[[Урок 14 Телефон| Урок 14. Телефон]]<br />
<br />
=== [[Видеоуроки]] ===<br />
<br />
:*[[Видеоурок 1. Установка, активация, первый звонок]]<br />
:*[[Видеоурок 2. IP телефоны. Принцип создания сценариев]]<br />
:*[[Видеоурок 3. Групповые номера и уведомления ]]<br />
:*[[Видеоурок 4. Исходящие звонки и отладка сценариев ]]<br />
:*[[Видеоурок 5. Актуализация телефонной базы ]]<br />
:*[[Настройка Oktell в устройстве Zyxel X8004]]<br />
<br />
=== [[Практики]] ===<br />
:*[[Сохранение архивной копии Oktell в облачной системе хранения данных 4Sync]]<br />
:*[[Защита IP АТС от внешних атак]]<br />
:*[[Настройка Firewall Сервера IP АТС]]<br />
:*[[Очереди ожидания и приоритеты]]<br />
:*[[Автоматический обзвон абонентов сценарием IVR]]<br />
:*[[Автоматический обзвон абонентов сценарием IVR с подключением оператора]]<br />
:*[[Групповые номера. Перебор номеров по неответу]]<br />
:*[[Выбор исходяшей линии по маске]]<br />
:*[[Маршрутизация звонка на основании параметров]]<br />
:*[[Сценарий IVR вместо отбоя внешней линии]]<br />
:*[[Праздники с Октелл]]<br />
:*[[Вывод пользователя из группового номера]]<br />
:*[[Добавление и удаление линии в номере. Управление групповым номером с телефона]]<br />
:*[[Практики|Другие практики]]<br />
<br />
[http://gosnorkokontrol.livejournal.com/ Дополнительно: Блог Алексея Клепова, содержащий массу полезных практик, настроек и неформальной критики.]<br />
<br />
|width="33%" valign="top"|<br />
<br />
=== [[ОПИСАНИЕ ПРОГРАММЫ]] ===<br />
:*[[Офис]]<br />
:*[[Call-центр]]<br />
:*[[Администрирование]]<br />
:*[[Телефон]]<br />
<br />
=== [[Веб-интерфейс]] ===<br />
:*[[Клиентский HTTP интерфейс]]<br />
:*[[Серверный HTTP интерфейс]]<br />
<br />
=== [[Дополнительно]] ===<br />
:*[[Серверное приложение|Серверная служба]]<br />
:*[[Принципы работы логики|Некоторые принципы работы логики]]<br />
:*[[Возможные проблемы и способы их устранения]]<br />
:*[[Ключ защиты]]<br />
:*[[Перечень_файлов,_необходимых_для_озвучивания_числовых_значений|Перечень файлов озвучивания числовых значений]]<br />
:*[[Структура пространственной БД]]<br />
:*[[Порты, используемые системой]]<br />
:*[[Параметры файлов конфигурации]]<br />
:*[[Форматы звуковых файлов]]<br />
:*[[Подключение внешних БД]]<br />
:*[[Обеспечение бесперебойности работы]]<br />
:*[[Резервное копирование баз данных]]<br />
:*[[Порядок обновления программы]]<br />
:*[[Версия 2.8 на базе .NET Framework v4.0]]<br />
:*[[Варианты резервирования системы]]<br />
:*[[SIP ответы и их значения]]<br />
:*[[Дополнительно | Прочее]]<br />
<br />
=== [[Утилиты]] ===<br />
:*[[Oktell Web Клиент]]<br />
:*[[Oktell Web Оператор]]<br />
:*[[Oktell Gооdock]]<br />
:*[[Oktell Chrome Call Plugin]]<br />
:*[[Oktell Antirobot ]]<br />
:*[[Oktell.js]]<br />
:*[[Oktell-panel.js]]<br />
<br />
<br />
|width="33%" valign="top"|<br />
<br />
=== [[Интеграции|Способы интеграции с другими продуктами]] ===<br />
<br />
:* [[Интеграция с Desktop приложениями ]]<br />
<br />
:* [[Общее руководство по Web-интеграции | WEB-интеграция ]]<br />
:*:* [[Общее руководство по Web-интеграции]]<br />
:*:* [[Серверный HTTP интерфейс|HTTP-интерфейс сервера Oktell]]<br />
:*:* [[Клиентский HTTP интерфейс|HTTP-интерфейс клиента Oktell]]<br />
:*:* [[Oktell_Web-Socket_Protocol|Web-Socket протокол Oktell-WebCRM]]<br />
:*:* [http://js.oktell.ru Веб-плагин Oktell.js]<br />
:*:* [http://www.oktell.ru/weboktell/ Веб-клиент Oktell]<br />
:*:* [[Компоненты сценариев диалога#WebForm|Веб-формы операторов Oktell]]<br />
:*:* [[Общие компоненты сценариев#WebRequest|Компонент сценариев «Web-запрос»]]<br />
<br />
:* [[Интеграция между базами данных]]<br />
:* [[Взаимосвязанная работа серверов Oktell]]<br />
<br />
=== [[Интеграции с CRM системами]] ===<br />
<br />
:* [[Oktell и Мегаплан]]<br />
<br />
=== [[Возникающие проблемы и способы их решения]] ===<br />
:*[[Возможные проблемы и способы их устранения]]<br />
:*[[Серверная служба не запускается]]<br />
:*[[Клиентское приложение не подключается к серверу]]<br />
:*[[Не устанавливается регистрация на сервере SIP провайдера]]<br />
:*[[Потеря регистрации на сервере SIP провайдера]]<br />
:*[[IP телефон не регистрируется на сервере]]<br />
:*[[Обрывы в сценарии IVR. Методика поиска неисправности]]<br />
:*[[Не устанавливается соединение с абонентом]]<br />
:*[[Отсутствие звука при соединении с абонентом]]<br />
:*[[Проблемы с приемом DTMF сигналов в сценарии IVR]]<br />
:*[[Возникающие проблемы и способы их решения|Другие проблемы]]<br />
<br />
=== [[История обновлений]] ===<br />
<br />
=== [[Последние добавленные статьи]]===<br />
<br />
|}<br />
<br />
== Продукт: Oktell SIP-GSM Gateway==<br />
<br />
::{|width="100%"<br />
|width="33%" valign="top"|<br />
:*[[Настройка Oktell SIP-GSM|Настройка]]<br />
:*[[Применение Oktell SIP-GSM|Применение]]<br />
|width="33%" valign="top"|<br />
<br />
|}</div>Peter%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B1%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85Управление базами данных2014-01-22T08:30:53Z<p>Peter: </p>
<hr />
<div>[[Системные настройки|Наверх]]<br />
<br />
<br />
'''Задействовать ограничение на количество одновременных потоков пакетной обработки БД'''<br />
<br />
Устанавливает режим, при котором внутри комплекса производится принудительное разграничение доступа к БД с использованием очереди. Пропускная способность (количество потоков) задается параметром. Включение режима рекомендуется во избежание регламентированного замедления работы ядра MS SQL SERVER, если его версия имеет ограничение на количество потоков (Desktop Edition и Personal Edition). В случае интенсивной работы с доступом к БД (например прогрессивный набор номеров на значительном числе каналов) возможна блокировка ресурсов и замедление работы, что сказывается на стабильности работы системы и появлении пауз. Ситуация усугубляется тем, что блокировка ресурсов, происходящая в замедленных подключениях может приводить и к торможению выполнения запросов основных 5-8 потоков. Подробнее об ограничениях в документации к MS SQL Server.<br />
<br />
<br />
'''Удалить несуществующие связи (проекты, задачи, операторы) из пространственной БД с сохранением статистики'''<br />
<br />
Осуществляет очистку списков операторов, проектов и задач в пространственной БД. Удаляются те элементы, которые уже удалены из основной базы (не присутствуют в списках операторов, проектов и задач соответственно). Статистика пространственной БД, связанная с удаляемыми элементами, остается не затронутой. Однако привязка осуществлена уже быть не может. Доступным остается только построение сводных отчетов. <br />
<br />
<br />
'''Удалить статистику call-центра из пространственной БД, связанную с уже несуществующими ресурсами'''<br />
<br />
Осуществляет очистку списков операторов, проектов и задач в пространственной БД. Удаляются те элементы, которые уже удалены из основной базы (не присутствуют в списках операторов, проектов и задач соответственно). Удаляется также статистика из пространственной БД, связанная с удаляемыми элементами. Становится невозможным получить даже сводные показатели. Например, при удалении статистики по удаленному проекту становится невозможным получить корректные сведения о средней загрузке линий за тот период, где осуществлялась работа с удаленным проектом. <br />
<br />
Операция может занять значительное время и ресурсы сервера баз данных. Относится к перечню операций обслуживания БД (единовременно сервером может производиться не более одной такой операции).<br />
<br />
<br />
'''Очистка оперативной статистики по задачам'''<br />
<br />
Осуществляет очистку оперативной базы данных от информации, связанной с работой задач. Аналогично вызову команды «Очистить оперативную статистику» для каждой задачи.<br />
<br />
Операция может занять значительное время и ресурсы сервера баз данных. Относится к перечню операций обслуживания БД (единовременно сервером может производиться не более одной такой операции).<br />
<br />
<br />
'''Автоматическая профилактика базы данных'''<br />
<br />
Принудительно запускает процедуру переиндексации основных таблиц базы данных, с которыми менеджером задач производится непрерывная плотная работа. После переиндексации сервер сжимает базы до минимально возможного размера и очищает логи транзакций. <br />
<br />
Операция может занять значительное время и ресурсы сервера баз данных. Относится к перечню операций обслуживания БД (единовременно сервером может производиться не более одной такой операции).<br />
<br />
<span style="color:red;">ВНИМАНИЕ! При реализации массовых кампаний рекомендуется регулярно пользоваться режимом профилактики.<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Не стоит только лишь уповать на автоматику. При плотной работе необходимо размещать базу на нескольких жестких дисках, использовать средства ускорения доступа к жестким дискам (RAID5, RAID10), разносить базу по файловым группам, регулярно производить оценку состояния базы, сохранять резервные копии, очищать данные при возможности, перемещать неактуальные данные на другие серверы и т.д. Без принятия описанных мер при сильном разрастании базы снижается производительность системы, и в отдельных особых случаях возможно появление некорректных ситуаций в АТС.</span><br />
<br />
<br />
'''Автоматическая профилактика базы данных и очистка'''<br />
<br />
Помимо вышеописанного режима профилактики производит очистку таблиц для снижения общего размера базы данных. Подобная фукнция может потребоваться при реализации массовых кампаний для сохранения скорости обработки информации в БД. В случае необходимости удаляемые данные можно предварительно переносить в сторонние БД.<br />
<br />
Операция может занять значительное время и ресурсы сервера баз данных. Относится к перечню операций обслуживания БД (единовременно сервером может производиться не более одной такой операции).<br />
<br />
<br />
'''Резервное копирование основной базы данных'''<br />
<br />
Осуществляет создание резервной копии основной базы данных, где хранятся настройки, данные по звонкам и задачам (без статистики колл-центра). Файлы архивных копий размещаются в каталоге Backup корневого каталога серверной службы и называются db_[дата].bak. <br />
<br />
Операция может занять значительное время и ресурсы сервера баз данных. Относится к перечню операций обслуживания БД (единовременно сервером может производиться не более одной такой операции).<br />
<br />
<br />
'''Резервное копирование сценариев'''<br />
<br />
Осуществляет создание архива с резервными копиями всех сценариев системы (только структур самих сценариев без файлов-вложений). Файлы архивных копий размещаются в каталоге Backup корневого каталога серверной службы и называются scr_[дата].zip.<br />
<br />
<br />
'''Производить ежедневную автоматическую оптимизацию БД'''<br />
<br />
Включает/отключает механизм ежедневного запуска процедуры переиндексации таблиц базы данных. Переиндексация стартует раз в сутки в указанное время. В случае, если сервер перезапускался, в этот день запуска автоматической оптимизации не производится.<br />
<br />
Для режима актуальны предупреждения, указанные выше в описании действия «Автоматическая профилактика базы данных».<br />
<br />
Операция может занять значительное время и ресурсы сервера баз данных. Относится к перечню операций обслуживания БД (единовременно сервером может производиться не более одной такой операции).<br />
<br />
Описываемые ниже свойства предоставляют возможность снизить плотность обращений к серверу баз данных за счет исключения некоторых направлений и видов работ. По умолчанию все работы активированы. Однако в объемных базах данных, где не производится периодическая архивация данных, отсутствуют ускоряющие работу RAID-массивы, не используются разнесенные файловые группы, каждое лишнее обращение может быть критичным. Торможение базы может сказываться на качестве работ в реальном времени, когда call-центр ведет активную работу со множеством абонентов. При возникновении заметных торможений можно воспользоваться и отключить некоторые из перечисленных режимов работы с БД.<br />
<br />
<br />
'''Активировать расчет пространственной таблицы состояний операторов'''<br />
<br />
Расчет пространственной таблицы состояний операторов в базе данных call-центра производится для обеспечения call-центра статистикой по операторам. Расчет производится с определенными интервалами времени, обеспечивая статистикой, максимально приближенной к статистике реального времени. При работе сервером выполняется ряд быстрых процедур по сохранению измененных состояний пользователей (операторов) в различных модулях системы. В одно и то же время оператор может находиться в call-центре, быть занят в задаче, осуществлять разговор с другим оператором. Каждый из модулей системы заносит информацию при учитываемой им смене состояния пользователя. Сложность выполняемой процедуры заключается в синтезе совокупных данных, учитывающих данные из нескольких таблиц, и просчитывающих время нахождения в каждом элементарном состоянии.<br />
<br />
Получаемая в итоге статистика доступна для внешних отчетных систем, используется в статистических модулях Oktell таких как «Ресурсы», «Индикаторы», «Отчеты».<br />
<br />
Одна итерация расчета данных может длиться до 20-30 секунд и существенно увеличивать загрузку процессора на сервере баз данных. Дорогостоящей операцией в ходе процесса является обращение к таблицам на выборку данных.<br />
<br />
Подробно о пространственной таблице состояний операторов в разделе [[Структура пространственной БД]].<br />
<br />
<br />
'''Период таймера обработки БД call-центра'''<br />
<br />
Расчет пространственной таблицы состояний операторов в базе данных call-центра производится по умолчанию один раз в минуту. Этот процесс при достаточно большом числе операторов происходит в течение заметного времени (до 20-30 секунд) с увеличением загрузки процессора на сервере баз данных. В большинстве случаев это не сказывается на работе системы, однако с помощью данного свойства можно увеличить промежуток между расчетами. Это отразится на индикаторах и статистике, строящихся на базе пространственной таблицы состояний операторов, включающих еще не рассчитанное время. <br />
<br />
Дорогостоящей операцией в ходе процесса является обращение к таблицам на выборку данных. Каждая новая итерация производит расчет данных с момента последнего выполнения до текущего времени. При этом на длительность исполнения и загрузку процессора практически не влияет то, за какой промежуток времени производится расчет пространственной таблицы. В любом случае после завершения итерации в таблице будут содержаться актуальные данные.<br />
<br />
<br />
'''Активировать расчет пространственной таблицы состояний очереди'''<br />
<br />
Расчет пространственной таблицы состояний очереди производится для обеспечения call-центра статистикой по состояниям очередей всех задач. Каждое точечное изменение очереди (изменение числа операторов, изменение числа абонентов) вызывает сохранение в пространственную таблицу новой строки. При достаточно большой нагрузке на call-центр и большом количестве задач использование этой процедуры может сказываться на качестве работы. Если статистика по состоянию очередей не используется или ей можно пожертвовать, снятием этого флага можно исключить обращение к БД на сохранение данных.<br />
<br />
Подробно о пространственной таблице состояний очередей в разделе [[Структура пространственной БД]].<br />
<br />
<br />
'''Способ внесения данных о состоянии очереди в БД'''<br />
<br />
Пространственная таблица, хранящая состояния очереди всех задач, претерпевает изменения данных (вставку) при каждом изменении в состоянии очереди каждой задачи - количества операторов, абонентов. В особых случаях ее заполнение можно производить в асинхронном режиме, чтобы блокировка базы данных при попытке обращения к таблице не сказывалась на работе пула входящей задачи. Синхронный режим заполнения таблицы подразумевает приостановку пула на время вставки данных в таблицу.<br />
<br />
<br />
'''Сохранять в БД статистику сценариев диалога'''<br />
<br />
Сохранение статистики [[Сценарии диалога|сценариев диалога]] производится для обеспечения данными встроенного модуля [[Отчеты#Карточки|Отчеты сценариев]] в режиме построения диаграмм на основе элементов управления диалоговых форм. Даже если не используется модуль, каждый запуск диалогового сценария тем не менее инициирует обращение в БД с размещением информации о начале и завершении работы сценария. <br />
<br />
<br />
'''Производить сохранение уведомлений'''<br />
<br />
Уведомления служат для информирования пользователей об определенных изменениях на сервере и в клиентском приложении. Далеко не все из них сохраняются в БД. Сохраненные же доступны в разделе [[Кабинет#Системные уведомления|Кабинет. Уведомления]]. Удаление этой статистики не производится в автоматическом режиме, и при росте объема базы данных сохранение может занимать ресурсы сервера БД. Снятием флага производится отключение сохранения всех уведомлений (даже если в компоненте сценария явно установлено свойство «Сохранять в БД») . Уведомления продолжают доставляться в реальном времени авторизованным пользователям.<br />
<br />
<br />
'''Производить сохранение статистики контрольных событий'''<br />
<br />
При возникновении в call-центре контрольного события осуществляется связанное с ним действие - уведомление и/или запуск служебного сценария. Факт возникновения КС также сохраняется в БД для возможности последующего доступа к нему из модуля [[Контрольные события|Call-центр. Контрольные события]]. Сохранение может быть отключено снятием флага.<br />
<br />
<br />
'''Обновлять состояния задач при сохранении результатов каждой попытки'''<br />
<br />
При завершении каждой попытки исходящего оповещения производится дополнительное обращение к БД на обновление состояния задачи. Это необязательная процедура, осуществляемая для поддержания корректности данных. При массовых исходящих кампаниях, где одновременно производится множество вызовов, исключение этой процедуры может привести к незначительному снижению нагрузки.<br />
<br />
<br />
<div id="EnableDBUpdateTaskStateOnEveryResult"></div> <br />
'''Обновлять состояния абонентов задачи при каждом обращении к кэшу в БД'''<br />
<br />
При работе сервера с задачами, использующими кэш внутри БД (свойство задач [[Голосовые задачи#Абоненты|Метод работы с таблицей абонентов]]), каждое очередное обращение к БД на предмет поиска абонента сопровождается обращением к таблицам с оперативной статистикой по задаче на восстановление состояний (количество отбоев, количество попыток без ответа, дата/время следующей попытки, время в очереди и т.д.). Если задача массовая, и эти сведения некритичны, то снятием флага можно исключить это обращение и привнести снижение нагрузки на БД. Некритичными сведения могут считаться, например, если осуществляется первый проход по таблице, или если не используется установка дат/времени следующего обращения.<br />
<br />
<br />
<div id="MissedCalls"></div> <br />
'''Сохранять информацию о пропущенных вызовах'''<br />
<br />
Активация режима приведет к формированию таблицы A_Stat_MissedCalls, содержащей информацию о пропущенных звонках. Пропущенным (не путать с потерянным) для пользователя называется звонок, который поступил на индивидуальный или групповой внутренний номер и не был обработан пользователем. При этом система не делает различий, был ли обработан звонок на этот внутренний номер кем-то другим или получил отказ, был ли это первый вызов в рамках цепочки коммутаций или повторный, был ли пользователь свободен или занят. <br />
<br />
Информация о пропущенных звонках доступна пользователям в разделе [[Мои звонки|Офис. Мои звонки]].<br />
<br />
<br />
<div id="FailedCalls"></div><br />
'''Сохранять информацию о неудачных исходящих вызовах'''<br />
<br />
Активация режима приведет к формированию таблицы A_Stat_FailedCalls, содержащей информацию о неудачных исходящих звонках. Неудачным считается такой исходящий вызов, который не завершился коммутацией по любой из причин. <br />
<br />
Информация о неудачных исходящих звонках доступна в разделе [[Мои звонки|Офис. Статистика АТС]] при указании в фильтре нулевой длительности разговоров.<br />
<br />
<br />
'''Сохранять RingTime (время вызова пользователей и операторов)'''<br />
<br />
Активация режима приведет к формированию таблицы A_Stat_RingTime, содержащей информацию о каждой сессии вызова каждого пользователя и/или оператора. Сессия вызова может включать как одного, так и нескольких вызывающих абонентов, при этом обработанным может быть только один - последний. В таблице фиксируется идентификатор линии пользователя и его собственный идентификатор, время начала вызова его внутренней линии, время в миллисекундах, прошедшее до отбоя или снятия трубки, факт снятия/неснятия пользователем трубки. Если за время вызова произошел отбой одного или нескольких абонентов из очереди (были перехвачены другими пользователями, положили трубки, были возвращены в сценарии по таймауту, были отклонены пользователем) - фиксируется количество таких абонентов, находящихся в первой позиции очереди пользователя и сменившихся при текущей сессии вызова. Количество отклоненных вызовов, а также количество вызовов, приведших к таймауту вызова (в рамках первой позиции очереди) также попадает в таблицу. Если настройка системы такова, что при таймауте вызываемый пользователь переводится в состояние «Нет на месте», то этот момент также будет отражен в таблице.<br />
<br />
Может применяться при анализе времени ответа пользователями/операторами безотносительно конкретных звонков и вызывающих абонентов. <br />
<br />
Подобная независимая от звонков статистика продиктована наличием групповых номеров, различных возможных настроек системы - перехватов, переадресаций, перевода в Off, совмещения нескольких номеров и задач одним пользователем, единой очередью для нескольких пользователей, различными очередями на одного пользователя и всевозможными миксами. В целях соблюдения строгой очередности обслуживания в любых условиях вызов внутреннего пользователя для обработки одного звонка или очереди производится еще до определения конкретного абонента. Поэтому в рамках одной сессии вызова пользователя может быть изменено несколько потенциальных абонентов. И рассматривать время вызова пользователя в рамках одного звонка в общем случае не следует, так как иначе будут объединены случайные независимые величины и их анализ будет существенно затруднен. Взамен предлагается анализировать их отдельно: максимальное время ожидания абонентами в очереди (первая случайная величина), время снятия трубки операторами от начала вызова (вторая случайная величина). Другие факторы, такие как размер и количество очередей, количество пользователей, уровень пересечения разных очередей и разных пользователей, также не стоит объединять с анализом случайных величин.<br />
<br />
<br />
<div id="DTMFflow"></div><br />
'''Сохранять в БД все получаемые по внешним линиям DTMF-символы'''<br />
<br />
При активации режима все поступающие в систему DTMF символы будут сохраняться в таблице основной базы данных A_Stat_DTMF (символ, время, Guid-идентификатор линии, Guid-идентификатор цепочки коммутаций).<br />
<br />
<br />
<div id="ComputeVoices"></div><br />
'''Рассчитывать время владения разговором участниками'''<br />
<br />
Позволяет активировать вычисление процентов владения разговором каждой из сторон в каждой коммутации. Полученная статистика отображается при воспроизведении файла во встроенном плеере.<br />
Использование режима налагает дополнительные требования на вычислительную мощность сервера. Расчет производится непосредственно перед микшированием/упаковкой звуковых файлов в едином потоке с пониженным приоритетом. Рассчитанные данные хранятся в таблице БД ''oktell.dbo.A_Stat_Connections_VoicePerc''.</div>Peter%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8_Call-%D1%86%D0%B5%D0%BD%D1%82%D1%80%D0%B0Настройки Call-центра2014-01-21T13:59:19Z<p>Peter: </p>
<hr />
<div>[[Системные настройки|Наверх]]<br />
<br />
'''Скрывать номер абонента от оператора'''<br />
<br />
Оператор не может увидеть номера абонента, с которым общается, ни во всплывающих при вызове окнах, ни в модуле «Телефон», ни в запросах на дозвон.<br />
<br />
<br />
'''Автоматически выводить пользователя из режима «Call-центр» при выходе'''<br />
<br />
Одновременно с выходом пользователя из программы производит вывод его из call-центра. В случае использования настройки «пользователь по умолчанию» это позволяет сэкономить лицензии операторов call-центра и не требует участия супервизора для освобождения лицензии, занятой вышедшим пользователем.<br />
<br />
<br />
<div id="SvcSupervisorHelp"></div><br />
'''Служебный сценарий запроса помощи супервизора'''<br />
<br />
При нажатии оператором кнопки ''«Помощь супервизора»'' в модуле ''[[Мое рабочее место]]'' по умолчанию производится уведомление всех супервизоров, имеющих отношение к задачам конкретного оператора. При включении служебного сценария в качестве обработчика запроса помощи все такие запросы будут обрабатываться им. На вход в качестве неявных параметров передаются 1 - идентификатор оператора, 2 - идентификатор задачи, если в момент запроса оператор находится в обслуживании звонка или обращения. Код инициатора запуска - 35.<br />
<br />
<br />
'''Уведомлять о начале графика, мин'''<br />
<br />
При установке свойства каждый находящийся в call-центре оператор будет получать уведомление о начале его рабочего времени. Уведомление производится раз в минуту. Уведомление производится заранее с учетом установленного значения времени опережения. При выставлении значения 0, уведомление производится сразу после события.<br />
<br />
<br />
'''Уведомлять о завершении графика, мин'''<br />
<br />
При установке свойства каждый находящийся в call-центре оператор будет получать уведомление о завершении его рабочего времени. Уведомление производится раз в минуту. Уведомление производится заранее с учетом установленного значения времени опережения. При выставлении значения 0, уведомление производится сразу после события.<br />
<br />
<br />
'''Уведомлять о начале перерыва, мин'''<br />
<br />
При установке свойства каждый находящийся в call-центре оператор будет получать уведомление о начале запланированного для него перерыва. Уведомление производится раз в минуту. Уведомление производится заранее с учетом установленного значения времени опережения. При выставлении значения 0, уведомление производится сразу после события.<br />
<br />
<br />
'''Уведомлять о завершении перерыва, мин'''<br />
<br />
При установке свойства каждый находящийся в call-центре оператор будет получать уведомление о завершении запланированного для него перерыва. Уведомление производится раз в минуту. Уведомление производится заранее с учетом установленного значения времени опережения. При выставлении значения 0, уведомление производится сразу после события.<br />
<br />
<br />
'''Принудительно выводить в перерыв, мин'''<br />
<br />
При установке свойства каждый находящийся в call-центре оператор будет переведен в статус перерыва принудительно за установленное в данном свойстве время до запланированного факта перерыва. Перевод заранее имеет смысл, если расчетное время разговора с абонентом достаточно велико. При выставлении значения 0, перевод в статус перерыва производится непосредственно в запланированный в графике момент времени.<br />
<br />
<br />
'''Список предустановленных перерывов'''<br />
<br />
В таблице задаются предустановленные варианты перерывов, доступные операторам для выбора в окне ввода причины перерыва. Таблица является визуальным отображением таблицы БД A_TaskManager_CardLunchStates. Каждый из перерывов должен иметь уникальный код и название. Контроль уникальности кодов должен производиться администратором, занимающимся редактированием.<br />
<br />
<br />
'''Список пользовательских результатов звонков по задачам'''<br />
<br />
В таблице задаются варианты пользовательских результатов, доступные операторам для выбора в стоп-форме или для назначения в теле диалогового сценария служебным переменным. Пользовательские состояния являются альтернативными результатами звонков по задачам, позволяющими оператору уточнить результат звонка для отображения и/или фильтрации в статистике. Таблица является визуальным отображением таблицы БД A_TaskManager_CardUserResults. Каждый из находящихся в списке результатов должен иметь уникальный код, название, а также флаги, определяющие принадлежность данного результата: исходящая/входящая задача, а также успешный/неуспешный звонок. Контроль уникальности кодов должен производиться администратором, занимающимся редактированием.</div>Peter%D0%93%D0%BE%D0%BB%D0%BE%D1%81%D0%BE%D0%B2%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8Голосовые задачи2014-01-21T06:41:03Z<p>Peter: </p>
<hr />
<div>[[Задачи|Наверх]]<br />
<br />
<br />
__TOC__<br />
<br />
<br />
===Основные параметры===<br />
<br />
<br />
<br />
Вкладка предоставляет доступ к основным определяющим поведение задачи свойствам.<br />
* Название задачи. <br />
* Код задачи. Параметр применяется для взаимодействия с внешними базами данных, ведущихся по проектам во многих аутсорсинговых call-центрах. Параметр доступен в любом сценарии, выполняющемся в ходе реализации каждого звонка по конкретной задаче. <br />
* Направление (исходящее/входящее). Отличия входящей и исходящей задачи указаны выше в описании данного модуля.<br />
<br />
<br />
[[Файл:cl_cc_task5.png|center|800px]]<br />
<br />
<br />
* Тип задачи. Определяет каким способом ведется обработка звонка – автоматическим (IVR) или с помощью оператора. Среди исходящих задач существует несколько типов организации массового оповещения с участием операторов: <br />
** [[#Reserve|Оповещение оператором с резервированием и уведомлением]]].<br />
** [[#Reserve|Оповещение оператором с резервированием и запросом]].<br />
** [[#ManualChoice|Оповещение оператором с ручным выбором абонентов]].<br />
** [[#FixOperator|Оповещение оператором с закреплением абонентов]].<br />
** [[#ByScriptForOperator|Поиск абонента для оператора]].<br />
** [[#Progress|Прогрессивный обзвон операторами]].<br />
** [[#ProgressPredict|Прогрессивно-предиктивный обзвон операторами]].<br />
** [[#ManualCall|Дозвон операторами вручную]].<br />
<br />
<br />
<br />
<div id="Reserve"></div><br />
'''Оповещение с резервированием'''. Начинает дозвон до одного конкретного номера телефона, предварительно найдя и зарезервировав оператора. Оператору выводится уведомление или запрос на проведение обозначенного звонка, который в этом случае он может принять, отложить или отклонить.<br />
<br />
<br />
<div id="ManualChoice"></div><br />
'''Оповещение с ручным выбором абонентов'''. Кардинальное отличие от простого резервирования состоит не только в предоставлении оператору возможности выбора абонента, но и в использовании пула дозвона до абонентов по распределенному списку. Каждому оператору выделяется определенная группа абонентов, с которыми он работает индвивидуально (звонки абонентам осуществляются только им). При настройке этого типа задачи на вкладке [[#Абоненты|Абоненты]] появляются элементы для задания правил разбиения списка по операторам (подробнее об этом далее в разделе). Супервизору при создании подобной задачи необходимо в обязательном порядке провести распределение списка, в противном случае задача не найдет подходящих условий для совершения вызовов. Допускается равномерное деление, а также деление по правилам (количеству, процентному соотношению, начальным буквам названия абонента). Нераспределенные абоненты, а также абоненты, появившиеся в списке после разбиения не будут автоматически присоединены к обработке. Подобный тип задачи предусматривает полный контроль ситуации супервизором. На вкладке «Абоненты» модуля [[Ресурсы]] для задач с распределенным списком предоставляется возможность управления текущим разбиением на основе статусов звонков, и для полноты информации предоставляются доступ к дополнительным служебным статусам. Абонентов с определенными состояниями супервизор имеет возможность перетащить от одного оператора к другому, тем самым скорректировав разбиение списка. Также см. [[Менеджер голосовых задач|Принципы работы логики. Менеджер голосовых задач. Задачи с распределенным списком]].<br />
<br />
<br />
<div id="FixOperator"></div><br />
'''Оповещение с закреплением абонентов за оператором'''. Позволяет на этапе создания задачи распределить абонентов по операторам, как и в режиме ручного выбора абонентов. Однако не предоставляет оператору возможности изменить выбор абонента, предоставляя ему лишь возможность подтверждения/отклонения вызова. Работает на основе кэша в БД и позволяет налаживать специальные сторонние алгоритмы распределений абонентов путем изменения таблицы кэша задачи (<span style="color:green;">''A_TaskManager_dIdx_[guid-идентификатор задачи]''</span>). Режим добавлен с целью предоставления возможности автоматического формирования списков с закреплением за операторами.<br />
<br />
Автоматический поиск и закрепления абонента из списка нераспределенных при отсутствии абонентов в текущем списке оператора может быть осуществлено средствами хранимых процедур (поиск абонента для обработки звонка конкретным оператором конкретной задачи - <span style="color:green;">''A_TaskManager_List_DistrDirectDB_GetTable''</span> или <span style="color:green;">''A_TaskManager_List_DistrDirectDB_GetQuery''</span> в зависимости от того, на базе таблицы или запроса сформирована таблица абонентов).<br />
<br />
В таблице абонентов для задач этого типа может быть добавлен и назначен столбец ''Идентификатор оператора'', значения которого имеют тип данных ''uniqueidentifier''. При синхронизации задачи с таблицей абонентов в этом случае осуществляется автоматическое перестроение кэша и привязка абонентов к соответствующим операторам.<br />
<br />
<br />
<div id="ByScriptForOperator"></div><br />
'''Поиск абонента для оператора'''. Позволяет организовать исходящую задачу с помощью сценария поиска абонента, куда дополнительно в качестве параметра передается идентификатор оператора, для какого производится поиск.<br />
<br />
<br />
<div id="Progress"></div><br />
'''Прогрессивный дозвон'''. При обнаружении свободного оператора, задача помещает его в очередь и осуществляет одновременно несколько звонков. Первый успешный вызов сразу коммутируется. Остальные звонки в зависимости от настроек задачи (лояльность, очередь прогрессивного набора) остаются в очереди для других операторов, или прекращаются. Априори достоверно, что прогрессивная схема менее лояльна к абонентам, чем схема с резервированием. Если в очереди ожидающих дозвона находятся несколько операторов, то первый успешный звонок выделяется для первого оператора в очереди. Очевидный факт, что абоненты при исходящем оповещении ждать ответа в основном не намерены. Сервер Oktell при использовании прогрессивной схемы пытается минимизировать время ожидания операторов, взяв в расчет именно этот принцип и практически не давая вырастать очереди абонентов.<br />
<br />
Однако существуют настройки задач, при которых абоненты ждут операторов. Такие задачи редко представляют интерес. В этом случае очереди компенсируют друг друга, но лояльность к абонентам существенно снижается. <br />
<br />
Прогрессивный дозвон имеет больший смысл, если число линий, выделенных для задачи больше числа операторов, единовременно обрабатывающих задачу. Разумно настроенная прогрессивная схема – крайне эффективный инструмент. В качестве примера можно привести следующий результат в самых крайних условиях: Оповещение одним оператором по двум линиям списка из 10 абонентов, где у каждого абонента от 1 до 5 телефонных номеров и ситуация усугубляется тем, что половина номеров в итоге не отвечает. Для оператора наличие «битых» номеров остается незаметным до самого конца, когда на обеих линиях остаются только абоненты, не имеющие ни одного нормального номера. При увеличении числа линий и числа операторов качество заметно повышается. Более эффективно и менее лояльно прогрессивный дозвон можно настраивать, если число операторов достаточно велико, а время обработки одного звонка достаточно мало. <br />
<br />
В схемах, где число линий и операторов, назначенных в задачу, практически одинаково и значительно (20, 30, 40, 50, ...) прогрессивный дозвон экономит время поствызывной обработки и набора номера, производя работу в параллельном режиме, что в некоторых случаях приводит практически к тем же результатам что и в случае с числом линий, превышающим число операторов, обладая вместе с этим преимуществом, делая невозможным рост очереди абонентов. <br />
<br />
Использование прогрессивного набора в массовых кампаниях накладывает дополнительные требования, подробнее в разделе [[Менеджер голосовых задач|Принципы работы логики. Менеджер голосовых задач. Прогрессивный набор]].<br />
<br />
Задачи с прогрессивным набором очень эффективное средство, дающее наибольшую производительность при рационально назначенных количественных и ресурсных свойствах. Ориентировочная занятость операторов в зависимости от длительности разговора, соотношения операторы / линии и качества телефонной базы может достигать 90% и более.<br />
<br />
<br />
<div id="ProgressPredict"></div><br />
'''Прогрессивно-предиктивный дозвон'''. Общая схема аналогична задачам [[#Progress|с прогрессивным набором]], однако дополняет ее статистическими алгоритмами расчета усредненных показателей обслуживания, на основании которых принимаются решения о необходимости инициации очередного набора номера еще до освобождения операторов из текущих разговоров. Инициатива предполагается к исполнению только для операторов, занятых в конкретный момент времени в данной задаче.<br />
<br />
<br />
<div id="ManualCall"></div><br />
'''Дозвон вручную'''. Задача не использует поиск абонентов, резервирование линий и операторов. Вся эта часть работы лежит на операторе, который самостоятельно определяет время для звонка, ищет абонента во внешних источниках, выбирает номер для звонка, осуществляет звонок средствами АТС Oktell, и лишь потом при необходимости зафиксировать информацию осуществляет привязку звонка к определенной задаче. При этом номер попадает в прикрепленную таблицу абонентов новой строчкой, а у оператора есть возможность провести диалог по сценарию, сохранив в таблице абонентов зафиксированные ответы и прочую информацию, а также осуществить пост-вызывную обработку в недоступном для входящих звонков состоянии. <br />
<br />
Привязка существующего звонка к задаче осуществляется одним из способов:<br />
* В модуле [[Мое рабочее место|«Мое рабочее место»]].<br />
* Компонентом сценария [[Общие компоненты сценариев#UserState|«Статус объекта»]].<br />
* Командой [[Oktell_Web-Socket_Protocol#attachcalltotask|websocket-интерфейса]].<br />
<br />
Также может быть организован новый двусторонний вызов с последующей привязкой звонка к задаче с помощью компонента сценариев [[Компоненты служебных сценариев#Connector|«Коммутатор»]].<br />
<br />
Сразу следует заметить, что прикрипление существующего звонка возможно не только к задаче с типом ''Дозвон вручную'', но также и к задачам других типов, если это разрешено их настройкой. По умолчанию у других задач эта функция запрещена, так как прикрепление в этом случае может испортить прикрепленную таблицу абонентов. Таблица абонентов с одной стороны является ценным ресурсом, а с другой стороны в исходящих задачах - базой номеров, которая может стать некорректным хранилищем одинаковых данных. Прежде чем разрешать операторам прикреплять существующие звонки к исходящим задачам, следует определить алгоритм дальнейшего поведения. Например, в диалоговом сценарии в самом начале установить успешный результат для задачи, чтобы впоследствии исключить перезвоны на такие номера.<br />
<br />
<br />
<br />
* Сценарий IVR. Используется в задачах, обрабатываемых автоматическим сервисом голосовых меню. Выберите один из элементов списка существующих в текущем проекте пользовательских сценариев IVR для прикрепления его к редактируемой задаче. После дозвона до абонента ему будет воспроизведен выбранный сценарий голосового меню с полным функционалом и доступом к таблице с информацией об абоненте, если она назначена (раздел [[Сценарии IVR|Call-центр. Сценарии. Сценарии IVR]]). <br />
* Сценарий диалога. Используется в задачах, обрабатываемых операторами call-центра. Выберите один из элементов списка существующих в текущем проекте пользовательских сценариев разговора для прикрепления его к редактируемой задаче. После коммутации абонента с оператором система начнет выполнение указанного сценария диалога. В сценарии могут присутствовать элементы-подсказки оператору, элементы запросы ответов абонента, заполняемые оператором в открывающихся формах ввода, а также прочие произвольные формы ввода (раздел [[Сценарии диалога|Call-центр. Сценарии. Сценарии диалога]]). Сценарии диалогов являют собой наиболее общую и гибко настраиваемую систему всплывающих окон, известных в терминологии call-центров как «PopUp». <br />
* Служебный сценарий. Используется голосовыми задачами в конце обработки вызова c передачей собранного контента канала для его обработки, сохранения и других служебных действий (раздел [[Служебные сценарии|Call-центр. Сценарии. Служебные сценарии]]). При этом сценарий обработки контента, назначенный в общих настройках, не запускается. Код инициатора запуска служебного сценария - 26. <br />
* Рабочий график задачи. Определяет время активности задачи. Исходящая задачи не производит звонков вне графика, входящая задача не принимает звонки, возвращая управление обратно в сценарий обработки входящих звонков по ветке «Вне графика». Таким образом, задача, даже находясь в активном состоянии, при наличии всех условий будет ожидать начала очередного периода актуальности в соответствии с установленным графиком. График представляет собой недельный срез. Для установки активности – щелкните мышью в соответствующем пересечении дня недели и часа, или растяните рамку выделения необходимой области. Элемент является инверсивным, то есть при двойном выделении переходит в первоначальный вид. <br />
* Дата активации задачи. Определяет время, до которого исходящая задача не приступает к действию, даже будучи активной. Входящая задача до наступления этой границы при входе возвращает управление в сценарий обработки входящего вызова по ветке «вне периода актуальности». Время активации можно не назначать, отключив галочку. <br />
* Дата прекращения выполнения. Дополнительное условие, подобное рабочему графику, определяющее интервал времени, за пределами которого задача не выполняется и возвращает управление в сценарий по ветке «вне периода актуальности». <br />
* Остановить задачу. Способ завершения исходящей задачи. Среди вариантов: <br />
** После завершения всех абонентов; <br />
** После наступления времени деактивации; <br />
** Не останавливать никогда. <br />
<br />
<br />
<br />
При выборе пункта «не останавливать никогда», после завершения обзвона исходящая задача становится в ожидание и производит постоянную синхронизацию с таблицей абонентов на предмет появления новых записей. Период ожидания перед очередной синхронизацией задается на вкладке «Абоненты». Задача может быть остановлена только супервизором путем перевода в неактивное состояние.<br />
<br />
При завершении задачи, а также при каждом переходе задачи в режим ожидания появления новых абонентов система вызывает хранимую процедуру A_TaskManager_Task_AfterFinished, передавая в нее идентификатор задачи, системное время сервера, а также отличительный признак текущего состояния - полного завершения или ожидания новых абонентов. При необходимости оперативно реагировать в БД допускается свободная корректировка текста процедуры.<br />
* Расписание праздников. Указывает, будет ли применяться поправка на праздничное расписание (выходные и праздники и исключения, настраиваемые для комплекса в модуле общих настроек). В случае, если в расписании праздников день является исключением (праздник или наоборот рабочий день), то расписание задачи корректируется с учетом него, в противном случае применяется стандартное расписание задачи. Корректировка производится следующим образом: если день объявлен праздником - задача не запускается, а если день объявлен рабочим по какому-либо дню недели, то задача активируется в соответствии с ее расписанием для этого дня недели.<br />
<br />
<br />
<br />
<br />
===Ресурсы===<br />
<br />
<br />
Вкладка определяет ресурсы, выделяемые на задачу системой. С помощью управления ресурсами производится многостороннее ограничение производительности задачи. Это по-разному используется в случае организации аутсорсинговых и корпоративных call-центров.<br />
<br />
<br />
[[Файл:cl_cc_task_f2.png|center|800px]]<br />
<br />
<br />
* Операторы. Доступно для задач, обрабатываемых операторами call-центра. В списке операторов выделите галочками необходимых операторов и пользуясь стрелками установите необходимый порядок (если будет использован способ выбора операторов «по cписку»). Оператор может одновременно быть назначен на множество задач, предоставляя автоматике менеджера задач Oktell управление ресурсами (см. [[Менеджер задач|Администрирование. Общие настройки. Менеджер задач. Приоритет исходящих задач]]. <br />
* Вариант обхода операторов. Доступно для задач, обрабатываемых операторами call-центра. Предоставляет создателю задачи возможность максимально эффективно подходить к выделению ресурсов. В случае, если во входящей задаче дефицит операторов и звонок попадает в очередь, алгоритм выбора не включается, и производится коммутация с первым освободившимся оператором. В других случаях (а также в исходящих задачах) существуют несколько алгоритмов, выбор одного из которых должен производиться после учета всех факторов работы конкретного call-центра: <br />
** По списку (по компетенции). Выделяется первый свободный оператор из установленного списка, то есть основная нагрузка ложится на операторов в начале списка. <br />
** Поочередно. Организуется список, выбор оператора из которого производится поочередно, например 2, 1, 3, 2, 1, 3, 2, 1, 3. <br />
** Наименее занятый по задаче. Ищется оператор, участвовавший в задаче минимальное время среди операторов, назначенных в задачу. Таким образом, из двух операторов, один из которых обработал 5 вызовов по 5 минут каждый, а другой 1 вызов длительностью 0,5 часа, будет выбран первый. Стоит аккуратно использовать этот режим, так как при присоединении к задаче новых операторов весь поток звонков по задаче устремится на них. <br />
** Наименее занятый. Учитывая не только контекст данной задачи, а общую работу в организации, будет выбран оператор, который провел в коммутациях меньше всего времени за текущий день. Стоит аккуратно использовать этот режим, так как при присоединении к call-центру новых операторов весь поток звонков по задаче устремится на них. <br />
** Наиболее свободный. Среди операторов будет выбран тот, со времени окончания последнего разговора которого прошло больше всего времени. <br />
** Случайный выбор. Система пытается найти одного из свободных операторов с помощью равномерного распределения. Таким образом, имитируя равномерность загрузки в случае, если у создателя нет четкой уверенности в корректности применения одного из предыдущих вариантов. <br />
** Пользовательская процедура. Используется хранимая процедура <span style="color:green;">A_TaskManager_OperatorsAll_Get_Custom</span> в основной БД. При необходимости формирования динамических списков администратору необходимо сформировать в ней выходную таблицу с кодами операторов, отсортированную в приоритетном порядке от более приоритетных к менее. Будет зарезервирован свободный оператор, код которого располагается в выходном наборе выше всех остальных. Итоговый список фильтруется в соответствии со списком установленных операторов для обработки в конкретной задаче. Отсутствующие же в выходном наборе операторы не подлежат резервированию на текущий вызов ни в каком случае. При использовании этого режима во входящих задачах в процедуру передаются помимо кода задачи также код абонента в списке (если список прикреплен) и код внешней линии, по которой произошел текущий звонок (по нему из БД можно достать другие поля в таблице коммутаций или во временной таблице, ранее заполненной в сценарии IVR). По умолчанию процедура возвращает всех операторов в каком-то определенном произвольном порядке. <br />
<br />
При использовании пользовательской процедуры в исходящих задачах следует иметь в виду, что при фильтрации списка операторов и невозможности зарезервировать ни одного из перечисленных в ней, осуществляется приостановка выполнения задачи с кодом «Операторы не найдены», даже если в задаче есть свободные операторы, не вошедшие в выборку. Возобновление происходит не позднее чем через минуту. Однако задачи, использующие пул с резервированием операторов, при использовании пользовательской процедуры осуществляют в этом случае последовательный перебор абонентов согласно установленным приоритетам обхода вплоть до момента успешного резервирования оператора, либо до завершения однократного перебора всех абонентов задачи.<br />
<br />
* Супервизоры. Выделите галочками в списке необходимых супервизоров. Они будут получать уведомления при возникновении критических ситуаций, а также будут рассматриваться получателями контрольных событий, назначенных на задачу. <br />
* Внешние линии. Доступно только для исходящих задач. При назначении этого свойства для исходящей задачи отметьте галочками выделяемые для использования задачей внешние линии. Задача при возможности совершения очередного вызова будет использовать только те из указанных линий, которые находятся в активном состоянии и согласно их свойств доступны для использования в автоматическом оповещении. <br />
* Ограничивать количество. При необходимости, выставив флаг, можно ограничить использование линий задачами. Для входящей задачи укажите максимальное число подключений к задаче. При поступлении очередного звонка, превышающего число подключений к задаче, будет произведен возврат управления в сценарий обработки входящего вызова по ветке «превышено число подключений». Для исходящей задачи число совершаемых вызовов будет дополнительно ограничиваться указанным количеством линий, что может быть использовано, например, на линиях потока Е1 для разделения ресурсов несколькими задачами при их совместном использовании.<br />
<br />
<br />
<br />
<br />
===Абоненты===<br />
<br />
<br />
Вкладка определяет прикрепленную таблицу абонентов и формат общения задачи с ней.<br />
<br />
<br />
[[Файл:cl_cc_task_f3.png|center|800px]]<br />
<br />
<br />
* Таблица абонентов. Указывает на прикрепленную к задаче таблицу абонентов (из существующих в текущем проекте). Исходящие задачи используют таблицу для осуществления звонков. Входящие задачи могут корректно использовать только ту таблицу абонентов, в основе которой лежит таблица БД. Входящие задачи по выбору могут искать абонента по определившемуся номеру в таблице или для каждого звонка создавать новую запись. В соответствии с настройками таблицы абонентов, часть информации из списка будет отображена во всплывающих «PopUp» окнах на рабочем месте оператора, в случае если рабочее место оператора компьютеризировано. Номера абонента для дозвона берутся из столбцов, отмеченных свойством «Телефон». При смене списка у существующей задачи, статистика по произведенным звонкам не теряется, но задача полностью синхронизирует свой внутренний список с таблицей абонентов. Аналогично задача ведет себя при изменениях, вносимых в назначенную ей таблицу абонентов в модуле [[Таблицы абонентов]]. <br />
* <div id="TableAbonentMethods"></div>Метод работы с таблицей. Доступно только для исходящих задач. Определяет один из нескольких вариантов работы с данными в таблице абонентов. <br />
** '''Загрузка в память и синхронизация'''. Выставляется по умолчанию. В оперативной памяти создается кэш с данными по идентификаторам и телефонам всех абонентов таблицы. Периодически производится полная синхронизация с БД. Следует иметь в виду, что ресурсы системы ограничены, и поэтому использование этого метода ограничено определенными объемами данных в таблице абонентов. Рост объема влияет как на время синхронизации, так и на общее время обработки. При объеме таблицы более 100 тысяч абонентов рекомендуется использовать альтернативные методы работы с таблицей. В зависимости от производительности и объема оперативной памяти сервера указанное число может возрастать до 1 млн (на все активные задачи). <br />
** <div id="DBCache"></div>'''Кэш внутри БД, встроенный метод'''. Методы кэширования в БД существенно снижают нагрузку и могут быть использованы в любом случае и на любых объемах. Однако при этом исключается возможность использования уникальных приоритетов обхода таблицы, приведенных ниже. Активный в этом случае приоритет обхода аналогичен комбинации {По абонентам, поочередно, поочередно}. В случае массовых задач это не играет большой роли, поскольку оповещение занимает достаточно длительный период. В ходе синхронизации на основе прикрепленной таблицы абонентов в БД строится кэш-таблица (<span style="color:green;">A_TaskManager_Idx_{Идентификатор задачи}</span>), содержащая идентификаторы и состояния абонентов, на которой затем базируется алгоритм поиска абонента для совершения очередного звонка. Не исключается внешнее воздействие на таблицу кэша в целях управления алгоритмом выборки. <br />
** '''Сценарий поиска абонента'''. Менеджер задач позволяет использовать совершенно внешний алгоритм поиска абонентов. Делается это посредством служебного сценария поиска абонентов, на каждой итерации вызова которого ожидается получение трех значений: числовой идентификатор абонента в списке, номер для набора, признак завершенности списка/задачи. В этом режиме синхронизация не проводится, так как кэш из управления сервером Oktell вынесен в логику сценария. Любая возвращенная сценарием связка (ид абонента, номер абонента) отправляется в набор вне зависимости от фактического присутствия указанной пары в прикрепленной к задаче таблице абонентов. Однако с проверкой состояния по таблицам собственной оперативной статистики - если проставлен конечный результат или превышено установленное число неудачных попыток дозвона, то сервер воздерживается от набора и вызывает сценарий еще раз. Прикрепленная таблица абонентов используется только для получения доступа к информационным полям и отображения операторам, для операций с переменными типа «Поле таблицы», а также возможно для последующих статистических операций. Для работы метода требуется указание служебного сценария поиска абонента (ниже). <br />
<br />
<span style="color:red;">ВНИМАНИЕ! В обязательном порядке проверяйте наличие индексов по полю идентификатора прикрепленной таблицы абонентов. Особенно это важно при выборе метода работы с таблицей через кэш в БД на больших объемах (более 100 тысяч записей)</span>. <br />
<br />
<span style="color:red;">ВНИМАНИЕ! Процесс поиска оператора/линии/абонента производится менеджером задач линейно. В случае, если сценарий поиска абонентов работает долго, это отразится на отсутствии исходящих звонков по всем исходящим голосовым задачам</span>. <br />
<br />
* Служебный сценарий поиска абонента. Доступно только для исходящих задач, работающих с таблицей через сценарий поиска абонентов (выше). Устанавливает служебный сценарий (в списке предлагается выбор среди проектных сценариев, однако вручную можно указать название любого общего служебного сценария), который вызывается всякий раз, когда менеджер задач принимает решение о необходимости запуска очередного набора номера. Цель сценария определить идентификатор абонента, а также номер, который следует набирать при этом (сохраняются соответственно в служебных переменных «Возвращаемое значение 1» и «Возвращаемое значение 2»). В случае, если сценарий не возвращает корректного идентификатора, он должен указать, является ли это временным, или задача завершена (в этом случае необходимо установить значение «1» в служебную переменную «Возвращаемое значение 3»). <br />
<br />
На вход сценарий в качестве стандартных функций служебного сценария принимает информацию о задаче. В качестве неявных параметров передаются: 1 - идентификатор списка, 2 - режим вызова («1»-выполнение в потоке менеджера задач с инициативой одиночного запуска, «2»-выполнение в потоке прогрессивного пула с инициативой множественного запуска), 3 - идентификатор сессии поиска, чтобы иметь возможность определять циклы, 4 - идентификатор оператора (для задач [[#ByScriptForOperator|с поиском абонента для оператора]]''). Код инициатора запуска служебного сценария - 21. <br />
<br />
<span style="color:red;">ВНИМАНИЕ! Рекомендуется, но не требуется, чтобы возвращаемые номера и даже идентификаторы однозначно соответствовали таблице абонентов. При выбранном режиме поиска абонентов через сценарий таблица абонентов может быть вовсе пуста, при этом набор будет осуществляться, пока сценарий возвращает уникальные корректные значения идентификаторов и номеров</span>. <br />
<br />
Задача проверяет возвращаемые сценарием поиска номер и идентификатор абонента и осуществляет фильтрацию по общим правилам. Так например, набор номера не начнется, если предыдущая попытка набора этого же номера еще не завершена, или оператором было ранее установлено и еще не достигнуто время следующего звонка на номер, или число звонков на номер уже превысило допустимое значение. Чтобы оказать влияние на применение тех или иных фильтров следует устанавливать специальные значения служебной переменной «возвращаемое значение 3»: <br />
<br />
- 10 - не использовать фильтры вообще, всегда начинать набор номера; <br />
<br />
- 11 - проверять только количество занято; <br />
<br />
- 12 - проверять только количество не отвечает; <br />
<br />
- 13 - проверять только таймауты номера; <br />
<br />
- 14 - проверять только таймауты абонента; <br />
<br />
- 15 – проверять завершен ли абонент по признаку «FullSuccess»; <br />
<br />
- 16 – проверять завершен ли абонент по признаку «Finished»; <br />
<br />
- 17 – проверять завершен ли абонент по признаку «Stop». <br />
<br />
- Для значений 11-17 возможно указание перечислений, например «11, 12, 16». <br />
<br />
* Отправлять оператору запрос на подтверждение дозвона абоненту. Доступно для задач ''[[#FixOperator|с закреплением за оператором]]'' и ''[[#ByScriptForOperator|поиска абонента для оператора]]''. Определяет, следует ли давать оператору право принятия окончательного решения о совершении звонка конкретному выбранному системой абоненту.<br />
<br />
* Заполнение таблицы. Доступно только для входящих задач. Определяет формат поиска строки в таблице абонентов. Среди вариантов: <br />
** '''Каждый звонок модифицирует информацию'''. При поступлении вызова в таблице по определившемуся номеру ищется запись с информацией об абоненте и в случае обнаружения запись используется (отдает на модификацию в формах ввода, используется при маршрутизации). Если запись не найдена, или номер не определился – создается новая запись с пустыми значениями, куда сразу подставляются только новый идентификатор абонента и телефон, а работа аналогична. <br />
** '''Каждый звонок создает новую запись'''. Вне зависимости от того, определился номер или нет, существует номер в таблице или нет, создается новая запись с новым идентификатором и сценарий происходит независимо от истории абонента и его предыдущих звонков. <br />
<br />
* Пытаться соединять с оператором, обслуживавшим предыдущий звонок абонента. Доступно для входящих задач, обслуживаемых операторами. При задействовании метода во время поступления звонка производится анализ статистики и установка оператора, который последним обслуживал текущего абонента. Если оператор оказывается свободным, производится соединение с ним, в противном случае происходит постановка звонка в общую очередь задачи. Поиск последнего звонка в зависимости от выбранного типа будет производиться по статистике текущей задачи, либо по всей статистике call-центра. Текущий абонент идентифицируется определившимся при звонке номером, либо кодом в прикрепленной таблице абонентов (в этом случае одному абоненту может принадлежать несколько номеров). <br />
* Интервал синхронизации. Доступно только для исходящих задач, работающих с кэшем в памяти или в БД. Определяет промежуток времени до следующей обязательной синхронизации. От 1 минуты до 1 суток. Синхронизация проводится периодически и без учета интервала, в том случае, если список обработан до конца и необходим повторный проход. <br />
* Интервал синхронизации при отсутствии активности. Доступно только для исходящих задач, работающих с кэшем в памяти или в БД, остановка которых не предусматривается (параметр «завершить задачу» установлен в «никогда»). В случае, если в списке не осталось ни одного абонента, куда бы задача могла позвонить, она переходит в ожидание с учащенной синхронизацией. Период этой синхронизации указан в данном свойстве. От 1 минуты до 2 часов. Значение 0 в поле фактически соответствует интервалу в 10 секунд. <br />
* Синхронизировать со списком при каждой активации. Доступно только для исходящих задач, работающих с кэшем в памяти или в БД. При использовании больших списков с механизмом кэширования в БД процедура синхронизации может занимать некоторое достаточно длительное время. В этой связи синхронизация принудительно проводится лишь при первом обращении к таблице-кэшу после запуска системы (для активных задач при обнаружении возможности совершения звонка, для неактивных задач после первой активации). В задачах, где допускается изменение данных в таблице, использование этого флага позволяет не пользоваться контекстным меню для запуска процедуры синхронизации, а автоматически проводить ее после очередной активации задачи. <br />
* Использовать алгоритм перезвона абонентам строго в назначенное время. Доступно только для исходящих задач, работающих с кэшем в памяти и автоматизированным поиском абонента (не посредством ручного выбора). В случае активации режима система осуществляет автоматический постоянный мониторинг находящихся в кэше задачи абонентов на предмет возможности осуществления звонка. Производится отслеживание только тех абонентов, звонок которым уже производился, был выбран результат звонка «Перезвонить абоненту..» (именно абоненту!) и указан период ожидания или время, не ранее которого очередной вызов должен быть произведен. Выставление результата может произойти как в стоп-форме (оператором), так и в сценарии (автоматически на основе заложенного алгоритма). <br />
<br />
При отключенном режиме производится стандартный однопотоковый обход всей таблицы и возврат к абонентам для перезвона происходит в соответствии с общими принципами выставленного приоритета обхода. <br />
<br />
<span style="color:red;">ВНИМАНИЕ! При формировании задания на перезвон в указанное время для номера автоматически сбрасываются счетчики попыток с результатами «Занято» и «Не отвечает». Если указаны один или несколько альтернативных номеров, то все они считаются приоритетными. Если альтернативный номер не указывается, то приоритетным считается текущий номер, в ходе которого был получен результат «Перезвонить абоненту..». В случае истечения допустимого количества неудачных попыток дозвона производится возврат абонента из приоритетных в общий список со сбросом счетчиков попыток с результатами «Занято» и «Не отвечает». <br />
<br />
<span style="color:red;">ВНИМАНИЕ! Следует иметь в виду, что для решения поставленной задачи автоматического перезвона строго в назначенное время автоматика работает оптимально только при определенных ограниченных объемах поступающих на перезвон абонентов. Если их количество таково, что последовательная их обработка при средней продолжительности звонка на используемом количестве линий и операторов не укладывается в разумное время, задача перестанет корректно функционировать, полностью сосредоточив внимание на абонентах для перезвона с применением «нестрогого» алгоритма их обхода. В ряде случаев имеет смысл отключать механизм перезвона или использовать альтернативные методы работы с таблицей абонентов в целях более тонкой наладки корректного процесса перезвона</span>. <br />
<br />
<br />
Несколько следующих параметров определяют большое множество вариантов обхода абонентов. Практически любую постановку можно приближенно настроить в задаче, выставив их соответствующим образом. После описания будет приведено несколько примеров для более четкого понимания. Приоритеты обхода доступны только для задач, осуществляющих дозвон до абонентов по единому списку (все типы кроме задач с ручным выбором абонентов и распределенным списком).<br />
* Приоритет обхода абонентов. Доступно только для исходящих задач. Определяет способ поиска очередного абонента в таблице при необходимости осуществить звонок на иных абонентов. <br />
** Строгий. Список абонентов всегда обрабатывается с самого начала. Второй абонент не будет обрабатываться, пока по первому абоненту не будет получен конечный результат (положительный или отрицательный). <br />
** Нестрогий. Список абонентов всегда обрабатывается с самого начала. Обрабатывается тот абонент, который находится ближе всех к началу списка и на который есть возможность осуществить звонок (результат по абоненту еще не достигнут, на абонента не установлены таймауты ожидания). <br />
** Отсутствует. Производится обработка следующего по списку абонента (циклический обход). <br />
** Случайный. Производится случайная выборка из равномерного распределения по таблице абонентов. <br />
<br />
* Приоритет обхода номеров. Доступно только для исходящих задач. Определяет способ поиска очередного номера абонента в таблице при необходимости осуществить звонок на иные номера конкретного абонента. <br />
** Строгий. Список номеров текущего абонента всегда обрабатывается с самого начала. Второй номер не будет обрабатываться, пока по первому номеру не будет получен конечный результат (положительный или отрицательный). <br />
** Нестрогий. Список номеров абонента всегда обрабатывается с самого начала. В реализацию идет тот номер, который ближе всех к началу списка и на который есть возможность осуществить звонок (результат по абоненту еще не достигнут, номер не отбракован, ни на абонента, ни на номер не установлены таймауты ожидания). <br />
** Отсутствует. Производится обработка следующего по списку номера абонента (циклический обход). <br />
** Случайный. Производится случайная выборка из равномерного распределения по номерам абонента. <br />
<br />
* Общий приоритет обхода. Доступно только для исходящих задач. При необходимости (или если угодно возможности) произвести очередной звонок, определяет каким способом искать номер – отдать предпочтение выбору нового абонента или попробовать другие номера текущего абонента. Возможные варианты: <br />
** Абоненты; <br />
** Номера. <br />
<br />
* Прогрессивный обход. Доступно только для исходящих задач с активированной прогрессивной схемой. Определяет способ выбора множества номеров при необходимости произвести одновременно несколько звонков: возьмутся несколько номеров у одного абонента, либо по одному номеру у разных абонентов. Возможные варианты: <br />
** Абоненты; <br />
** Номера. <br />
<br />
* Лояльность к абонентам. Определяет для логики принятия решений, каким образом проводить действия, где затрагивается время абонента, отличное от разговора с оператором. На итоговую лояльность влияет множество других параметров задачи, в частности настройки очереди, тип выбранной задачи (как было отмечено выше, прогрессивная схема менее лояльна, чем резервирующая операторов). Несмотря на большой диапазон, для простоты среди возможных вариантов в списке приведены только три: <br />
** Отсутствует; <br />
** Средняя лояльность; <br />
** Полная лояльность; <br />
<br />
<br />
Словами их можно описать так: Отсутствующая лояльность не помнит причиненных абоненту неудобств, средняя лояльность ограничивает неудобства определенным значением, полная лояльность после первого неудобства берет абонента в отдельную категорию и работает с ним как с единственным.<br />
<br />
<br />
<br />
Задачи с ручным выбором абонентов и распределенным списком имеют несколько индивидуальных свойств и возможностей. При создании такой задачи супервизору необходимо провести разбиение списка по операторам. <br />
<br />
<br />
[[Файл:cl_cc_task_f3a.png|center|800px]]<br />
<br />
<br />
Распределение абонентов. Поровну или вручную. В первом случае список делится на всех операторов задачи равномерно. Во втором случае супервизору необходимо задать правила распределения. <br />
<br />
<br />
Таблица распределения. Доступно указание начальных букв, диапазонов букв, количества абонентов (берется подряд после операций с буквами) или процента. После нажатия кнопки «Перераспределить» в БД создается кэш-таблица, согласно которой производится обработка задачи модулем управления. <br />
<br />
<br />
<span style="color:red;">ВНИМАНИЕ! Добавление операторов в реальном времени в задачу с распределенным списком в модуле управления ресурсами не даст результата, если при разбиении списка оператор не присутствовал в задаче. Необходимо также произвести переброс части абонентов на оператора. Это можно сделать в модуле управления ресурсами на вкладке «Абоненты».<br />
<br />
<br />
<span style="color:red;">ВНИМАНИЕ! После выполнения одним из операторов всех своих заданий (в соответствии с установками задачи) супервизоры получат соответствующее уведомление</span>.<br />
<br />
<br />
<br />
<br />
===Дополнительно===<br />
<br />
<br />
Все числовые элементы вкладки доступны только для исходящих задач. Здесь указываются параметры, определяющие не характер, а влияющие на ход выполнения задачи. Позволяют регулировать нагрузку на ресурсы конкретного call-центра наиболее оптимальным способом.<br />
* Максимальное число звонков при прогрессивном наборе на каждого оператора. Ограничивает прогрессивный набор установленным числом разрешенных дозвонов. Например, при стандартном значении 5 для трех операторов, ожидающих соединения, будет осуществлено не более 15 дозвонов. При выходе одного из операторов или при получении им звонка, оставшиеся 4 не урезаются, а остаются в очереди. Однако при получении негативных ответов от линий, новые дозвоны не будут осуществляться, пока их больше 10. <br />
* Ограничение на вероятность преждевременного звонка. Принуждает систему тщательно анализировать статистику, не переступая за рамки заданного значения вероятности (или в этом случае частоты). <br />
* Пауза после получения сигнала «Занято». Устанавливает минимальный таймаут ожидания до следующей попытки набора номера этого же абонента после получения от линии сигнала «Занято». <br />
<br />
<br />
[[Файл:cl_cc_task_f4.png|center|800px]]<br />
<br />
<br />
* Число попыток при ответе «Занято». Устанавливает число попыток дозвона до абонента, если система постоянно получает сигнал «Занято», несмотря на установленные таймауты. После проведения последней из указанного числа попыток, система переводит абонента в «Завершенные» с пометкой «Занято». <br />
* Пауза после получения сигнала «Не отвечает». Устанавливает минимальный таймаут ожидания до следующей попытки набора номера этого же абонента после получения от линии сигнала «Не отвечает», или истечении времени ожидания ответа абонента <br />
* Число попыток при ответе «Не отвечает». Устанавливает число попыток дозвона до абонента, если система постоянно получает сигнал «Не отвечает», несмотря на установленные таймауты. После проведения последней из указанного числа попыток, система переводит абонента в «Завершенные» с пометкой «Не отвечает». <br />
* Время ожидания коммутации. Устанавливает время ожидания, после которого звонку будет присвоен статус «Абонент не отвечает» и увеличен счетчик числа попыток при сигнале «Не отвечает» <br />
* Подставляемый номер телефона. При осуществлении исходящих задач на потоке E1 с множеством зарезервированных за ним номеров, система будет подставлять установленный здесь телефонный номер в качестве CallerId. <br />
* Пропускать обработку вызова при ответе факс-автомата. Доступна только для исходящих задач. При выключенном флаге любой ответ абонента считается корректным и переводится в обработку - оператором или IVR, даже если он распознан как факс-автомат. Активировав свойство такие вызовы (распознан факс) по задаче не считаются корректно отвеченными и прекращаются, не попадая в обработку на коммутацию с оператором или IVR. В статистику попыток попадает результат «Факс». <br />
* Поведение при переключении абонента на сценарий IVR. <br />
** Продолжать выполнение в рамках задачи с освобождением оператора. Стандартный режим, при котором после перевода оператор освобождается, а сценарий диалога продолжает выполняться у пользователя, на которого произведено переключение, если настройки позволяют передавать диалоговые формы данному пользователю (задача, права, присутствие в списке операторов, наличие клиентского интерфейса и т.д.), либо диалоговый сценарий прекращает свое исполнение в момент переключения. В случае, если перевод осуществляется на очередь, диалоговый сценарий сворачивается у переводившего вызов оператора, а принятие решения о дальнейшем его поведении ожидает снятия трубки абонентом, на которого было произведено переключение. Переключение на IVR также производит вывод текущего оператора из задачи с обрыванием сценария диалога. <br />
** Осуществлять выход из задачи (с возможностью входа в другую задачу). Устанавливает режим, при котором любая коммутация с IVR после перевода на него звонка оператором будет автоматически прерывать выполнение текущей задачи, что даст возможность осуществить для линии абонента вход в другую задачу в контексте текущей цепочки коммутаций. Если организовывать таким образом многозадачную реализацию обработки звонка, то в конечном счете в пространственную таблицу коммутаций будет помещена информация по всем коммутациям и служебным предкоммутационным состояниям (ожидание в очереди) со ссылкой на одну и ту же цепочку. Это необходимо иметь в виду при построении сложных отчетов, опирающихся на данные по цепочкам. Все последующие задачи в цепочке - входящие, так как запуск их обработки осуществляется из сценария IVR. Также этот режим может быть использован для перевода звонка на пользователя с сохранением диалоговой формы у оператора, осуществившего перевод. <br />
<br />
Режим выхода работает только если переключение осуществляется посредством сценария IVR и вне зависимости от того, была ли коммутация абонента непосредственно со сценарием, или сначала было произведено соединение оператора с пользователем через IVR и последующий перевод на абонента. <br />
<br />
В случае использования [[Параметры АТС|сценария входа в АТС]], который всегда активируется при переключениях, заблокирована эта функциональность. При необходимости осуществить аналогичное действие с переключением через сценарий входа в АТС можно использовать компонент [[Общие компоненты сценариев#Статус объекта|Статус объекта]]: раздел «Установить состояние линии» параметр «Выход из задачи». При настройке компонента потребуется номер или идентификатор внешней линии (доступен в качестве функции как в диалоговом, так и в IVR сценарии).<br />
<br />
* Оставлять оператора ожидающим обратного вызова. Режим используется для организации сервисов, в ходе обработки звонка в которых необходимо производить переключение абонента на внешний источник (сценарий, внешнего абонента, некоторого пользователя системы и т.д.) и оставлять оператора со сценарием диалога ожидать соединения с абонентом вновь. Для возврата абонента на оператора в сценарии IVR после успешного соединения с внешним источником необходимо не останавливать сценарий компонентом СТОП, а осуществлять ожидание (пауза, DTMF, появление в БД каких то данных и т.п.), и далее компонентом сценария IVR [[Компоненты сценариев IVR#Переключение на номер|Переключение]] с установленным свойством Назначение => [[Компоненты сценариев IVR#Переключение на номер|Возврат]] к оператору производить обратный вызов сквозь резервирование. <br />
<br />
* Режим вывода абонентов из очереди при освобождении операторов. Абонент помещается в очередь только в случае, когда все операторы заняты. По умолчанию осуществляется конкурентный вывод абонента из очереди, то есть первый абонент очереди соединяется с оператором, первым снявшим трубку. При этом вызов рассылается всем операторам по мере их освобождения и вплоть до снятия первым из них трубки. При наличии в очереди нескольких абонентов второй снявший трубку оператор коммутируется со вторым абонентом и т.д. Конкурентный режим обеспечивает максимально строгое соответствие процесса соединений с изначальной очередностью абонентов - впередистоящий абонент всегда соединится с оператором первым. <br />
<br />
Свойство позволяет взамен стандартного конкурентного режима установить режим однократного индивидуального закрепления. То есть при освобождении первого из операторов первый абонент очереди закрепляется за ним, и другим операторам по мере освобождения вызов не рассылается (при отсутствии других абонентов в очереди). За вторым освободившимся оператором закрепляется второй абонент из очереди. Если же оператор не снимет трубку в течение установленного времени, звонок абонента станет считаться приоритетным, разместится в первой позиции очереди, и в целях обеспечения лояльности и очередности обработки при следующем выводе из очереди будет применен конкурентный режим вывода.<br />
* Режим набора номеров. Доступно только для исходящих задач. Позволяет задать индивидуальные значения, либо сослаться на общие настройки. Определяет режим набора номеров по списку абонентов. Используется для гибкой маршрутизации звонков. Подробнее в разделе [[Менеджер задач|Администрирование. Общие настройки. Менеджер задач. Сценарий набора номера]]. <br />
* Служебный сценарий набора номера абонента. Доступно только для исходящих задач. Используется только в случае индивидуальной установки режима набора номеров «через сценарий». В этом случае для набора номеров именно по настраиваемой задаче будет использован указанный служебный сценарий. Ищется в проектном каталоге задачи, если не обнаружен - в общем. В случае ошибочного указания используетя обычный режим прямого набора номеров без преобразования и маршрутизации. В качестве неявных параметров: 1 - номер для дозвона, 2 - идентификатор оператора, 3 - время ожидания в секундах. В качестве явных параметров - информация об абоненте и о задаче. Код инициатора запуска - 11.<br />
* Использовать очередь. Активирует очередь. Без очереди во входящих задачах, если все операторы заняты, управление будет возвращено в обрабатывающий звонок сценарий IVR по ветке «Занято». Исходящие задачи при неактивной очереди полностью исключают возможность ее использования. В этом случае невозможно сохранение недовведенных до конца звонков в очереди для еще пока занятых операторов в случае прогрессивного набора. <br />
* Помещать в очередь при прогрессивном наборе. Отрезает возможность использования ее при прогрессивном наборе. <br />
* Ограничивать максимальное число абонентов в очереди. Для исходящих задач с активированным прогрессивным набором устанавливает порог на количество помещаемых в очередь абонентов. <br />
* Ограничивать время в очереди. При превышении времени нахождения в очереди больше заданного, происходит выход в управляющий сценарий IVR по ветке «Таймаут очереди ожидания». <br />
* Воспроизведение в очереди. Для входящей задачи позволяет выбрать файл (wav, mp3), каталог или сценарий IVR, которые будут применены в случае необходимости воспроизведения позвонившему абоненту мелодии/информации на время очереди. При указании файла в соответствующий момент осуществляется его цикличное воспроизведение. При указании каталога осуществляется случайный выбор и воспроизведение одного из находящихся в нем файлов; после завершения одного файла начинается воспроизведение другого, также выбранного случайно. При указании IVR-сценария осуществляется его запуск в [[Фоновый IVR-сценарий медиа-взаимодействия|фоновом режиме медиа-взаимодействия]] с линией на время ожидания. <br />
<br />
Индивидуально указанное в задаче музыкальное сопровождение пребывания в очереди имеет больший приоритет по сравнению с [[Музыкальное сопровождение|общими настройками]]. Однако не применяются, если в основном сценарии, осуществляющем вход в задачу, было запущено и не завершено [[Компоненты сценариев IVR#Воспроизведение звукового файла|фоновое воспроизведение]] или [[Фоновый IVR-сценарий медиа-взаимодействия|фоновый IVR сценарий медиа-взаимодействия]]. <br />
<br />
* Задача не выполнена при времени коммутации менее. Для сценариев автоматического голосового меню устанавливает время, необходимое сценарию, для донесения основной информации. В случае, если абонент кладет трубку раньше установленного времени, дозвон считается неуспешным, в статистику по такому звонку проставляется описание «Время в сценарии недостаточно», и абонент в ходе реализации задачи будет оповещен вновь. <br />
* Учитывать результат о недостаточном времени коммутации по аналогии с результатом «Занято». Установка свойства приводит к увеличению счетчика попыток с результатом «Занято» и выставления соответствующего настройке таймаута перед началом повторного звонка абоненту по текущему номеру. <br />
* Максимальная продолжительность разговора. Задает время (от начала обработки вызова), по истечению которого наступает контрольное событие, а в диалоговых формах оператора отображается признак превышения установленного времени. <br />
* Воспроизведение во FLASH-буфере. В случае активации и указания файла (wav, mp3), каталога или сценария IVR, осуществляется индивидуальное для задачи медиа-взаимодействие с линией обслуживаемого абонента задачи при размещении его во FLASH-буфере. <br />
* <div id="EffortResultScript"></div> Служебный сценарий обработки результата звонка/попытки. После завершения каждого звонка/попытки набора номера осуществляется размещение данных в таблицах оперативной статистики БД. При необходимости учитывать результаты во внешней системе, обеспечивающей управление дозвоном или контроль за ходом процесса, можно использовать служебный сценарий. В списке предлагается перечень служебных сценариев проекта, однако вручную можно ввести название любого общего служебного сценария. На вход сценарий в качестве стандартных функций служебных сценариев получает информацию о задаче, идентификатор абонента в списке, идентификатор и номер обслуживаемой линии, код сессии сценария (цепочки коммутаций в случае существования успешных соединений), а в качестве неявных параметров передаются: 1 - номер абонента, 2 - идентификатор последнего оператора, 3 - целочисленный код результата звонка (перечень находится в пространственной БД в таблице <span style="color:green;">A_Cube_CC_Cat_TaskResultTypes</span>), 4 - целочисленный код [[Системные настройки#Call-центр|пользовательского результата]] звонка, 5 - код ответа-отказа SIP в случае неудачного исходящего вызова. Код инициатора запуска служебного сценария - 22. <br />
* Переводить сценарий диалога только на операторов задачи. При переключении звонка оператором (или IVR) на другого пользователя системы устанавливает режим перевода сценария диалога. При установке флага (по умолчанию установлен) текущая отображаемая диалоговая форма переходит к оператору, на которого произошло переключение, только в том случае, если он назначен в данную задачу. В противном случае сценарий диалога завершается и обработка звонка продолжается без него. Если флаг не установлен, то диалоговая форма отображается и сценарий продолжается у любого пользователя в случае, если его рабочее место оснащено клиентским интерфейсом. <br />
* Разрешить прикрепление звонка к задаче. Для всех типов задач за исключением [[#ManualCall|исходящих с дозвоном вручную]] определяет возможность для операторов и сценариев осуществлять привязку существующего активного разговора оператора с внешним абонентом к задаче со всеми вытекающими последствиями: диалоговый сценарий, размещение номера в таблице абонентов, поствызывная обработка, статистика, возможно дальнейшие автоматизированные перезвоны абоненту. [[#ManualCall|Подробнее]].<br />
* Режим записи. Позволяет установить индивидуальный режим записи для настраиваемой задачи. Если определен индивидуальный режим записи, то вне зависимости от установок в разделе [[Запись разговоров|Общие настройки. Запись разговоров]] запись всех коммутаций в рамках задачи будет активирована или наоборот деактивирована. <br />
* Поведение сценария диалога после разрыва коммутации. Действует для задач, обслуживаемых оператором. Позволяет индивидуально для задачи выставить значение параметра, задаваемого в модуле общих настроек. ([[Менеджер задач|Общие настройки. Менеджер задач]]) <br />
* При нажатии СТОП в диалоговой форме. Действует для задач, обслуживаемых оператором. Позволяет индивидуально для задачи выставить значение параметра, задаваемого в модуле общих настроек. (Подробнее см. [[Менеджер задач|Общие настройки. Менеджер задач]]) <br />
* Момент запуска сценария диалога. Действует для задач, обслуживаемых оператором. Позволяет индивидуально для задачи выставить значение параметра, задаваемого в модуле общих настроек. (Подробнее см. [[Менеджер задач|Общие настройки. Менеджер задач]]) <br />
* Резервирование внешней линии. Действует для задач, обслуживаемых оператором в режиме с запросом на дозвон. Позволяет индивидуально для задачи выставить значение параметра, задаваемого в модуле общих настроек. (Подробнее см. [[Менеджер задач|Общие настройки. Менеджер задач]]) <br />
* Сценарий запроса на дозвон. Действует для задач, обслуживаемых оператором в режиме с запросом на дозвон. При установке флага и назначении диалогового сценария, принадлежащего проекту, вместо стандартного окна запроса на дозвон с информацией об абоненте из полей прикрепленной таблицы, обозначенных как «Информационное поле», запускается выбранный сценарий диалога с произвольным наполнением. Решение оператора определяется значением служебной переменной «Результат запроса»: 0-дозвон, 1-пропуск абонента, 2-удаление абонента из списка (отказ). <br />
<br />
<br />
Для применения изменений задачи нажмите кнопку «Сохранить» внизу.<br />
<br />
<br />
Некоторые моменты, касающиеся работы менеджера задач и не связанные явно с модулем редактирования задач приведены в разделе [[Менеджер голосовых задач|Принципы работы логики. Менеджер задач]]. <br />
<br />
<br />
Для повторного запуска исходящей задачи голосового оповещения необходимо очистить ее оперативную информацию. Убедитесь, что задача завершила свое выполнение и в контекстном меню выберите пункт «Очистить оперативную статистику». После активации задача вновь приступит к выполнению.<br />
<br />
<br />
В контекстном меню исходящих задач также доступна команда «Синхронизировать с БД» для принудительной синхронизации кэша с таблицей абонентов в базе данных.</div>Peter