Способы проверки доступности

Проверка доступности может осуществляться несколькими способами:

  • встроенный режим проверки SIP транка

  • автоматические тестовые звонки

  • Web запросы к API

Встроенный режим проверки доступности SIP транка задается при редактировании SIP провайдера в Режим проверки доступности. Этот способ определения доступности влияет на выбор правила в настройках маршрутизации звонка. Если SIP транк будет доступен, результирующее действие будет выполнено. Иначе, произойдет переход к другому правилу. В случае когда SIP транк доступен, но при отправке пакета INVITE приходит ответ отличный от поднятия трубки 200 OK - следует использовать дополнительные способы для определения доступности КЦ. Например, заранее производить тестовые звонки, которые будут проверять код SIP ответа. Если коммутация не будет установлена - отключить правило до тех пор, пока повторные тестовые звонки не установят успешную коммутацию.

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

Общая схема

Исходные данные:

  • Провайдер связи, который предоставляет общий номер телефона для всех контактных центров - ITSP

  • Call-центр 1 - КЦ1

  • Call-центр 2 - КЦ2

Все звонки поступающие на ITSP обрабатываются КЦ1. Если КЦ1 станет недоступным - переключать все поступающие вызовы на обработку на второй резервный КЦ2 до тех пор, пока КЦ1 не станет доступен для звонков.

Встроенный режим проверки доступности

КЦ1 и КЦ2 добавлены в качестве SIP провайдеров с режимом проверки доступности SIP OPTIONS запросов. При данном типе проверки SIP сервер КЦ должен поддерживать OPTIONS пакеты. Возможные и другие способы проверки доступности, такие как SIP REGISTER запрос и STUN взаимодействие.

Схема Options

Настройка SIP транка

КЦ1 и КЦ2 добавлены в качестве SIP провайдеров с режимом проверки доступности SIP OPTIONS запросов. При данном типе проверки SIP сервер КЦ должен поддерживать OPTIONS пакеты. Возможные и другие способы проверки доступности, такие как SIP REGISTER запрос и STUN взаимодействие.

Для изменения настроек на главной странице Bridge открыть приложение администрирования Настройки. C левой стороны в области Объекты перейти в раздел SIP транки - SIP провайдеры и далее открыть объект для редактирования

Настройки Options

Создание вектора

Выбор вектора

На главной странице Bridge открыть приложение администрирования Настройки. C левой стороны в области Объекты перейти в раздел Маршрутизация звонка - Выбор вектора и нажать newObject.

Создание вектора

В качестве направления источника выбраны Внешние линии и в качестве маски кода оператора SIP телефонии указан ITSP.

Создание правила

Два правила - для КЦ1 c приоритетом 1000 и для КЦ2 - приоритетом с 1001. Таблица маршрутизации первым распределит звонок на SIP транки КЦ1. Если КЦ1 будет недоступен или от КЦ1 не будет получен ответ об успешном приеме звонка, логика распределит звонок по правилу для КЦ2, и так до тех пор, пока КЦ1 будет недоступен. Сразу же как КЦ1 станет доступны, звонки будут распределятся по первому правилу с приоритетом 1000. Таким способом реализуется один из вариантов балансировки распределения звонков.

Выбор правила

C левой стороны в области Объекты перейти в раздел Маршрутизация звонка - Выбор правила и нажать newObject.

Создание правила 1

Создать правило для КЦ1, выбрать вектор, приоритет 1000. В качестве результирующего действия выбрать действие Внешняя линия и SIP транк КЦ1.

Создание правила 2

Создать правило для КЦ2, выбрать вектор, приоритет 1001. В качестве результирующего действия выбрать действие Внешняя линия и SIP транк КЦ2.

Тестовые звонки проверки доступности

