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

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

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

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

Также также нами разработана система обзвона для FreeSWITCH.

Создание базы данных для 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;

Создайте таблицу '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 и _
  • Max retry - количество попыток набора одного номера, где 0 - одна попытка
  • Pause - пауза между попытками
  • Wait - время вызова
  • Concurrent - количество одновременных вызовов
  • Channel context - контекст для набора телефонных номеров
  • Exten context - контекст для ответа агентам
  • Answer Destination - расширение диалплана для ответных вызовов

Пример

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

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

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

Что бы изменить статус вызова в базе данных телефонных номеров, необходимо использовать 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 диалплана
 exten => h,1,set(ODBC_ANSWER(1,2,3,4)=${number},${campaign_name},${DIALSTATUS},${time})

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

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

Эти данные должны быть добавлены из переменных диалплана. Таблицы номеров обзвона автоматически создаются при импорте 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
  • Последние изменения: 2019/01/14