Работа с Базами Данных

По умолчанию, резервное копирование баз данных происходит в папку \Program Files (x86)\IntelTelecom\Infinity Call-center X\Backups

Для изменения директории хранения заходим в Infinity X, открываем вкладку "Администрирование", Параметры системы

В каталоге находим директорию "Guardian", открываем и выбираем "Каталог для резервных копий баз данных"

В появившемся окне вводим адрес новой директории (например "C:\Program Files (x86)\IntelTelecom\Infinity Call-center X\БэкАпы")

ВНИМАНИЕ! Указывать нужно абсолютный путь (как в примере выше)

Резервное копирование баз данных

Открываем Infinity Guardian и авторизуемся

В меню слева выбираем вкладку "копирование"

Проверяем, что все галочки проставлены

Жмем "Создать резервную копию"

Ждем завершения бекапа всех баз данных.

Готово!

Восстановление баз данных из копии

Открываем Infinity Guardian и авторизуемся

В меню слева выбираем вкладку "копирование"

Внизу страницы есть раздел "Восстановление баз данных". Что-бы ваш бэкап был виден в этом окне, он должен храниться в той же папке, куда сохраняются другие бекапы

Выбираем нужный бэкап и в выпадающем списке выбираем нужную опцию. Жмем "Восстановить из резервной копии"

Ждем завершения

По завершению процесса восстановления наверху страницы статус сменится на "Операция завершена успешно"

Базы данных call-центра Infinity

Infinity X использует для работы несколько баз данных. Чтобы перейти к списку используемых баз данных, выберите меню Базы данных / Базы данных

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

Приведем описание основных параметров карточки добавляемой базы данных:

Идентификатор- В поле Идентификатор введите уникальное наименование базы данных, латинскими буквами. Для проверки уникальности вводимого значения поля Идентификатор можете нажать на кнопку в правом углу поля.

Родитель- Можете указать родительскую базу данных.

Драйвер- Выберите, какой драйвер из списка будет обеспечивать взаимодействие с базой данных.

Адрес сервера, Порт- Укажите IP-адрес ПК с СУБД и порт подключения. Если СУБД установлена на том же ПК, на котором установлен сервер записи, то эти поля можно не указывать.

Строка подключения, имя пользователя, пароль- Укажите строку подключения, имя пользователя и пароль для подключения к СУБД. Эти значения в первую очередь настраиваются в самой СУБД. Здесь же надо указать корректные значения.

Провайдеры в call-центрe Infinity

Доступ к информации в базах данных системы записи Infinity CC X реализуется через механизм предварительно настроенных провайдеров данных. Имеющиеся и создаваемые провайдеры данных используются в отчетах. Чтобы перейти к списку используемых баз данных, выберите меню Базы данных / Провайдеры

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

Если Вы хотите создать собственный провайдер данных, нажмите кнопку Добавить:

Приведем описание параметров карточки добавляемого провайдера данных на закладке Основные:

Идентификатор- В поле Идентификатор введите уникальное наименование провайдера данных, латинскими буквами. Для проверки уникальности вводимого значения поля Идентификатор можете нажать на кнопку в правом углу поля.

Группа- Укажите, к какой группе провайдеров следует отнести создаваемый провайдер данных.

Наименование- Имя провайдера данных для более удобной визуальной идентификации в списке провайдеров.

База данных- Укажите, из какой базы данных будут выбираться данные

Таблица- Укажите таблицу базы данных, из которой будут выбираться данные

Во вкладке Дополнительные Вы можете указать, каким образом Infinity X будет обновлять данные, получаемые провайдером данных, и каким образом обновлять данные в используемой СУБД:

Во вкладке SQL-запросы Вы можете сформировать SQL-запросы, описывающие выборки данных из используемой СУБД

Репликация

Инструмент «Базы данных – Репликация» предназначен для ручной и автоматической синхронизации данных между различными БД. В общем случае работа выглядит следующим образом:

1. - Создаем подключение к базе данных, которая будет являться источником

2. - Создаем провайдера, который будет являться получателем

3. - Выбираем базу данных, имя таблицы в ней и провайдера получателя

4. - Выбираем режим синхронизации

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

Таких правил может быть сколько угодно. Предусмотрено пять режимов синхронизации:

1. - Добавление новых строк. Как правило, в этом случае провайдер получателя имеет ограничение “sel ect * fr om table limit 0”, т.е. всегда возвращает пустоту. Запрос к БД источника имеет вид “sel ect * fr om table where “ID” > :ID order by “ID” limit 1000”. Значение параметра ID увеличивается при каждом выполнении запроса и сохраняется в правиле. Таким образом, обеспечивается поэтапное (по 1000 строк) считывание новых (с увеличивающимся ID) строк из источника и их добавление получателю через провайдер. Если запись уже существует – увеличится счетчик ошибок.

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