Для мониторинга доступности используется возможность совершения звонков через SIP транки КЦ. Для этого настраивается служебный сценарий, который запускается автоматически с определенной периодичностью. В случае успешного вызова - КЦ готов для обработки вызова, отмечается доступным до следующей проверки. Если звонок не будет принят на стороне КЦ(например, получен SIP ответ 404 Not Found) - происходит переключение звонков на второй резервный КЦ2.

Тестовые звонки

IVR для дозвона

IVR сценарий будет запущен после успешного дозвона. Успешные попытки дозвона фиксируются в лог-журнале.

IVR сценарии

На главной странице Bridge открыть приложение администрирования Настройки. C левой стороны в области Объекты перейти в раздел SIP абоненты - IVR сценарии и нажать newObject.

IVR создание

Откроется Создание объекта. Прописать Название сценария и Код сценария. Нажать saveButton. В списке сценариев отобразится новый IVR сценарий, в строке созданного IVR сценария нажать Открыть в редакторе.

SIP ответ

Откроется редактор сценариев. Разместить Старт и SIP-ответ 200 OK.

Пауза

Указать достаточное время проверки коммутации - 5 секунд(при необходимости увеличить)

Лог-журнал

Логировать событие по успешной коммутации в лог-журнале с помощью компонента Уведомление. После всех операций разместить компонент Обрыв связи. Сохранить сценарий - нажать кнопку saveSvcButton.

Запуск дозвона и фиксация статуса звонка

Создание служебного сценария, для автоматизации дозвона на SIP транк КЦ. В сценарии производится тестовый звонок в КЦ1. В случае неуспешного вызова меняется правило маршрутизации, звонки поступают в КЦ2.

SVC сценарии

На главной странице Bridge открыть приложение администрирования Настройки. C левой стороны в области Объекты перейти в раздел Web каналы - SVC сценарии и нажать newObject.

SVC создание

Откроется Создание объекта. Прописать Название сценария и Код сценария. Нажать saveButton. В списке сценариев отобразится новый служебный сценарий, в строке созданного служебного сценария нажать Открыть в редакторе.

Текущий приоритет

Откроется редактор сценариев. Разместить компонент Старт и Операция. Определение текущего приоритета правила в Операция. Для получения указать: тип сущности правила - vectorrule, метод - получить, фильтр - id правила в виде JSON-структуры {"id":"7d02688b-0178-d59e-62e2-005056012e0b"}, поля - priority, результат в переменную priority.

Парсер

Разместить компонент Парсер, парсинг текущего приоритета правила из переменной полученной в Операция. Документ - переменная priority, поисковый запрос - 0/"priority", функция - восстановленное содержимое, результат в переменную priorityValue.

Исходящий

Разместить компонент Исходящий звонок, в свойствах выбрать режим Дождаться окончательного ответа (2XX-6XX).

Исходящий 000

В качестве номера указать номер 000. Для этого номера будет настроено правило маршрутизации для вектора исходящего звонка. Источник сценария - из списка, сценарий - ivr_check созданный ранее.

Переходы

Для успешного перехода разместить компонент Сравнение. Для переходов неудача, нет ответа и ошибка - разместить компонент Уведомление

Лог журнал

Логировать событие по неуспешной коммутации в лог-журнале с помощью компонента Уведомление

Проверка 1003

Проверка в Сравнение priorityValue, если 1003 - Стоп.

Отключение правила

Если priorityValue не равен 1003 - изменение приоритета правила с помощью компонента Операция, чтобы поступающие звонки распределялись на правило с резервным КЦ2. Для пользователя, от имени которого производятся изменения, требуется в правах доступа пользователя включить Разрешать выполнение операций CRUD сценария и добавить роль доступа "crud". Для обновления указать: тип сущности правила - vectorrule, метод - обновить и данные в виде JSON-структуры {"id":"7d02688b-0178-d59e-62e2-005056012e0b"+"priority":1003} (id правила и значение приоритета).

200OK

Для успешного звонка добавить проверку кода ответа 200 ОК. В компоненте сравнение проверить код ответа, по ветке Ложь отправить на операцию по переключению на КЦ2.

