AutoDialer - автообзвон, автоинформатор Asterisk

  1. Создание необходимых баз данных
  2. Настройка сервера Mysql
  3. Настройка веб-сервера (apache)
  4. Развертывание веб-приложения
  5. Настройка сценария управления Bash
  6. Настройка плана набора Asterisk
  7. Скачать: ad.tar.gz

Это базовая версия с минимальным функционалом и простейшим интерфейсом.
Тем не менее, это комплексное решение, которое может быть адаптировано для решения самых разных задач и позволяет создавать массовые кампании обзвона.
В свободно-распространяемой версии может быть запущена только одна кампания одновременно.
Нежелательно кол-во строк в импортируемом через интерфейс файле более 50000 (но ничто не мешает импортировать прямо в БД).
Установка и настройка данного ПО требует базовых навыков администрирования - Linux, MySQL и Asterisk.

Вы можете обратиться к нам и мы установим, настроим и модифицируем под ваши требования систему автообзвона:
  1. Множество одновременных кампаний.
  2. Запуск кампаний по расписанию.
  3. Предиктивный набор.
  4. Кампании на миллионы номеров.
  5. Роботизированный колл-центр.
  6. Сотни одновременных вызовов.

Система обзвона абонентов >>>

Создание базы данных для AutoDialer

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

mysql> select * from campaign;
+----+----------+--------------+-------+-------+---------+-------------+-------+------+------+------+------------+-----------+--------+
| id | campname | chan_context | retry | pause | timeout | ext_context | exten | var  | app  | data | concurrent | timestamp | active |
+----+----------+--------------+-------+-------+---------+-------------+-------+------+------+------+------------+-----------+--------+
|  2 | test_02  | from-dialer  | 0     | 15    | 45      | from-agents | 555   |      | NULL | NULL | 1          | NULL      | NULL   |
+----+----------+--------------+-------+-------+---------+-------------+-------+------+------+------+------------+-----------+--------+
1 row in set (0.00 sec)

Создание базы данных 'autodialer'

Введите root пароль, если задан.

mysql -p

Создайте базу данных от root пользователя mysql.

Установите привилегии для базы данных.

Замените YOUR_USER & YOUR_PASSWORD на свои значения.

create database autodialer;

grant all privileges on autodialer.* to YOUR_USER@localhost identified by 'YOUR_PASSWORD';

flush privileges;

MySql 8

CREATE USER 'YOUR_USER'@'localhost' IDENTIFIED BY 'YOUR_PASSWORD';

GRANT ALL PRIVILEGES ON autodialer.* TO 'YOUR_USER'@'localhost';

ALTER USER 'YOUR_USER'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOUR_PASSWORD';

Создайте таблицу 'campaign'

