Это старая версия документа.


Call_center

Модуль Call_center предназначен для организации полноценного колл-центра по протоколу SIP.

Модуль Call_center осуществляет настройку Asterisk непосредственно через веб интерфейс.

Возможности

  • SIP, GSM
  • Добавление Транков (SIP, GSM).
  • Указание количества линий на транк.
  • Настройка исходящей маршрутизации.
  • Выбор и приоритезация транков при исходящем звонке.*
  • Настройка входящей маршрутизации.
  • Создание интерактивного меню состоящего из следующих:
    • Получение сведений о балансе и кредите.
    • Активеция кредита.
    • Пополнение с карточки оплат (если есть модуль cards)
    • Авторизация по любому параметру аккаунта абонента (PHONE,CONTRACT_ID,UID,BILL_ID).
    • Прием голосовых сообщений.
    • Молучение информации о предоставляемых акциях и услугах.
    • Мультиязычный интерфейс.
    • Приветствия.
    • Правила по времени.
    • Дополнительное интерактивное меню можно навешать на любой из пкнктов основного меню либо функции.
    • Запись звонков.
    • Создание собственных сообщений либо из текста либо из файла.
    • Отправка звонка на:
      • Внутренний номер.
      • Внешний номер.
      • Группу номеров.
      • Очередь звонков.
  • Карточная платформа
  • Тарификация по времени и по направлениям.
  • Возможность разрешать или запрещать входящие, исходящие звонки.
  • Абон. плата.
  • Управление шлюзами.
  • Выбор оптимального шлюза для звонка.
  • Консоль для управления GNU Gatekeeper.
  • Бесплатные секунды в звонке
  • Предоплаченное время направлений

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