Проверка 1003

Проверка в Сравнение priorityValue, если 1001 - Стоп.

Включение правила

Изменение приоритета правила с помощью компонента Операция, чтобы поступающие звонки распределялись на правило с КЦ1 после того, как тестовые звонки снова будут успешно проходить. Для обновления указать: тип сущности правила - vectorrule, метод - обновить, данные - в виде JSON-структуры {"id":"7d02688b-0178-d59e-62e2-005056012e0b"+"priority":1001} (id правила и значение приоритета).

Стоп

Завершить работу сценария компонентом Стоп. Сохранить сценарий - нажать кнопку saveSvcButton.

Создание вектора и правила для набираемого номера 000 из сценария дозвона.

Выбор вектора

C левой стороны в области Объекты перейти в раздел Маршрутизация звонка - Выбор вектора и нажать newObject.

Создание вектора 000

Приоритет 1000. В качестве направления источника выбрать Внутренний абонент.

Создание вектора 000_2

В качестве маски кода назначения указать 000.

Выбор правила

C левой стороны в области Объекты перейти в раздел Маршрутизация звонка - Выбор правила и нажать newObject.

Настройка правила

Создать правило для номера 000, выбрать вектор созданный ранее check_vector, приоритет 1000. В качестве результирующего действия выбрать Внешняя линия на SIP транк КЦ1.

Создание служебной задачи

Настройка автоматического запуска дозвона. Создание служебной задачи, которая запускает служебный сценарий Запуск дозвона и фиксация статуса звонка с интервалом каждые 10 секунд.

Выбор служебная задача

C левой стороны в области Объекты перейти в раздел Web каналы - Служебные задачи и нажать newObject.

Создание служебная задача

Задать название служебной задачи, SVC сценарий для запуска - выбрать ранее созданный сценарий svc_check.

Служебная задача режим

Кратность запуска - периодический многократный запуск, интервал между запусками - 10 секунд. Нажать saveButton.

Web-запросы к API

Служебная задача запускает служебный сценарий с определенной периодичностью. В служебном сценарии производится выполнение Web-запроса к КЦ. В API КЦ существует метод tst_getintnumberreadyusers, который возвращает количество свободных операторов. Если свободных операторов нет - производится изменение приоритета правила, чтобы звонок распределялся на КЦ2. Если на Web-запрос не будет получен ответ, совершаются еще две попытки отправки Web-запроса, и только после этого производится изменение приоритета правила с переключением по недоступности КЦ.

Схема Web

Создание служебного сценария

SVC сценарии

C левой стороны в области Объекты перейти в раздел Web каналы - SVC сценарии и нажать newObject.

SVC создание

Откроется Создание объекта. Прописать Название сценария и Код сценария. Нажать saveButton. В списке сценариев отобразится новый служебный сценарий.

Создание внешней интеграции

Внешние интеграции

В области Объекты перейти в раздел Web каналы - Внешние интеграции и нажать newObject.

Основные

Откроется Создание объекта. В блоке Основные прописать Код, Тип канала интеграции выбрать Публичный канал, включить Разрешить работу с файлами через этот публичный канал.

Внешняя система

В блоке Внешняя система в поле URL для исходящих запросов указать адрес Web сервиса, который будет защищен.

Сценарии обработки

В блоке Сценарии обработки выбрать Сценарий обработки входящего WebHook запроса - указать служебный сценарий, который создан ранее специально для этого внешнего Web канала. Нажать saveButton.

Редактирование служебного сценария

SVC сценарии

Вернутся к ранее созданному сценарию. C левой стороны в области Объекты перейти в раздел Web каналы - SVC сценарии, найти в списке сценариев новый служебный сценарий, в строке созданного служебного сценария нажать Открыть в редакторе.

Текущий приоритет

Откроется редактор сценариев. Разместить компонент Старт и Операция. Определение текущего приоритета правила в Операция. Для получения указать: тип сущности правила - vectorrule, метод - получить, фильтр - id правила в виде JSON-структуры {"id":"7d02688b-0178-d59e-62e2-005056012e0b"}, поля - priority, результат в переменную priority.

