====== Инструкция по использованию =======
===== Системные требования =====
Сервер должен быть подготовлен к работе с 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})