use autodialer
CREATE TABLE `campaign` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `campname` VARCHAR(64) DEFAULT NULL,
  `chan_context` VARCHAR(16) DEFAULT NULL,
  `retry` VARCHAR(16) DEFAULT NULL,
  `pause` VARCHAR(4) DEFAULT NULL,
  `timeout` VARCHAR(16) DEFAULT NULL,
  `ext_context` VARCHAR(16) DEFAULT NULL,
  `exten` VARCHAR(8) DEFAULT NULL,
  `var` VARCHAR(16) DEFAULT NULL,
  `app` VARCHAR(16) DEFAULT NULL,
  `data` VARCHAR(16) DEFAULT NULL,
  `concurrent` VARCHAR(8) DEFAULT NULL,
  `timestamp` VARCHAR(16) DEFAULT NULL,
  `active` VARCHAR(8) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `camp` (`campname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Создайте таблицу 'admin'

CREATE TABLE `admin` (
  `username` VARCHAR(255) NOT NULL,
  `password_sha1` VARCHAR(64) NOT NULL,
  PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Установите пользователя по умолчанию admin/admin(sha1).

insert into admin set `username`='admin', `password_sha1`='d033e22ae348aeb5660fc2140aec35850c4da997';
Таблицы обзвона автоматически создаются при создании кампании.

Настройка сервера Mysql

Для импорта телефонных номеров из файлов csv, mysql требуется привилегия FILE, т.к. используется метод LOAD DATA INFILE.

/etc/mysql/my.cnf

[mysqld]
secure-file-priv = ""

Перезапустите Mysql сервер.

# systemctl restart mysql

Установите привилегии FILE

Подключитесь к командной строке Mysql.

mysql -p

Установите привилегии.

grant file on *.* to YOUR_USER@localhost identified by 'YOUR_PASSWORD';

Проверьте привилегии каталога.

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv |       |
+------------------+-------+
1 row in set (0.00 sec)

Настройка веб-сервера

Установите директорию:

  • Для Debian: /etc/apache2/apache2.conf
  • Для Centos: /etc/httpd/conf/httpd.conf

Добавьте следующий код в конфигурацию apache, где '/var/www/html/ad' ваш веб-каталог для приложения:

<Directory /var/www/html/ad>
	Options -Indexes
	AllowOverride All
	Require all granted
</Directory>

Перезапустите apache.

systemctl restart apache2

Или для Centos.

systemctl restart httpd

Развертывание веб-приложения

Веб-приложение - это интерфейс для запуска скрипта и заполнения базы данных.

Загрузите веб-приложение и распакуйте в корневой каталог Вашего веб-сервера:

tar zvxf ad.tar.gz 

Настройте учетные данные mysql, заданные при создании базы данных.

./config.php

...
$mysqli = new mysqli("localhost", "YOUR_USER", "YOUR_PASSWORD", "$conndb");
...

./auth.php

...
$mysqli = new mysqli("localhost", "YOUR_USER", "YOUR_PASSWORD", "$conndb");
...

Измените владельца на asterisk. В этом сценарии предполагается, что Asterisk и веб-сервер запускаются из-под пользователя asterisk.

chown -R asterisk. /var/www/html/ad/
   
chmod -R 777 /var/www/html/ad/res/dialer/csv/

Настройка управляющего Bash скрипта

Скрипт campy.sh очень прост, но выполняет основную работу.
Он берет телефонные номера из базы данных и создает call files для оригинации вызовов.
Справочная информация: https://www.voip-info.org/asterisk-auto-dial-out/

Asterisk должен быть загружен с модулем pbx_spool.so:

CLI> module show like spool
Module                         Description                              Use Count  Status      Support Level
pbx_spool.so                   Outgoing Spool Support                   0          Running              core
1 modules loaded

Переместите скрипт в /var/spool/asterisk

 mv /var/www/html/ad/campy.sh  /var/spool/asterisk/

Сделайте asterisk владельцем и разрешите выполнение.

 chown asterisk. /var/spool/asterisk/campy.sh

 chmod a+x /var/spool/asterisk/campy.sh

Настройте учетные данные БД.

./campy.sh

user="YOUR_USER"
pass="YOUR_PASSWORD"
db="autodialer"

Запуск Веб-Приложения

На этом установка завершена. Теперь откройте веб-приложение в браузере: http://ip_address/ad и авторизуйтесь admin/admin (значение по умолчанию,устанавливается во время создания базы данных).

Что бы добавить новую кампанию, просто введите ее название и укажите номер назначения (расширение диалплана) для отвеченных вызовов.

  • Campaign name - используйте a-z, A-Z, 0-9 и _
  • Answer Destination - расширение диалплана для отвеченных вызовов
  • Max retry - количество попыток набора одного номера, где 0 - одна попытка
  • Pause - пауза между попытками
  • Wait - время вызова
  • Concurrent - количество одновременных вызовов
  • Channel context - контекст для набора телефонных номеров
  • Exten context - контекст для ответа на удачный вызов. Вы можете перенаправить отвеченный вызов на любую сущность (очередь, абонент, звуковой файл, телеконференцию и т.д.).

Пример

555 in: exten ⇒ _555,1,queue(queue_name)

Пример простого диалплана.

[from-dialer]
exten => _X.,1,Dial(PJSIP/${EXTEN}@sip_trunk,,)
   same => n,hangup

[from-agents]
exten => _555,1,Noop
   same => n,queue(queue_name)

exten => _1XX,1,noop
   same => n,set(CALLERID(num)=${CALLERID(num)})
   same => n,dial(SIP/${EXTEN})

Запуск кампании

Когда кампания создана, импортируйте телефонные номера из файла формата csv.

Формат файлов csv:

1234
1235
1236

или, если необходимо имя:

1234,name1
1235,name2
1236,name3

Имя может быть передано как CALLERID(name) из call file и отображаться агенту, который получил вызов.

Флажок unix необходим если вы создаете csv из Linux или Mac где формат новой строки - \n

По умолчанию используется формат Windows - \r\n

В случае если csv-файл с номерами загружается, но в список номеров ничего не добавляется, нужно в config.php после:

$mysqli = new mysqli("localhost", "YOUR_USER", "YOUR_PASSWORD", "$conndb");

добавить следующую строку:

mysqli_options($mysqli, MYSQLI_OPT_LOCAL_INFILE, true);

Такое возможно в последних версиях mysql.

Проверьте список номеров

Взаимодействие с диалпланом

Что бы изменить статус вызова в базе данных телефонных номеров, необходимо использовать func_odbc в диалплане.

Основная задача - передать название кампании (оно же имя таблицы) в b-leg вызова.

Файл вызова может передавать заданные переменные в диалплан, но они попадают в канал a-leg, а агенты отвечают в b-leg.

Дополнительная информация

Asterisk Call File

Asterisk func_odbc

/etc/asterisk/func_odbc.conf

Пример конфигурации func_odbc.

[ANSWER]
dsn=dialer
writesql=UPDATE ${VAL2} SET status='${VAL3}', timestamp='${VAL4}' WHERE camp='${VAL2}' and number='${VAL1}'
example диалплана
[form-dialer]
 exten => _X.,1,Dial(PJSIP/${EXTEN}@sip_trunk,,)
 exten => _X.,n,set(_time=${STRFTIME(${EPOCH},GMT+3,%y%m%d%H%M)})
 exten => h,1,set(ODBC_ANSWER(1,2,3,4)=${dnumber},${campaign},${DIALSTATUS},${time})
 exten => h,n,Hangup

Вы должны передать следующие данные:

  • Название кампании
  • Вызываемый номер
  • Статус вызова и дату
  • и другие данные, если требуется.

Эти данные должны быть добавлены из переменных диалплана. Таблицы номеров обзвона автоматически создаются при импорте csv и называются аналогично названию кампании.
Основной целью этих таблиц является предоставление управляющему скрипту телефонных номеров для оригинации вызовов.
Чтобы не звонить повторно на уже обработанные номера, хорошая идея изменить статус вызова в таблице обзвона для удачных оригинаций.

Сценарий вызова файла получает номера телефонов с истинным статусом, например: 'NOANS', 'BUSY', 'NOANSWER', 'CONGESTION'.
Статус можно получить, например, из переменной asterisk - ${DIALSTATUS}.

cat /var/spool/asterisk/campy.sh | grep sqlread

sqlread="select concat(number,',',camp) from autodialer.$campaign where  status in ('NOANS', 'BUSY', 'NOANSWER', 'CONGESTION') order by RAND() limit $limit"

Пример кампании, обратите внимание на столбец status

NOANS - статус по умолчанию, который задается при создании таблицы:

MariaDB [autodialer]> select id, number, last_name, camp, status, timestamp from  million1 limit 10;
+----+-------------+--------------------+----------+-------------+-----------+
| id | number      | last_name          | camp     | status      | timestamp |
+----+-------------+--------------------+----------+-------------+-----------+
|  1 | 78967634025 | МАВЛОНОВ           | million1 | NOANSWER    | 16-10-18  |
|  2 | 78982656081 | СИТДИКОВ           | million1 | NOANS       | NULL      |
|  3 | 78982695621 | БУШМАНОВА          | million1 | CHANUNAVAIL | 18-10-18  |
|  4 | 78987292184 | ГАЛИЕВ             | million1 | NOANSWER    | 05-10-18  |
|  5 | 79000411500 | КОРБОЛИНА          | million1 | CHANUNAVAIL | 19-09-18  |
|  6 | 79000411555 | ЛАНЦОВА            | million1 | ANSWER      | 19-10-18  |
|  7 | 79000411593 | НАБИЕВ             | million1 | NOANS       | NULL      |
|  8 | 79000412264 | ВАХИТОВ            | million1 | CHANUNAVAIL | 14-09-18  |
|  9 | 79000412700 | КАРПОВА            | million1 | BUSY        | 14-09-18  |
| 10 | 79000412932 | СТРУГОВА           | million1 | NOANS       | NULL      |
+----+-------------+--------------------+----------+-------------+-----------+
10 rows in set (0.00 sec)
  • soft/call_center/asterisk_autodialer.txt
  • Последние изменения: 2020/07/18