Это старая версия документа.
Call Center
Настройка ASTERISK
/etc/asterisk/sip.conf
[general] Language=ru transport=udp qualify=yes nat=yes ;####################### ;Подключаем конфиги ;####################### ;Конфиг для строк регистраций SIP транков #include sip_register.conf ;Конфиг для создания и настройки SIP транков #include sip_trunk.conf ;Конфиг для создания и настройки SIP клиентов #include sip_users.conf
/etc/asterisk/sip_register.conf
;####################### ;Прописываем строки регистраций для транков ;####################### ;register = trunk_num:pass_for_trunk_num@ip_voip_provider/trunk_num
/etc/asterisk/sip_trunk.conf
;####################### ;Глобальные настройки ;####################### [trunk](!) type = friend canreinvite=no qualify=yes disallow=all allow=ulaw allow=alaw ;####################### ;Настройки транков ;####################### [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
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"; }