3. - Добавление-обновление-удаление. Аналогично п. 2 с удалением отсутствующих в источнике строк

4. - Добавление-обновление с параметрами. Аналогично п. 2, с параллельной синхронизацией выборки select * fr om "C_ParamsValues" wh ere "IDObject" = :ID. Это позволяет синхронизировать параметры системы для объектов основной выборки.

5. - Добавление-обновление-удаление с параметрами. Комбинация п. 3 и 4.

Типовые сценарии использования репликации:

1. - Синхронизация пользователей, групп, очередей, квалификаций. Можно настроить кнопкой «Добавить источник конфигурации». После указания источников БД Configuration и Security будет создано 16 правил.

2. - Синхронизация статистических данных. Можно настроить кнопкой «Добавить источник статистики». После указания источника БД Statistics будет создано 25 правил.

При необходимости набор правил для этих шаблонов, а также интервал автоматической репликации можно изменить (Параметры системы: Сервер платформы – Служебные – Репликация)

Важные моменты:

1. - Необходимо продумать интервалы идентификаторов для каждого сервера, чтобы исключить пересечения, и правильно задать начальные значения генератора.

2. - Для отслеживания производительности репликации имеет смысл контролировать отчеты профайлера в логе бизнес-сервера.

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

Infinity X – краткое описание БД статистики

Общая информация

База данных статистики по умолчанию создается под управлением СУБД PostgreSQL и имеет наименование Cx_Statistics. При стандартных настройках СУБД PostgreSQL расположена на порту 10000, логин cxdbuser, пароль cxdbwizard. Первичный ключ в большинстве таблиц – поле IDс типом bigint. Обеспечивается сквозная уникальность идентификаторов при помощи единого генератора a_gen_id, расположенного в БД Cx_Configuration.

Описание таблиц

S_Seances – звонки (синонимы: сеансы, цепочки, обращения). Звонок описывается одной строкой, которая содержит информацию о его переводах, удержаниях и т.д. Информация о первых нескольких переводах содержится в полях B1*, B2*, B3*, B4*, BL* таблицы. Более подробная информация – в таблице S_Connections

S_Connections – разговоры (синонимы: соединения, коммутации). Один звонок состоит, как правило, из нескольких разговоров. В разговоре участвует два абонента (за исключением конференций). Разговор может быть записан, поэтому именно в этой таблице хранятся имена файлов записанного разговора.

S_Calls – вызовы. Вызов – это информация об одном абоненте, который участвует в разговоре. В разные моменты времени один и тот же вызов может быть участвовать в разных разговорах. Примечание: заполнение таблиц Seances-Connections-Callsможет иметь особенности в зависимости от используемого коммутатора.

S_CallsAndConnections – привязка вызовов к разговорам.

S_CMCalls – информация из инструмента «Управление звонками». Фактически, это вызовы операторов, по которым формируется информация для инструмента «Мои звонки».

S_ACDCalls – переключения звонков в очереди распределения вызовов и кампании.

S_ACDQueuesMembers – участие операторов в очередях распределения вызовов и кампаниях.

S_UsersStates – история статусов операторов

S_Campaigns – запуски кампаний. Одна строка соответствует одному запуску кампании и содержит суммарные показатели по каждому состоянию контрагента и попытки дозвона.

S_CampaignsCalls – попытки дозвона кампаний. Одна строка соответствует одной попытке дозвона.

S_ControlEvents – контрольные события.

S_CallBackRequest – заказы встречных звонков (из IVRи из очередей распределения вызовов)

S_VoiceMail – сообщения голосовой почты.

S_Notifications – уведомления пользователей (всплывающие окна).

S_Screenshots – скриншоты рабочих мест.

Описание полей

ID – уникальный идентификатор записи

IDXXXX – как правило, внешние ключи. XXXX указывает на связанную таблицу. Например, IDSeance в таблице S_Connections – ссылка на таблицу S_Seances

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

Время и продолжительность имеют тип doubleprecision. Значение 1 соответствует 1 суткам. Таким образом, значение поля *24*60*60 – количество секунд.

Перечислимые типы данных

CampaignContragentState: ACDCalls.ACDItemState, CampaignsCalls.State, ContragentState/CallState (Campaigns.CAStateXX, Campaigns.CallStateXX)

CallDirection: CMCalls.Direction, Calls.CallDirection

CallResult: CMCalls.Result, Calls.CallResult

CallState: CMCalls.State, Calls.CallState

CampaignState: Campaigns.State

ConnectionDirection: Connections.ConnectionDirection

ConnectionAbonentType: Connections.AbonentType

