Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
abills:docs:call_center [2013/06/11 16:45] kodr [Настройка ASTERISK] |
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> | ||
- | **/etc/asterisk/sip_register.conf** | + | ==== Создание приветствий ==== |
- | <code> | + | |
- | ;####################### | + | |
- | ;Прописываем строки регистраций для транков | + | |
- | ;register = trunk_num:pass_for_trunk_num@ip_voip_provider/trunk_num | + | |
- | ;####################### | + | |
- | </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> | + | ====Встроенные функции==== |
+ | |||
+ | ===Аутентификация абонента=== | ||
- | ==== 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 на телефоне. Это если повтор понадобится. | + | |
- | ==== Скрипт обзвона==== | + | =====AbillS===== |
+ | ''mysql --default-character-set=utf8 -D abills < call_center.sql -p'' | ||
- | **out-calls.pl** | ||
- | #!/usr/bin/perl -w | + | |$conf{CALLCENTER_MENU}=1; | Включить меню для Call Center | |
- | + | ||
- | 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"; | + | |
- | } | + | |
- | | + |