====== Инструкция по использованию ======= ===== Системные требования ===== Сервер должен быть подготовлен к работе с Wildfly AS.\\ рекомендуемые минимальные: \\ 2-х ядерный процессор, 4 Gb оперативной памяти, 100Gb hdd.\\ ПО (минимальные версии): openjdk 8, postgresql 9.5, wildfly 10, asterisk 13.\\ Клиентским ПО является браузер. Браузер должен поддерживать технологию [[https://ru.wikipedia.org/wiki/WebSocket|Websockets]]. Версии основных браузеров с поддержкой Websockets: * Internet Explorer 10 * Firefox PC 11 * Firefox (Android) 11 * Chrome (PC, Mobile) 16 * Safari (Mac, iOS) 6 * Opera (PC, Mobile) 12.10 ===== Установка ===== Установка EE приложения производится стандартным деплоером Wildfly. Некоторые предварительные настройки сервера приложений показаны ниже. ==== СУБД ==== На примере Postgresql: ''subsystem xmlns="urn:jboss:domain:datasources:4.0"'' jdbc:postgresql://127.0.0.1:5432/merecrm org.postgresql 10 30 merecrm merecrm SELECT 1 false false ==== Очередь сообщений ==== subsystem xmlns="urn:jboss:domain:ejb3:5.0" ''subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0"'' ... ==== Files handler ===== ''subsystem xmlns="urn:jboss:domain:undertow:3.1"'' ====systemd==== wildfly.service [Unit] Description=WildFly application server Wants=network.target After=network.target asterisk.service postgresql.service [Service] Type=simple User=wildfly Group=wildfly ExecStart=/opt/wildfly/bin/standalone.sh #Restart=always #RestartSec=20 [Install] WantedBy=multi-user.target ==== Asterisk ==== ===systemd=== asterisk.service [Unit] Description=Asterisk PBX After=network.target postgresql.service [Service] Type=forking User=asterisk Group=asterisk Environment=HOME=/var/lib/asterisk WorkingDirectory=/var/lib/asterisk ExecStart=/usr/sbin/asterisk -C /etc/asterisk/asterisk.conf ExecStop=/usr/sbin/asterisk -rx 'core stop now' ExecReload=/usr/sbin/asterisk -rx 'core reload' PIDFile=/run/asterisk/asterisk.pid [Install] WantedBy=multi-user.target ===tmpfiles.d=== asterisk.conf d /var/run/asterisk 0775 asterisk asterisk ===Manager=== [merecrm] secret = merecrm read = all write = all permit= 0.0.0.0/0.0.0.0 ===Extension=== [merecrm] ;include => internal exten => _[78]XXXXXXXXXX,1,Set(CALLFILENAME=${UNIQUEID}) exten => _[78]XXXXXXXXXX,n,NoOp(${UNIQUEID}) exten => _[78]XXXXXXXXXX,n,MixMonitor(${CALLFILENAME}.WAV,b) exten => _[78]XXXXXXXXXX,n,Dial(SIP/out-trunk/${EXTEN},30,tT) [out-2] exten => _XXXX.,1,Set(CALLFILENAME=${UNIQUEID}) exten => _XXXX.,n,MixMonitor(${CALLFILENAME}.WAV,b) exten => _XXXX.,n,Queue(out-2) Имя очереди для predictive, progressive должно совпадать с контекстом.\\ Имена файлов записей должны совпадать с UNIQUEID канала. ===Sip=== [mytrunk](!) type=friend username=username secret=secret nat=no;force_rport,comedia fromuser=username qualify = yes context=from-mytrunk canreinvite=no disallow=all allow=alaw allow=ulaw host=voip.mytrunk.ru insecure=invite,port [out-trunk](mytrunk) ===Queue=== [out-2] musiconhold = default strategy = rrmemory timeout = 20 announce-holdtime = no joinempty = no timeoutrestart = yes ==== Создание базы данных ==== CREATE ROLE merecrm WITH LOGIN PASSWORD 'merecrm';\\ CREATE DATABASE merecrm OWNER merecrm; ==== Начальное заполнение ==== Пример начального заполнения таблиц: insert into company (name) values ('merecrm'); insert into users (name, secret, role, login, email, phone, idcompany,enabled) values ('admin', '21232f297a57a5a743894a0e4a801fc3','administrator', 'admin', 'info@merecrm.ru', '79094027854', 1, true); insert into etc (key, value, idcompany, idusers) values ('upload','/var/lib/jboss/merecrm/upload/',0,0); insert into etc (key, value, idcompany, idusers) values ('dashboard fields','number;idbase;name;phone;address;nextdate;iduser;lastrestus',1,0); insert into etc (key, value, idcompany, idusers) values ('dashboard count','25',1,0); insert into etc (key, value, idcompany, idusers) values ('astserver','127.0.0.1',0,0); insert into etc (key, value, idcompany, idusers) values ('astmanager','merecrm',0,0); insert into etc (key, value, idcompany, idusers) values ('astsecret','merecrm',0,0); insert into etc (key, value, idcompany, idusers) values ('astexten','0',1,1); insert into etc (key, value, idcompany, idusers) values ('astchannel','SIP/',1,1); insert into etc (key, value, idcompany, idusers) values ('files','/var/lib/jboss/merecrm/files/',0,0); insert into etc (key, value, idcompany, idusers) values ('astcontext','merecrm',1,1); insert into etc (key, value, idcompany, idusers) values ('astmonitor','/var/spool/asterisk/monitor/',0,0); insert into etc (key, value, idcompany, idusers) values ('defaultproduct','1',1,0); insert into etc (key, value, idcompany, idusers) values ('defaultaction','dashboard',1,1); insert into etc (key, value, idcompany, idusers) values ('defaultrestus','1',1,0); insert into etc (key, value, idcompany, idusers) values ('dashboard tooltip fields','1',1,0); insert into etc (key, value, idcompany, idusers) values ('default calling priority','10',1,0); insert into etc (key, value, idcompany, idusers) values ('asttrunk','SIP/out-trunk/',1,0); insert into etc (key, value, idcompany, idusers) values ('default context','merecrm',1,0); insert into restus (name, enabled, isfinal, idparent, level) values ('Контакт', true, false, 0, 1); insert into restus (name, enabled, isfinal, idparent, level) values ('Обработка', true, false, 1, 1); insert into restus (name, enabled, isfinal, idparent, level) values ('Отказ', true, true, 1, 1); insert into keys (name, type, isfilter) values ('Комментарий','text',false); insert into keys (name, type, isfilter) values ('Марка','string',true); insert into product (name,description) values ('Освежитель','Вонючка'); ===== Вход в систему ===== Для входа в систему необходимо ввести логин и пароль в окне ввода.\\ {{:wiki:001.png?200|}}\\ Существуют три роли входа: администратор, менеджер, пользователь.\\ Администратор может управлять всеми предприятиями и пользователями.\\ Менеджер управляет только своим предприятием и его пользователями.\\ Пользователь работает с контактами в рамках предприятия. ===== Рабочее пространство и настройки ===== Для каждого типа пользователя доступно своё рабочее меню\\ {{:wiki:002.png?200|}}\\ ===== Администратор ===== Администратору доступны действия: * ЗАГРУЗКА БАЗЫ * ПОЛЬЗОВАТЕЛИ * АНКЕТЫ * БАЗЫ * ОТЧЕТЫ * НАСТРОЙКИ ==== Загрузка базы ==== Загрузка базы осуществляется из фалов форматов xlsx, ods(разработка)\\ Поля базы должны содержать ряд обязательных реквизитов:\\ * База - имя базы\\ * Фио - Имя контакта. Является уникальным в сочетании с номером телефона. При нахождении совпадений импорт может происходить с использованием уже имеющегося контакта.\\ * Адрес - адрес\\ * Дата следующего контакта - дата следующего контакта\\ * Ответственный - ответственный пользователь (логин, как есть в системе)\\ * Телефон - номер телефона (может быть несколько)\\ Так же в файле могут быть и дополнительные реквизиты.\\ {{:wiki:003.png?800|}}\\ После выбора файла система проведет анализ первых строк и предложит сопоставить столбцы таблицы с полями системы.\\ После этого происходит анализ всех строк таблицы на соответствие типов и возможную корректность данных. При нахождении несоответствия выводится предупреждение с номером некорректной строки\\ После коррекции загружаемого файла будет предложено обозначить продукт и начальный статус-результат контакта. ==== Пользователи ==== В данном разделе можно создать и редактировать пользователей системы.\\ Пользователь имеет следующие реквизиты:\\ * Наименование * Роль * Компания * E-mail * Телефон * Логин * Включен * Новый пароль ==== Анкеты ==== В этом разделе можно создавать и редактировать анкеты. Анкета так же называется Кампанией.\\ \\ Анкета описывается следующими реквизитами: * Наименование * Тип - Тип анкеты. Межет быть internal (preview), predictive, robot, progressive (разработка) * Компания * Включена * Дата создания * *Экстен - Используется для автоматических кампаний типа predictive, robot, progressive * Время остановки - Время автоматической остановки * Описание Анкету типа predictive, robot, progressive можно Запустить или Остановить.\\ \\ Анкета может иметь сценарий разговора. Сценарий состоит из вопросов, ответов и действий на возможный выбор ответов.\\ \\ Автоматические кампании для вычисления коэффициента дозвона используют облачную функцию. В случае отсутствия подключения к облаку с действующим идентификатором он равен 1. ==== Базы ==== Базы группируют контакты в отдельную сущность. ==== Отчеты ==== ==== Настройки ==== Каждая настройка имеет свою область применения. Некоторые настройки применимы исключительно к предприятию, некоторые могут быть персональными для пользователей.\\ ^ Настройка ^ Описание ^ Пример ^ Все ^ Предприятие ^ Пользователь ^ | upload | Путь для загрузки файлов | /var/lib/jboss/merecrm/upload/ | VVV | --- |--- | | astmonitor | Путь записей Asterisk | /var/spool/asterisk/monitor/ | VVV | --- |--- | | astserver | Адрес сервера Asterisk | 192.168.27.4 | VVV | --- |--- | | astmanager | Пользователь AMI Asterisk | manager | VVV | --- |--- | | astsecret | Пароль пользователя AMI Asterisk | secret | VVV | --- |--- | | files | Путь хранилища файлов контактов | /var/lib/jboss/merecrm/files/ | VVV | VVV |--- | | defaultproduct | Продукт по умолчанию | 3 | VVV | VVV |--- | | dashboard count | Количество строк в списке контактов | 50 | VVV | VVV |--- | | dashboard fields | Поля списка контактов | number;idbase;1;name;phone;address;3;iduser; | VVV | VVV |VVV | | astchannel | Канал Asterisk для звонков | SIP/ | --- | --- | VVV | | astcontext | Контекст Asterisk для звонков | merecrm | --- | --- | VVV | | astexten | Экстен Asterisk для звонков | 116 | --- | --- | VVV | | defaultrestus | Результат по умолчанию | 2 | --- | VVV | --- | | default calling priority | Приоритет звонка по умолчанию | 10 | --- | VVV | --- | | defaultaction | Действие по умолчанию | dashboard | VVV | VVV |VVV | | maximum k | Максимальный коэффициент тенденций | 5 | --- | VVV |--- | | default context | Контекст по умолчанию | merecrm | --- | VVV |--- | | asttrunk | Транк (peer) для вызовов | out-trunk | --- | VVV |--- | | dashboard tooltip fields | Подсказка для строки списка контактов | merecrm | VVV | VVV |--- | | customerunique | Код инсталляции для облака | 5b....44f | VVV | --- |--- | | robot user| ID пользователя для кампаний robot | 1 | --- | VVV |--- | | predictive user| ID пользователя для кампаний predictive | 1 | --- | VVV |--- | | pause robot call| Пауза для кампаний robot | 15 | --- | VVV |--- | | default calling priority | Приоритет по умолчанию для заявок|9| --- | VVV |--- | === Поля списка контактов === Могут содержать через точку с запятой стандартные поля контакта: * number:Номер по порядку * idbase:Имя базы * name: Имя контакта * phone: Телефонные номера контакта * address: Адрес контакта * nextdate: Дата следующего контакта * iduser: Ответственный пользователь * lastrestus: Последний результат-статус * lastproduct: Последний продукт или индекс дополнительного поля из таблицы. ===== Пользователь ===== ==== Контакты ==== Главное рабочее окно системы. Столбцы и строки этой таблицы можно персонально настраивать в соответствующем разделе.\\ Сортировка списка производится по Дате следующего контакта. Все просроченные по взаимодействию контакты выделяются красным цветом. Рабочие контакты, уже имеющие статус-результат выделяются желтым цветом.\\ Контакты, имеющие конечный результат-статус в таблице не отображаются.\\ Пользователь видит только те контакты, для которых он назначен ответственным\\ \\ В форме контакта выводятся допустимые действия для контакта, такие, как звонок. При осуществлении звонка сначала осуществляется набор оператора, затем контакта. Для каждой попытки контакта формируется заявка.\\ При инициировании звонка в Asterisk устанавливаются переменные канала:\\ * idcontact - идентификатор контакта * idrequest - идентификатор заявки * iduser - идентификатор вызывающего пользователя. Для автоматический кампаний = 0 * number - набираемый номер контакта * idcalling - идентификатор набираемого номера контакта \\ ===Фильтры=== Основным инструментом работы с контактами являются фильтры. Фильтры работают как по основным реквизитам, так и по дополнительным. * База * ФИО * Адрес * Дата следующего контакта * Ответственный * Дата следующего контакта от * Дата следующего контакта до Так же имеются суррогатные показатели: * Показывать все результаты - показывать контакт вне зависимости от конечности результат-статуса * Контакты - номер телефона * Результаты - результат-статус ===Действия=== Действия применяются к выбранной строке контакта либо к отфильтрованному Фильтром набору контактов. * Пользователь - назначить ответственного * Продукт - назначить продукт * Результат - назначить результат * Анкета - назначить номера контактов на обзвон в анкету-кампанию * Дата следующего контакта - изменить дату следующего контакта Цепочка работы с контактами при автоматическом методе обзвона:\\ Импорт---Фильтр---Действие---Анкета---Очередь---Тенденции ===Делегирование=== Иногда необходимо обработать контакт с привлечением другого сотрудника. Для этого можно делегировать контакт. Делегировать можно любому сотруднику компании, кроме ответственного. В процессе делегирования необходимо указать Причину (описание). При закрытии делегирования необходимо указать Ответ (описание)\\ Список делегированных контактов отображается ниже основной таблицы. Ответственный за контакт сотрудник может видеть пометку делегированных контактов. ==== События ==== В данном разделе показаны события системы.\\ События могут быть широковещательными по предприятию и персональными, например простыми сообщениями.\\ Сообщение можно создать из соответствующей таблицы или из главной, выбрав пункт Сообщить. В таком случае сообщение будет касаться выбранного контакта. ===== Asterisk ===== ==== Тенденции ==== Тенденции показывают текущие рабочие показатели Asterisk.\\ Таблица каналов содержит текущие активные каналы Asterisk. К каналам администратор может подключаться в режиме подслушивания или шепота.\\ Таблица тенденций показывает расчетные коэффициенты отзывчивости телефонной базы. \\ Слишком большие показатели, например 20, говорят о том, что с дозвоном не всё в порядке. на 20 набраных номеров одно или ни одного соединения. Коэффициент набора вычисляется один раз каждые пять минут для каждой анкеты-кампании и применяется к количеству отправляемых в набор телефонных номеров. ==== Очереди ==== Данный раздел работает с очередями Asterisk. В главной таблице показаны все описанные очереди и их рабочие показатели.\\ В очередь можно назначать или снимать агентов-операторов, которые будут принимать звонки при наличии кампаний с автоматическим набором. =====Облачные функции===== В системе некоторые функции вынесены в облачное пространство для унификации их функционирования.\\ В облаке выполняются следующие функции: * Вычисление коэффициента для автоматических обзвонов * Работа функций AGI Для доступа к облаку необходим действующий идентификатор пользователя системы Проверить и обновить на один день ключ самостоятельно можно по ссылке: [[http://services.merecrm.ru/updatekey.jsp|Проверка ключа]] Самостоятельное обновление допускается до 15 раз. ==== Функции AGI ==== Все функции устанавливают переменную agiresilt в значения true или fasle\\ \\ test\\ ничего не делает, кроме установки результата\\ \\ getproviderbyphone - возвращает оператора связи и регион работы, если он есть.\\ exten => _[78]XXXXXXXXXX,n,Agi(agi://127.0.0.1/getproviderbyphone.agi?phone=${EXTEN}) exten => _[78]XXXXXXXXXX,n,NoOp(${provadername}) exten => _[78]XXXXXXXXXX,n,NoOp(${provaderregion1}) exten => _[78]XXXXXXXXXX,n,NoOp(${provaderregion2}) \\ setrestus - устанавливает результат заявки контакта. Значение необходимо брать из базы существующих результатов. exten => 881,n,Agi(agi://127.0.0.1/setrestus.agi?idrestus=4&idrequest=${idrequest}) exten => 881,n,NoOp(${agiresult})