ConnectionDisconectSide: Connections.DisconnectSide

ConnectionState: Connections.ConnectionState

SeanceType: Seances.SeanceType

SeanceResult: Seances.SeanceResult

SeanceAbonentType: Seances.AbonentType

SeanceAbonentKind: Seances.AbonentKind

SeanceState: Seances.SeanceState

enum CallState

{

CallStateUnknown = 0, // Неизвестно

CallStateRinging = 1, // Звонок

CallStateReminder = 2, // Напоминание

CallStateDialtone = 11, // Гудок

CallStateDialNumber = 12, // Наборномера

CallStateAlerting = 13, // Ожиданиеответа

CallStateConnected = 21, // Налинии

CallStateConference = 31, // Конференция, активная сторона

CallStateInConference = 32, // В конференции, пассивная сторона

CallStateHold = 41, // Удержание, активная сторона

CallStateOnHold = 42, // На удержании, пассивная сторона

CallStateTransfer = 51, // Перевод начат

CallStateTransferFinishing = 52,// Перевод завершается

CallStateJoining = 53, // Добавление в конференцию начато

CallStateJoiningFinishing = 54, // Добавление в конференцию завершается

CallStateDisconnected = 99, // Завершен, но канал еще не свободен

CallStateFinished = 100, // Завершен

CallStateFailed = 200, // Завершен с ошибкой

CallStateNoLines = 201 // Нет линий

}

enum ConnectionDisconnectSide

{

ConnectionDisconnectSideUnknown = 0,

ConnectionDisconnectSideA = 1,

ConnectionDisconnectSideB = 2

}

enum CallResult

{

CallResultUnknown = 0,

CallResultSuccessfull = 101, // Успешно завершен (время разговора > 0)

CallResultBusy = 111, // Занято (время разговора = 0)

CallResultNoAnswer = 112, // Нет ответа (время разговора = 0)

CallResultBadNumber = 113, // Неверный номер (время разговора = 0)

CallResultLost = 121, // Пропущен (время разговора = 0)

CallResultCanceled = 131, // Не дождались и отбились (время разговора = 0)

CallResultError = 200 // Ошибка

}

enum ConnectionSide

{

ConnectionSideUnknown = 0,

ConnectionSideA = 1,

ConnectionSideB = 2

}

enum ConnectionDirection

{

ConnectionDirectionUnknown = 0,

ConnectionDirectionIncoming = 1,

ConnectionDirectionOutgoing = 2,

ConnectionDirectionInner = 3,

ConnectionDirectionExternal = 4

}

enum ConnectionState

{

ConnectionStateUnknown = 0, // Неизвестно

ConnectionStateWaiting = 1, // Ожиданиеответа

ConnectionStateTalking = 21, // Разговордвухабонентов

ConnectionStateConference = 31, // Конференция

ConnectionStateHold = 41, // Удержание

ConnectionStateDisconnected = 99, // Соединение завершено, но канал еще не свободен

ConnectionStateFinished = 100 // Завершен

}

enum ConnectionAbonentType

{

ConnectionAbonentTypeUnknown = 0,

ConnectionAbonentTypeInner = 1,

ConnectionAbonentTypeOuter = 2,

ConnectionAbonentTypeHold = 11, // deprecated

ConnectionAbonentTypeVirtual = 12

}

enum SeanceType

{

SeanceTypeUnknown = 0,

SeanceTypeIncoming = 1,

SeanceTypeOutgoing = 2,

SeanceTypeInner = 3,

}

enum SeanceAbonentKind

{

SeanceAbonentKindUnknown = 0,

SeanceAbonentKindA = 1,

SeanceAbonentKindB = 2,

SeanceAbonentKindC = 3,

}

enum SeanceState

{

SeanceStateUnknown = 0, // Неизвестно

SeanceStateDialing = 12, // Наборномера

SeanceStateWaiting = 13, // Ожиданиеответа

SeanceStateTalking = 21, // Разговор двух абонентов

SeanceStateConference = 31, // Конференция

SeanceStateHold = 41, // Удержание

SeanceStateFinished = 100 // Завершен

}

enum SeanceResult

{

SeanceResultUnknown = 0, // Неизвестно

SeanceResultSuccessfull = 100, // Успешно

SeanceResultFirstOperator = 101, // Обработанпервымоператором

SeanceResultOperators = 102, // Обработаноператорами

SeanceResultExternal = 103, // Обработанвнешнимагентом

SeanceResultConference = 104, // Обработанвконференции

SeanceResultBusy = 111, // Занято

SeanceResultNoAnswer = 112, // Неподнялитрубку

SeanceResultBadNumber = 113, // Номернесуществует

SeanceResultIVR = 114, // Обработанв IVR

SeanceResultCanceled = 131, // Звонящий не дождался ответа и отбился

SeanceResultFax = 141, // Сработал факс

SeanceResultTooShort = 151, // Слишком короткий разговор

SeanceResultLostInWaiting = 191, // Потерян во время ожидания ответа

SeanceResultLostInHold = 192, // Потерянвовремяудержания

SeanceResultError = 200

}

