Работа с Базами Данных
По умолчанию, резервное копирование баз данных происходит в папку \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. -В фильтре отчета появится отображение выбора Базы (Статистика или Статистика.Архив)