«Статус объекта» — самый ёмкий из общих компонентов. Он даёт сценарию доступ к состояниям объектов системы на чтение и на запись: задач, пользователей, номеров, линий, направлений, конференций, сессий, контактов и самого сервера.
Зачем это нужно на практике
Классический приём: до начала переключения определить статус объекта — пользователя, задачи, номера — и, не пытаясь переключать, сразу озвучить абоненту подходящий текст меню. Без этого абонент услышит сигнал ожидания, а потом всё равно вернётся в меню.
Свойства компонента
| Свойство | Описание |
| Действие | Определить — записать выбранное состояние объекта в переменную. Установить — изменить состояние объекта на результат вычисления аргумента. |
| Тип объекта | Задача, Пользователь, Номер, Линия, Направление, Конференция, Сессия, Контакт, Сервер. Перечень типов зависит от выбранного действия. |
| Ключ объекта | Чем именно адресуется объект — см. таблицу ниже. |
| Функция / действие | Список доступных состояний; зависит от действия и типа объекта. |
| Значение в переменную | Только для «Определить». Переменная, куда заносится результат. |
| Значение | Только для «Установить». Аргумент, значение которого вычисляется для установки состояния. |
| Идентификатор в переменную | Только для действия «Создать». Переменная, куда заносится идентификатор созданного объекта. |
| Переход | Компонент, на который передаётся управление. |
Чем адресуется объект
| Тип | Что можно указать в ключе |
| Задача | Выбор из списка задач системы или проекта. Либо строковый аргумент «Ключ задачи»: GUID вида xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, код задачи или название. Аргумент используется, только если задача не выбрана явно в списке. |
| Пользователь | Выбор из списка либо строковый аргумент «Ключ пользователя»: GUID, имя или логин. |
| Номер | Аргумент с внутренним стандартным номером. |
| Линия | Аргумент: номер, код или GUID линии. |
| Направление | Аргумент: код или GUID направления. |
| Конференция | Аргумент: номер комнаты, GUID или код идентификатора. |
| Сессия | Аргумент: Id цепочки коммутаций или сессия служебного сценария. |
| Контакт | Аргумент: телефон, электронная почта, ICQ и подобное — то, по чему контакт опознаётся. |
Определение состояния
Задача
| Функция | Что возвращает |
| Количество абонентов в очереди | Число. |
| Наибольшее время ожидания среди абонентов очереди | См. примечание о форматах ниже. |
| Расчётное время ожидания в очереди | Оценка времени ожидания при гипотетическом размещении текущего звонка в очереди этой задачи. Приоритет звонка учитывается. В диалоговом и служебном сценариях понятия приоритета нет — оценка даётся для размещения в конец очереди. |
| Количество активных операторов задачи | Число. |
| Количество свободных операторов задачи | Число. |
| Активность задачи | 0 — неактивна, 1 — активна. |
| Доступность по расписанию | 0 — сейчас недоступна, 1 — доступна. |
| Проверка доступности входа | −1 функция не выполнена, 0 вход разрешён, 1 время не подходит по расписанию, 2 время не подходит по периоду активности, 3 превышено максимальное число одновременно активных внешних линий, 4 задача не найдена, 5 несоответствие состояния (задача неактивна, нет операторов и т. д.), 6 ошибка при попытке входа. |
| Количество использованных линий | Число. |
| Количество линий в разговоре | Число. |
| Количество линий в дозвоне | Число. |
| Количество линий в ожидании оператора | Число. |
Как возвращается время ожидания
Результат зависит от типа переменной-приёмника:
- дата/время — значение отсчитывается от 01.01.0000;
- строка — формат
ЧЧ:мм:сс, причём ЧЧ при превышении 24 продолжает расти;
- число — действительное значение: для наибольшего времени ожидания в минутах, для расчётного времени ожидания в секундах.
Пользователь
| Функция | Что возвращает |
| Идентификатор, Имя, Логин пользователя | Строки. |
| Скилл-тэги | Строка. |
| Идентификатор связанной линии | Линия, по которой пользователь совершает звонки. |
| Внутренний номер | Персональный номер, а при его отсутствии — групповой, в котором пользователь приоритетнее: вызывается первым или имеет наибольший приоритет. Если таких номеров несколько, выбирается наименьший. |
| Отдел | Название отдела; пустая строка, если отдел не задан. |
| IP-адрес | Адрес, с которого запущено клиентское приложение или веб-клиент. |
| Статус | 0 не авторизован, 1 готов, 2 перерыв, 3 отключён (нет на месте), 5 занят, 6 зарезервирован, 7 без телефона. |
| Признак переадресации | 0 не установлена, 1 в статусе переадресации. |
| Признак перерыва | 0 нет, 1 в перерыве. |
| Присутствие в КЦ | 0 вне call-центра, 1 в call-центре. |
| Ручной режим КЦ | 0 не установлен, 1 в ручном режиме. |
| Свободное состояние | 0 нет, 1 да. |
| Количество абонентов в очереди | Число. |
| Наибольшее время ожидания среди абонентов очереди | См. примечание о форматах выше. |
| Наличие привилегии в правах | В значении указывается код привилегии из таблицы A_UserRoles_Rights, столбец Code. |
| Наличие роли | В значении указывается название или GUID роли; идентификатор есть в таблице A_UserRoles_Roles, столбец Id. |
Номер
| Функция | Что возвращает |
| Количество абонентов в очереди | Число. |
| Наибольшее время ожидания среди абонентов очереди | См. примечание о форматах выше. |
| Наличие свободных абонентов | 0 нет, 1 есть. |
| Тип внутреннего номера | См. таблицу кодов ниже. |
| Идентификатор основного объекта | Первый вызываемый объект или объект с наибольшим приоритетом — визуально он расположен выше в настройках номера. |
| Идентификатор основной линии | Первая вызываемая внутренняя линия либо линия с наибольшим приоритетом. |
| Идентификатор основного пользователя | Первый вызываемый пользователь либо пользователь с наибольшим приоритетом. Только для стандартных внутренних номеров с режимом вызова «Согласно заданному правилу»; для Hunt-номеров смысла не имеет. |
Коды типов внутреннего номера
| Код | Тип |
| −1 | Номер не найден |
| 1 | Стандартный номер |
| 11 | Hunt-номер в порядке приоритета |
| 12 | Hunt-номер с поочерёдным режимом |
| 13 | Hunt-номер со случайным выбором |
| 14 | Hunt-номер с выбором «Наиболее свободный» |
| 15 | Hunt-номер с выбором «Наименее занятый» |
| 16 | Hunt-номер с выбором «Наименее занятый по этому номеру» |
| 102 | Служебный номер Flash |
| 103 | Служебный номер «Выход в город» |
| 104 | Служебный номер «Выход в АТС» |
| 105 | Служебный номер «Перехват» |
| 110 | Служебный номер «SIP Hotline» |
| 112 | Служебный номер «Управление конференцией» |
| 201 | Быстрый номер |
| 301 | Запуск IVR |
| 401 | Экстренный номер |
| 501 | Стандартный номер на другом сервере — при межсерверном взаимодействии |
Линия
| Функция | Что возвращает |
| Идентификатор, Номер, Код линии | Строки. |
| Внутренний номер | Персональный номер линии или логически связанного с ней пользователя. Если персональных нет — групповой, в котором линия или связанный пользователь наиболее приоритетен. Из двух одинаковых номеров приоритет у номера на логически связанного пользователя с наименьшим номером. |
| CallerId, CalledId | Строки. |
| Идентификатор цепочки коммутаций | Строка. |
| Идентификатор связанного пользователя | Пользователь, логически связанный с линией. |
| IP-адрес | Адрес устройства или шлюза. |
| Состояние | См. таблицу кодов ниже. |
| Время активности | Секунд с момента поднятия трубки. |
| Название абонента, Описание абонента | Значения, установленные ранее в сценарии. |
| Текущая позиция в очереди | Число. |
| Расчётное время ожидания в секундах | Число. |
| Текущий приоритет в очереди | Число. |
| Контент линии (XML) | Только для внешних линий. Полная информация о всех коммутациях на линии. |
| Контент цепочки (XML), Контент цепочки (JSON) | Полная информация о всех коммутациях по цепочке. |
| Поле контента линии | Только для внешних линий. Поле custominfo в контенте линии. |
| Поле контента цепочки (заголовок) | Поле custom в заголовке контента цепочки. |
| Поле контента цепочки (коммутация) | Поле custom текущей коммутации в контенте цепочки. |
| Время без звука, сек | Интервал, в течение которого с линии не приходят RTP-пакеты. |
| Идентификатор и Номер скоммутированной линии либо конференции | Строки. |
| Принадлежность к направлению | В значении указывается код направления. −1 направления не существует, 0 не принадлежит, 1 принадлежит. |
| Заголовок из входящего SIP INVITE/OK | В значении указывается название заголовка, например From. Если значение не указано — возвращается полный текст SIP-сообщения. |
Коды состояния линии
| Код | Состояние | Код | Состояние |
| 1 | Не подключена | 128 | Флеш |
| 2 | Выключена | 256 | Не используется |
| 4 | Готова | 512 | Занято |
| 8 | Трубка поднята | 1024 | Неопределено |
| 16 | Входящий звонок | 2048 | Зарезервирована |
| 32 | Скоммутирована | 4096 | Зарезервирована задачей |
| 64 | Ожидание | | |
Направление
| Функция | Что возвращает |
| Существование | 0 не существует, 1 существует. |
| Идентификатор | GUID. Если направления нет — 00000000-0000-0000-0000-000000000000. |
| Код, Название | Строки. |
| Включено | 0 не активно, 1 активно. |
| Выход во внешнюю сеть | 0 есть, 1 нет. |
| Количество линий | Всего, свободных, занятых, занятых исходящими, занятых входящими — пять отдельных функций. |
| Проверить принадлежность линии | В значении указывается GUID, код или номер линии. 0 не принадлежит, 1 принадлежит. |
| Найти свободную линию (без резервирования) | GUID найденной линии. |
Конференция
| Функция | Что возвращает |
| Существование | 0 не существует, 1 существует. |
| Время активности | Время существования конференции в секундах. |
| Идентификатор, Код идентификатора, Номер комнаты | GUID, уникальный числовой код и номер комнаты. |
| Название, Описание | Строки. |
| Идентификатор управляющего, Идентификатор создателя | GUID. |
| Количество всех участников, Количество активных участников | Числа. |
| Тип доступа | 11 открытое совещание, 12 закрытое с возможностью подать заявку на вход, 13 закрытое, вход только по приглашениям. |
| Активность воспроизведения | Идёт ли сейчас воспроизведение музыкального файла в конференцию. 0 нет, 1 да. |
Сессия — цепочка коммутаций
| Функция | Что возвращает |
| Существование | 0 не существует, 1 существует. |
| Количество активных линий | Число; если линий нет — −1. |
| Количество активных сценариев | Общее число сценариев — IVR, служебных и диалоговых, — запущенных под этой сессией. |
| Наличие активного обработчика задачи | Обрабатывается ли звонок по задаче call-центра. 0 нет, 1 есть. |
| Контент (XML), Контент (JSON) | Полная информация о всех коммутациях по цепочке. |
| Поле контента (заголовок), Поле контента (коммутация) | Поля custom в контенте цепочки. |
Контакт
| Функция | Что возвращает |
| Проверить группу | В поле «Группа» указывается название группы контактов. 0 не входит, 1 входит. |
Сервер
| Функция | Что возвращает |
| Имя хоста сервера | Строка. |
| Локальный IP-адрес | Один из локальных адресов хоста. |
| Все локальные IP-адреса | Перечень через точку с запятой. |
| Внешний IP-адрес сервера (STUN-запрос) | Параметром можно указать конкретный STUN-сервер. |
| Значение конфигурации | Параметром указывается ключ конфигурации. |
| Рабочее время по графику офиса | Параметром можно передать дату/время. 0 нерабочее время, 1 рабочее. |
| Объём виртуальной памяти службы, МБ | Число. |
| Объём виртуальной памяти процесса HAL, МБ | Число. |
| Количество подключённых пользователей | Число. |
| Количество внешних линий, Количество внутренних линий | Числа. |
| Регистрационный номер | Строка. |
| Количество пользователей, внешних и внутренних линий в лицензии | Три отдельные функции. |
| Дата следующего подтверждения лицензии | Дата/время. |
Мониторинг лицензии из сценария
Последние функции этой группы позволяют собрать служебный сценарий, который следит за приближением даты подтверждения лицензии и за тем, сколько из лицензированных пользователей и линий фактически задействовано.
Установка состояния
Задача
| Действие | Значение |
| Активность | 1 активировать, 0 деактивировать. |
| Очистить оперативную статистику | — |
| Синхронизировать таблицу абонентов с БД | — |
| Привязать к звонку оператора | Ключ пользователя либо JSON-строка с ключами user и/или idinlist — идентификатором абонента в прикреплённой таблице. Например operatorMasha или {"user": "operatorMasha", "idinlist": 2}. |
| Добавить оператора, Удалить оператора | Ключ оператора: GUID, имя или логин. |
| Изменить количество линий | Ограничение одновременного количества звонков по задаче. −1 снимает ограничение. |
Пользователь
| Действие | Значение |
| Сохранить скриншот | Относительный (от папки \oktell\server) или абсолютный путь к файлу: screens\1.png, C:\screens\2.png. Размер 640×480 либо переопределённый в конфигурационном файле сервера. Таймаут исполнения — 10 секунд. |
| Привязать текущий звонок к задаче | Ключ задачи либо JSON-строка с ключами task и/или idinlist. Например 54C3F5F4-BD04-4EE7-9209-B3C4F2460643 или {"task": "54C3F5F4-BD04-4EE7-9209-B3C4F2460643", "idinlist": 2}. |
| Изменить статус | 1 готов, 2 перерыв, 3 отключён (нет на месте), 5 занят. |
| Изменить признак занятости | 0 освободить, 1 занять. |
| Изменить признак переадресации | 0 выключить, 1 включить. |
| Ввести / вывести в перерыв | 0 вывести, 1 ввести. Причину перерыва можно передать комбинированной строкой [флаг];[код перерыва];[описание], например 1;-1;Обед. |
| Ввести / вывести в Call-центр | 0 вывести, 1 ввести. |
| Ввести / вывести в ручной режим Call-центра | 0 вывести, 1 ввести. |
Линия
| Действие | Что делает |
| Разрыв | Выполняется безусловно: разрыв и отсоединение линии. |
| Мягкий сброс | Разрыв с переключением в сценарий вместо отбоя. |
| Выход из задачи при следующем переключении | 1 применить, 0 отменить. Следующее переключение абонента на любой объект, отличный от оператора, произойдёт с выходом из задачи. То же самое даёт режим «Выход из задачи при переключении на IVR» в настройках задачи. |
| Название абонента | Отображается в журналах статистики, во всплывающем окне при входящем звонке и в разделе программного телефона. |
| Описание абонента | Отображается во всплывающем окне при входящем звонке и в разделе программного телефона. |
| Приоритет очереди | Применяется до входа абонента в очередь. См. предупреждение ниже. |
| Поле контента линии | Только для внешних линий. Записывает значение в поле custominfo контента линии. |
| Поле контента цепочки (заголовок), (коммутация) | Записывает значение в поля custom контента цепочки. |
| Разрешить DTMF-управление | Только для внешних линий. 1 разрешить, 0 запретить. Разрешает на время текущей сессии команды FLASH и управление конференциями через DTMF. |
| Перерегистрировать SIP-поток | Только для линий, по которым регистрация идёт от Октелл — на стороне шлюза. |
| DTMF в линию | Отправляет в линию DTMF-сигнал, указанный в значении. |
| Воспроизвести файл в линию | Проигрывает MP3-файл во время разговора. См. примечание ниже. |
| Воспроизвести файл в коммутацию/конференцию | Проигрывает MP3-файл всем участникам разговора. В значении — уровень громкости от 0 (громко) до 8 (тихо). |
Приоритет очереди меняется только снаружи очереди
Установить его нужно до входа абонента в очередь — можно даже заранее, когда абонента на линии ещё нет. Чтобы изменить приоритет уже стоящему в очереди, придётся вывести его и ввести повторно. После завершения коммутации приоритет сбрасывается в значение по умолчанию.
Кому слышен воспроизводимый файл
Если абонент соединён с IVR-сценарием, файл не воспроизводится вовсе — ни в том, ни в другом режиме.
При воспроизведении «в линию»: если абонент в коммутации — файл слышит только он; если он в конференции — на время воспроизведения он перестаёт слышать остальных.
При воспроизведении «в коммутацию/конференцию» файл слышат все участники.
Конференция
| Действие | Что делает |
| Установить название, Установить описание | Меняет соответствующее поле. |
| Обновить информацию у клиентов | Во всех клиентских приложениях обновляются название и описание конференции. |
| Воспроизвести файл | Проигрывает MP3-файл; слышат все участники конференции. |
| Завершить конференцию | — |
Сессия
| Действие | Что делает |
| Поле контента (заголовок), (коммутация) | Записывает значение в поля custom контента цепочки коммутаций. |
| Воспроизвести файл в коммутацию/конференцию | MP3-файл для всех участников разговора; в значении — громкость от 0 (громко) до 8 (тихо). Не воспроизводится, если абонент соединён с IVR. |
Сервер
Эти действия затрагивают работу всей системы
Часть команд ниже выполняется безусловно — без ожидания корректного завершения коммутаций и служебных сценариев. Прежде чем ставить их в сценарий, который запускается по расписанию или по событию, убедитесь, что момент срабатывания заведомо приходится на время без нагрузки.
| Действие | Что делает |
| Обновить список задач | Синхронизирует менеджер задач с базой: обновляет список задач и их свойства. |
| Обновить общие настройки | Перезагружает из базы текущие общие настройки. |
| Перерегистрировать все SIP-потоки | — |
| Изменить карту сети | — |
| Перезагрузить сервер состояний | Безусловно. Аналог нажатия «Применить» в любом модуле администрирования: сервер состояний инициализируется по данным базы. |
| Перезагрузить аппаратный модуль | Безусловно. Переинициализация аппаратной подсистемы с завершением всех коммутаций и конференций. Если аппаратный модуль работает отдельным процессом, процесс выгружается и запускается заново автоматически. |
| Перезагрузить службу сервера | Безусловно и сразу, без ожидания завершения коммутаций и служебных сценариев. |
| Перезагрузить серверную станцию | Безусловно. Команда операционной системе на полное завершение всех процессов с последующей перезагрузкой. |
| Сборка мусора .NET, Анализ памяти .NET | Служебные операции с памятью. |
| Обновить лицензионный сертификат | — |
| Добавить в бан-лист SIP | Сервер перестаёт принимать любые SIP-сообщения с указанного адреса или с указанным user-agent. В значении — IP-адрес, например 3.14.15.92, либо user-agent, например angry-scanner. Если включено логирование сетевых атак, в trn-лог пишется «banned». |
| Удалить из бан-листа SIP | Возвращает приём SIP-запросов с указанного адреса или user-agent. |
| Добавить в бан-лист App, WS, HTTP | Сервер перестаёт принимать веб-запросы с указанного IP-адреса. |
| Удалить из бан-листа App, WS, HTTP | Возвращает приём веб-запросов с указанного адреса. |
Автоматическая защита от перебора
Пара «Добавить в бан-лист SIP» и «Удалить из бан-листа SIP» позволяет собрать служебный сценарий, который сам блокирует источник подозрительных SIP-запросов и снимает блокировку по истечении срока — без участия администратора.