Парсер

Разместить компонент Парсер, парсинг текущего приоритета правила из переменной полученной в Операция. Документ - переменная priority, поисковый запрос - 0/"priority", функция - восстановленное содержимое, результат в переменную priorityValue.

Web-запрос

Разместить компонент Web-запрос, в свойствах выбрать ранее созданный канал интеграции - sw_example, страница - tst_getintnumberreadyusers, метод - GET, указать логин и пароль для базовой аутентификации, режим - Ожидание результата, ответ - сохранить в переменную result.

Парсер

Разместить компонент Парсер, парсинг значения свободных операторов с помощью регулярного выражения. Документ result, поисковый запрос .*ready="([^$"+)}, функция - содержимое, результат в переменную count.

Сравнение

В компоненте сравнение проверит значение переменное count - количество свободных операторов 0?

Цикл

Если операторов 0 и для Web-запроса по таймауту и ошибке - перевести на цикл дополнительной проверки. Для цикла создать переменную cycle и присвоить значение 2.

Цикл

Уменьшит значение cycle на единицу.

Цикл

Проверить значение cycle = 0 ? Если да - то переключить на КЦ2, если нет - повторно отправить Web-запрос.

Проверка 1003

Перед переключением на КЦ2 проверка в Сравнение priorityValue, если 1003 - Стоп.

Отключение правила

Если priorityValue не равен 1003 - изменение приоритета правила с помощью компонента Операция, чтобы поступающие звонки распределялись на правило с резервным КЦ2. Для пользователя, от имени которого производятся изменения, требуется в правах доступа пользователя включить Разрешать выполнение операций CRUD сценария и добавить роль доступа "crud". Для обновления указать: тип сущности правила - vectorrule, метод - обновить и данные в виде JSON-структуры {"id":"7d02688b-0178-d59e-62e2-005056012e0b"+"priority":1003} (id правила и значение приоритета).

Проверка 1000

Если свободных операторов больше 0, проверить значение текущего приоритета, если если 1000 - Стоп.

Включение правила

Изменение приоритета правила с помощью компонента Операция, чтобы поступающие звонки распределялись на правило с КЦ1 после того, как Web-запрос вернет нужное значение свободных операторов. Для обновления указать: тип сущности правила - vectorrule, метод - обновить, данные - в виде JSON-структуры {"id":"7d02688b-0178-d59e-62e2-005056012e0b"+"priority":1001} (id правила и значение приоритета). Сохранить сценарий - нажать кнопку saveSvcButton.

Создание служебной задачи

Настройка автоматического запуска сценария, выполняющего Web-запросы к API КЦ. Сценарий будет запускаться каждые 10 секунд.

Выбор служебная задача

C левой стороны в области Объекты перейти в раздел Web каналы - Служебные задачи и нажать newObject.

Создание служебная задача

Задать название служебной задачи, SVC сценарий для запуска - выбрать ранее созданный сценарий web_check.

Служебная задача режим

Кратность запуска - периодический многократный запуск, интервал между запусками - 10 секунд. Нажать saveButton.

Балансировка и дополнительные параметры

Различные варианты настройки векторов и правил позволяют реализовать любые варианты балансировки. Можно использовать встроенные способы и получение данных о состоянии во внешних источниках. В случае, если указать одинаковые приоритеты для правил при Создание правила в Встроенный режим проверки доступности - звонки будут распределяться в случайном порядке на КЦ1 и КЦ2. Если требуется реализация более сложных алгоритмов, или получение приоритетов из внешних источников - через Web-запросы API, CLI, баз данных - присутствует возможность реализации с помощью служебных сценариев, по аналогии с Создание служебного сценария в Web-запросы к API. Все эти способы можно комбинировать и с одновременным мониторингом через Тестовые звонки проверки доступности.