enum SeanceAbonentType

{

SeanceAbonentTypeUnknown = 0,

SeanceAbonentTypeInner = 1,

SeanceAbonentTypeOuter = 2,

SeanceAbonentTypeIVR = 3,

SeanceAbonentTypeACD = 4,

}

enum CampaignContragentState

{

CampaignContragentStateUnknown, // 0

//Проверка

CampaignContragentStateChecking, //1

//[CxEnumerationItem("Некорректныеномерателефона")]

CampaignContragentStateBadNumbers, // 2

//[CxEnumerationItem("Пропущен")]

CampaignContragentStateSkipped, // 3

//[CxEnumerationItem("Наборномера...")]

CampaignContragentStateDialing, // 4

//[CxEnumerationItem("Ожидание...")]

CampaignContragentStateWaiting, // 5

//[CxEnumerationItem("Обрабатывается")]

CampaignContragentStateTalking, // 6

//[CxEnumerationItem("Обработан")]

CampaignContragentStateFinished, // 7

//[CxEnumerationItem("Ошибка")]

CampaignContragentStateError, // 8

//[CxEnumerationItem("Занято")]

CampaignContragentStateBusy, // 9

//[CxEnumerationItem("Нетответа")]

CampaignContragentStateNoAnswer, // 10

//[CxEnumerationItem("Нетсвободныхлиний")]

CampaignContragentStateNoLines, // 11

//[CxEnumerationItem("Потерян")]

CampaignContragentStateLost, // 12

//[CxEnumerationItem("Оператор отказался от звонка")]

CampaignContragentStateOperatorRefused, // 13

//Ожиданиеповтора(Занято)

CampaignContragentStateWaitingForReplayOnBusy, // 14

//Ожиданиеповтора(Нетответа)

CampaignContragentStateWaitingForReplayOnNoAnswer, // 15

//[CxEnumerationItem("Звонокперенесён")]

CampaignContragentStateRepeatCall, // 16

//[CxEnumerationItem("Отправка")]

CampaignContragentStateSending, // 17

//[CxEnumerationItem("Отправлено")]

CampaignContragentStateSent, // 18

//[CxEnumerationItem("Доставлено")]

CampaignContragentStateDelivered, // 19

//[CxEnumerationItem("Короткийразговор")]

CampaignContragentStateShortTalk, // 20

//[CxEnumerationItem("Факс")]

CampaignContragentStateFax, // 21

//[CxEnumerationItem("Недоступен")]

CampaignContragentStateUnavailable, // 22

//[CxEnumerationItem("Автоответчик")]

CampaignContragentStateVoiceMail, // 23

//[CxEnumerationItem("Некорректныйответабонента")]

CampaignContragentStateIncorrectContragentAnswer, // 24

Reserved_25,

Reserved_26,

Reserved_27,

Reserved_28,

Reserved_29,

Reserved_30,

// For ACD only

CampaignContragentStateTransfering = 101,

ACDStateGrabbed = 102,

}

enum CampaignState

{

CampaignStateUnknown, // 0

//[CxEnumerationItem("Остановлена", 1395)]

CampaignStateStoped, // 1

//[CxEnumerationItem("Остановка...", 1494)]

CampaignStateStopping, // 2

//[CxEnumerationItem("Запуск...", 1490)]

CampaignStateStarting, // 3

//[CxEnumerationItem("Работает", 1394)]

CampaignStateRunning, // 4

//[CxEnumerationItem("Ошибка", 1346)]

CampaignStateError // 5

}

Настройка архивной БД Статистики

1. - Останавливаем сервер Infinity

2. - Создаем копию базы Cx_Statistics (например Cx_Statistics_archive) через PgAdmin, либо psql

3. - Запускаем Infinity

4. - В инструменте Базы данных создаем копию Базы Statistics.ReadOnly и называем её Statistics.ReadOnly.Archive

5. - В строке подключения изменяем имя базы на Cx_Statistics_archive

6. - В базе Cx_Configuration – таблице D_Databases для строки нового созданного подключения Statistics.ReadOnly.Archive делаем update поля BackupParent на Statistics.ReadOnly и Category=20

7. - Через редактор отчетов включаем видимость фильтра База данных на нужных отчетах

8. -В фильтре отчета появится отображение выбора Базы (Статистика или Статистика.Архив)