Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
abills:docs:call_center [2013/06/17 18:29] asmodeus [Скрипт обзвона] |
abills:docs:call_center [2015/12/05 17:50] (текущий) |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | =====Call Center===== | + | =====Call_center===== |
- | ==== Настройка ASTERISK ==== | + | Модуль Call_center предназначен для организации полноценного колл-центра по протоколу SIP. |
- | **/etc/asterisk/sip.conf** | + | Модуль Call_center осуществляет настройку Asterisk непосредственно через веб интерфейс. |
- | + | ====Возможности==== | |
- | <code> | + | * SIP, GSM |
- | [general] | + | * Добавление Транков (SIP, GSM). |
- | Language=ru | + | * Указание количества линий на транк. |
- | transport=udp | + | * Настройка исходящей маршрутизации. |
- | qualify=yes | + | * Выбор и приоритезация транков при исходящем звонке.* |
- | nat=yes | + | * Настройка входящей маршрутизации. |
- | ;####################### | + | * Создание интерактивного меню состоящего из следующих: |
- | ;Подключаем конфиги | + | *Получение сведений о балансе и кредите. |
- | ;####################### | + | *Активеция кредита. |
- | ;Конфиг для строк регистраций SIP транков | + | *Пополнение с карточки оплат (если есть модуль cards) |
- | #include sip_register.conf | + | *Авторизация по любому параметру аккаунта абонента (PHONE,CONTRACT_ID,UID,BILL_ID). |
- | ;Конфиг для создания и настройки SIP транков | + | *Прием голосовых сообщений. |
- | #include sip_trunk.conf | + | *Молучение информации о предоставляемых акциях и услугах. |
- | ;Конфиг для создания и настройки SIP клиентов | + | *Мультиязычный интерфейс. |
- | #include sip_users.conf | + | *Приветствия. |
+ | *Правила по времени. | ||
+ | *Дополнительное интерактивное меню можно навешать на любой из пкнктов основного меню либо функции. | ||
+ | *Запись звонков. | ||
+ | *Создание собственных сообщений либо из текста либо из файла. | ||
+ | *Отправка звонка на: | ||
+ | *Внутренний номер. | ||
+ | *Внешний номер. | ||
+ | *Группу номеров. | ||
+ | *Очередь звонков. | ||
+ | * Карточная платформа | ||
+ | * Тарификация по времени и по направлениям. | ||
+ | * Возможность разрешать или запрещать входящие, исходящие звонки. | ||
+ | * Абон. плата. | ||
+ | * Управление шлюзами. | ||
+ | * Выбор оптимального шлюза для звонка. | ||
+ | * Консоль для управления GNU Gatekeeper. | ||
+ | * Бесплатные секунды в звонке | ||
+ | * Предоплаченное время направлений | ||
+ | ==== Добавление Транка ==== | ||
- | </code> | ||
- | После изменения нужно выполнить | ||
- | <code> | ||
- | asterisk -rx "config reload /etc/asterisk/sip.conf" | ||
- | </code> | ||
- | **/etc/asterisk/sip_register.conf** | + | ==== Создание приветствий ==== |
- | <code> | + | |
- | ;####################### | + | |
- | ;Прописываем строки регистраций для транков | + | |
- | ;####################### | + | |
- | ;register = trunk_num:pass_for_trunk_num@ip_voip_provider/trunk_num | + | |
- | </code> | + | |
- | После изменения нужно выполнить | + | |
- | <code> | + | |
- | asterisk -rx "config reload /etc/asterisk/sip.conf" | + | |
- | </code> | + | |
- | **/etc/asterisk/sip_trunk.conf** | + | ==== Создание сообщений ==== |
- | <code> | + | |
- | ;####################### | + | |
- | ;Глобальные настройки | + | |
- | ;####################### | + | |
- | [trunk](!) | + | |
- | type = friend | + | |
- | canreinvite=no | + | |
- | qualify=yes | + | |
- | disallow=all | + | |
- | allow=ulaw | + | |
- | allow=alaw | + | |
- | ;####################### | + | * [[abills:docs:manual:admin:callcenter:callcenter_messages|Сообщения]] |
- | ;Настройки транков | + | ====IVR (голосовое меню)==== |
- | ;####################### | + | * [[abills:docs:manual:admin:callcenter:callcenter_ivr|IVR (голосовое меню) заведение]] |
- | [trunk_num](trunk) | + | |
- | username=trunk_num | + | |
- | secret=pass_for_trunk_num | + | |
- | nat=yes | + | |
- | insecure=invite | + | |
- | host=ip_voip_provider | + | |
- | fromuser=trunk_num | + | |
- | fromdomain=ip_voip_provider | + | |
- | dtmfmode=info | + | |
- | context=from-office | + | |
- | </code> | + | ====Встроенные функции==== |
+ | |||
+ | ===Аутентификация абонента=== | ||
- | После изменения нужно выполнить | + | ===Сведения о балансе=== |
- | <code> | + | |
- | asterisk -rx "config reload /etc/asterisk/sip.conf" | + | |
- | </code> | + | |
- | ** Установка модуля канала chan_dongle** | + | ===Прием голосовых сообщений=== |
- | 1. Скачиваем модуль канала chan_dongle-1.1.r14.tgz | + | ===Отображение информации об услугах=== |
- | 2. Распаковываем, собираем и ставим, копируем конфигурационный файл в директорию asterisk: | + | ===Активация кредита=== |
- | <code> | + | ===Новости и акции=== |
- | cd /tmp | + | |
- | wget asterisk-chan-dongle.googlecode.com/files/chan_dongle-1.1.r14.tgz | + | |
- | tar zxvf chan_dongle-1.1.r14.tgz | + | |
- | cd chan_dongle-1.1.r14 | + | |
- | ./configure | + | |
- | make install | + | |
- | </code> | + | |
- | **Настройка конфига модуля канала chan_dongle** | + | =====AbillS===== |
- | **/etc/asterisk/dongle.conf** | + | |
- | <code> | + | |
- | [general] | + | |
- | interval=15 ; Частота проверки подключеных устройств | + | |
- | [defaults] | + | ''mysql --default-character-set=utf8 -D abills < call_center.sql -p'' |
- | usecallingpres=yes ; Определять номер звонящего | + | |
- | callwaiting=no ; Принимать второй звонок при активном разговоре | + | |
- | autodeletesms=yes ; Удаление смс с симкарты при перезапуске | + | |
- | rxgain=5 ; Изменение громкости динамика | + | |
- | txgain=0 ; Изменение громкости микрофона | + | |
- | disablesms=no ; Отключить приём SMS. | + | |
- | ;Номер карточки | ||
- | [XXXXXXXXXX] | ||
- | ;В навании контекста from-gsm-trunk-num последний параметр | ||
- | ;num должен выдыватся автоматически это порядковый номер транка в системе | ||
- | context=from-gsm-trunk-num | ||
- | ;imei GSM модема | ||
- | imei=XXXXXXXXXXXXXXX | ||
- | |||
- | </code> | ||
- | После изменения нужно выполнить | ||
- | <code> | ||
- | asterisk -rx "config reload /etc/asterisk/dongle.conf" | ||
- | </code> | ||
- | |||
- | ==== extensions ==== | ||
- | |||
- | В extensions.conf добавить | ||
- | |||
- | **/etc/asterisk/extensions.conf** | ||
- | |||
- | [out-calls] | ||
- | exten => s,1,Answer | ||
- | exten => s,2,Playback(${RECORD}) | ||
- | ;exten => s,n,Set(CHOICE="") | ||
- | ;exten => s,n,Read(CHOICE,,1,,1,10) | ||
- | ;exten => s,n,GotoIf($["${CHOICE}" = "0"]?s,2) | ||
- | exten => s,n,Hangup | ||
- | |||
- | Три закомментированные строки добавляют повтор сообщения для клиента | ||
- | после нажатия им кнопки 0 на телефоне. Это если повтор понадобится. | ||
- | |||
- | ==== Скрипт обзвона==== | ||
- | |||
- | |||
- | **out-calls.pl** | ||
- | |||
- | #!/usr/bin/perl -w | ||
- | | ||
- | use strict; | ||
- | use DBI; | ||
- | | ||
- | my $dbname='abills'; # Настройки подключения к базе | ||
- | my $login='root'; | ||
- | my $passwd='pass'; | ||
- | | ||
- | my $voice_file='ru/demo-instruct'; # файл для проигрывания в директории /var/lib/asterisk/sounds | ||
- | my $caller='111'; # Номер звонящего | ||
- | my $max_retries=4; # Количество попыток дозвона, если звонок не был принят | ||
- | my $retry_pause=36; # Интервал между попытками в секундах | ||
- | my $debug=1; # режим отладочных сообщений | ||
- | | ||
- | my $filedir='/var/spool/asterisk/outgoing'; | ||
- | my $tmpdir='/tmp'; | ||
- | my $internal_pause=10; | ||
- | | ||
- | my %MOBILE_PREFS=( # для префиксов мобильщиков автоматически в начале добавляется 0 если его нет | ||
- | '50' => 1, | ||
- | '63' => 1, | ||
- | '67' => 1, | ||
- | '93' => 1, | ||
- | '96' => 1, | ||
- | '97' => 1, | ||
- | '98' => 1, | ||
- | ); | ||
- | | ||
- | my $default_trunk='SIP/111'; # Исходящий транк asterisk по умолчанию | ||
- | | ||
- | my %TRUNKS=( # транки для для отдельных направлений | ||
- | '067' => 'DAHDI/g0', | ||
- | '097' => 'DAHDI/g0', | ||
- | '096' => 'Dongle/i:359124037702136', | ||
- | ); | ||
- | | ||
- | out_call('0964742263'); # убрать после тестов | ||
- | exit 0; # убрать после тестов | ||
- | | ||
- | my $dbh = DBI->connect("DBI:mysql:$dbname", $login, $passwd) || die "Could not connect to database: $DBI::errstr"; | ||
- | | ||
- | my $sql="SELECT phone FROM users_pi as a join bills as b on (a.uid=b.uid) WHERE deposit<0"; | ||
- | my $sth = $dbh->prepare($sql); | ||
- | $sth->execute(); | ||
- | while (my $result = $sth->fetchrow_hashref()) | ||
- | { | ||
- | my $phone=$result->{phone}; | ||
- | $phone=~s/\+/00/g; | ||
- | $phone=~s/\D//g; | ||
- | $phone=~s/^00380/0/g; | ||
- | if ((length($phone)==9) and (substr($phone,0,1) ne '0') and ($MOBILE_PREFS{substr($phone,0,2)} ne '')) | ||
- | { | ||
- | $phone='0'.$phone; | ||
- | } | ||
- | if ((length($phone)>5) and (length($phone)<11) and (substr($phone,0,2) ne '00')) { | ||
- | print "Calling $phone\n" if $debug; | ||
- | out_call($phone); | ||
- | print "Sleeping $internal_pause s\n" if $debug; | ||
- | sleep $internal_pause; | ||
- | } | ||
- | else { | ||
- | print STDERR "Invalid number: '$result->{phone}'\n" if $debug; | ||
- | } | ||
- | } | ||
- | | ||
- | $dbh->disconnect(); | ||
- | |||
- | exit 0; | ||
- | | ||
- | sub out_call | ||
- | { | ||
- | my $phone=$_[0]; | ||
- | my $trunk=$default_trunk; | ||
- | foreach my $i (keys %TRUNKS) { | ||
- | if ($phone=~/^$i/) { | ||
- | $trunk=$TRUNKS{$i}; | ||
- | } | ||
- | } | ||
- | open F,">$tmpdir/call-$phone"; | ||
- | print F <<EOT; | ||
- | Channel: $trunk/$phone | ||
- | Callerid: $caller | ||
- | MaxRetries: $max_retries | ||
- | RetryTime: $retry_pause | ||
- | WaitTime: 25 | ||
- | Context: out-calls | ||
- | Extension: s | ||
- | Priority: 1 | ||
- | Setvar: RECORD=$voice_file | ||
- | EOT | ||
- | close F; | ||
- | rename "$tmpdir/call-$phone","$filedir/call-$phone"; | ||
- | } | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | =====ABillsS===== | ||
|$conf{CALLCENTER_MENU}=1; | Включить меню для Call Center | | |$conf{CALLCENTER_MENU}=1; | Включить меню для Call Center | |