diff --git a/agc_2-X/trunk/UPGRADE b/agc_2-X/trunk/UPGRADE index 25816cd5..b5378004 100644 --- a/agc_2-X/trunk/UPGRADE +++ b/agc_2-X/trunk/UPGRADE @@ -138,6 +138,12 @@ NOTE: Upgrading from 1.1.12-3 to 2.0.1 is at the bottom 31. A field has been added to vicidial_list(last_local_call_time) to sort by the last time a lead was called as well as for lead recycling changes. +32. IMPORTANT FOR RECORDINGS!!! + The recording extensions have been changed within VICIDIAL so you need to + add the following lines to your extensions.conf + ; quiet monitor-only entry and leaving conferences for VICIDIAL (recording) + exten => _58600XXX,1,Meetme,${EXTEN:1}|Fmq + diff --git a/agc_2-X/trunk/agi/agi-VDAD_ALL_inbound.agi b/agc_2-X/trunk/agi/agi-VDAD_ALL_inbound.agi index 615a6eaf..56ff0c56 100644 --- a/agc_2-X/trunk/agi/agi-VDAD_ALL_inbound.agi +++ b/agc_2-X/trunk/agi/agi-VDAD_ALL_inbound.agi @@ -71,6 +71,7 @@ # $script = 'agi-VDAD_ALL_inbound.agi'; +$dtmf_silent_prefix = '7'; $DROP_TIME = 360; ### default number of seconds to wait until you drop a waiting call $start_moh=1; @@ -1040,7 +1041,7 @@ if ($agent_search_method =~ /^SO|^LO/) $VHqueryCID = "VH$CIDdate$VDADconf_exten"; ### insert a NEW record to the vicidial_manager table to play the alert message to the agent - $stmtA = "INSERT INTO vicidial_manager values('','','$SQLdate','NEW','N','$VARserver_ip','','Originate','$VHqueryCID','Exten: $agent_alert_exten','Context: $ext_context','Channel: Local/7$VDADconf_exten$at$ext_context','Priority: 1','Callerid: $CIDstring','Timeout: 10','','','','')"; + $stmtA = "INSERT INTO vicidial_manager values('','','$SQLdate','NEW','N','$VARserver_ip','','Originate','$VHqueryCID','Exten: $agent_alert_exten','Context: $ext_context','Channel: Local/$dtmf_silent_prefix$VDADconf_exten$at$ext_context','Priority: 1','Callerid: $CIDstring','Timeout: 10','','','','')"; $affected_rows = $dbhA->do($stmtA); if ($AGILOG) {$agi_string = "-- VDCL agent alert: |$VHqueryCID|7$VDADconf_exten|$channel|insert to vicidial_manager"; &agi_output;} @@ -1317,7 +1318,7 @@ if ($agent_search_method =~ /^LO|^LB/) $VDADremDIALstr = "$a$S$b$S$c$S$d$S"; } $alertVDADremDIALstr = "$VDADremDIALstr"; - $alertVDADremDIALstr .= "7$VDADconf_exten"; + $alertVDADremDIALstr .= "$dtmf_silent_prefix$VDADconf_exten"; $VDADremDIALstr .= "$VDADconf_exten"; ### if agent alert exten is not disabled, then trigger the alert and wait @@ -1513,7 +1514,7 @@ $now_date = "$year-$mon-$mday $hour:$min:$sec"; $CIDdate = "$mon$mday$hour$min$sec"; $tsSQLdate = "$year$mon$mday$hour$min$sec"; $SQLdate = "$year-$mon-$mday $hour:$min:$sec"; - $VDADvoicemail_ext = ''; +# $VDADvoicemail_ext = ''; if ($enable_queuemetrics_logging > 0) { diff --git a/agc_2-X/trunk/bin/QC_gather_records.pl b/agc_2-X/trunk/bin/QC_gather_records.pl new file mode 100644 index 00000000..08f6378d --- /dev/null +++ b/agc_2-X/trunk/bin/QC_gather_records.pl @@ -0,0 +1,575 @@ +#!/usr/bin/perl +# +# QC_gather_records.pl version: 2.0.5 +# +# This script is designed to gather records to be posted to the +# qc_vicidial_list_original table so that it can be processed by the QC system +# +# Copyright (C) 2008 Matt Florell LICENSE: AGPLv2 +# +# CHANGES +# 80717-1146 - First version development +# 80721-1627 - functional beta version +# + +use Time::Local; + +$txt = '.txt'; +$US = '_'; +$DS = '-'; +$MT[0] = ''; +$date_override_set=0; + +# default CLI values +$campaign = '---ALL---'; +$pull_statuses = 'SALE-UPSELL'; + +### begin parsing run-time options ### +if (length($ARGV[0])>1) + { + $i=0; + while ($#ARGV >= $i) + { + $args = "$args $ARGV[$i]"; + $i++; + } + + if ($args =~ /--help/i) + { + print "allowed run time options:\n"; + print " [--campaign=XXX] = Single campaign/in-group that records will be pulled from.\n"; + print " Default will pull all qc_active campaigns and in-groups\n"; + print " [--pull-statuses=XXX-XXY] = Statuses that are to be pulled. Default SALE and UPSELL\n"; + print " NOTE: To include all statuses in the export, use \"--sale-statuses=---ALL---\"\n"; + print " [--date-override=YYYYMMDDHHMMSS] = Date to force a re-pull from.\n"; + print " Pulls 24 hours of records from the override time/date\n"; + print " [-q] = quiet\n"; + print " [-t] = test\n"; + print " [--debug] = debugging messages\n"; + print " [--debugX] = Super debugging messages\n"; + print "\n"; + + exit; + } + else + { + if ($args =~ /--debug/i) + { + $DB=1; + print "\n----- DEBUG MODE -----\n\n"; + } + if ($args =~ /--debugX/i) + { + $DBX=1; + print "\n----- SUPER DEBUG MODE -----\n\n"; + } + if ($args =~ /-q/i) + { + $q=1; $Q=1; + } + if ($args =~ /--date-override=/i) + { + @data_in = split(/--date-override=/,$args); + $date_override = $data_in[1]; + $date_override =~ s/ .*$//gi; + $date_override =~ s/\D//gi; + if ( (length($date_override)<14) || (length($date_override)>14) ) + { + print "ERROR! Invalid date_override format |$date_override|\n"; + $data_override=''; + } + else + { + $YYYY = substr($date_override, 0, 4); + $MM = substr($date_override, 4, 2); + $MM = ($MM - 1); + $DD = substr($date_override, 6, 2); + $hh = substr($date_override, 8, 2); + $mm = substr($date_override, 10, 2); + $ss = substr($date_override, 12, 2); + $STARTdateSQL = "$YYYY$DS$MM$DS$DD $hh:$mm:$ss"; + $STARTdateEPOCH = timelocal($ss,$mm,$hh,$DD,$MM,$YYYY); + $ENDdateEPOCH = ($STARTdateEPOCH + 86400); + ($EDsec,$EDmin,$EDhour,$EDmday,$EDmon,$EDyear,$EDwday,$EDyday,$EDisdst) = localtime($ENDdateEPOCH); + $EDyear = ($EDyear + 1900); + $EDmon++; + if ($EDmon < 10) {$EDmon = "0$EDmon";} + if ($EDmday < 10) {$EDmday = "0$EDmday";} + if ($EDhour < 10) {$EDhour = "0$EDhour";} + if ($EDmin < 10) {$EDmin = "0$EDmin";} + if ($EDsec < 10) {$EDsec = "0$EDsec";} + $ENDdateSQL = "$EDyear-$EDmon-$EDmday $EDhour:$EDmin:$EDsec"; + + $dateSQL = "and (call_date >= \"$STARTdateSQL\" and call_date < \"$ENDdateSQL\")"; + $date_override_set++; + } + } + if ($args =~ /--campaign=/i) + { + @data_in = split(/--campaign=/,$args); + $campaign = $data_in[1]; + $campaign =~ s/ .*$//gi; + } + else + {$campaign='---ALL---';} + if ($args =~ /--pull-statuses=/i) + { + @data_in = split(/--pull-statuses=/,$args); + $pull_statuses = $data_in[1]; + $pull_statuses =~ s/ .*$//gi; + if ($pull_statuses =~ /---ALL---/) + {if (!$Q) {print "\n----- PULL ALL STATUSES -----\n\n";} } + } + else + {$pull_statuses='---ALL---';} + if ($args =~ /--test/i) + { + $T=1; $TEST=1; + print "\n----- TESTING -----\n\n"; + } + } + } +else + { + print "no command line options set, using defaults.\n"; + } +### end parsing run-time options ### + +if (!$Q) + { + print "\n\n\n\n\n\n\n\n\n\n\n\n-- QC_gather_records.pl --\n\n"; + print "This program is designed to gather records from VICIDIAL campaigns and in-groups and place them into the qc_vicidial_list_original table for processing by the QC system. \n"; + print "\n"; + } + +$secX = time(); + ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); + $year = ($year + 1900); + $mon++; + if ($mon < 10) {$mon = "0$mon";} + if ($mday < 10) {$mday = "0$mday";} + if ($hour < 10) {$hour = "0$hour";} + if ($min < 10) {$min = "0$min";} + if ($sec < 10) {$sec = "0$sec";} + $timestamp = "$year-$mon-$mday $hour:$min:$sec"; + $filedate = "$year$mon$mday"; + $ABIfiledate = "$mon-$mday-$year$us$hour$min$sec"; + $shipdate = "$year-$mon-$mday"; + $datestamp = "$year/$mon/$mday $hour:$min"; + + $four_hours_behind = ($secX -14400); + ($MBsec,$MBmin,$MBhour,$MBmday,$MBmon,$MByear,$MBwday,$MByday,$MBisdst) = localtime($four_hours_behind); + $MByear = ($MByear + 1900); + $MBmon++; + if ($MBmon < 10) {$MBmon = "0$MBmon";} + if ($MBmday < 10) {$MBmday = "0$MBmday";} + if ($MBhour < 10) {$MBhour = "0$MBhour";} + if ($MBmin < 10) {$MBmin = "0$MBmin";} + if ($MBsec < 10) {$MBsec = "0$MBsec";} + $qc_this_pull_time = "$MByear-$MBmon-$MBmday $MBhour:$MBmin:$MBsec"; + + +# default path to astguiclient configuration file: +$PATHconf = '/etc/astguiclient.conf'; + +open(conf, "$PATHconf") || die "can't open $PATHconf: $!\n"; +@conf = ; +close(conf); +$i=0; +foreach(@conf) + { + $line = $conf[$i]; + $line =~ s/ |>|\n|\r|\t|\#.*|;.*//gi; + if ( ($line =~ /^PATHhome/) && ($CLIhome < 1) ) + {$PATHhome = $line; $PATHhome =~ s/.*=//gi;} + if ( ($line =~ /^PATHlogs/) && ($CLIlogs < 1) ) + {$PATHlogs = $line; $PATHlogs =~ s/.*=//gi;} + if ( ($line =~ /^PATHagi/) && ($CLIagi < 1) ) + {$PATHagi = $line; $PATHagi =~ s/.*=//gi;} + if ( ($line =~ /^PATHweb/) && ($CLIweb < 1) ) + {$PATHweb = $line; $PATHweb =~ s/.*=//gi;} + if ( ($line =~ /^PATHsounds/) && ($CLIsounds < 1) ) + {$PATHsounds = $line; $PATHsounds =~ s/.*=//gi;} + if ( ($line =~ /^PATHmonitor/) && ($CLImonitor < 1) ) + {$PATHmonitor = $line; $PATHmonitor =~ s/.*=//gi;} + if ( ($line =~ /^VARserver_ip/) && ($CLIserver_ip < 1) ) + {$VARserver_ip = $line; $VARserver_ip =~ s/.*=//gi;} + if ( ($line =~ /^VARDB_server/) && ($CLIDB_server < 1) ) + {$VARDB_server = $line; $VARDB_server =~ s/.*=//gi;} + if ( ($line =~ /^VARDB_database/) && ($CLIDB_database < 1) ) + {$VARDB_database = $line; $VARDB_database =~ s/.*=//gi;} + if ( ($line =~ /^VARDB_user/) && ($CLIDB_user < 1) ) + {$VARDB_user = $line; $VARDB_user =~ s/.*=//gi;} + if ( ($line =~ /^VARDB_pass/) && ($CLIDB_pass < 1) ) + {$VARDB_pass = $line; $VARDB_pass =~ s/.*=//gi;} + if ( ($line =~ /^VARDB_port/) && ($CLIDB_port < 1) ) + {$VARDB_port = $line; $VARDB_port =~ s/.*=//gi;} + $i++; + } + +# Customized Variables +$server_ip = $VARserver_ip; # Asterisk server IP +if (!$VARDB_port) {$VARDB_port='3306';} + + +use DBI; + +$dbhA = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VARDB_user", "$VARDB_pass") + or die "Couldn't connect to database: " . DBI->errstr; + +$dbhB = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VARDB_user", "$VARDB_pass") + or die "Couldn't connect to database: " . DBI->errstr; + +############################################# +##### START SYSTEM_SETTINGS LOOKUP ##### +$stmtA = "SELECT use_non_latin,qc_last_pull_time FROM system_settings;"; +$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; +$sthA->execute or die "executing: $stmtA ", $dbhA->errstr; +$sthArows=$sthA->rows; +if ($sthArows > 0) + { + @aryA = $sthA->fetchrow_array; + $non_latin = $aryA[0]; + $qc_last_pull_time = $aryA[1]; + } +$sthA->finish(); +##### END SETTINGS LOOKUP ##### +########################################### + +if ($non_latin > 0) {$affected_rows = $dbhA->do("SET NAMES 'UTF8'");} +if ($date_override_set<1) {$dateSQL = "and (call_date >= \"$qc_last_pull_time\")";} + +##### BEGIN find campaigns or in-groups to query ##### +$CLIcampSQLc=''; +$CLIcampSQLi=''; +$campaignSQL=''; +$ingroupSQL=''; +$pull_campaigns=0; +$pull_ingroups=0; + +if ($campaign !~ /---ALL---/) + { + $CLIcampSQLc = "and campaign_id='$campaign'"; + $CLIcampSQLi = "and group_id='$campaign'"; + } + +$stmtA = "select campaign_id from vicidial_campaigns where qc_enabled='Y' $CLIcampSQLc;"; +if ($DB) {print "|$stmtA|\n";} +$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; +$sthA->execute or die "executing: $stmtA ", $dbhA->errstr; +$sthArows=$sthA->rows; +while ($sthArows > $pull_campaigns) + { + @aryA = $sthA->fetchrow_array; + $campaignSQL .= "'$aryA[0]',"; + $campaigns[$pull_campaigns] = $aryA[0]; + $pull_campaigns++; + } +$sthA->finish(); +if (length($campaignSQL)>2) + {chop($campaignSQL);} +else {$campaignSQL="''";} + +$stmtA = "select group_id from vicidial_inbound_groups where qc_enabled='Y' $CLIcampSQLi;"; +if ($DB) {print "|$stmtA|\n";} +$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; +$sthA->execute or die "executing: $stmtA ", $dbhA->errstr; +$sthArows=$sthA->rows; +while ($sthArows > $pull_ingroups) + { + @aryA = $sthA->fetchrow_array; + $ingroupSQL .= "'$aryA[0]',"; + $ingroups[$pull_ingroups] = $aryA[0]; + $pull_ingroups++; + } +$sthA->finish(); +if (length($ingroupSQL)>2) + {chop($ingroupSQL);} +else {$ingroupSQL="''";} +##### END find campaigns or in-groups to query ##### + + +##### START get lists of statuses to pull for each in-group and campaign ##### +$VCLquerySQL=''; +$VLquerySQL=''; +if ($pull_statuses =~ /---ALL---/) + { + ### if all statuses, loop through each campaign and in-group to grab statuses + $i=0; $j=0; + foreach(@ingroups) + { + $stmtA = "select qc_statuses,qc_shift_id,shift_start_time from vicidial_inbound_groups,vicidial_shifts where group_id='$ingroups[$i]' and qc_shift_id=shift_id;"; + if ($DB) {print "|$stmtA|\n";} + $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; + $sthArows=$sthA->rows; + if ($sthArows > 0) + { + @aryA = $sthA->fetchrow_array; + $aryA[0] =~ s/ -$//gi; + @QCstatuses = split(/ /, $aryA[0]); + $QCs_to_print = $#QCstatuses; + $QCsql = ''; + $o=0; + while ($QCs_to_print > $o) + { + $o++; + $QCsql .= "'$QCstatuses[$o]',"; + } + $QCsql =~ s/,$//gi; + if (length($QCsql)<2) {$QCsql="''";} + + if ($j>0) {$VCLquerySQL .= " or ";} + $VCLquerySQL .= "(vicidial_closer_log.campaign_id='$ingroups[$i]' and vicidial_closer_log.status IN($QCsql))"; + $ingroup_statuses[$i] = $aryA[0]; + $j++; + } + $sthA->finish(); + $i++; + } + + ### if all statuses, loop through each campaign and in-group to grab statuses + $i=0; $j=0; + foreach(@campaigns) + { + $stmtA = "select qc_statuses,qc_shift_id,shift_start_time from vicidial_campaigns,vicidial_shifts where campaign_id='$campaigns[$i]' and qc_shift_id=shift_id;"; + if ($DB) {print "|$stmtA|\n";} + $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; + $sthArows=$sthA->rows; + if ($sthArows > 0) + { + @aryA = $sthA->fetchrow_array; + $aryA[0] =~ s/ -$//gi; + @QCstatuses = split(/ /, $aryA[0]); + $QCs_to_print = $#QCstatuses; + $QCsql = ''; + $o=0; + while ($QCs_to_print > $o) + { + $o++; + $QCsql .= "'$QCstatuses[$o]',"; + } + $QCsql =~ s/,$//gi; + if (length($QCsql)<2) {$QCsql="''";} + + if ($j>0) {$VLquerySQL .= " or ";} + $VLquerySQL .= "(vicidial_log.campaign_id='$campaigns[$i]' and vicidial_log.status IN($QCsql))"; + $campaign_statuses[$i] = $aryA[0]; + $j++; + } + $sthA->finish(); + $i++; + } + $VCLquerySQL = "and ($VCLquerySQL)"; + $VLquerySQL = "and ($VLquerySQL)"; + if ($DB>0) {print "\n$VCLquerySQL\n";} + if ($DB>0) {print "\n$VLquerySQL\n";} + ##### END get lists of statuses to pull for each in-group and campaign ##### + + $pull_statusesSQL=''; + $close_statusesSQL=''; + } +else + { + $pull_statusesSQL = $pull_statuses; + $pull_statusesSQL =~ s/-/','/gi; + $pull_statusesSQL = "'$pull_statusesSQL'"; + $close_statusesSQL = $pull_statusesSQL; + $pull_statusesSQL = " and (vicidial_log.status IN($pull_statusesSQL))"; + $close_statusesSQL = " and (vicidial_closer_log.status IN($close_statusesSQL))"; + } + +##### Construct the queries to pull records for QC ##### +$VCLsql= "SELECT closecallid,lead_id,campaign_id,call_date,length_in_sec,status,user,comments,user_group,term_reason,xfercallid from vicidial_closer_log where campaign_id IN($ingroupSQL) $dateSQL $VCLquerySQL $close_statusesSQL;"; +$VLsql= "SELECT uniqueid,lead_id,campaign_id,call_date,length_in_sec,status,user,comments,user_group,term_reason from vicidial_log where campaign_id IN($campaignSQL) $dateSQL $VLquerySQL $pull_statusesSQL;"; + + +$j=0; +##### Pull records from vicidial_closer_log table +$stmtA = "$VCLsql"; +if ($DB) {print "|$stmtA|\n";} +$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; +$sthA->execute or die "executing: $stmtA ", $dbhA->errstr; +$sthArows=$sthA->rows; +$i=0; +while ($sthArows > $i) + { + @aryA = $sthA->fetchrow_array; + $vicidial_id[$j] = $aryA[0]; + $lead_id[$j] = $aryA[1]; + $campaign_id[$j] = $aryA[2]; + $call_date[$j] = $aryA[3]; + $length_in_sec[$j] = $aryA[4]; + $status[$j] = $aryA[5]; + $user[$j] = $aryA[6]; + $call_type[$j] = $aryA[7]; + $user_group[$j] = $aryA[8]; + $term_reason[$j] = $aryA[9]; + $xfercallid[$j] = $aryA[10]; + + $i++; $j++; + } +$sthA->finish(); + +##### Pull records from vicidial_log table +$stmtA = "$VLsql"; +if ($DB) {print "|$stmtA|\n";} +$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; +$sthA->execute or die "executing: $stmtA ", $dbhA->errstr; +$sthArows=$sthA->rows; +$k=0; +while ($sthArows > $k) + { + @aryA = $sthA->fetchrow_array; + $vicidial_id[$j] = $aryA[0]; + $lead_id[$j] = $aryA[1]; + $campaign_id[$j] = $aryA[2]; + $call_date[$j] = $aryA[3]; + $length_in_sec[$j] = $aryA[4]; + $status[$j] = $aryA[5]; + $user[$j] = $aryA[6]; + $call_type[$j] = $aryA[7]; + $user_group[$j] = $aryA[8]; + $term_reason[$j] = $aryA[9]; + $xfercallid[$j] = ''; + + $k++; $j++; + } +$sthA->finish(); + +if ($DB) {print "vicidial_closer_log records found: $i\n";} +if ($DB) {print "vicidial_log records found: $k\n";} +if ($DB) {print " TOTAL: $j\n";} + +$i=0; $j=0; +foreach(@vicidial_id) + { + ### check to see if there is already an entry in the vicidial_qc_list table for this record + $VDIDduplicate=0; + $stmtA = "select count(*) from vicidial_qc_list where vicidial_id='$vicidial_id[$i]';"; + if ($DB) {print "|$stmtA|\n";} + $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; + $sthArows=$sthA->rows; + if ($sthArows > 0) + { + @aryA = $sthA->fetchrow_array; + $VDIDduplicate = $aryA[0]; + } + $sthA->finish(); + + if ($VDIDduplicate > 0) + { + $j++; + if ($DB) {print "DUPLICATE: |$vicidial_id[$i]|$i|$j|\n";} + } + else + { + ### grab vicidial_list details + $stmtA = "select vendor_lead_code,source_id,list_id,phone_code,phone_number,title,first_name,middle_initial,last_name,address1,address2,address3,city,state,province,postal_code,country_code,gender,date_of_birth,alt_phone,email,security_phrase,comments from vicidial_list where lead_id='$lead_id[$i]';"; + if ($DB) {print "|$stmtA|\n";} + $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; + $sthArows=$sthA->rows; + if ($sthArows > 0) + { + @aryA = $sthA->fetchrow_array; + $vendor_lead_code[$i] = $aryA[0]; + $source_id[$i] = $aryA[1]; + $list_id[$i] = $aryA[2]; + $phone_code[$i] = $aryA[3]; + $phone_number[$i] = $aryA[4]; + $title[$i] = $aryA[5]; + $first_name[$i] = $aryA[6]; + $middle_initial[$i] = $aryA[7]; + $last_name[$i] = $aryA[8]; + $address1[$i] = $aryA[9]; + $address2[$i] = $aryA[10]; + $address3[$i] = $aryA[11]; + $city[$i] = $aryA[12]; + $state[$i] = $aryA[13]; + $province[$i] = $aryA[14]; + $postal_code[$i] = $aryA[15]; + $country_code[$i] = $aryA[16]; + $gender[$i] = $aryA[17]; + $date_of_birth[$i] = $aryA[18]; + $alt_phone[$i] = $aryA[19]; + $email[$i] = $aryA[20]; + $security_phrase[$i] = $aryA[21]; + $comments[$i] = $aryA[22]; + } + $sthA->finish(); + + ### if there is a fronter, look for one in the xfer log by the xfercallid + if (length($xfercallid > 0)) + { + $stmtA = "select user from vicidial_xfer_log where xfercallid='$xfercallid[$i]' limit 1;"; + $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtB ", $dbhA->errstr; + $sthArows=$sthA->rows; + if ($sthArows > 0) + { + @aryA = $sthA->fetchrow_array; + $fronter[$i] = $aryA[0]; + } + $sthA->finish(); + } + else + {$fronter[$i]='';} + + ### Insert a record into the vicidial_qc_list table + $stmtA = "INSERT INTO vicidial_qc_list SET "; + $stmtA .= "qc_import_date='$timestamp',"; + $stmtA .= "qc_stage='NEW',"; + $stmtA .= "call_date='$call_date[$i]',"; + $stmtA .= "vicidial_id='$vicidial_id[$i]',"; + $stmtA .= "campaign_group_id='$campaign_id[$i]',"; + $stmtA .= "lead_id='$lead_id[$i]',"; + $stmtA .= "list_id='$list_id[$i]',"; + $stmtA .= "length_in_sec='$length_in_sec[$i]',"; + $stmtA .= "status='$status[$i]',"; + $stmtA .= "call_type='$call_type[$i]',"; + $stmtA .= "term_reason='$term_reason[$i]',"; + $stmtA .= "qc_user='VDQC',"; + $stmtA .= "user='$user[$i]',"; + $stmtA .= "user_group='$user_group[$i]',"; + $stmtA .= "fronter='$fronter[$i]',"; + $stmtA .= "vendor_lead_code='$vendor_lead_code[$i]',"; + $stmtA .= "source_id='$source_id[$i]',"; + $stmtA .= "phone_code='$phone_code[$i]',"; + $stmtA .= "phone_number='$phone_number[$i]',"; + $stmtA .= "title='$title[$i]',"; + $stmtA .= "first_name='$first_name[$i]',"; + $stmtA .= "middle_initial='$middle_initial[$i]',"; + $stmtA .= "last_name='$last_name[$i]',"; + $stmtA .= "address1='$address1[$i]',"; + $stmtA .= "address2='$address2[$i]',"; + $stmtA .= "address3='$address3[$i]',"; + $stmtA .= "city='$city[$i]',"; + $stmtA .= "state='$state[$i]',"; + $stmtA .= "province='$province[$i]',"; + $stmtA .= "postal_code='$postal_code[$i]',"; + $stmtA .= "country_code='$country_code[$i]',"; + $stmtA .= "gender='$gender[$i]',"; + $stmtA .= "date_of_birth='$date_of_birth[$i]',"; + $stmtA .= "alt_phone='$alt_phone[$i]',"; + $stmtA .= "email='$email[$i]',"; + $stmtA .= "security_phrase='$security_phrase[$i]',"; + $stmtA .= "comments='$comments[$i]'"; + $stmtA .= ";"; + $affected_rows = $dbhA->do($stmtA); + $inserted = ($inserted + $affected_rows); + } + $i++; + } +if ($DB) {print "Records Inserted: $inserted out of $i\n";} + +$stmtA = "UPDATE system_settings SET qc_last_pull_time = '$qc_this_pull_time';"; +$affected_rows = $dbhA->do($stmtA); +if ($DB) {print "system_settings update: $qc_this_pull_time\n";} + +if ($DB) {print "DONE\n";} + +exit; + diff --git a/agc_2-X/trunk/docs/QC_PROCESS.txt b/agc_2-X/trunk/docs/QC_PROCESS.txt index ad6e7464..807bccb2 100644 --- a/agc_2-X/trunk/docs/QC_PROCESS.txt +++ b/agc_2-X/trunk/docs/QC_PROCESS.txt @@ -1,212 +1,251 @@ -QC(Quality Control) process flow 2008-01-03 - -** THIS QC FUNCTIONALITY PROSESS IS PLANNED FOR THE 2.0.5 RELEASE ** - -This will outline the process I have thought through for adding a Quality Assurance(QA) or Quality Control(QC) process to the VICIDIAL system. As the needs have changed for sponsor client and VICIDIAL has evolved since this functionality was first put into the planning stages, there have been several changes to how the QC process is going to be built. The objective is to add the following QC features to make VICIDIAL a more well-rounded product: -- ability to define which statuses are to be able to be QCd per campaign and inbound group(queue) -- ability to give agents permission to QC records for their allowable campaigns/inbound groups -- ability to log all access and changes to QCd records -- creation of some basic reports on QC activity - - - -The back-end process will work like this: -- ADMIN_keepalive_ALL.pl script will look for the 'Q' in the keepalive definition in /etc/astguiclient.conf file. If it is set, it will trigger a script to gather the QC records every five minutes(with a 15 second delay) since the last QC gathering as defined in the system_settings table qc_last_pull_time field(which is populated with the START time of the last QC-pull run). The time interval for this might be made configurable. -- There will also be an optional method of pulling QC records available to the QC managers that enables them to specify a date range to pull and insert records -- Selected records from the vicidial_list table (keyed on the the vicidial_log and vicidial_closer_log tables) will be taken and inserted into the qc_vicidial_list_original table. -- QC agents are then able to run their process starting with the earliest records for their selected campaign/inbound groups -- After QC agents have PASSed, FINISHed and COMMITted the QC records, then they can be exported - - - - -The QC agent will login to the new qc.php screen within the agc web directory. They will then have a screen very similar to the vicidial.php login screen(but in a different color) that will have a user/pass to fill in. Then when they login they will see a green screen similar to the vicidial.php inbound(CLOSER-type) screen that will show them their allowable qc inbound-groups and campaigns. The agent will then choose which in-groups and campaigns that they want to QC the records for and then they will submit and they will be logged-in to the QC system. - -Upon login, they will be able to see the count of QC-able records and they can click on a link to bring up the next record to be QCd. - -Upon clicking on a link, the qc.php application will insert a record into the qc_vicidial_list to keep track of changes and other information on the qc record session. - -The SCRIPTS tab and web form will both function exactly as they do in the vicidial.php application, with the exception that there will be added qc_web_form_address and qc_script options for both campaigns and inbound groups. There will also be an option to have any of these launched upon a new record appearing on the QC agent's screen. - -The qc.php user interface will be using AJAX as a method to bring up records and keep track of QC-agent activity and performance. - - -Each qc_user_level will have different permissions for the qc system: -1- modify nothing -2- modify nothing but status -3- modify everything -4- can check records of other QC agents -5- can view stats on qc system -6- can view finished and non-committed records and alter them -7- Manager level (can do anything including delete QC records) - -The qc_stage is a status within QC that tells what is going on with the record: -NONE - record has never been QCd -LOCK_1 - a QC agent is reviewing the record -PASS - QC agent has passed the record -LOCK_2 - a QC agent is reviewing the record for possible finishing -FINISH - record is ready to be processed -COMMIT - QC record is committed to the system and cannot be modified by anyone -DEAD - QC record is old and present for logs only, newer record has taken it's place - - -The Database Changes: - -# This table contains the original lead information before changes - CREATE TABLE qc_vicidial_list_original ( -qc_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, -qc_import_date DATETIME, -call_date DATETIME, -log_id VARCHAR(20) UNIQUE NOT NULL, -campaign_group_id VARCHAR(20), -modify_date TIMESTAMP, -status VARCHAR(6), -user VARCHAR(20), -closer VARCHAR(20), -vendor_lead_code VARCHAR(20), -source_id VARCHAR(50), -list_id BIGINT(14) UNSIGNED, -phone_code VARCHAR(10), -phone_number VARCHAR(12), -title VARCHAR(4), -first_name VARCHAR(30), -middle_initial VARCHAR(1), -last_name VARCHAR(30), -address1 VARCHAR(100), -address2 VARCHAR(100), -address3 VARCHAR(100), -city VARCHAR(50), -state VARCHAR(2), -province VARCHAR(50), -postal_code VARCHAR(10), -country_code VARCHAR(3), -gender ENUM('M','F','U') default 'U', -date_of_birth DATE, -alt_phone VARCHAR(12), -email VARCHAR(70), -security_phrase VARCHAR(100), -comments VARCHAR(255), -); - -# This table contains the updated QC records - CREATE TABLE qc_vicidial_list ( -qc_list_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, -qc_id INT(9) UNSIGNED NOT NULL, -lead_id INT(9) UNSIGNED NOT NULL, -log_id VARCHAR(20) NOT NULL, -modify_date TIMESTAMP, -status VARCHAR(6), -qc_status VARCHAR(6), -qc_date DATETIME, -qc_length_in_sec SMALLINT(5) UNSIGNED default '0', -qc_verify_date DATETIME, -qc_verify_length_in_sec SMALLINT(5) UNSIGNED default '0', -qc_comments TEXT, -qc_stage VARCHAR(6), -qc_user VARCHAR(20), -qc_verify_user VARCHAR(20), -qc_code VARCHAR(8), -qc_changed ENUM('0','1') default '0', -user VARCHAR(20), -closer VARCHAR(20), -vendor_lead_code VARCHAR(20), -source_id VARCHAR(50), -list_id BIGINT(14) UNSIGNED, -phone_code VARCHAR(10), -phone_number VARCHAR(12), -title VARCHAR(4), -first_name VARCHAR(30), -middle_initial VARCHAR(1), -last_name VARCHAR(30), -address1 VARCHAR(100), -address2 VARCHAR(100), -address3 VARCHAR(100), -city VARCHAR(50), -state VARCHAR(2), -province VARCHAR(50), -postal_code VARCHAR(10), -country_code VARCHAR(3), -gender ENUM('M','F','U') default 'U', -date_of_birth DATE, -alt_phone VARCHAR(12), -email VARCHAR(70), -security_phrase VARCHAR(100), -comments VARCHAR(255), -index (qc_id), -index (lead_id), -index (original_id), -index (phone_number), -index (status), -index (qc_stage) -); - -# This table contains the session information for qc_agents - CREATE TABLE qc_agent_sessions ( -qc_session_id INT(9) UNSIGNED PRIMARY KEY NOT NULL, -user VARCHAR(20), -qc_user_level INT(2) default '0', -status ENUM('READY','INQC','PAUSED') default 'PAUSED', -qc_id INT(9) UNSIGNED NOT NULL, -lead_id INT(9) UNSIGNED NOT NULL, -selected_inbound_groups TEXT, -selected_campaigns TEXT, -qc_records_today SMALLINT(5) UNSIGNED default '0', -login_time DATETIME, -last_action_time DATETIME, -index(user), -index (last_action_time) -); - -# For ability to restrict statuses by user_level per campaign - CREATE TABLE qc_allowed_statuses ( -status VARCHAR(6) PRIMARY KEY NOT NULL, -qc_user_level INT(2) default '0', -campaign_group_id VARCHAR(20) -); - -# For the inbound groups table, some fields will need to be added to the vicidial_campaigns table: -ALTER TABLE vicidial_inbound_groups ADD qc_enabled ENUM('Y','N') default 'N'; -ALTER TABLE vicidial_inbound_groups ADD qc_statuses TEXT; -ALTER TABLE vicidial_inbound_groups ADD qc_web_form_address VARCHAR(255); -ALTER TABLE vicidial_inbound_groups ADD qc_script VARCHAR(10); -ALTER TABLE vicidial_inbound_groups ADD qc_get_record_launch ENUM('NONE','SCRIPT','WEBFORM','QCSCRIPT','QCWEBFORM') default 'NONE'; - -ALTER TABLE vicidial_campaigns ADD qc_get_record_launch ENUM('NONE','SCRIPT','WEBFORM','QCSCRIPT','QCWEBFORM') default 'NONE'; - -ALTER TABLE system_settings ADD qc_last_pull_time DATETIME; - - - - - - - - - -# qc codes to be used for statistics - CREATE TABLE vicidial_qc_codes ( -code VARCHAR(8) PRIMARY KEY NOT NULL, -code_name VARCHAR(30) -); - -ALTER TABLE vicidial_campaigns ADD qc_web_form_address VARCHAR(255); -ALTER TABLE vicidial_campaigns ADD qc_script VARCHAR(10); - -# For the campaigns table, some fields will need to be added to the vicidial_campaigns table: -ALTER TABLE vicidial_campaigns ADD qc_enabled ENUM('Y','N') default 'N'; -ALTER TABLE vicidial_campaigns ADD qc_statuses TEXT; -ALTER TABLE vicidial_campaigns ADD qc_lists TEXT; -ALTER TABLE vicidial_campaigns ADD campaign_shift_start_time VARCHAR(4) default '0900'; -ALTER TABLE vicidial_campaigns ADD campaign_shift_length VARCHAR(5) default '16:00'; -ALTER TABLE vicidial_campaigns ADD campaign_day_start_time VARCHAR(4) default '0100'; - -# For the in-groups/campaigns QC permissions, some fields will need to be added to the vicidial_user_groups table: -ALTER TABLE vicidial_user_groups ADD qc_allowed_campaigns TEXT; -ALTER TABLE vicidial_user_groups ADD qc_allowed_inbound_groups TEXT; - -# For the user QC permissions, some fields will need to be added to the vicidial_users table: -ALTER TABLE vicidial_users ADD qc_enabled ENUM('1','0') default '0'; -ALTER TABLE vicidial_users ADD qc_user_level INT(2) default '1'; -ALTER TABLE vicidial_users ADD qc_pass ENUM('1','0') default '0'; -ALTER TABLE vicidial_users ADD qc_finish ENUM('1','0') default '0'; -ALTER TABLE vicidial_users ADD qc_commit ENUM('1','0') default '0'; +QC(Quality Control) process flow 2008-01-03 + +** THIS QC FUNCTIONALITY PROSESS IS PLANNED FOR THE 2.0.5 RELEASE AND IS CURRENTLY IN DEVELOPMENT ** + +This will outline the process I have thought through for adding a Quality Assurance(QA) or Quality Control(QC) process to the VICIDIAL system. As the needs have changed for sponsor client and VICIDIAL has evolved since this functionality was first put into the planning stages, there have been several changes to how the QC process is going to be built. The objective is to add the following QC features to make VICIDIAL a more well-rounded product: +- ability to define which statuses are to be able to be QCd per campaign and inbound group(queue) +- ability to give agents permission to QC records for their allowable campaigns/inbound groups +- ability to log all access and changes to QCd records +- creation of some basic reports on QC activity + + + +The back-end process will work like this: +- ADMIN_keepalive_ALL.pl script will look for the 'Q' in the keepalive definition in /etc/astguiclient.conf file. If it is set, it will trigger a script (QC_gather_records.pl) to gather the QC records every five minutes(with a 15 second delay) since the last QC gathering as defined in the system_settings table qc_last_pull_time field(which is populated with four-hours-before the START time of the last QC-pull run to make sure to catch all potential long calls that may have ended). The time interval for this might be made configurable. +- There will also be an optional method of pulling QC records available to the QC managers that enables them to specify a date range to pull and insert records +- Selected records from the vicidial_list table (keyed on the the vicidial_log and vicidial_closer_log tables) will be taken and inserted into the vicidial_qc_list table. +- QC agents are then able to run their process starting with the earliest records for their selected campaign/inbound groups +- After QC agents have PASSed, FINISHed and COMMITted the QC records, then they can be exported + + + +The QC agent will login to the new qc.php screen within the agc web directory. They will then have a screen very similar to the vicidial.php login screen(but in a different color) that will have a user/pass to fill in. Then when they login the QC agents with level of 1-3 will see a green screen similar to the vicidial.php inbound(CLOSER-type) screen that will show them their allowable qc inbound-groups and campaigns. The agent will then choose which in-groups and campaigns that they want to QC the records for and then they will submit and they will be logged-in to the QC system. QC agents with a qc_level of 4-5 can select to review first level reccords, review all 2nd level records, review only 2nd level changed-status or review 2nd level same-status records. QC agents with 6-7 qc_level can also have the option of entering a management screen showing more information on the QC system including committing QC records and links to QC reports. + +Upon login, they will be able to see the count of QC-able records and they can click on a link to bring up the next record to be QCd. + +Upon clicking on a link, the qc.php application will insert a record into the vicidial_qc_log to keep track of changes and other information on the qc record session. The customer and original call data will remain unaltered in the vicidial_qc_list table. + +The SCRIPTS tab and web form will both function exactly as they do in the vicidial.php application, with the exception that there will be added qc_web_form_address and qc_script options for both campaigns and inbound groups. There will also be an option to have any of these launched upon a new record appearing on the QC agent's screen. + +The qc.php user interface will be using AJAX as a method to bring up records and keep track of QC-agent activity and performance. + +An optional element is for a small audio frame be opened with each new customer record that will have an audio recording of the call that the QC agent can listen to. At this point in time, the best candidate for this is the Flourish Flash-based application(http://flourishplayer.sourceforge.net/) It is open source under a BSD-like license and is based on Adobe Flash, which currently seems to be much more lightweight and provides a much lower barrier to entry on most platforms than JAVA does. + + + +Each qc_user_level will have different permissions for the qc system: +1- modify nothing +2- modify nothing but status +3- modify everything +4- can check records of other QC agents +5- can view stats on qc system and unlock locked records from first level QC agents +6- can view finished and non-committed records and alter them and unlock locked records from first and second level QC agents +7- Manager level (can do anything including delete QC records) + +The the QC agent roles: +FIRST - first level review +SECOND_ALL - second level review all records +SECOND_CHANGED - second level review only changed-status records +SECOND_PASSED - second level review only unchanged-status records +THIRD - third level review and commit/clear +MANAGER - manager level actions + +The qc_stage is a record status within QC that tells what is going on with the record: +NEW - record has never been QCd +LOCK_1 - a QC agent is reviewing the record +PASS - QC agent has passed the record +LOCK_2 - a QC agent is reviewing the record for possible finishing +FINISH - record is ready to be processed +COMMIT - QC record is committed to the system and cannot be modified by anyone +DEAD - QC record is old and present for logs only, newer record has taken it's place + + +The Database Changes: +!!! IMPORTANT !!! +THESE ARE FOR REFERENCE ONLY, DO NOT RUN THEM!!! + +# This table contains the live session information for qc_agents + CREATE TABLE qc_agent_sessions ( +qc_session_id INT(9) UNSIGNED PRIMARY KEY NOT NULL, +user VARCHAR(20), +qc_user_level INT(2) default '0', +qc_role VARCHAR(20), +status ENUM('READY','INQC','PAUSED') default 'PAUSED', +qc_id INT(9) UNSIGNED NOT NULL, +lead_id INT(9) UNSIGNED NOT NULL, +selected_campaigns_groups TEXT, +qc_records_today SMALLINT(5) UNSIGNED default '0', +login_time DATETIME, +last_action_time DATETIME, +index (user), +index (last_action_time) +); + +# This table contains the stats information for qc_agents for today + CREATE TABLE qc_agent_stats ( +user VARCHAR(20), +campaign_group_id VARCHAR(20), +qc_records_today SMALLINT(5) UNSIGNED default '0', +last_record_time DATETIME, +last_record_finish DATETIME, +index (user), +index (campaign_group_id) +); + +# This table contains the log information for qc_agent logins +CREATE TABLE vicidial_user_qc_log ( +user VARCHAR(20), +event_date DATETIME, +selected_campaigns_groups TEXT, +index (user), +index (event_date) +); + +# For ability to restrict statuses by user_level per campaign/in-group + CREATE TABLE qc_allowed_statuses ( +status VARCHAR(6) PRIMARY KEY NOT NULL, +qc_user_level INT(2) default '0', +campaign_group_id VARCHAR(20) +); + +# This table contains the original lead and log information before changes + CREATE TABLE vicidial_qc_list ( +qc_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, +qc_import_date DATETIME, +qc_stage VARCHAR(6) default 'NEW', +call_date DATETIME, +vicidial_id VARCHAR(20) UNIQUE NOT NULL, +campaign_group_id VARCHAR(20), +lead_id INT(9) UNSIGNED NOT NULL, +list_id BIGINT(14) UNSIGNED, +length_in_sec SMALLINT(5) UNSIGNED default '0', +status VARCHAR(6), +call_type VARCHAR(20), +term_reason ENUM('CALLER','AGENT','QUEUETIMEOUT','ABANDON','AFTERHOURS','NONE') default 'NONE', +modify_date TIMESTAMP, +qc_user VARCHAR(20), +user VARCHAR(20), +user_group VARCHAR(20), +fronter VARCHAR(20), +vendor_lead_code VARCHAR(20), +source_id VARCHAR(50), +phone_code VARCHAR(10), +phone_number VARCHAR(12), +title VARCHAR(4), +first_name VARCHAR(30), +middle_initial VARCHAR(1), +last_name VARCHAR(30), +address1 VARCHAR(100), +address2 VARCHAR(100), +address3 VARCHAR(100), +city VARCHAR(50), +state VARCHAR(2), +province VARCHAR(50), +postal_code VARCHAR(10), +country_code VARCHAR(3), +gender ENUM('M','F','U') default 'U', +date_of_birth DATE, +alt_phone VARCHAR(12), +email VARCHAR(70), +security_phrase VARCHAR(100), +comments VARCHAR(255), +index (vicidial_id), +index (lead_id), +index (phone_number) +); + +# This table contains the updated QC records + CREATE TABLE vicidial_qc_log ( +qc_log_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, +qc_id INT(9) UNSIGNED NOT NULL, +qc_stage VARCHAR(6), +modify_date TIMESTAMP, +qc_user VARCHAR(20), +qc_status VARCHAR(6), +qc_code VARCHAR(8), +qc_date DATETIME, +qc_length_in_sec SMALLINT(5) UNSIGNED default '0', +qc_comments TEXT, +qc_altered ENUM('0','1') default '0', +status VARCHAR(6), +vendor_lead_code VARCHAR(20), +phone_code VARCHAR(10), +phone_number VARCHAR(12), +title VARCHAR(4), +first_name VARCHAR(30), +middle_initial VARCHAR(1), +last_name VARCHAR(30), +address1 VARCHAR(100), +address2 VARCHAR(100), +address3 VARCHAR(100), +city VARCHAR(50), +state VARCHAR(2), +province VARCHAR(50), +postal_code VARCHAR(10), +country_code VARCHAR(3), +gender ENUM('M','F','U') default 'U', +date_of_birth DATE, +alt_phone VARCHAR(12), +email VARCHAR(70), +security_phrase VARCHAR(100), +comments VARCHAR(255), +index (qc_id), +index (phone_number), +index (qc_stage) +); + + + + + + + + + +# Changes committed to upgrade sql file: + +# For the inbound groups table, some fields will need to be added to the vicidial_campaigns table: +ALTER TABLE vicidial_inbound_groups ADD qc_enabled ENUM('Y','N') default 'N'; +ALTER TABLE vicidial_inbound_groups ADD qc_statuses TEXT; +ALTER TABLE vicidial_inbound_groups ADD qc_shift_id VARCHAR(20) default '24HRMIDNIGHT'; +ALTER TABLE vicidial_inbound_groups ADD qc_get_record_launch ENUM('NONE','SCRIPT','WEBFORM','QCSCRIPT','QCWEBFORM') default 'NONE'; +ALTER TABLE vicidial_inbound_groups ADD qc_show_recording ENUM('Y','N') default 'Y'; +ALTER TABLE vicidial_inbound_groups ADD qc_web_form_address VARCHAR(255); +ALTER TABLE vicidial_inbound_groups ADD qc_script VARCHAR(10); + +# Alter some earlier defined fields and populate with default values +ALTER TABLE vicidial_campaigns CHANGE campaign_shift_start_time qc_shift_id VARCHAR(20) default '24HRMIDNIGHT'; +ALTER TABLE vicidial_campaigns CHANGE campaign_shift_length qc_get_record_launch ENUM('NONE','SCRIPT','WEBFORM','QCSCRIPT','QCWEBFORM') default 'NONE'; +ALTER TABLE vicidial_campaigns CHANGE campaign_day_start_time qc_show_recording ENUM('Y','N') default 'Y'; +UPDATE vicidial_campaigns SET qc_shift_id='24HRMIDNIGHT'; +UPDATE vicidial_campaigns SET qc_get_record_launch='NONE'; +UPDATE vicidial_campaigns SET qc_show_recording='Y'; + +ALTER TABLE system_settings ADD qc_last_pull_time DATETIME; + +# qc codes to be used for statistics + CREATE TABLE vicidial_qc_codes ( +code VARCHAR(8) PRIMARY KEY NOT NULL, +code_name VARCHAR(30) +); + +# For the campaigns table, some fields will need to be added to the vicidial_campaigns table: +ALTER TABLE vicidial_campaigns ADD qc_enabled ENUM('Y','N') default 'N'; +ALTER TABLE vicidial_campaigns ADD qc_statuses TEXT; +ALTER TABLE vicidial_campaigns ADD qc_lists TEXT; +ALTER TABLE vicidial_campaigns ADD campaign_shift_start_time VARCHAR(4) default '0900'; +ALTER TABLE vicidial_campaigns ADD campaign_shift_length VARCHAR(5) default '16:00'; +ALTER TABLE vicidial_campaigns ADD campaign_day_start_time VARCHAR(4) default '0100'; +ALTER TABLE vicidial_campaigns ADD qc_web_form_address VARCHAR(255); +ALTER TABLE vicidial_campaigns ADD qc_script VARCHAR(10); + +# For the in-groups/campaigns QC permissions, some fields will need to be added to the vicidial_user_groups table: +ALTER TABLE vicidial_user_groups ADD qc_allowed_campaigns TEXT; +ALTER TABLE vicidial_user_groups ADD qc_allowed_inbound_groups TEXT; + +# For the user QC permissions, some fields will need to be added to the vicidial_users table: +ALTER TABLE vicidial_users ADD qc_enabled ENUM('1','0') default '0'; +ALTER TABLE vicidial_users ADD qc_user_level INT(2) default '1'; +ALTER TABLE vicidial_users ADD qc_pass ENUM('1','0') default '0'; +ALTER TABLE vicidial_users ADD qc_finish ENUM('1','0') default '0'; +ALTER TABLE vicidial_users ADD qc_commit ENUM('1','0') default '0'; diff --git a/agc_2-X/trunk/docs/SCRATCH_INSTALL.txt b/agc_2-X/trunk/docs/SCRATCH_INSTALL.txt index fcc643aa..8dc60cb2 100644 --- a/agc_2-X/trunk/docs/SCRATCH_INSTALL.txt +++ b/agc_2-X/trunk/docs/SCRATCH_INSTALL.txt @@ -1,3092 +1,3116 @@ -Asterisk/astguiclient install from scratch. v.2.0.4 2007-12-03 - By the VICIDIAL group info@vicidial.com - -**** IMPORTANT - In order for vicidial/astguiclient to function correctly please -read the REQUIREMENTS.txt for a minimum requirements list. *** - -End-user Manuals for Agents and Managers are available from http://www.eflo.net - - -This document is meant to be a very in-depth step-by-step explanation of -installing the Asterisk open-source PBX on a Linux system and also installing -the astGUIclient suite. The instructions will assume starting from nothing and -will try to give several side step instructions to account for some differences -in choices of hardware and software. - -The actual installation that I am doing as I write these instructions will be on -the following hardware: - - - Pentium 3 500MHz - - Intel motherboard D815BN - - 256MB PC133 RAM - - 80GB IBM deskstar 7200RPM Hard Drive - - Digium Wildcard Single Span T1 Card T100P - - 2U rackmount case with 250W power supply - - Phone hardware will be a Grandstream BT102 and a Sipura SPA-2000 because they -are so cheap and readily available - -All of these parts, aside from the Digium card and the two SIP VOIP devices, -were purchased from ebay and the entire package(with the two VOIP devices and -all server hardware included) cost me about $1100 to put together including the -phones and Digium adapter. - -We have many other Asterisk servers at our main office, but this one can be -experimented with easily because it was so cheap to make and has a relatively -small capacity when compared with a multi-processor server with a quad span T1 -card. - -This is our test Asterisk server and functions well for a dozen or so extensions -in use if it were to be used in production. A size that is optimal for many -small offices operating with a fractional data/voice T1 for instance. - -For hardware you can use almost any Pentium-class processor(PII, PIII, Athlon, -Xeon, etc), and you can use any digium telco interface card. Both of these -choices will determine what the capacity of your Asterisk server will be. If you -want to do simple IVR or conference calling and a few extensions, then a PIII -with a single Digium T1 card will work just fine for you. If you want to use the -VICIDIAL application, you will want to get as high-powered of a machine as you -can afford and get a digium quad-span T1 card. - -The following is assumed for these installation procedures: -- You have access to a CD burner and 3 blank CDs -- You have some sort of broadband internet connection -- You understand basic linux commands and can use a file editor like vi -- You have all of the necessary hardware: - - a pentium-class computer - - a digium telco interface card with appropriate telco lines - - at least 1 SIP VOIP device - - a Local Area Network(LAN) with extra ports enough for the new server -and the number of phones you want - - - - - -PHASE 1: INSTALLING AN OPERATING SYSTEM - - -This installation will be using Slackware 11 for the linux distribution, -Slackware 12.X will also work with these instructions. There are several easier -linux distributions and there are others that are more popular, but Slackware is -a nice non-commercial distro that has been around for a long time and proven -itself to be a very uncluttered and stable platform for development. - -1. Go to http://www.ultimatebootcd.com/ , download the latest bootcd and -burn it to a CD. This will be needed to partition the hard drive prior to -installation of Slackware linux. The latest version as of this writing is 4.1 -(If you have problems with your hardware booting some of the utilities with 4.1 -I suggest trying 1.7, that version has older utilities, but still gets the job -done and works on every machine I've tried it on). - -2. Insert the ultimatebootcd you just burned into your CDROM drive and boot -to it. You will select "filesystem utilities" and then "XFDISK" - -3. Select any old partitions and delete them and then create 2 new -partitions: - - 70000 MB, select yes to validate, change partition type to "Linux Native" - - 3332 MB, select yes to validate, change partition type to "Linux Swap" - - press F3 to exit and let it do it's thing, this will take an hour or so. - -4. Go to http://www.slackware.com/getslack/ to download Slackware linux. -The most recent release as of this writing is 12.0. This release fits on 3 CDs -or 1 DVD. Download both installation disks from any close server listed on the -download page and burn them both to CDs. - -5. Insert Disk 1 of the Slackware installation CD and boot your computer. -If you have a simple computer with just an IDE drive just hit enter at the boot: -prompt. If you have other hard drive adapters(SCSI/RAID/SATA/etc..) you will -need to look at the Slackware installation help page to determine what boot -image you will need to use to install Slackware correctly. - -6. Login as root and type "setup" at the prompt to go to the setup menu. -7. Go to ADDSWAP and hit Enter -8. Select the swap partition you just created and hit Yes, The swap -partition will then be formatted -9. Select the root partiton you just created as Linux Native and hit -Select, then select "ext3" for the file system, then select 4096 for the inodes -and the root partition will then be formatted -10. Select "Install Slackware from a CD" and hit OK -11. Select "auto" installation and hit OK -12. Select every package except for "KDEI" and hit OK -13. Select "full" installation and hit OK -14. Insert the next Slackware installation disk (disk 2) when it prompts -you, and hit OK to continue -15. Now you will select the boot kernel that you will use from now on. If -you have a simple system with IDE drives you can probably just select "skip" and -go to the next step. If not then you should probably select "cdrom" and select -the kernel from the list that you selected to boot into the installation. -16. You can make a bootdisk if you like, but you don't have to. -17. For Modem you can select "no modem" and hit OK to continue -18. Enable hotplug, hit Yes to continue -19. Install lilo "simple" and hit OK to continue -20. lilo frame buffer console 640x480 is safe choice if you're not sure -21. Optional Lilo append, leave blank and hit OK to continue -22. Lilo destination, I usually choose MBR but root works most of the time -23. Mouse, select the mouse type that you have hooked up, or select ps/2 -24. Load GPM at boot time, Hit Yes to continue -25. select Yes to configure your network -26. Hostname, we are typing "phone" -27. network, we are typing our local domain name -28. IP address, we are selecting Static IP, here's what we enter for -network, you should enter a network setup that will work with your local LAN: - - IP address: 10.10.10.15 - - subnet: 255.255.0.0 - - gateway: 10.10.10.1 - - name server: 10.10.10.1 -29. Accept your network settings -30. Startup services to run, change nothing and select OK to continue -31. select NO for custom screen fonts -32. Hardware clock to UTC, select NO -33. Select your time zone and hit OK -34. I usually select gnome as the window manager, even though you won't be -using it on this machine -35. Select Yes to enter a root password. type something that you will -remember. -36. Setup of Slackware Linux is complete, hit OK and EXIT then press -CTRL-ALT-DELETE to reboot your computer - - - - - -PHASE 2: COMPILING A CUSTOM LINUX KERNEL - - -From this step on you should be able to continue the installation remotely -although it is wise to at least have quick access to the machine if something -goes wrong. - -To connect remotely through SSH on linux type "slogin serveripaddress" or to use -Windows to connect you can use a piece of free software called putty available -here: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html -Also, for windows you can use SSH file transferring(SFTP) with a program called -filezilla: http://filezilla.sourceforge.net/ - -This is an optional step if your linux system is running, but compiling your own -custom kernel is always a way to optimize your system for the hardware you have -installed or a way to remove the unnecesary modules that are in the default -kernel. You will definately want to build your own kernel if you have a multi -processor machine. If you are new to Linux you probably do not want to do this. - -If you are using a newer Digium Octasic-based echo-cancellation quad T1/E1 card -then you need to use a 2.6 Linux kernel in order to use the echo-cancellation -functionality of the card. - -If you want to compile a 2.6 kernel then start with OPTION 1, otherwise to -compile the 2.4 kernel that comes with Slackware(2.4.33) start with OPTION 2: - -OPTION 1: compile Linux kernel 2.6.17 *RECOMMENDED* - -1. cd /usr/src -2. wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.11.tar.gz -3. gunzip linux-2.6.17.11.tar.gz -4. tar xvf linux-2.6.17.11.tar -5. mv -f /usr/src/linux /usr/src/linux-old -6. ln -s /usr/src/linux-2.6.17.11 /usr/src/linux -7. cd linux -8. make mrproper # prep for kernel assembly -9. make menuconfig # launch configuration menu app - (this part is very dependant upon your own hardware) - (what is mentioned below are only changes beyond what is selected by default) - - Block Layer ---> - -> IO Scheduler - this should be set to CFQ if you do not have a hardware caching controller - if you have a hardware caching controller DEADLINE or NO-OP are the best - choices, if you have a battery backuped caching controller that is set to write-back you should use NO-OP. - Processor Type and Features ---> - ->Symmetric multi-processing support - (if you have multiple processors or a Dual-core or HT enabled) - ->High Memory Support - (if you have more than 900MB of System RAM move upto 4GB) - ->Timer frequency (1000 HZ) - (change to 1000Hz if using ztdummy for timer on pre 2.6.17 kernel) - ->[*]Tickless System (enable UNLESS using ztdummy on pre 2.6.17 kernel) - ->[*]Enable Kernel irq balancing - ->Preemption Model (No Forced Preemption (Server)) - (^This one is very important!!!) - Power management options (ACPI, APM) ---> - ->ACPI (Advanced Configuration and Power Interface) Support - (enable all down to Processor and thermal zone) - Bus options (PCI, PCMCIA, EISA, MCA, ISA) ---> - ->[*] PCI Express support - (if using Sangoma PCI Express card) - Networking ---> - Amateur Radio support ---> - <*> Amateur Radio AX.25 Level 2 protocol - [*] AX.25 DAMA Slave support - <*> Amateur Radio NET/ROM protocol - <*> Amateur Radio X.25 PLP (Rose) - (all needed for new Digium Octasic drivers) - Device Drivers ---> - ATA/ATAPI/MFM/RLL support ---> - <*> SCSI emulation support - (needed for SATA drives, also further down check chipset drivers) - SCSI device support ---> - <*> RAID Transport Class - (needed if you are using a RAID) - SCSI low-level drivers ---> - <*> Serial ATA (SATA) support - (required if using SATA drives) - (if using a SCSI RAID card pick correct driver here) - Multi-device support (RAID and LVM) ---> - (select proper RAID types if using Linux RAID) - Network device support ---> - Ethernet (10 or 100Mbit) ---> - Ethernet (1000 Mbit) ---> - (select proper drivers for the eype of network card you have) - Character devices ---> - <*> Enhanced Real Time Clock Support - (double-check that this is enabled, very important) - Real Time Clock ---> - <*> RTC class - (double-check that this is enabled, very important) - File systems ---> - <*> Ext3 journalling file system support - (important if using ext3 filesystem) - pseudo filesystems ---> - <*> Virtual memory file system support - (this is usually checked anyway but mandatory for recording to RAM[tmpfs]) - Library routines ---> - <*> CRC-CCITT functions - <*> CRC16 functions - <*> CRC32c (Castagnoli, et al) Cyclic Redundancy-Check - (important for new Digium Octasic drivers) - EXIT AND SAVE YOUR CONFIGURATION - -10. make clean # clean up the kernel build areas -11. make bzImage # create a kernel bzImage -12. make modules # build the modules into the image -13. make modules_install # install kernel modules -14. cp arch/i386/boot/bzImage /boot/bzImage-XXXX # copy image - (put whatever you want in XXXX, that is your new kernel name) -15. cp System.map /boot/System.map-XXXX # copy system map -16. mv -f /boot/System.map /boot/System.map-orig -17. ln -s /boot/System.map-XXXX /boot/System.map # symlink map -18. vi /etc/lilo.conf # edit the lilo boot config file - image=/boot/bzImage-XXXX # add the new image in above- - label=test-XXXX # the previous one - root=/dev/hda1 # device of root partition - read-only -19. /sbin/lilo # run the lilo reload script -20. vi /etc/fstab # to include the following line for recording to RAM - tmpfs /var/spool/asterisk/monitor tmpfs rw 0 0 -21. shutdown -r 0 # reboot machine and hope it worked - -OPTION 2: compile Linux kernel 2.4.33.3 (not recommended, very old) - -1. cd /usr/src/linux # move to your linux source directory -2. cp .config config.save # copy old config to a save file -3. make mrproper # prep for kernel assembly -4. make menuconfig # launch configuration menu app - (this part is very dependant upon your own hardware) - enable processor version # select the processor that you have - enable SMP # if more than 1 processor or Intel HT - enable high memory () # if more than 1GB of RAM - enable SCSI Multiple # if SCSI drives - enable SCSI devices AMI Megaraid # if SCSI Megaraid adapter - enable 3com network devices # if 3com network card - enable ext3 file system # for ext3 to work - enable all ACPI options # for SMP to work - enable Enhanced Real Time Clock Support in Character devices section - # for SMP to work - enable any other hardware specific options - exit and save configuration -5. make dep # build the kernel dependancies -6. make clean # clean up the kernel build areas -7. make bzImage # create a kernel bzImage -8. make modules # build the modules into the image -9. make modules_install # install kernel modules -10. # nothing# mkinitrd /boot/initrd-XXXXXX.img XXXXXX *not needed on Slackware* -11. cp arch/i386/boot/bzImage /boot/bzImage-XXXXXX # copy image - (put whatever you want in XXXXXX, that is your new kernel name) -12. cp System.map /boot/System.map-XXXXXXN # copy system map -13. mv -f /boot/System.map /boot/System.map-orig -14. ln -s /boot/System.map-XXXXXX /boot/System.map # symlink map -15. vi /etc/lilo.conf # edit the lilo boot config file - image=/boot/bzImage-XXXXXX # add the new image in above- - label=test-XXXXXX # the previous one - root=/dev/hda1 # device of root partition - read-only -16. /sbin/lilo # run the lilo reload script -17. shutdown -r 0 # reboot machine and hope it worked - - -After compiling your kernel you can run a few commands to verify that you are -running your new kernel and that devices are running as they are supposed to: - ps --info (will show you your linux kernel version and other info) - cat /proc/cpuinfo (will show you processor type and more than one if SMP) - top (will show you system memory) - - - - -PHASE 3: INSTALLING SOFTWARE BEFORE ASTERISK - -In this step we will be installing software that Asterisk and/or astGUIclient -needs to be able to function to its fullest ability. Not all of these software -packages are manditory to successfully install Asterisk and some of them can be -installed on other machines on your network like MySQL or Apache. But, in this -installation we are assuming that there are no other machines on our network to -help the Asterisk server, so it must have everything it needs installed locally. - - - -SUBPHASE 3.0: install new Gnu Make - -A new version of the "make" compilation application replaced the 4-year-old -version that most Linux distros(Including Slackware) use. This is only needed -if you will be building Asterisk from the 1.4 release tree. - - - wget http://mirrors.kernel.org/gnu/make/make-3.81.tar.gz - - gunzip make-3.81.tar.gz - - tar xvf make-3.81.tar - - cd make-3.81 - - ./configure - - make - - make install - - - -SUBPHASE 3.1: MySQL requirements - -You must at least have Mysql client installed on each VICIDIAL server, but you -only need one database server. - -MySQL is a fast database system that is very easy to integrate with any -application. You can either install the server on the local Asterisk system or -have one somewhere on your network. For our purposes, we are creating an Asterisk -installation that is self contained and needs no other local servers to operate, -so we will need to install mysql on this machine. -*REQUIRED and OPTIONAL* (only install MySQL server locally if you don't want to use an installation -on another machine, Mysql client is required on all VICIDIAL servers) -NOTE: a minimum of MySQL server 4.0.X is required - - Go to http://www.mysql.com/ and download the mysql package - - to install this directly on the command line type: - - cd /usr/local - - wget http://mirror.trouble-free.net/mysql_mirror/Downloads/MySQL-4.0/mysql-4.0.27.tar.gz - # http://mirror.trouble-free.net/mysql_mirror/Downloads/MySQL-5.0/mysql-5.0.45.tar.gz - - gunzip mysql-4.0.27.tar.gz - - tar xvf mysql-4.0.27.tar - - cd mysql-4.0.27 - - groupadd mysql - - useradd -g mysql mysql - - "./configure --prefix=/usr/local/mysql --enable-large-files --enable-shared=yes --with-readline" - **** If only MySQL client is needed for DBD::mysql then use this: - - "./configure --prefix=/usr/local/mysql --without-server --enable-shared=yes --with-readline" - **** If using version 5 tree MySQL client then use this: - - "./configure --prefix=/usr/local/mysql --without-server --enable-shared=yes --with-readline --enable-thread-safe-client" - - make - - make install - - scripts/mysql_install_db - - chown -R root /usr/local/mysql - - chown -R mysql /usr/local/mysql/var - - chgrp -R mysql /usr/local/mysql - - cp support-files/my-medium.cnf /etc/my.cnf - - /usr/local/mysql/bin/mysqld_safe --user=mysql --skip-name-resolve --skip-host-cache & - - ln -s /tmp/mysql.sock /var/run/mysql/mysql.sock - **** For some systems you may need to add the mysql/bin directory to your PATH: - - PATH=$PATH:$HOME/bin:/usr/local/mysql/bin/ - - export PATH - **** you may also want to add those two lines to your /root/.bash_profile file - **** For Mysql 5 tree only, you also may need to copy the libmysqlclient.so file to libs - - cp /usr/local/mysql-5.0.45/libmysql/.libs/libmysqlclient.so /usr/lib/ - - cp /usr/local/mysql-5.0.45/libmysql/.libs/libmysqlclient.so.15 /usr/lib/ - - you are done - - ** INSTALLATION NOTE ** - If you are having Linuxthreads problems upon onfigure, just execute the following command: - echo '/* Linuxthreads */' >> /usr/include/pthread.h - - ***** NOTE: if you will be using any of the DBI perl scripts: ***** - Every machine that you will be using the newer BDI perl scripts on will need - to have the perl modules DBI and DBD::mysql installed on them. To do this - you will also need to at least have the MySQL client installed on the server - (see above) then you will need to go to 'cpan' and "install DBI" and - "install DBD::mysql". You may need to "force install DBD::mysql" if the DBD - tests fail on your first try, but that is OK since the tests are not needed - - - -SUBPHASE 3.2: Installing Perl Modules - -NOTE - you can install ActiveState http://www.activestate.com perl which may -improve performance, but it is not required. Here's the source for ActiveState -Perl 5.8: (it's free) - http://downloads.activestate.com/ActivePerl/src/5.8/AP817_source.tgz -I hope to add the lengthy steps for installing it as your default perl on your -server but I need some time and a free machine to do that. - -cpan is the "Comprehensive Perl Archive Network". It's a mirrored archive of -most of the perl modules out there complete with a installation and management -command-line interface. Here's what you do to start it: -*REQUIRED* (needed for perl AGIs) - -1. perl -MCPAN -e shell # type in the command line -2. You will then go through CPAN setup, just hit ENTER for most prompts except -for the mirrors list, you will want to select at least 4 mirrors - - yes for manual configuration - - enter for the next 18 prompts - - for the "make install options" it's a good idea to add UNINST=1 - - enter for the next 4 prompts - - select your continent and country - - select a few cpan mirrors - - enter for the next 2 prompts -3. Once you see the cpan> prompt you can begin installing modules -4. If you've never installed cpan before you should probably install the -following modules first: (say YES if asked to install prerequisites) - - install MD5 - - install Digest::MD5 - - install Digest::SHA1 - - install readline (just hit Enter when it asks for operator) - - install Bundle::CPAN - - reload cpan -- then you can install other modules: - - install DBI - - force install DBD::mysql (must at least have mysqlclientlibs installed) - - install Net::Telnet - - install Time::HiRes - - install Net::Server - - install Switch - - install Unicode::Map (needed for super list loader Excel) - - install Jcode (needed for super list loader Excel) - - install Spreadsheet::WriteExcel (needed for super list loader Excel) - - install OLE::Storage_Lite (needed for super list loader Excel) - - install Proc::ProcessTable (needed for super list loader Excel) - - install IO::Scalar (needed for super list loader Excel) - - install Spreadsheet::ParseExcel (needed for super list loader Excel) -- if Spreadsheet::ParseExcel fails to install try running the following: - - force install Scalar::Util (this will enable weak references) - - install Spreadsheet::ParseExcel -- then quit cpan, you are done -5. Go to http://asterisk.gnuinter.net/ and download the asterisk-perl module -(backup link: http://downloads.vicidial.com/packages/asterisk-perl-0.08.tar.gz) -NOTE: Do NOT use the 0.09 version, it does not work with VICIDIAL - - to install this directly on the command line type: - - cd /usr/local - - wget http://asterisk.gnuinter.net/files/asterisk-perl-0.08.tar.gz - - gunzip asterisk-perl-0.08.tar.gz - - tar xvf asterisk-perl-0.08.tar - - cd asterisk-perl-0.08 - - perl Makefile.PL - - make all - - make install - - you are done - - - -SUBPHASE 3.3: Installing other utilities - -Sox is an audio utility that allows you to mix audio files together at their -start point into one file. it is necessary for Asterisk recordings that record -in and out as separate files -*REQUIRED* (needed for recording mixing) - -1. Go to http://sourceforge.net/projects/sox/ and download the sox package - - to install this directly on the command line type: - - cd /usr/local - - cd /usr/local - - wget http://easynews.dl.sourceforge.net/sourceforge/sox/sox-14.0.1.tar.gz - - gunzip sox-14.0.1.tar.gz - - tar xvf sox-14.0.1.tar - - cd sox-14.0.1 - - ./configure --disable-shared - - make (if alsa.o errors add --disable-alsa-dsp to configure and redo) - - make install - - you are done - - -LAME is an MP3 encoder used to convert audio files from WAV to MP3. We prefer GSM -usually, but some users have standardized on MP3 so they would need this utility -to be loaded to use that option. -*OPTIONAL* (only needed if you will be converting recordings to MP3) - -2. Go to http://lame.sourceforge.net/ and download the lame package - - to install this directly on the command line type: - - cd /usr/local - -wget http://easynews.dl.sourceforge.net/sourceforge/lame/lame-3.96.1.tar.gz - -gunzip lame-3.96.1.tar.gz - -tar xvf lame-3.96.1.tar - -cd lame-3.96.1 - -./configure - -make - -make install - - you are done - - - -Screen is a terminal emulator that allows you to run a process as command line -and be able to detach from them('Ctrl+a' then 'd') and log all output of the -terminal to a screenlog file if desired(add a '-L' to the launching command). -In our installations this is how we launch Asterisk upon startup and still have -the ability to log output and still attach to the screen that executed asterisk -originally. -*REQUIRED* *MANDITORY FOR VICIDIAL SERVERS* - -3. Go to http://www.gnu.org/software/screen/ and download the screen package - - to install this directly on the command line type: - - cd /usr/local - - wget http://ftp.gnu.org/gnu/screen/screen-4.0.2.tar.gz - or for older version: - - wget http://mirrors.kernel.org/gnu/screen/screen-3.9.15.tar.gz - - gunzip screen-4.0.2.tar.gz - - tar xvf screen-4.0.2.tar - - cd screen-4.0.2 - - ./configure - - make - - make install - - you are done - - -ttyload is a simple terminal application that shows the processor load in a -graphical time-based scrolling graph. We use it to view how loaded the system is -and it visualizes load spikes very well -*OPTIONAL* (only for obsessive admins like me) - -4. Go to http://www.daveltd.com/src/util/ttyload/ and download the ttyload -package - - to install this directly on the command line type: - - cd /usr/local - - wget http://www.daveltd.com/src/util/ttyload/ttyload-0.4.4.tar.gz - - gunzip ttyload-0.4.4.tar.gz - - tar xvf ttyload-0.4.4.tar - - cd ttyload-0.4.4 - - make - - ln -s /usr/local/ttyload-0.4.4/ttyload /usr/bin/ttyload - - you are done - - -ntpd is the network time protocol daemon that matches the time on your machine -with the time of a master server somewhere in the world. We use it to make sure -the time is the same on our client computers and our servers. -*MANDITORY FOR VICIDIAL SERVERS* (install on server and all clients) - -5. Go to http://www.ntp.org/ and download the ntpd package - - to install this directly on the command line type: - - cd /usr/local - - wget http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-4.2.2p3.tar.gz - If you get compilation errors here try 4.1.2: - - wget http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.1.2.tar.gz - - gunzip ntp-4.2.2p3.tar.gz - - tar xvf ntp-4.2.2p3.tar - - cd ntp-4.2.2p3 - - ./configure - - make - - make install - - vi /etc/ntp.conf (change to just 1 line: "server 18.145.0.30") - - cp /etc/ntp.conf /etc/ntpd.conf # just to be sure - - /usr/local/bin/ntpdate -u 18.145.0.30 # initial sync - - /usr/sbin/ntpd # run it - - you are done - - -iftop is a good console bandwidth visualization tool that shows you active -connections, where they are going to/from and how much of your precious bandwidth -they are using. *OPTIONAL* -NOTE: another good network analysis utility is "iptraf" and is on most system - -6. Go to http://www.ex-parrot.com/~pdw/iftop/ and download the package - - to install this directly on the command line type: - - cd /usr/local - - wget http://www.tcpdump.org/release/libpcap-0.9.4.tar.gz - - gunzip libpcap-0.9.4.tar.gz - - tar xvf libpcap-0.9.4.tar - - cd libpcap-0.9.4 - - ./configure - - make - - make install - - cd /usr/local - - wget http://www.ex-parrot.com/~pdw/iftop/download/iftop-0.17.tar.gz - - gunzip iftop-0.17.tar.gz - - tar xvf iftop-0.17.tar - - cd iftop-0.17 - - ./configure - - make - - make install - - iftop - - you are done - - -ploticus is a free graph creation package that allows you to create line graphs -within PNG files simply by creating a config file and a data file. We use this -package along with the included PHP script to generate server performance graphs -that can be displayed real-time on a web page. -*OPTIONAL* (only needed for server performance graphing web reports) - -7. Go to http://ploticus.sourceforge.net/ and download the package - - to install this directly on the command line type: - NOTE: you may have to edit the Makefile to remove X11 if you don't have it - - cd /usr/local - - wget http://superb-west.dl.sourceforge.net/sourceforge/ploticus/pl240src.tar.gz - - gunzip pl240src.tar.gz - - tar xvf pl240src.tar - - cd pl240src/src/ - - make clean - - make - - make install - - you are done - NOTE: uncomment these lines to compile on systems without X11(v232): - NOXFLAG = -DNOX11 - XLIBS = - XOBJ = - NOTE: for the graphics to work on the AST_server_performance page you will - need the 'pl' script to be linked or copied into your htdocs/vicidial/ploticus directory - NOTE: you may need to edit the Makefile for ploticus if you do not have X11 - - -openssh is a remote login protocol server that is always a good idea to have -updated on your system, so we're going to install a new version now. -*OPTIONAL* (only updated as a precaution, not manditory) - [NOTE: newer zlib is needed before installing] - -8. Go to http://www.openssh.org/ and download the linux source for openssh - - to install this directly on the command line type: - - cd /usr/local - - wget http://www.zlib.net/zlib-1.2.3.tar.gz - - gunzip zlib-1.2.3.tar.gz - - tar xvf zlib-1.2.3.tar - - cd zlib-1.2.3 - - ./configure - - make - - make install - - cd /usr/local - - wget http://ftp.openssh.zone-h.org/pub/OpenBSD/OpenSSH/portable/openssh-5.0p1.tar.gz - - gunzip openssh-5.0p1.tar.gz - - tar xvf openssh-5.0p1.tar - - cd openssh-5.0p1 - - ./configure - - make - - make install - - you are done - - -openssl is the open-source SSL libraries package, and to install a fake SSL cert -locally and have it work with apache, you need it installed on your machine -*OPTIONAL* (only install openssl if you want to use SSL secured web pages on -your locally installed copy of Apache web server) - -9. Go to http://www.openssl.org/ and download the linux source for openssl - - to install this directly on the command line type: - - cd /usr/local - - wget http://www.openssl.org/source/openssl-0.9.8g.tar.gz - - gunzip openssl-0.9.8g.tar.gz - - tar xvf openssl-0.9.8g.tar - - cd openssl-0.9.8g - - ./config - - make - - make install - - you are done - - -apache is a web server that allows you to use many different modules with it to -extend it's functionality. In order to use some of the astguiclient -functionalities we need to have Apache and PHP installed on this machine. -*OPTIONAL* (only install Apache and PHP locally if you don't want to use an -installation on another machine) - -10. Go to http://www.apache.org/ and download the apache unix source - Go to http://www.php.net/ and download the php unix source code - - to install this directly on the command line type: - - cd /usr/local - - wget http://mirror.candidhosting.com/pub/apache/httpd/httpd-2.2.8.tar.gz - - gunzip httpd-2.2.8.tar.gz - - tar xvf httpd-2.2.8.tar - - wget http://us2.php.net/distributions/php-5.2.6.tar.gz - NOTE: PHP 5.1.1 has also been tested with this release - - gunzip php-5.2.6.tar.gz - - tar xvf php-5.2.6.tar - - cd httpd-2.2.8 - - ./configure --enable-so --with-apxs2 - - make - - make install - - cd ../php-5.2.6 - - ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql - - make - - make install - - cp php.ini-dist /usr/local/lib/php.ini - NOTE: you will want to make sure NOTICE logging is turned off: - error_reporting = E_ALL & ~E_NOTICE ; (this is default) -!!! REQUIRED !!! be sure the memory limit for scripts in php.ini is AT LEAST 48M: - memory_limit = 48M - Make sure short tags are enabled: - short_open_tag = On - some other fields to change if using web-based lead loader: - max_execution_time = 330 - max_input_time = 360 - post_max_size = 48M - upload_max_filesize = 42M - default_socket_timeout = 360 - - - vi /usr/local/apache2/conf/httpd.conf - add the following lines: - "AddType application/x-httpd-php .php .phtml" - "LoadModule php4_module libexec/libphp5.so" - or - "LoadModule php4_module modules/libphp5.so" - modify the index.html line and add index.php to the list - - to disable logging, change: - "CustomLog logs/access_log common" - to this: - "CustomLog /dev/null common" - - to enable web browsing of Recordings on Asterisk server, add this: - Alias /RECORDINGS/ "/var/spool/asterisk/monitorDONE/" - - - Options Indexes MultiViews - AllowOverride None - Order allow,deny - Allow from all - - Forcetype application/forcedownload - - - - - /usr/local/apache2/bin/apachectl start - - go to http://your-new-asterisk-server-ipaddress/ to see if it worked - - you are done - NOTE: If using PHP5 you may need to add the following line to php.ini: - short_open_tag = On - - OPTIONAL- Load eAccelerator PHP-caching application: - Even so this is technically an optional part, it is strongly recommended that you install eAccelerator - since it will slash PHPs processing power requirements greatly. Without eAccelerator load on the system - can be ten times as high, which can cause all kinds of problems, this is especially true for single - system setups. - - Go to http://eaccelerator.net and download the most recent package - - cd /usr/local - - wget http://bart.eaccelerator.net/source/0.9.5/eaccelerator-0.9.5.zip - - unzip eaccelerator-0.9.5.zip - - cd eaccelerator-0.9.5 - - export PHP_PREFIX="/usr/local" - - $PHP_PREFIX/bin/phpize - - ./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config - - make - - make install - - vi /usr/local/lib/php.ini - Add the following lines to the dynamic extensions section of php.ini: - (you may need to change the extension location depending on your install of php) - zend_extension="../../../usr/local/eaccelerator-0.9.5/modules/eaccelerator.so" - eaccelerator.shm_size="48" - eaccelerator.cache_dir="/tmp/eaccelerator" - eaccelerator.enable="1" - eaccelerator.optimizer="1" - eaccelerator.check_mtime="1" - eaccelerator.debug="0" - eaccelerator.filter="" - eaccelerator.shm_max="0" - eaccelerator.shm_ttl="0" - eaccelerator.shm_prune_period="0" - eaccelerator.shm_only="0" - eaccelerator.compress="1" - eaccelerator.compress_level="9" - - mkdir /tmp/eaccelerator - - chmod 0777 /tmp/eaccelerator - # to verify installation: - - php -v - - - - -balance is a load-balancing application for Linux that will allow you to spread -the load of your web traffic across many servers. If you are running more than -70 agents on a single server you may want to install this application and build -another cheap web server to handle the extra load. -*OPTIONAL* - -11. Go to http://balance.sourceforge.net to download the most recent source version - - to install this directly on the command line type: - - cd /usr/local - - wget http://voxel.dl.sourceforge.net/sourceforge/balance/balance-3.34.tgz - - gunzip balance-3.34.tgz - - tar xvf balance-3.34.tar - - cd balance-3.34 - - make - - make install - - /usr/sbin/balance -f 81 localhost:80 10.10.10.16:80 - That command will take port 81 traffic and send it evenly to the local - server and the 10.10.10.16 server reducing the load and speeding up - the applications. More info on balance: http://www.inlab.de/balance.pdf - - -subversion is the new code control framework use by the Asterisk community. If -you want to use the latest development code of Asterisk you will need to have -this loaded on your system. -*OPTIONAL* - -12. Go to http://subversion.tigris.org to download the most recent source version - - to install this directly on the command line type: - - cd /usr/local - - wget http://subversion.tigris.org/downloads/subversion-1.3.2.tar.gz - - gunzip subversion-1.3.2.tar.gz - - tar xvf subversion-1.3.2.tar - - cd subversion-1.3.2 - - ./configure - - make - - make install - - -mtop is a great utility for real-time monitoring of mysql and the queries that -are running in it. -*OPTIONAL* - 13. Go to http://mtop.sourceforge.net to download the most recent version - - to install this directly on the command line type: - - cd /usr/local - - wget http://superb-east.dl.sourceforge.net/sourceforge/mtop/mtop-0.6.6.tar.gz - - gunzip mtop-0.6.6.tar.gz - - tar xvf mtop-0.6.6.tar - - cd mtop-0.6.6 - - cpan - - install Curses - - install Getopt::Long - - install Net::Domain - - quit - - perl Makefile.PL - - make - - make install - - /usr/local/bin/mtop --dbuser=root --seconds=3 - - -sipsak is an optional utility that VICIDIAL can use to send messages to an -agent's SIP-based phone(like the Snom 320) to display text on their LCD screen. -If you want to use this, make sure it is installed on the same server that your -web server is installed on(Apache). -*OPTIONAL* - 14. Go to http://sipsak.org to download the most recent version - - to install this directly on the command line, type: - - cd /usr/local - - wget http://download.berlios.de/sipsak/sipsak-0.9.6-1.tar.gz - - gunzip sipsak-0.9.6-1.tar.gz - - tar xvf sipsak-0.9.6-1.tar - - cd sipsak-0.9.6-1 - - ./configure - - make - - make install - - /usr/local/bin/sipsak --version - - - - - -PHASE 4: INSTALLING ASTERISK - -OK, all the prep work is done, now it's time to start having fun with Asterisk. -There are two basic ways to install Asterisk, an official release(at the time of -this writing the official release is 1.2.27) and the SVN_DEV version(development -branch). We recommend using Asterisk 1.2.27. These instructions are how we get -our Asterisk system with it's T1 line installed with our 2 SIP VOIP devices and -one IAX2 softphone. - -NOTE: If you want to use Asterisk 1.4, you will need to make sure that you set -the servers table "asterisk_version" field to the proper version number and you -can use the docs/conf_examples/extensions.conf.sample-1.4 file for your default -dialplan - -NOTE: If you want to use release 1.0.8 or 9 we would recommend either using the -CVS_v1-0 branch where the issues are fixed, or patching your 1.0.8/1.0.9 code -with the following patch: -(http://astguiclient.sourceforge.net/experimental_code/localmasq.patch) -- If you do patch your system make sure you put the asterisk version - field for the server on the admin pages as '1.0.11.1' - -1. follow these command line steps: - - mkdir /usr/src/asterisk - - cd /usr/src/asterisk - A. if you want 1.2 release (reliable with new features): - - wget http://ftp.digium.com/pub/asterisk/releases/asterisk-1.2.27.tar.gz - - wget http://ftp.digium.com/pub/zaptel/releases/zaptel-1.2.25.tar.gz - - wget http://ftp.digium.com/pub/libpri/releases/libpri-1.2.5.tar.gz - - gunzip asterisk-1.2.27.tar.gz - - tar xvf asterisk-1.2.27.tar - - gunzip zaptel-1.2.25.tar.gz - - tar xvf zaptel-1.2.25.tar - - gunzip libpri-1.2.5.tar.gz - - tar xvf libpri-1.2.5.tar - B. if you want latest SVN_1.2 version (release tree with new patches) - - svn checkout http://svn.digium.com/svn/asterisk/branches/1.2 asterisk-1.2 - - svn checkout http://svn.digium.com/svn/zaptel/branches/1.2 zaptel-1.2 - - svn checkout http://svn.digium.com/svn/libpri/branches/1.2 libpri-1.2 - C. if you want latest SVN_DEV version (not recommended) [1.6 tree] - - svn checkout http://svn.digium.com/svn/asterisk/trunk asterisk - - svn checkout http://svn.digium.com/svn/zaptel/trunk zaptel - - svn checkout http://svn.digium.com/svn/libpri/trunk libpri - - ALL -> - - (1.0 tree)if you want to allow for more than 100 voicemail messages in a - mailbox(warning this will slightly increase memory usage when a call - is in voicemail) edit the voicemail source code file: - - vi /usr/src/asterisk/asterisk/apps/app_voicemail.c - edit this line and change 100 to 999: - #define MAXMSG 100 - - (1.0 tree)if you have no X server installed on your Asterisk machine, then you - will need to comment out the gtk console lib(only affects 1.0 releases) - edit the voicemail source code file: - - vi /usr/src/asterisk/asterisk/pbx/Makefile - edit this line at the top and just add a hash # in front of it as shown: - #PBX_LIBS+=$(shell $(CROSS_COMPILE_BIN)gtk-config --cflags >/dev/null 2>/dev/null && echo "pbx_gtkconsole.so") - - - cd ./zaptel-1.2.25 - - make clean - - make - - make install - - cd ../libpri-1.2.5 - - make clean - - make - - make install - - cd ../asterisk-1.2.27 - - (1.2 tree) If you want to include Answering Machine Detection ability - you will need to download app_amd.c and amd.conf and alter the - apps/Makefile to compile it properly - - cd apps - - wget http://www.eflo.net/files/app_amd2.c - - mv app_amd2.c app_amd.c - - vi Makefile - replace this line(line 32): - app_mixmonitor.so app_stack.so - with this line: - app_mixmonitor.so app_stack.so app_amd.so - - wget http://www.eflo.net/files/amd2.conf - - mkdir /etc/asterisk - - mv amd2.conf /etc/asterisk/amd.conf - *OPTIONAL*(1.2.23 thru 1.2.27) apply the meetme DTMF passthru patch - - wget http://www.eflo.net/files/meetme_DTMF_passthru-1.2.23.patch - - patch -p1 < ./meetme_DTMF_passthru-1.2.23.patch - - File to patch: app_meetme.c - *OPTIONAL*(1.2.12.1 thru 1.2.27) apply the meetme volume control patch - *Different patches available for 1.2.7.1 through 1.2.14 - - wget http://www.eflo.net/files/meetme_volume_control_1.2.16.patch - - patch -p1 < ./meetme_volume_control_1.2.16.patch - - File to patch: app_meetme.c - - cd ../ - - -(1.2 tree) apply the cli delimiter patch - - wget http://www.eflo.net/files/cli_chan_concise_delimiter.patch - - patch -p1 < ./cli_chan_concise_delimiter.patch - - File to patch: cli.c - - *OPTIONAL*(1.2.14 thru 1.2.27) rewrite of waitforsilence - - wget http://www.eflo.net/files/app_waitforsilence.c - - mv -f app_waitforsilence.c apps/app_waitforsilence.c - - *OPTIONAL* shorter enter and leave sounds for meetme - - wget http://www.eflo.net/files/enter.h - - wget http://www.eflo.net/files/leave.h - - mv -f enter.h apps/enter.h - - mv -f leave.h apps/leave.h - - - - make clean - - make - - make install - - make samples # this makes sample conf files (only use for new installs) - - - modprobe zaptel # this loads the zaptel module - - install the module for the digium device that you are using, we are -using the T100P single span T1 card so we use: - - modprobe wct1xxp - Here's the list of all digium cards and the modules you use with -them: - Card Module - ----------------- - TDM400P wctdm - X100P wcfxo - TDM* wcfxs - S100U wcusb - T100P wct1xxp - E100P wct1xxp - T400P tor2 - E400P tor2 - TE110P wcte11xp - TE410P wct4xxp - TE405P wct4xxp - TE411P wct4xxp - TE406P wct4xxp - TE210P wct2xxp - TE205P wct2xxp - TDM2400P wctdm24xxp - - If you have chosen a Sangoma T1/E1 or analog card, you will need to - follow their instructions for installation of their driver software - LATEST Sangoma Wanpipe drivers: - ftp://ftp.sangoma.com/linux/current_wanpipe/wanpipe-3.2.4.tgz - - now your asterisk installation is built and loaded and it's time to -configure it. - -NOTES: If you want to install zttool diagnostics you may need the newt package installed: - - wget http://downloads.vicidial.com/packages/newt-0.51.6.tar.gz - - gunzip newt-0.51.6.tar.gz - - tar xvf newt-0.51.6.tar - - cd newt-0.51.6 - - ./configure - - make - - make install - - cd ../ - - ln -s /usr/lib/libnewt.so.0.51.6 /usr/lib/libnewt.so.0.51 -then go to your zaptel folder and do 'make zttool' - -Digium/Clone X100P EXAMPLE: -Here is an example of a configuration where an X100P single FXO card is used for -zaptel timing and not used for calling: - -NOTE: you can get an X100P through ebay for $10-$30 that will work with Asterisk - - /etc/zaptel.conf: - loadzone=us - defaultzone=us - fxsks=1 - - /etc/asterisk/zapata.conf: - [trunkgroups] - [channels] - context=unused - signalling=fxs_ks - channel => 1 - - Added this to the rc.local file: - # Load zaptel drivers for x100p - modprobe zaptel - modprobe wcfxo - -If you will be doing native music-on-hold for your inbound calls, you will need -musiconhold audio files to be converted to native formats like GSM, ULAW and ALAW: - - cd /var/lib/asterisk/mohmp3/ - mpg123 -s --rate 44100 --mono /var/lib/asterisk/mohmp3/fpm-sunshine.mp3 > /var/lib/asterisk/mohmp3/fpm-sunshine.raw - sox -r 44100 -w -s -c 1 fpm-sunshine.raw -r 8000 -c 1 fpm-sunshine.wav - sox fpm-sunshine.wav -t gsm -r 8000 -b -c 1 fpm-sunshine.gsm - sox fpm-sunshine.wav -t ul -r 8000 -b -c 1 fpm-sunshine.pcm - mpg123 -s --rate 44100 --mono /var/lib/asterisk/mohmp3/fpm-calm-river.mp3 > /var/lib/asterisk/mohmp3/fpm-calm-river.raw - sox -r 44100 -w -s -c 1 fpm-calm-river.raw -r 8000 -c 1 fpm-calm-river.wav - sox fpm-calm-river.wav -t gsm -r 8000 -b -c 1 fpm-calm-river.gsm - sox fpm-calm-river.wav -t ul -r 8000 -b -c 1 fpm-calm-river.pcm - mpg123 -s --rate 44100 --mono /var/lib/asterisk/mohmp3/fpm-world-mix.mp3 > /var/lib/asterisk/mohmp3/fpm-world-mix.raw - sox -r 44100 -w -s -c 1 fpm-world-mix.raw -r 8000 -c 1 fpm-world-mix.wav - sox fpm-world-mix.wav -t gsm -r 8000 -b -c 1 fpm-world-mix.gsm - sox fpm-world-mix.wav -t ul -r 8000 -b -c 1 fpm-world-mix.pcm - mkdir ../orig-mp3 - mv -f *.mp3 ../orig-mp3/ - mkdir ../quiet-mp3 - cd ../quiet-mp3 - sox -r 44100 -w -s -c 1 ../mohmp3/fpm-sunshine.raw -r 8000 -c 1 fpm-sunshine.wav vol 0.25 - sox fpm-sunshine.wav -t gsm -r 8000 -b -c 1 fpm-sunshine.gsm - sox fpm-sunshine.wav -t ul -r 8000 -b -c 1 fpm-sunshine.pcm - sox -r 44100 -w -s -c 1 ../mohmp3/fpm-calm-river.raw -r 8000 -c 1 fpm-calm-river.wav vol 0.25 - sox fpm-calm-river.wav -t gsm -r 8000 -b -c 1 fpm-calm-river.gsm - sox fpm-calm-river.wav -t ul -r 8000 -b -c 1 fpm-calm-river.pcm - sox -r 44100 -w -s -c 1 ../mohmp3/fpm-world-mix.raw -r 8000 -c 1 fpm-world-mix.wav vol 0.25 - sox fpm-world-mix.wav -t gsm -r 8000 -b -c 1 fpm-world-mix.gsm - sox fpm-world-mix.wav -t ul -r 8000 -b -c 1 fpm-world-mix.pcm - rm -f ../mohmp3/*.raw - - - -PHASE 5: CONFIGURING ASTERISK AND YOUR SIP PHONES - -In this phase we will configure the telco lines, the SIP phones, the extensions, -meetme(conference calling) rooms, dialplan extensions and the voicemail boxes. -After this phase your Asterisk system should be able to place and receive calls -to and from the SIP phones you have installed over the telco lines you've hooked -up. There are several things that we will not be showing how to do because -Asterisk is extremely flexible and has so many different ways of being -configured, that if we were to try to explain them all in this document it would -be 99% asterisk configuration and be 20,000 lines long, and that would -just be a barrier for those who just want to get it set up. The "Wiki" and the -mailing list are two very good resources for finding answers if you run into -problems configuring your system, here are links to them: -The Wiki: http://www.voip-info.org/tiki-index.php -The Lists: http://www.asterisk.org/index.php?menu=support - -I need to note that it is possible to install Asterisk and use astGUIclient -applications with no Zaptel(Digium/Sangoma/Rhino/etc...) cards installed, but it -is not recommended even if you are not going to use Zap trunks for your inbound- -outbound calls with no real Zap devices, you would need to use a dummy timer -(zt_dummy) based on you USB ports to get meetme conference rooms working -properly and you may have other issues along the way. We would at least -recommend getting a X100 or X101 board from Digium or a clone manufacturer so -there is a dedicated hardware timer in place on your system. - - - -SUBPHASE 5.0: setting up your Asterisk configuration files - -1. edit zaptel.conf - - vi /etc/zaptel.conf - There are many examples inside of the zaptel.conf file that is -generated with the "make samples" command that we issued at the end -of the last phase. There are many different parameters for the -different telco line possibilities, because we are installing a T1 -that is NON-PRI-isdn B8ZS ExtendedSuperframe(ESF) E&M Wink start and 24 -channels, we will use the following settings for zaptel.conf: - span=1,1,0,esf,b8zs - e&m=1-24 - loadzone = us - defaultzone=us - FOR A PRI YOU WOULD USE SOMETHING LIKE THIS: - span=2,2,0,esf,b8zs - bchan=25-47 - dchan=48 - -2. edit zapata.conf - - vi /etc/asterisk/zapata.conf - There are also many examples of how to configure zapata.conf online. -we decided to separate our T1 into two line groups to keep some -incoming calls from being busy if we filled up all of our lines. -Here's what we used(you can set echocancel=no if you are using PRIs): - [channels] - group=1 - language=en - signalling=em_w - usecallerid=yes - callerid=asreceived - context=default - echocancel=64 - echocancelwhenbridged=yes - rxgain=1.0 - txgain=1.0 - channel => 1-2 - group=2 - language=en - signalling=em_w - usecallerid=yes - callerid=asreceived - context=default - echocancel=64 - echocancelwhenbridged=yes - rxgain=1.0 - txgain=1.0 - channel => 3-24 - FOR A PRI YOU WOULD USE SOMETHING LIKE THIS: - group=3 - language=en - signalling=pri_net - usecallerid=yes - callerid=asreceived - callprogress=no - busydetect=no - context=default - echocancel=64 - echocancelwhenbridged=yes - rxgain=1.0 - txgain=1.0 - channel => 25-47 - -3. edit sip.conf - - vi /etc/asterisk/sip.conf - here is where we will edit the configuration of our SIP compatible -phone devices. As stated at the beginning, we will be setting up a -Grandstream Budgetone 102 phone and a Sipura/Linksys SPA-2000 adapter with -two analog phones connected(each with it's own extension). Here are -the settings we used to set each of them up: - [general] - port = 5060 - bindaddr = 0.0.0.0 - context = default - ; register SIP account on remote machine if using SIP trunks - ; register => testSIPtrunk:test@10.10.10.16:5060 - ; - ; setup account for SIP trunking: - ; [SIPtrunk] - ; disallow=all - ; allow=ulaw - ; allow=alaw - ; type=friend - ; username=testSIPtrunk - ; secret=test - ; host=10.10.10.16 - ; dtmfmode=inband - ; qualify=1000 - - [gs102] - disallow=all - allow=ulaw - allow=alaw - type=friend - username=gs102 - secret=test - host=dynamic - dtmfmode=inband - defaultip=10.10.10.16 - qualify=1000 - mailbox=102 - [spa2000] - disallow=all - allow=ulaw - allow=alaw - type=friend - username=spa2000 - secret=test - host=dynamic - dtmfmode=inband - defaultip=10.10.10.17 - qualify=1000 - mailbox=2000 - [spa2001] - disallow=all - allow=ulaw - allow=alaw - type=friend - username=spa2001 - secret=test - host=dynamic - dtmfmode=inband - defaultip=10.10.10.17 - qualify=1000 - mailbox=2001 -4. edit meetme.conf - - vi /etc/asterisk/meetme.conf - This is known as the conference calling configuration file. We are -just going to add two conferences(one without a pin number and one -with a pin number required for entry): - [rooms] - conf => 8600 - conf => 8601,1234 -5. edit iax.conf - - vi /etc/asterisk/iax.conf - This is the IAX configuration file, below is a very simple config for - having two Asterisk servers connect natively to each other, if you - will be using this, make sure to add the optional lines included - after the extensions.conf section. Also, there is an account setup - here for a firefly IAX softphone to use.(details on that later) - * IMPORTANT NOTE * if you plan to use IAX2 trunks for VICIDIAL - outbound dialing you must register with the remote IAX2 server - through the iax.conf file, not just in the Dial or TRUNK line - of the extensions.conf dialplan. - [general] - bindport=4569 - iaxcompat=yes - bandwidth=high - allow=all - allow=gsm ; Always allow GSM, it's cool :) - jitterbuffer=no - tos=lowdelay - register => ASTtest1:test@10.10.10.16:4569 - - [ASTtest2] - type=friend - accountcode=IAXtrunk2 - context=default - auth=plaintext - host=dynamic - permit=0.0.0.0/0.0.0.0 - secret=test - disallow=all - allow=ulaw - qualify=yes - - [firefly01] - type=friend - accountcode=firefly01 - context=default - auth=plaintext - host=dynamic - permit=0.0.0.0/0.0.0.0 - secret=test - disallow=all - allow=gsm - qualify=yes - -##### EXAMPLE - This is a config example for setting up Binfone service(http://www.binfone.com) - -NOTE: The "1112223333" is your iax username. When you signup, Binfone creates -a default IAX username for you, (a 5 digit number, usually, starting with a 1). -This works for most customers. Folks that want inbound then also sign up for -DIDs, each of which has its own IAX username. (Which is the 10 digit DID). -Each username has its own password which is managed through their web interface. - -NOTE: If you will be using the G729 codec through binfone there is now a -dedicated G729 gateway that only handles G729 calls. Please use this address to -register to if you plan on using G729 as your codec: iax-g729.binfone.com - - iax.conf: - [general] - register => 1112223333:PASSWORD@iax.binfone.com - - [1112223333] - auth=md5 - type=friend - username=1112223333 - secret=PASSWORD - host=iax.binfone.com - context=incoming-IAX-context-in-extensions.conf - - - extensions.conf: - [global] - TRUNKBINFONE=IAX2/1112223333:PASSWORD@iax.binfone.com ; IAX trunk interface - - [default] - exten => _91NXXNXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) - exten => _91NXXNXXXXXX,2,Dial(${TRUNKIAX}/${EXTEN:1},55,o) - exten => _91NXXNXXXXXX,3,Hangup - - [incoming] - exten => 1112223333,1,AGI(agi://127.0.0.1:4577/call_log) - exten => 1112223333,2,Dial(sip/gs102,55,o) - exten => 1112223333,3,Hangup - - - dnsmgr.conf: # It is very helpful to enable dnsmgr - [general] - enable=yes ; enable creation of managed DNS lookups - refreshinterval=300 ; refresh managed DNS lookups every seconds - - -##### END EXAMPLE - - -6. edit voicemail.conf - - vi /etc/asterisk/voicemail.conf - This is where we set up the voicemail boxes for the extensions that -we have set up: - [general] - format=wav49|gsm|wav - serveremail=asterisk - attach=yes - skipms=3000 - maxsilence=10 - silencethreshold=128 - maxlogins=3 - [zonemessages] - eastern=America/New_York|'vm-received' Q 'digits/at' IMp - central=America/Chicago|'vm-received' Q 'digits/at' IMp - central24=America/Chicago|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours' - [default] - 102 => 102,Grandstream Mailbox,root@localhost - 2000 => 2000,Sipura Mailbox 1 - 2001 => 2001,Sipura Mailbox 2 - 3001 => 3001,Firefly Mailbox 1 -7. edit manager.conf - - vi /etc/asterisk/manager.conf - This is where we set up remote logins to the asterisk manager -interface, to allow sending of Action commands from remote -connections to the Asterisk server, this will be important for the -astguiclient applications so let's set that up now: - [general] - enabled = yes - port = 5038 - bindaddr = 0.0.0.0 - [cron] - secret = 1234 - read = system,call,log,verbose,command,agent,user - write = system,call,log,verbose,command,agent,user - [updatecron] - secret = 1234 - read = command - write = command - [listencron] - secret = 1234 - read = system,call,log,verbose,command,agent,user - write = command - [sendcron] - secret = 1234 - read = command - write = system,call,log,verbose,command,agent,user - -8. edit logger.conf - - vi /etc/asterisk/logger.conf - This file determines the messages that are logged to the console and -the /var/log/asterisk/messages file. We usually turn on full logging -to the messages file to more easily diagnose any problems that we may -run into, the problem with this is that is does produce very large -files, so be warned: - [logfiles] - console => notice,warning,error - messages => notice,warning,error,debug,verbose -9. edit extensions.conf - - vi /etc/asterisk/extensions.conf - This is known as the dialplan. Since we are installing a -Long-Distance T1 with one 800 number on it, we will need to put that -800 number in the plan, as well as how to dial out through the T1 -lines and we will need to add an entry for each of the phones that we -have just set up in the sip.conf file. There are many examples both -in the sample file and online for what to put in your dialplan, here -is the simplified dialplan that we are using: -######------ START extensions.conf example ------###### -[general] -static=yes -writeprotect=no - -[globals] -CONSOLE=Console/dsp ; Console interface for demo -TRUNK=Zap/g1 ; Trunk interface -TRUNKX=Zap/g2 ; 2nd trunk interface -TRUNKIAX=IAX2/ASTtest1:test@10.10.10.16:4569 ; IAX trunk interface -TRUNKloop = IAX2/ASTloop:test@127.0.0.1:40569 ; used for blind monitoring -TRUNKblind = IAX2/ASTblind:test@127.0.0.1:41569 ; used for testing - -[default] -; Extension 8600 + 8601 conference rooms -exten => 8600,1,Meetme,8600 -exten => 8601,1,Meetme,8601 - -; Extension 102 - Grandstream hardphone -exten => 102,1,Playback,transfer|skip ; "Please hold while..." -exten => 102,2,Dial,sip/gs102|20|to ; Ring, 20 secs max -exten => 102,3,Voicemail,u102 ; Send to voicemail... -; Extension 2000 Sipura line 1 -exten => 2000,1,Dial,sip/spa2000|30|to ; Ring, 30 secs max -exten => 2000,2,Voicemail,u2000 ; Send to voicemail... -; Extension 2001 Sipura line 2 -exten => 2001,1,Dial,sip/spa2001|30|to ; Ring, 30 secs max -exten => 2001,2,Voicemail,u2001 ; Send to voicemail... -; Extension 2020 rings both sipura lines -exten => 2001,1,Dial,sip/spa2000&sip/spa2001|30|to ; Ring, 30 secs max -exten => 2001,2,Voicemail,u2000 ; Send to voicemail... -; Extension 301 rings the firefly softphone -exten => 301,1,Dial,(IAX2/firefly01@firefly01/s) -exten => 301,2,Hangup - -; Extension 3429 - Inbound 800 number (1-800-555-3429) -exten => _**3429,1,Ringing -exten => _**3429,2,Answer -exten => _**3429,3,Dial,sip/spa2000&sip/spa2001|30|to ; Ring, 30 secs max -exten => _**3429,4,Voicemail,u2000 ; Send to voicemail... -; Extension 3429 - with ANI [callerID] -exten => _*NXXNXXXXXX*3429,1,Ringing -exten => _*NXXNXXXXXX*3429,2,Answer -exten => _*NXXNXXXXXX*3429,3,Dial,sip/spa2000&sip/spa2001|30|to ; Ring, 30 -secs max -exten => _*NXXNXXXXXX*3429,4,Voicemail,u2000 ; Send to voicemail... - -; dial a long distance outbound number to the UK -exten => _901144XXXXXXXXXX,1,Dial(${TRUNKX}/${EXTEN:1},55,tTo) -exten => _901144XXXXXXXXXX,2,Hangup - -; dial a long distance outbound number to Australia -exten => _901161XXXXXXXXX,1,Dial(${TRUNKX}/${EXTEN:1},,tTo) -exten => _901161XXXXXXXXX,2,Hangup - -; dial an 800 outbound number -exten => _91800NXXXXXX,1,Dial(${TRUNK}/${EXTEN:1},,tTo) -exten => _91800NXXXXXX,2,Hangup -exten => _91888NXXXXXX,1,Dial(${TRUNK}/${EXTEN:1},,tTo) -exten => _91888NXXXXXX,2,Hangup -exten => _91877NXXXXXX,1,Dial(${TRUNK}/${EXTEN:1},,tTo) -exten => _91877NXXXXXX,2,Hangup -exten => _91866NXXXXXX,1,Dial(${TRUNK}/${EXTEN:1},,tTo) -exten => _91866NXXXXXX,2,Hangup - -; dial a local 727 outbound number with area code -exten => _9727NXXXXXX,1,Dial(${TRUNK}/1${EXTEN:1},,tTo) -exten => _9727NXXXXXX,2,Hangup - -; dial a local 813 outbound number with area code -exten => _9813NXXXXXX,1,Dial(${TRUNK}/${EXTEN:1},,tTo) -exten => _9813NXXXXXX,2,Hangup - -; dial a long distance outbound number -exten => _91NXXNXXXXXX,1,Dial(${TRUNKX}/${EXTEN:1},,tTo) -exten => _91NXXNXXXXXX,2,Hangup - -; dial a local outbound number (modified because of only LD T1) -exten => _9NXXXXXX,1,Dial(${TRUNK}/1727${EXTEN:1},,tTo) -exten => _9NXXXXXX,2,Hangup - -; barge monitoring extension -exten => 8159,1,ZapBarge -exten => 8159,2,Hangup - -; # timeout invalid rules -exten => #,1,Playback(invalid) ; "Thanks for trying the demo" -exten => #,2,Hangup ; Hang them up. -exten => t,1,Goto(#,1) ; If they take too long, give up -exten => i,1,Playback(invalid) ; "That's not valid, try again" - -; Give voicemail at extension 8500 -exten => 8500,1,VoicemailMain -exten => 8500,2,Goto(s,6) - -; ASTERISK AGENTS LOGINS FOR QUEUES (NOT part of VICIDIAL) -; the following assumes phone agent login and exten are 3 digits and the same -; also assumes that 3-digit login is present in agents.conf and queueus.conf -;Agent Logout then stay onhook, DIAL 54 + 3-digit ID -exten => _54XXX,1,AgentCallbackLogin(||) -; the following are used to login and logout of Asterisk Queues from phone -;Agent Login then stay offhook on the phone, DIAL 55 + 3-digit ID -exten => _55XXX,1,AgentLogin(${EXTEN:1}) -;Agent Login then stay onhook, phones will ring, DIAL 56 + 3-digit ID -exten => _56XXX,1,AgentCallbackLogin(||${EXTEN:1}@default) - -######------ END extensions.conf example ------###### - -### OPTIONAL IAX trunk extensions entries for long distance dialing over IAX - exten => _91NXXNXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) - exten => _91NXXNXXXXXX,2,Dial(${TRUNKIAX}/${EXTEN:1},55,o) - exten => _91NXXNXXXXXX,3,Hangup - -### OPTIONAL SIP trunk extensions entries for long distance dialing over SIP - exten => _91NXXNXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) - exten => _91NXXNXXXXXX,2,Dial(sip/${EXTEN:1}@SIPtrunk,55,o) - exten => _91NXXNXXXXXX,3,Hangup - -### OPTIONAL IAX Load Balance extens to allow for Overflow and Balanced VDAD -### In this setup, the serverIP is the prefix followed by agent conf_exten -### FOR MORE INFORMATION, READ THE LOAD_BALANCING.txt DOCUMENT -### server 1 extens: - exten => _010*010*010*016*.,1,Dial(${TRUNKIAX2}/${EXTEN:16},55,o) -### server 2 extens: - exten => _010*010*010*015*.,1,Dial(${TRUNKIAX1}/${EXTEN:16},55,o) - -10. edit dnsmgr.conf: # It is very helpful to enable dnsmgr - [general] - enable=yes ; enable creation of managed DNS lookups - refreshinterval=300 ; refresh managed DNS lookups every seconds - - -11. Now that you have configured Asterisk, it is time to try to start it for the -first time. - - First make sure that your T1 line(or other telco line) is connected to the -digium card. - - next type the following at the command prompt: "ztcfg -vvvvvv" - - you should see a confirmation that the Zaptel device has loaded - - now you can launch asterisk with the following command: - "asterisk -vvvvvvvvvvvvgc" - - you should see a lot of messages scroll by and at the end you should -be given a CLI> prompt if everything loaded OK. To get out of Asterisk you can -type "stop now". Now that you are sure it is running you can either run it in a -separate terminal window or use the start_asterisk_boot.pl that you will -install with astguiclient to start Asterisk: - /usr/share/astguiclient/start_asterisk_boot.pl - - - -SUBPHASE 5.1: setting up your SIP phones - -You will need to follow the instructions for the phones that you are using with -your system, but here's the way to set up a Grandstream 102 and a Linksys/Sipura -SPA-2000 - -1. Here are basic instructions for setting up a Grandstream BT 102: - - On the phone plug it in to power only at first and follow these -instructions: - - wait for the phone to boot up and press the MENU button - - go through the menu screens with the menu key and the up/down arrow -keys to move from setting to setting. We are setting the following -values: - - DHCP OFF - - IP Addr: 010.010.010.016 - - Subnet: 255.255.000.000 - - router: 010.010.010.001 - - dnS: 010.010.010.001 - - tftp: we leave this blank for now - - menu 7 we change the codec to G-711u - - now wait 10 seconds and unplug the power and plug it back in - - you can also plug the network cable into the LAN port on the phone - - at this time you can go to your workstation and open a new web browser - - go to http://10.10.10.16/ the password is "admin" - - here is where you will enter in the configuration details for the -phone to register with the Asterisk server - - SIP server: 10.10.10.15 - - SIP user ID: gs102 - - Authenticate ID: gs102 - - Password: test - - Name: gs102 - - Voice Mail UserID: 102 - - Send DTMF: in-audio - - NTP Server: tick.mit.edu - - then click update, click review changes, and click reboot - - your phone should now be able to register with the Asterisk server. If you -still have your console screen up you should see a registration message -appear telling you that gs102 has registered. - -2. Here are the basic instructions for setting up a Sipura SPA-2000 analog -adapter with 2 lines. - - Plug power and two analog phones into the adapter. - - pick up the phone plugged into line1 and press **** to enter admin menu - - press 101# then 0# to disable DHCP - - press 111# then 10*10*10*17# to change the IP address - - press 121# then 255*255*0*0# to change the subnet mask - - press 131# then 10*10*10*1# to change the default gateway - - hang up the phone, unplug the power, plug in the network cable and plug in -the power cable - - now you can go the the admin website: http://10.10.10.17/admin/advanced - - you will need to make these setting changes: - - click on the "Line 1" tab at the top and change the following values: - - Proxy: 10.10.10.15 - - Display Name: spa2000 - - userID: spa2000 - - password: test - - authID: spa2000 - - change the dialplan to the following: -(*xx|xxx|xxxx|xxxxx|xxxxxx|xxxxxxx|xxxxxxxx|xxxxxxxxxxx|xxxxxxxxxxxx|xxxxxxxxxxxxxxx|xxxxxxxxxxxxxxxx.) - - then click the "submit all changes" button at the bottom of the page -and your first phone line should work now - - to register the second line, simply click on the "Line 2" tab and go -through the above steps except use spa2001 instead of spa2000 for the use IDs - -3. Now both of your phone devices are set up and you can try making phone calls -between the three phones - - - -SUBPHASE 5.2: setting up an IAX2 phone - -This is optinal and we won't go into too much detail about this, but currently -there are several IAX hard and softphones on the market and more are coming -every month. Follow the instructions with the IAX phone you have chosen and -follow the steps below: - -1. Add an entry into your iax.conf file like below if you have not already - [firefly01] - type=friend - accountcode=firefly01 - context=default - auth=plaintext - host=dynamic - permit=0.0.0.0/0.0.0.0 - secret=test - qualify=yes - -2. Add an entry into your extensions.conf file like below if it is not in there - ; Extension 3001 rings IAX phone - exten => 301,1,Dial(IAX2/firefly01@firefly01/s) - exten => 301,2,Voicemail,u301 ; Send to voicemail... - -3. Download Firefly 3rd party, or IDEfisk for Windows or Linux: - - http://www.virbiage.com/firefly/download/firefly-thirdparty.exe - MIRRORS: - - http://mirror.isp.net.au/ftp/pub/firefly/firefly-thirdparty.exe - - http://downloads.vicidial.com/softphones/firefly-thirdparty.exe - IDEFISK: - - http://www.asteriskguru.com/idefisk/ - - Install the application - - Launch Firefly Softphone - - click the "I wish to connect to a 3rd party network" button - - Enter in network name: Asterisk - - Select IAX2 as the protocol - - enter in your server address: "10.10.10.15" in our case - - enter login and pass: "firefly01" and "test" for in our case - - click OK and you should be logged in and can place calls - - -SUBPHASE 5.3: setting up a Zap phone - -This is optinal and we won't go into too much detail about this either, there -are a few ways to use Zap devices as phones on your Asterisk system: Zaptel -phone cards, Channel Banks going through Zaptel T1 card, outside line call -coming in going through Zaptel line card. There isn't much to do but set your -Zaptel config files up and put entries into your extensions.conf file: - -1. Add an entry into your extensions.conf file like below - ; Extension 4001 rings Zap phone - exten => 4001,1,Dial,Zap/1|30| ; ring Zap device 1 - exten => 4001,2,Voicemail,u4001 ; Send to voicemail... - - - - -PHASE 6: INSTALLING ASTGUICLIENT AND VICIDIAL - -Now that Asterisk is installed and running we can add the astGUIclient and -VICIDIAL components to the system. - - - -SUBPHASE 6.0: putting the files in place - -There are two methods for downloading astGUIclient/VICIDIAL, a release and SVN - -1. Go to http://astguiclient.sf.net/ and download the latest astguiclient -package(as of this writing it is 2.0.4.1) - - for 2.0.X release: - - mkdir /usr/src/astguiclient - - cd /usr/src/astguiclient - - wget http://internap.dl.sourceforge.net/sourceforge/astguiclient/astguiclient_2.0.4.1.zip - - unzip astguiclient_2.0.4.1.zip - - perl install.pl (make sure you are in the directory with the install.pl file) - - for SVN 2.0 trunk: - - mkdir /usr/src/astguiclient - - cd /usr/src/astguiclient - - svn checkout svn://svn.eflo.net:43690/agc_2-X/trunk - - cd trunk - - perl install.pl - select to do interactive setup and customize to your server - - there is one more file you need that's not included with the download -package, it's the conf.gsm file(this is the half-hour music file that we use -to put people on hold). I have a free classical music file that is available -free for download at the following two sites: - http://downloads.vicidial.com/sounds/conf.gsm - http://astguiclient.sf.net/conf.gsm - Once you have downloaded it, you will need to copy it to this folder: - /var/lib/asterisk/sounds/ - Then you will need to execute this command to copy it as the park file - 'cp /var/lib/asterisk/sounds/conf.gsm /var/lib/asterisk/sounds/park.gsm' - Here are the steps spelled out: - cd /var/lib/asterisk/sounds - wget http://downloads.vicidial.com/sounds/conf.gsm - cp conf.gsm park.gsm - - - you are done - - - -SUBPHASE 6.1: creating the MySQL "asterisk" database - -we will create the database and add a few initial records so that we can -use the administrative web interface. Since this is a new install it is easier -to use our new mysql script file to add the tables to the database: - -1. at the command prompt type go to the mysql client: -/usr/local/mysql/bin/mysql -2. type the following into the mysql client prompt: - (make sure you put your IP address in place of "10.10.10.15" in the queries below) -######------ BEGIN Mysql data entry(you can copy and paste this into terminal) # -create database asterisk; - -NOTE: if you will be using lead files with a language that does not use the -standard latin character set then you will want to use UTF8 for your default -characterset in the MySQL database. This requires at least MySQL 4.1.11 and you -can use the following query to create the database: - CREATE DATABASE `asterisk` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; - - -GRANT SELECT,INSERT,UPDATE,DELETE,LOCK TABLES on asterisk.* TO cron@'%' IDENTIFIED BY '1234'; -GRANT SELECT,INSERT,UPDATE,DELETE,LOCK TABLES on asterisk.* TO cron@localhost IDENTIFIED BY '1234'; - -# NOTE: if using MySQL 4.1.12 or higher you may need to run this query too: -UPDATE mysql.user set password=OLD_PASSWORD('1234') where user='cron'; - -# NOTE: make sure you do NOT put any spaces or other punctuation in the -# server_id, phone, extension, or user fields in the queries below if you edit them. - -use asterisk; - -\. /usr/src/astguiclient/trunk/extras/MySQL_AST_CREATE_tables.sql - or you may need to run this if you get an error: - \. /usr/src/astguiclient/agc_2.0.4/extras/MySQL_AST_CREATE_tables.sql - \. /usr/src/astguiclient/astguiclient/MySQL_AST_CREATE_tables.sql - -### to load in default IAX and SIP phone accounts run the following query - -\. /usr/src/astguiclient/trunk/extras/sip-iax_phones.sql - or you may need to run this if you get an error: - \. /usr/src/astguiclient/agc_2.0.4/extras/sip-iax_phones.sql - \. /usr/src/astguiclient/astguiclient/sip-iax_phones.sql - - -insert into servers (server_id,server_description,server_ip,active,asterisk_version)values('TESTasterisk','Test install of Asterisk server', '10.10.10.15','Y','1.2.27'); - -insert into server_updater values('10.10.10.15',''); - -insert into phones (extension, dialplan_number, voicemail_id, phone_ip, computer_ip, server_ip, login, pass, status, active, phone_type, fullname, company, picture, messages, old_messages, protocol) values('gs102','102','102','10.10.10.16','10.10.9.16','10.10.10.15','gs102','test', 'ADMIN','Y','Grandstream BT 102','Test Admin Phone','TEST','','0','0','SIP'); - -insert into vicidial_users (user,pass,full_name,user_level,user_group,load_leads,campaign_detail,ast_admin_access,modify_users) values('6666','1234','Admin','9','ADMIN','1','1','1','1'); - -insert into conferences values('8600001','10.10.10.15',''); -insert into conferences values('8600002','10.10.10.15',''); -insert into conferences values('8600003','10.10.10.15',''); -insert into conferences values('8600004','10.10.10.15',''); -insert into conferences values('8600005','10.10.10.15',''); -insert into conferences values('8600006','10.10.10.15',''); -insert into conferences values('8600007','10.10.10.15',''); -insert into conferences values('8600008','10.10.10.15',''); -insert into conferences values('8600009','10.10.10.15',''); -insert into conferences values('8600010','10.10.10.15',''); -insert into conferences values('8600011','10.10.10.15',''); -insert into conferences values('8600012','10.10.10.15',''); -insert into conferences values('8600013','10.10.10.15',''); -insert into conferences values('8600014','10.10.10.15',''); -insert into conferences values('8600015','10.10.10.15',''); -insert into conferences values('8600016','10.10.10.15',''); -insert into conferences values('8600017','10.10.10.15',''); -insert into conferences values('8600018','10.10.10.15',''); -insert into conferences values('8600019','10.10.10.15',''); -insert into conferences values('8600020','10.10.10.15',''); -insert into conferences values('8600021','10.10.10.15',''); -insert into conferences values('8600022','10.10.10.15',''); -insert into conferences values('8600023','10.10.10.15',''); -insert into conferences values('8600024','10.10.10.15',''); -insert into conferences values('8600025','10.10.10.15',''); -insert into conferences values('8600026','10.10.10.15',''); -insert into conferences values('8600027','10.10.10.15',''); -insert into conferences values('8600028','10.10.10.15',''); -insert into conferences values('8600029','10.10.10.15',''); -insert into conferences values('8600030','10.10.10.15',''); -insert into conferences values('8600031','10.10.10.15',''); -insert into conferences values('8600032','10.10.10.15',''); -insert into conferences values('8600033','10.10.10.15',''); -insert into conferences values('8600034','10.10.10.15',''); -insert into conferences values('8600035','10.10.10.15',''); -insert into conferences values('8600036','10.10.10.15',''); -insert into conferences values('8600037','10.10.10.15',''); -insert into conferences values('8600038','10.10.10.15',''); -insert into conferences values('8600039','10.10.10.15',''); -insert into conferences values('8600040','10.10.10.15',''); -insert into conferences values('8600041','10.10.10.15',''); -insert into conferences values('8600042','10.10.10.15',''); -insert into conferences values('8600043','10.10.10.15',''); -insert into conferences values('8600044','10.10.10.15',''); -insert into conferences values('8600045','10.10.10.15',''); -insert into conferences values('8600046','10.10.10.15',''); -insert into conferences values('8600047','10.10.10.15',''); -insert into conferences values('8600048','10.10.10.15',''); -insert into conferences values('8600049','10.10.10.15',''); - -quit - - to populate the timezone/country table run this command from command line: - - /usr/share/astguiclient/ADMIN_area_code_populate.pl - - to load the performance testing leads run these commands: - - cp /usr/src/astguiclient/trunk/extras/performance_test_leads.txt /usr/share/astguiclient/LEADS_IN/ - or - - cp /usr/src/astguiclient/agc_2.0.4/extras/performance_test_leads.txt /usr/share/astguiclient/LEADS_IN/ - - cp /usr/src/astguiclient_2.0.4.1/trunk/extras/performance_test_leads.txt /usr/share/astguiclient/LEADS_IN/ - - - /usr/share/astguiclient/VICIDIAL_IN_new_leads_file.pl --forcelistid=107 --forcephonecode=1 - - -######------ END Mysql data entry ------###### - -NOTE: If you will be using channelbanks for agent phones you can use the -/extras/single_channelbank_phones.sql file to help enter the phones table entries. - -NOTE: If you will be using IAX or SIP phones for agent phones you can use the -/extras/sip-iax_phones.sql file to help enter the phones table entries. - -NOTE: if you are not installing using default user/pass or have MySQL on another -server, you will need to edit either the /etc/astguiclient.conf file or the -dbconnect.php files in the astguiclient, vicidial and agc directories of your -webroot. - -3. Enter the vicidial administration page: -http://10.10.10.15/vicidial/admin.php -NOTE: if you click on the Logout button you must leave the user/pass empty and click OK - - Here you will enter the login and password that you inserted into the mysql -database in the vicidial_users table (subphase 6.1 [6666/1234]) - - Now that you are logged into the astGUIclient administration system we can -add a new phone entry for each of the sipura lines we created. - - click on the "Admin" link at the top, then the "ADD PHONE" link below -that and enter in the proper information for each of the new phone lines. -Here's what we entered for spa2000: - - Phone extension: spa2000 - - Dialplan Number: 2000 - - Voicemail Box: 2000 - - Phone IP address: 10.10.10.17 - - Computer IP address: 10.10.9.17 - - Server IP: 10.10.10.15 - - Login: spa2000 - - Password: test - - Status: ACTIVE - - Active Account: Y - - Phone Type: Sipura SPA-2000 line 1 - - Full Name: Sipura line 1 test - - Company: TEST - - Picture: - - for the next phone simply replace 2000 with 2001 in the above example - - now your phones are all all set up in the astguiclient system and you can -use this website to add new phones to be used with astguiclient and monitor -the number of calls people are making. - - now your database is set up for the astguiclient conferences which - will allow you to have over 6 remote parties that you called from your - GUI client application in one conference. - - click on the "LIST ALL SERVERS" link at the top then click on the - server to modify. Verify that the GMT time zone and all other fields - are what you want them to be. There is a setting(Max VICIDIAL Trunks) - that can be modified to limit the number of VICIDIAL outbound trunks - that will be allowed to use on this server. - -4. **OPTIONAL** For IAX clients you will need to use full phone name as the -extension on the admin page entry: "firefly01@firefly01" for our IAX phone example -previously. And do not forget to set the protocol on this page to IAX2 - -5. **OPTIONAL** For Zap clients you will need to use full Zap Channel name as the -extension on the admin page entry: "1-1" for our Zap phone example -previously. And do not forget to set the protocol on this page to Zap - - - - -SUBPHASE 6.2: making additions to your Asterisk conf files - -Now that the database is set up and our phones have entries in the system we can -make the additions to the running Asterisk system that will allow astguiclient -to work with it. - -1. Add the call_log entries to all incoming/outgoing extensions entries: - - here is how our sample dialplan changes for adding call_log entries(only -effected extension groups are show): -######------ START extensions.conf changes for call_log ------###### - -##### This 'h' exten is VERY important for VICIDIAL usage, -##### you will have problems if it is not in your dialplan! -exten => h,1,DeadAGI(agi://127.0.0.1:4577/call_log--HVcauses--PRI-----NODEBUG-----${HANGUPCAUSE}-----${DIALSTATUS}-----${DIALEDTIME}-----${ANSWEREDTIME}) - -; MANDITORY VDAD extens: -; In this setup, the serverIP is the prefix followed by agent conf_exten -; These lines are REQUIRED for VICIDIAL to work properly -; local server extens: -; BE SURE TO CHANGE THIS LINE FOR YOUR IP ADDRESS! - exten => _010*010*010*015*.,1,Goto(default,${EXTEN:16},1) - exten => _8600XXX*.,1,AGI(agi-VDADfixCXFER.agi) - exten => _78600XXX*.,1,AGI(agi-VDADfixCXFER.agi) -; Local blind monitoring - exten => _08600XXX,1,Dial(${TRUNKblind}/6${EXTEN:1},55,To) -; OPTIONAL server 2 extens, needed for load balancing: - exten => _010*010*010*016*.,1,Dial(${TRUNKIAX2}/${EXTEN:16},55,o) - -; Extension 3429 - Inbound 800 number (1-800-555-3429) -exten => _**3429,1,Ringing -exten => _**3429,2,AGI(agi://127.0.0.1:4577/call_log) -exten => _**3429,3,Answer -exten => _**3429,4,Dial,sip/spa2000&sip/spa2001,30,to -exten => _**3429,5,Voicemail,u2000 -; Extension 3429 - with ANI [callerID] -exten => _*NXXNXXXXXX*3429,1,Ringing -exten => _*NXXNXXXXXX*3429,2,AGI(agi://127.0.0.1:4577/call_log) -exten => _*NXXNXXXXXX*3429,3,Answer -exten => _*NXXNXXXXXX*3429,4,Dial,sip/spa2000&sip/spa2001,30,to -exten => _*NXXNXXXXXX*3429,5,Voicemail,u2000 - -; Extension 7275551212 - Inbound local number from PRI with 10 digit delivery -; SEE extensions.conf.sample-1.4 for changes needed for use with Asterisk 1.4 -exten => 7275551212,1,Ringing -exten => 7275551212,2,Wait(1) -exten => 7275551212,3,AGI(agi://127.0.0.1:4577/call_log--fullCID--${EXTEN}-----${CALLERID}-----${CALLERIDNUM}-----${CALLERIDNAME}) -exten => 7275551212,4,Answer -exten => 7275551212,5,Dial,sip/spa2000&sip/spa2001,30,to -exten => 7275551212,6,Voicemail,u2000 - -; This 'o' Dial flag is VERY important for VICIDIAL on outbound calls, - -; dial a long distance outbound number to the UK -exten => _901144XXXXXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) -exten => _901144XXXXXXXXXX,2,Dial(${TRUNKX}/${EXTEN:1},55,tTo) -exten => _901144XXXXXXXXXX,3,Hangup - -; dial a long distance outbound number to Australia -exten => _901161XXXXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) -exten => _901161XXXXXXXXX,2,Dial(${TRUNKX}/${EXTEN:1},,tTo) -exten => _901161XXXXXXXXX,3,Hangup - -; Extensions for performance testing -exten => _91999NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) -exten => _91999NXXXXXX,2,Dial(${TRUNKloop}/${EXTEN:2},,tTo) -exten => _91999NXXXXXX,3,Hangup -exten => 999999999999,1,AGI(agi://127.0.0.1:4577/call_log) -exten => 999999999999,2,Dial(${TRUNKloop}/${EXTEN:1},,tTo) -exten => 999999999999,3,Hangup - -; dial an 800 outbound number -exten => _91800NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) -exten => _91800NXXXXXX,2,Dial(${TRUNK}/${EXTEN:1},,tTo) -exten => _91800NXXXXXX,3,Hangup -exten => _91888NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) -exten => _91888NXXXXXX,2,Dial(${TRUNK}/${EXTEN:1},,tTo) -exten => _91888NXXXXXX,3,Hangup -exten => _91877NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) -exten => _91877NXXXXXX,2,Dial(${TRUNK}/${EXTEN:1},,tTo) -exten => _91877NXXXXXX,3,Hangup -exten => _91866NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) -exten => _91866NXXXXXX,2,Dial(${TRUNK}/${EXTEN:1},,tTo) -exten => _91866NXXXXXX,3,Hangup - -; dial a local 727 outbound number with area code -exten => _9727NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) -exten => _9727NXXXXXX,2,Dial(${TRUNK}/1${EXTEN:1},,tTo) -exten => _9727NXXXXXX,3,Hangup - -; This 'o' Dial flag is VERY important for VICIDIAL on outbound calls, -; dial a long distance outbound number -exten => _91NXXNXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) -exten => _91NXXNXXXXXX,2,Dial(${TRUNKX}/${EXTEN:1},,tTo) -exten => _91NXXNXXXXXX,3,Hangup - -; dial a local outbound number (modified because of only LD T1) -exten => _9NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) -exten => _9NXXXXXX,2,Dial(${TRUNK}/1727${EXTEN:1},,tTo) -exten => _9NXXXXXX,3,Hangup - -######------ END extensions.conf changes ------###### - - -2. Add the call_inbound entries to all incoming extensions entries that you want -CallerID popups on: - - here is how our sample dialplan changes for adding call_inbound -entries(only effected extension groups are show): -######------ START extensions.conf changes for call_inbound ------###### -; parameters for call_inbound.agi (7 fields separated by five dashes "-----"): -; 1. the extension of the phone to ring as defined in the asterisk.phones table -; 2. the phone number that was called, for the live_inbound/_log entry -; 3. a text description of the number that was called in -; 4-7. optional fields, they are also passed as fields in the GUI to web browser - -; Extension 3429 - Inbound 800 number (1-800-555-3429) -exten => _**3429,1,Ringing -exten => _**3429,2,AGI(agi://127.0.0.1:4577/call_log) -exten => _**3429,3,AGI(call_inbound.agi,spa2000-----8005553429-----Inbound 800-----x-----y-----z-----w) -exten => _**3429,4,Answer -exten => _**3429,5,Dial,sip/spa2000&sip/spa2001|30|to -exten => _**3429,6,Voicemail,u2000 -; Extension 3429 - with ANI [callerID] -exten => _*NXXNXXXXXX*3429,1,Ringing -exten => _*NXXNXXXXXX*3429,2,AGI(agi://127.0.0.1:4577/call_log) -exten => _*NXXNXXXXXX*3429,3,AGI(call_inbound.agi,spa2000-----8005553429-----Inbound 800-----x-----y-----z-----w) -exten => _*NXXNXXXXXX*3429,3,Answer -exten => _*NXXNXXXXXX*3429,4,Dial,sip/spa2000&sip/spa2001|30|to -exten => _*NXXNXXXXXX*3429,5,Voicemail,u2000 - -; parameters for agi-VDAD_ALL_inbound.agi (9 fields separated by five dashes "-----"): -; 1. the method of call handling for the script: -; - CID - CID received, add record with phone number -; - CIDLOOKUP - Lookup CID to find record in whole system -; - CIDLOOKUPRL - Restrict lookup to one list -; - CIDLOOKUPRC - Restrict lookup to one campaign's lists -; - CLOSER - Closer calls from VICIDIAL fronters -; - ANI - ANI received, add record with phone number -; - ANILOOKUP - Lookup ANI to find record in whole system -; - ANILOOKUPRL - Restrict lookup to one list -; - 3DIGITID - Enter 3 digit code to go to agent -; - 4DIGITID - Enter 4 digit code to go to agent -; - 5DIGITID - Enter 5 digit code to go to agent -; - 10DIGITID - Enter 10 digit code to go to agent -; 2. the method of searching for an available agent: -; - LO - Load Balance Overflow only (priority to home server) -; - LB - Load Balance total system -; - SO - Home server only -; 3. the full name of the IN GROUP to be used in vicidial for the inbound call -; 4. the phone number that was called, for the log entry -; 5. the callerID or lead_id of the person that called(usually overridden) -; 6. the park extension audio file name if used -; 7. the status of the call initially(usually not used) -; 8. the list_id to insert the new lead under if it is new (and CID/ANI available) -; 9. the phone dialing code to insert with the new lead if new (and CID/ANI available) -; 10. the campaign_id to search within lists if CIDLOOKUPRC -; inbound VICIDIAL call with CID delivery through T1 PRI -exten => 1234,1,Answer ; Answer the line -exten => 1234,2,AGI(agi-VDAD_ALL_inbound.agi,CID-----LB-----CL_GALLERIA-----7274515134-----Closer-----park----------999-----1) -exten => 1234,3,Hangup - -; inbound VICIDIAL transfer calls [can arrive through PRI T1 crossover, IAX or SIP channel] -exten => _90009.,1,Answer ; Answer the line -exten => _90009.,2,AGI(agi-VDAD_ALL_inbound.agi,CLOSER-----LB-----CL_TESTCAMP-----7275551212-----Closer-----park----------999-----1) -exten => _90009.,3,Hangup -exten => _990009.,1,Answer ; Answer the line -exten => _990009.,2,AGI(agi-VDAD_ALL_inbound.agi,CLOSER-----LB-----CL_TESTCAMP-----7275551212-----Closer-----park----------999-----1) -exten => _990009.,3,Hangup - - -### follow these instructions if you plan to have VICIDIAL agents take inbound or closer calls: - 1. in VICIDIAL web admin "add a new in-group" (the above examples would be "CL_GALLERIA") - - group IDs cannot contain spaces ' ' or dashes '-' or plusses '+' - - if you are using a HEX color value make sure to include the hash '#' at the beginning - 2. create a new campaign in VICIDIAL called "CLOSER" and set "allow inbound blended" to Y - 3. check the CL_GALLERIA checknox in the "Allowed In-Groups" section - 4. have agents log in to the CLOSER campaign and select the CL_GALLERIA in-group - 5. they will now start receiving inbound calls - 6. as calls come in, each call is inserted into the vicidial_list table under the - list specified int the AGI string, In the above example that would be list 999 - 7. if you want to take closer calls from the campaign "TEST" you will need to create - an in-group called "CL_TEST_" for internal closing(on the same system) or "CL_TEST_L" - for local closing(closer on different system from fronter) and then the fronter will - click on the "internal closer" button to send the call to a closer - -* NOTE, you need to set the dial_level of the CLOSER campaign to 1 or higher for inbound/closers to work - -######------ END extensions.conf changes for call_inbound ------###### - - -3. Add the ZapBarge entries for all zap lines: - - here is how our sample dialplan changes for adding zapbarge line-specific -entries(this is a pure addition, nothing is being modified): - -; ZapBarge direct channel extensions -exten => _86120XX,1,ZapBarge(${EXTEN:5}) - - -4. Add the meetme entries for astguiclient and VICIDIAL conferences to -meetme.conf: - - here is how our sample meetme.conf file changes for adding conference -entries (this is a pure addition, nothing is being modified): -######------ START meetme.conf additions for conferences ------###### -conf => 8600001 -conf => 8600002 -conf => 8600003 -conf => 8600004 -conf => 8600005 -conf => 8600006 -conf => 8600007 -conf => 8600008 -conf => 8600009 -conf => 8600010 -conf => 8600011 -conf => 8600012 -conf => 8600013 -conf => 8600014 -conf => 8600015 -conf => 8600016 -conf => 8600017 -conf => 8600018 -conf => 8600019 -conf => 8600020 -conf => 8600021 -conf => 8600022 -conf => 8600023 -conf => 8600024 -conf => 8600025 -conf => 8600026 -conf => 8600027 -conf => 8600028 -conf => 8600029 -conf => 8600030 -conf => 8600031 -conf => 8600032 -conf => 8600033 -conf => 8600034 -conf => 8600035 -conf => 8600036 -conf => 8600037 -conf => 8600038 -conf => 8600039 -conf => 8600040 -conf => 8600041 -conf => 8600042 -conf => 8600043 -conf => 8600044 -conf => 8600045 -conf => 8600046 -conf => 8600047 -conf => 8600048 -conf => 8600049 -conf => 8600050 -conf => 8600051 -conf => 8600052 -conf => 8600053 -conf => 8600054 -conf => 8600055 -conf => 8600056 -conf => 8600057 -conf => 8600058 -conf => 8600059 -conf => 8600060 -conf => 8600061 -conf => 8600062 -conf => 8600063 -conf => 8600064 -conf => 8600065 -conf => 8600066 -conf => 8600067 -conf => 8600068 -conf => 8600069 -conf => 8600070 -conf => 8600071 -conf => 8600072 -conf => 8600073 -conf => 8600074 -conf => 8600075 -conf => 8600076 -conf => 8600077 -conf => 8600078 -conf => 8600079 -conf => 8600080 -conf => 8600081 -conf => 8600082 -conf => 8600083 -conf => 8600084 -conf => 8600085 -conf => 8600086 -conf => 8600087 -conf => 8600088 -conf => 8600089 -conf => 8600090 -conf => 8600091 -conf => 8600092 -conf => 8600093 -conf => 8600094 -conf => 8600095 -conf => 8600096 -conf => 8600097 -conf => 8600098 -conf => 8600099 -conf => 8600100 -conf => 8600101 -conf => 8600102 -conf => 8600103 -conf => 8600104 -conf => 8600105 -conf => 8600106 -conf => 8600107 -conf => 8600108 -conf => 8600109 -conf => 8600110 -conf => 8600111 -conf => 8600112 -conf => 8600113 -conf => 8600114 -conf => 8600115 -conf => 8600116 -conf => 8600117 -conf => 8600118 -conf => 8600119 -conf => 8600120 -conf => 8600121 -conf => 8600122 -conf => 8600123 -conf => 8600124 -conf => 8600125 -conf => 8600126 -conf => 8600127 -conf => 8600128 -conf => 8600129 -conf => 8600130 -conf => 8600131 -conf => 8600132 -conf => 8600133 -conf => 8600134 -conf => 8600135 -conf => 8600136 -conf => 8600137 -conf => 8600138 -conf => 8600139 -conf => 8600140 -conf => 8600141 -conf => 8600142 -conf => 8600143 -conf => 8600144 -conf => 8600145 -conf => 8600146 -conf => 8600147 -conf => 8600148 -conf => 8600149 -conf => 8600150 -conf => 8600151 -conf => 8600152 -conf => 8600153 -conf => 8600154 -conf => 8600155 -conf => 8600156 -conf => 8600157 -conf => 8600158 -conf => 8600159 -conf => 8600160 -conf => 8600161 -conf => 8600162 -conf => 8600163 -conf => 8600164 -conf => 8600165 -conf => 8600166 -conf => 8600167 -conf => 8600168 -conf => 8600169 -conf => 8600170 -conf => 8600171 -conf => 8600172 -conf => 8600173 -conf => 8600174 -conf => 8600175 -conf => 8600176 -conf => 8600177 -conf => 8600178 -conf => 8600179 -conf => 8600180 -conf => 8600181 -conf => 8600182 -conf => 8600183 -conf => 8600184 -conf => 8600185 -conf => 8600186 -conf => 8600187 -conf => 8600188 -conf => 8600189 -conf => 8600190 -conf => 8600191 -conf => 8600192 -conf => 8600193 -conf => 8600194 -conf => 8600195 -conf => 8600196 -conf => 8600197 -conf => 8600198 -conf => 8600199 -conf => 8600200 -######------ END meetme.conf additions for conferences ------###### - - -5. Add the conference entries for astguiclient conferences: - - here is how our sample dialplan changes for adding conference entries (this -is a pure addition, nothing is being modified): - -; astGUIclient conferences -exten => _86000[0-4]X,1,Meetme,${EXTEN}|q - - -6. Add the conference entries for VICIDIAL conferences: - - here is how our sample dialplan changes for adding VICIDIAL conference -entries(this is a pure addition, nothing is being modified): -NOTE: see below these entries for app_conference instructions is used -######------ START extensions.conf changes for VD conf ------###### -exten => _X48600XXX,1,MeetMeAdmin(${EXTEN:2},T,${EXTEN:0:1}) -exten => _X48600XXX,2,Hangup - -exten => _X38600XXX,1,MeetMeAdmin(${EXTEN:2},t,${EXTEN:0:1}) -exten => _X38600XXX,2,Hangup - -exten => _X28600XXX,1,MeetMeAdmin(${EXTEN:2},m,${EXTEN:0:1}) -exten => _X28600XXX,2,Hangup - -exten => _X18600XXX,1,MeetMeAdmin(${EXTEN:2},M,${EXTEN:0:1}) -exten => _X18600XXX,2,Hangup - -exten => _55558600XXX,1,MeetMeAdmin(${EXTEN:4},K) -exten => _55558600XXX,2,Hangup -exten => 8300,1,Hangup - -; VICIDIAL conferences -exten => _86000[5-9]X,1,Meetme,${EXTEN}|F -exten => _86001XX,1,Meetme,${EXTEN}|F -exten => _8600200,1,Meetme,${EXTEN}|F -; quiet entry and leaving conferences for VICIDIAL -exten => _78600XXX,1,Meetme,${EXTEN:1}|Fq -; quiet monitor extensions for meetme rooms (for room managers) -exten => _68600XXX,1,Meetme,${EXTEN:1}|Fmq -; Local blind monitoring -exten => _08600XXX,1,Dial(${TRUNKblind}/6${EXTEN:1},55,To) - -; voicelab exten -exten => _86009XX,1,Meetme,${EXTEN}|Fmq -; voicelab exten moderator -exten => _986009XX,1,Meetme,${EXTEN:1} - -######------ END extensions.conf changes for VD conf ------###### - -NOTE: If you want to do DTMF passthru with app_conference bee sure to add the -"i" and "t" flags to the 8600XX lines: Conference(8600051|it) - - -7. Add the more entries for astGUIclient specific uses: - - here are some more dialplan additions needed to use astGUIclient(this is a -pure addition, nothing is being modified): -######------ START extensions.conf other additions ------###### -; park channel for client GUI parking, hangup after 30 minutes -; create a GSM formatted audio file named "park.gsm" that is 30 minutes long -; and put it in /var/lib/asterisk/sounds -exten => 8301,1,Answer -exten => 8301,2,AGI(park_CID.agi) -exten => 8301,3,Playback(park) -exten => 8301,4,Hangup -exten => 8303,1,Answer -exten => 8303,2,AGI(park_CID.agi) -exten => 8303,3,Playback(conf) -exten => 8303,4,Hangup - -; park channel for client GUI conferencing, hangup after 30 minutes -; create a GSM formatted audio file named "conf.gsm" that is 30 minutes long -; and put it in /var/lib/asterisk/sounds -exten => 8302,1,Answer -exten => 8302,2,Playback(conf) -exten => 8302,3,Hangup - -exten => 8304,1,Answer -exten => 8304,2,Playback(ding) -exten => 8304,3,Hangup - -; default audio for safe harbor 2-second-after-hello message then hangup -; create a GSM formatted audio file complies with safe harbor rules -; and put it in /var/lib/asterisk/sounds then change filename below -exten => 8307,1,Answer -exten => 8307,2,Playback(vm-goodbye) -exten => 8307,3,Hangup - -; this is used for recording conference calls, the client app sends the filename -; value as a callerID recordings go to /var/spool/asterisk/monitor (WAV) -; SEE extensions.conf.sample-1.4 for changes needed for use with Asterisk 1.4 -exten => 8309,1,Answer -exten => 8309,2,Monitor(wav,${CALLERIDNAME}) -exten => 8309,3,Wait,3600 -exten => 8309,4,Hangup - -; this is used for recording conference calls, the client app sends the filename -; value as a callerID recordings go to /var/spool/asterisk/monitor (GSM) -; SEE extensions.conf.sample-1.4 for changes needed for use with Asterisk 1.4 -exten => 8310,1,Answer -exten => 8310,2,Monitor(gsm,${CALLERIDNAME}) -exten => 8310,3,Wait,3600 -exten => 8310,4,Hangup - -; this is used for playing a message to an answering machine forwarded from AMD in VICIDIAL -; replace conf with the message file you want to leave -exten => 8320,1,WaitForSilence(2000,2) ; AMD got machine. leave message after recording -exten => 8320,2,Playback(conf) -exten => 8320,3,AGI(VD_amd_post.agi,${EXTEN}) -exten => 8320,4,Hangup - -; this is used to allow the GUI to send you directly into voicemail -; don't forget to set GUI variable $voicemail_exten to this extension -; SEE extensions.conf.sample-1.4 for changes needed for use with Asterisk 1.4 -exten => 8501,1,VoicemailMain(s${CALLERIDNUM}) -exten => 8501,2,Hangup - -; this is used to allow the GUI to send live calls directly into voicemail -; don't forget to set GUI variable $voicemail_dump_exten to this extension -exten => _85026666666666.,1,Wait(2) -exten => _85026666666666.,2,Voicemail(${EXTEN:14}) -exten => _85026666666666.,3,Hangup - -; this is used for sending DTMF signals within conference calls, the client app -; sends the digits to be played in the callerID field -; sound files must be placed in /var/lib/asterisk/sounds -exten => 8500998,1,Answer -exten => 8500998,2,Playback(silence) -exten => 8500998,3,AGI(agi-dtmf.agi) -exten => 8500998,4,Hangup - -; prompts for recording AGI script, ID is 4321 -; first variable is format (gsm/wav) -; second variable is timeout in milliseconds (default is 360000 [6 minutes]) -exten => 8167,1,Answer -exten => 8167,2,AGI(agi-record_prompts.agi,wav-----360000) -exten => 8167,3,Hangup -exten => 8168,1,Answer -exten => 8168,2,AGI(agi-record_prompts.agi,gsm-----360000) -exten => 8168,3,Hangup - -; playback of recorded prompts -exten => _851XXXXX,1,Answer -exten => _851XXXXX,2,Playback(${EXTEN}) -exten => _851XXXXX,3,Hangup - -#### VDAD STANDARD TRANSFER ENTRIES #### -; VICIDIAL_auto_dialer transfer script for no-agent campaigns: -exten => 8364,1,Playback(sip-silence) -exten => 8364,2,AGI(agi://127.0.0.1:4577/call_log) -exten => 8364,3,AGI(agi-VDADtransferBROADCAST.agi,${EXTEN}) -exten => 8364,4,AGI(agi-VDADtransferBROADCAST.agi,${EXTEN}) -exten => 8364,5,Hangup - -; VICIDIAL_auto_dialer transfer script: -exten => 8365,1,AGI(agi://127.0.0.1:4577/call_log) -exten => 8365,2,AGI(agi-VDADtransfer.agi,${EXTEN}) -exten => 8365,3,AGI(agi-VDADtransfer.agi,${EXTEN}) -exten => 8365,4,AGI(agi-VDADtransfer.agi,${EXTEN}) -exten => 8365,5,Hangup - -; VICIDIAL_auto_dialer transfer script SURVEY at beginning: -exten => 8366,1,AGI(agi://127.0.0.1:4577/call_log) -exten => 8366,2,AGI(agi-VDADtransferSURVEY.agi,${EXTEN}) -exten => 8366,3,AGI(agi-VDADtransferSURVEY.agi,${EXTEN}) -exten => 8366,4,AGI(agi-VDADtransferSURVEY.agi,${EXTEN}) -exten => 8366,5,Hangup - -; VICIDIAL_auto_dialer transfer script Load Balance Overflow: -exten => 8367,1,AGI(agi://127.0.0.1:4577/call_log) -exten => 8367,2,AGI(agi-VDAD_LO_transfer.agi,${EXTEN}) -exten => 8367,3,AGI(agi-VDAD_LO_transfer.agi,${EXTEN}) -exten => 8367,4,AGI(agi-VDAD_LO_transfer.agi,${EXTEN}) -exten => 8367,5,Hangup - -; VICIDIAL_auto_dialer transfer script Load Balanced: -exten => 8368,1,AGI(agi://127.0.0.1:4577/call_log) -exten => 8368,2,AGI(agi-VDAD_LB_transfer.agi,${EXTEN}) -exten => 8368,3,AGI(agi-VDAD_LB_transfer.agi,${EXTEN}) -exten => 8368,4,AGI(agi-VDAD_LB_transfer.agi,${EXTEN}) -exten => 8368,5,Hangup - -; VICIDIAL_auto_dialer transfer script AMD with Load Balanced: -exten => 8369,1,AGI(agi://127.0.0.1:4577/call_log) -exten => 8369,2,AMD(3500|1500|300|5000|120|50|5|256) -exten => 8369,3,AGI(VD_amd.agi,${EXTEN}) -exten => 8369,4,AGI(agi-VDAD_LB_transfer.agi,${EXTEN}) -exten => 8369,5,AGI(agi-VDAD_LB_transfer.agi,${EXTEN}) -exten => 8369,6,AGI(agi-VDAD_LB_transfer.agi,${EXTEN}) -exten => 8369,7,Hangup - -; VICIDIAL auto-dial reminder script -exten => 8372,1,AGI(agi://127.0.0.1:4577/call_log) -exten => 8372,2,AGI(agi-VDADautoREMINDER.agi,${EXTEN}) -exten => 8372,3,AGI(agi-VDADautoREMINDER.agi,${EXTEN}) -exten => 8372,4,AGI(agi-VDADautoREMINDER.agi,${EXTEN}) -exten => 8372,5,Hangup - -#### VDAD SIP UNREGISTERED TRANSFER ENTRIES #### -#### Use these entries IN PLACE OF the entries above if you are using SIP trunks -#### and are not registering your provider in sip.conf -; VICIDIAL_auto_dialer transfer script: -exten => 8365,1,Playback(sip-silence) -exten => 8365,2,AGI(agi://127.0.0.1:4577/call_log) -exten => 8365,3,AGI(agi-VDADtransfer.agi,${EXTEN}) -exten => 8365,4,AGI(agi-VDADtransfer.agi,${EXTEN}) -exten => 8365,5,Hangup - -; VICIDIAL_auto_dialer transfer script SURVEY at beginning: -exten => 8366,1,Playback(sip-silence) -exten => 8366,2,AGI(agi://127.0.0.1:4577/call_log) -exten => 8366,3,AGI(agi-VDADtransferSURVEY.agi,${EXTEN}) -exten => 8366,4,AGI(agi-VDADtransferSURVEY.agi,${EXTEN}) -exten => 8366,5,Hangup - -; VICIDIAL_auto_dialer transfer script Load Balance Overflow: -exten => 8367,1,Playback(sip-silence) -exten => 8367,2,AGI(agi://127.0.0.1:4577/call_log) -exten => 8367,3,AGI(agi-VDAD_LO_transfer.agi,${EXTEN}) -exten => 8367,4,AGI(agi-VDAD_LO_transfer.agi,${EXTEN}) -exten => 8367,5,Hangup - -; VICIDIAL_auto_dialer transfer script Load Balanced: -exten => 8368,1,Playback(sip-silence) -exten => 8368,2,AGI(agi://127.0.0.1:4577/call_log) -exten => 8368,3,AGI(agi-VDAD_LB_transfer.agi,${EXTEN}) -exten => 8368,4,AGI(agi-VDAD_LB_transfer.agi,${EXTEN}) -exten => 8368,5,Hangup - -; VICIDIAL_auto_dialer transfer script AMD with Load Balanced: -exten => 8369,1,Playback(sip-silence) -exten => 8369,2,AGI(agi://127.0.0.1:4577/call_log) -exten => 8369,3,AMD(3500|1500|300|5000|120|50|5|256) -exten => 8369,4,AGI(VD_amd.agi,${EXTEN}) -exten => 8369,5,AGI(agi-VDAD_LB_transfer.agi,${EXTEN}) -exten => 8369,6,AGI(agi-VDAD_LB_transfer.agi,${EXTEN}) -exten => 8369,7,Hangup - -; VICIDIAL auto-dial reminder script -exten => 8372,1,Playback(sip-silence) -exten => 8372,2,AGI(agi://127.0.0.1:4577/call_log) -exten => 8372,3,AGI(agi-VDADautoREMINDER.agi,${EXTEN}) -exten => 8372,4,AGI(agi-VDADautoREMINDER.agi,${EXTEN}) -exten => 8372,5,Hangup - - - -SUBPHASE 6.3: adding entries to your MySQL "asterisk" database for vicidial -applications - -We need to add a few initial values to the vicidial tables in the "asterisk" -database in order to start setting up the vicidial dialer system for use. - -1. at the command prompt type this to go to the mysql client: -/usr/local/mysql/bin/mysql -2. type the following into the mysql client prompt: - (make sure you put your IP address in place of "10.10.10.15" in the queries below) -######------ BEGIN Mysql data entry(you can copy and paste this into terminal) # - -insert into vicidial_conferences values('8600051','10.10.10.15',''); -insert into vicidial_conferences values('8600052','10.10.10.15',''); -insert into vicidial_conferences values('8600053','10.10.10.15',''); -insert into vicidial_conferences values('8600054','10.10.10.15',''); -insert into vicidial_conferences values('8600055','10.10.10.15',''); -insert into vicidial_conferences values('8600056','10.10.10.15',''); -insert into vicidial_conferences values('8600057','10.10.10.15',''); -insert into vicidial_conferences values('8600058','10.10.10.15',''); -insert into vicidial_conferences values('8600059','10.10.10.15',''); -insert into vicidial_conferences values('8600060','10.10.10.15',''); -insert into vicidial_conferences values('8600061','10.10.10.15',''); -insert into vicidial_conferences values('8600062','10.10.10.15',''); -insert into vicidial_conferences values('8600063','10.10.10.15',''); -insert into vicidial_conferences values('8600064','10.10.10.15',''); -insert into vicidial_conferences values('8600065','10.10.10.15',''); -insert into vicidial_conferences values('8600066','10.10.10.15',''); -insert into vicidial_conferences values('8600067','10.10.10.15',''); -insert into vicidial_conferences values('8600068','10.10.10.15',''); -insert into vicidial_conferences values('8600069','10.10.10.15',''); -insert into vicidial_conferences values('8600070','10.10.10.15',''); -insert into vicidial_conferences values('8600071','10.10.10.15',''); -insert into vicidial_conferences values('8600072','10.10.10.15',''); -insert into vicidial_conferences values('8600073','10.10.10.15',''); -insert into vicidial_conferences values('8600074','10.10.10.15',''); -insert into vicidial_conferences values('8600075','10.10.10.15',''); -insert into vicidial_conferences values('8600076','10.10.10.15',''); -insert into vicidial_conferences values('8600077','10.10.10.15',''); -insert into vicidial_conferences values('8600078','10.10.10.15',''); -insert into vicidial_conferences values('8600079','10.10.10.15',''); -insert into vicidial_conferences values('8600080','10.10.10.15',''); -insert into vicidial_conferences values('8600081','10.10.10.15',''); -insert into vicidial_conferences values('8600082','10.10.10.15',''); -insert into vicidial_conferences values('8600083','10.10.10.15',''); -insert into vicidial_conferences values('8600084','10.10.10.15',''); -insert into vicidial_conferences values('8600085','10.10.10.15',''); -insert into vicidial_conferences values('8600086','10.10.10.15',''); -insert into vicidial_conferences values('8600087','10.10.10.15',''); -insert into vicidial_conferences values('8600088','10.10.10.15',''); -insert into vicidial_conferences values('8600089','10.10.10.15',''); -insert into vicidial_conferences values('8600090','10.10.10.15',''); -insert into vicidial_conferences values('8600091','10.10.10.15',''); -insert into vicidial_conferences values('8600092','10.10.10.15',''); -insert into vicidial_conferences values('8600093','10.10.10.15',''); -insert into vicidial_conferences values('8600094','10.10.10.15',''); -insert into vicidial_conferences values('8600095','10.10.10.15',''); -insert into vicidial_conferences values('8600096','10.10.10.15',''); -insert into vicidial_conferences values('8600097','10.10.10.15',''); -insert into vicidial_conferences values('8600098','10.10.10.15',''); -insert into vicidial_conferences values('8600099','10.10.10.15',''); -insert into vicidial_conferences values('8600100','10.10.10.15',''); -insert into vicidial_conferences values('8600101','10.10.10.15',''); -insert into vicidial_conferences values('8600102','10.10.10.15',''); -insert into vicidial_conferences values('8600103','10.10.10.15',''); -insert into vicidial_conferences values('8600104','10.10.10.15',''); -insert into vicidial_conferences values('8600105','10.10.10.15',''); -insert into vicidial_conferences values('8600106','10.10.10.15',''); -insert into vicidial_conferences values('8600107','10.10.10.15',''); -insert into vicidial_conferences values('8600108','10.10.10.15',''); -insert into vicidial_conferences values('8600109','10.10.10.15',''); -insert into vicidial_conferences values('8600110','10.10.10.15',''); -insert into vicidial_conferences values('8600111','10.10.10.15',''); -insert into vicidial_conferences values('8600112','10.10.10.15',''); -insert into vicidial_conferences values('8600113','10.10.10.15',''); -insert into vicidial_conferences values('8600114','10.10.10.15',''); -insert into vicidial_conferences values('8600115','10.10.10.15',''); -insert into vicidial_conferences values('8600116','10.10.10.15',''); -insert into vicidial_conferences values('8600117','10.10.10.15',''); -insert into vicidial_conferences values('8600118','10.10.10.15',''); -insert into vicidial_conferences values('8600119','10.10.10.15',''); -insert into vicidial_conferences values('8600120','10.10.10.15',''); -insert into vicidial_conferences values('8600121','10.10.10.15',''); -insert into vicidial_conferences values('8600122','10.10.10.15',''); -insert into vicidial_conferences values('8600123','10.10.10.15',''); -insert into vicidial_conferences values('8600124','10.10.10.15',''); -insert into vicidial_conferences values('8600125','10.10.10.15',''); -insert into vicidial_conferences values('8600126','10.10.10.15',''); -insert into vicidial_conferences values('8600127','10.10.10.15',''); -insert into vicidial_conferences values('8600128','10.10.10.15',''); -insert into vicidial_conferences values('8600129','10.10.10.15',''); -insert into vicidial_conferences values('8600130','10.10.10.15',''); -insert into vicidial_conferences values('8600131','10.10.10.15',''); -insert into vicidial_conferences values('8600132','10.10.10.15',''); -insert into vicidial_conferences values('8600133','10.10.10.15',''); -insert into vicidial_conferences values('8600134','10.10.10.15',''); -insert into vicidial_conferences values('8600135','10.10.10.15',''); -insert into vicidial_conferences values('8600136','10.10.10.15',''); -insert into vicidial_conferences values('8600137','10.10.10.15',''); -insert into vicidial_conferences values('8600138','10.10.10.15',''); -insert into vicidial_conferences values('8600139','10.10.10.15',''); -insert into vicidial_conferences values('8600140','10.10.10.15',''); -insert into vicidial_conferences values('8600141','10.10.10.15',''); -insert into vicidial_conferences values('8600142','10.10.10.15',''); -insert into vicidial_conferences values('8600143','10.10.10.15',''); -insert into vicidial_conferences values('8600144','10.10.10.15',''); -insert into vicidial_conferences values('8600145','10.10.10.15',''); -insert into vicidial_conferences values('8600146','10.10.10.15',''); -insert into vicidial_conferences values('8600147','10.10.10.15',''); -insert into vicidial_conferences values('8600148','10.10.10.15',''); -insert into vicidial_conferences values('8600149','10.10.10.15',''); -insert into vicidial_conferences values('8600150','10.10.10.15',''); -insert into vicidial_conferences values('8600151','10.10.10.15',''); -insert into vicidial_conferences values('8600152','10.10.10.15',''); -insert into vicidial_conferences values('8600153','10.10.10.15',''); -insert into vicidial_conferences values('8600154','10.10.10.15',''); -insert into vicidial_conferences values('8600155','10.10.10.15',''); -insert into vicidial_conferences values('8600156','10.10.10.15',''); -insert into vicidial_conferences values('8600157','10.10.10.15',''); -insert into vicidial_conferences values('8600158','10.10.10.15',''); -insert into vicidial_conferences values('8600159','10.10.10.15',''); -insert into vicidial_conferences values('8600160','10.10.10.15',''); -insert into vicidial_conferences values('8600161','10.10.10.15',''); -insert into vicidial_conferences values('8600162','10.10.10.15',''); -insert into vicidial_conferences values('8600163','10.10.10.15',''); -insert into vicidial_conferences values('8600164','10.10.10.15',''); -insert into vicidial_conferences values('8600165','10.10.10.15',''); -insert into vicidial_conferences values('8600166','10.10.10.15',''); -insert into vicidial_conferences values('8600167','10.10.10.15',''); -insert into vicidial_conferences values('8600168','10.10.10.15',''); -insert into vicidial_conferences values('8600169','10.10.10.15',''); -insert into vicidial_conferences values('8600170','10.10.10.15',''); -insert into vicidial_conferences values('8600171','10.10.10.15',''); -insert into vicidial_conferences values('8600172','10.10.10.15',''); -insert into vicidial_conferences values('8600173','10.10.10.15',''); -insert into vicidial_conferences values('8600174','10.10.10.15',''); -insert into vicidial_conferences values('8600175','10.10.10.15',''); -insert into vicidial_conferences values('8600176','10.10.10.15',''); -insert into vicidial_conferences values('8600177','10.10.10.15',''); -insert into vicidial_conferences values('8600178','10.10.10.15',''); -insert into vicidial_conferences values('8600179','10.10.10.15',''); -insert into vicidial_conferences values('8600180','10.10.10.15',''); -insert into vicidial_conferences values('8600181','10.10.10.15',''); -insert into vicidial_conferences values('8600182','10.10.10.15',''); -insert into vicidial_conferences values('8600183','10.10.10.15',''); -insert into vicidial_conferences values('8600184','10.10.10.15',''); -insert into vicidial_conferences values('8600185','10.10.10.15',''); -insert into vicidial_conferences values('8600186','10.10.10.15',''); -insert into vicidial_conferences values('8600187','10.10.10.15',''); -insert into vicidial_conferences values('8600188','10.10.10.15',''); -insert into vicidial_conferences values('8600189','10.10.10.15',''); -insert into vicidial_conferences values('8600190','10.10.10.15',''); -insert into vicidial_conferences values('8600191','10.10.10.15',''); -insert into vicidial_conferences values('8600192','10.10.10.15',''); -insert into vicidial_conferences values('8600193','10.10.10.15',''); -insert into vicidial_conferences values('8600194','10.10.10.15',''); -insert into vicidial_conferences values('8600195','10.10.10.15',''); -insert into vicidial_conferences values('8600196','10.10.10.15',''); -insert into vicidial_conferences values('8600197','10.10.10.15',''); -insert into vicidial_conferences values('8600198','10.10.10.15',''); -insert into vicidial_conferences values('8600199','10.10.10.15',''); -insert into vicidial_conferences values('8600200','10.10.10.15',''); - -######------ END Mysql data entry ------###### - - - -SUBPHASE 6.4: setting up asterisk and helper applications for startup - -1. Make several entries in the rc.local of your system: - - on the command line type: - - vi /etc/rc.d/rc.local - - add the following entries(here's what we used): - -# OPTIONAL enable ip_relay(for same-machine trunking and blind monitoring) -# /usr/share/astguiclient/ip_relay/relay_control start 2>/dev/null 1>&2 - -# Disable console blanking and powersaving -/usr/bin/setterm -blank -/usr/bin/setterm -powersave off -/usr/bin/setterm -powerdown - -### start time server -/usr/local/bin/ntpdate -u 18.145.0.30 -/usr/sbin/ntpd - -### start up the MySQL server -/usr/local/mysql/bin/mysqld_safe --user=mysql --skip-name-resolve --skip-host-cache & - -### start up the MySQL 4.1.X server (with old passwords) -/usr/local/mysql/bin/safe_mysqld --old-passwords --skip-name-resolve --skip-host-cache & - -### start up the apache web server -/usr/local/apache2/bin/apachectl start - -### roll the Asterisk logs upon reboot -/usr/share/astguiclient/ADMIN_restart_roll_logs.pl - -### clear the server-related records from the database -/usr/share/astguiclient/AST_reset_mysql_vars.pl - -### load digium tormenta 4xT1 drivers into system -modprobe zaptel -modprobe wct1xxp -/sbin/ztcfg -vvvvvvvvvvvv - -### sybsys local login -touch /var/lock/subsys/local - -### sleep for 20 seconds before launching Asterisk -sleep 20 - -### start up asterisk -/usr/share/astguiclient/start_asterisk_boot.pl - - - you are done - - - - -SUBPHASE 6.5: setting up astguiclient scripts for continuous running - -1. Make several entries in the crontab of your system: - - on the command line type: - - cd /usr/share/astguiclient - - crontab -e - - add the following entries(here's what we used): - -### recording mixing/compressing/ftping scripts -0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * /usr/share/astguiclient/AST_CRON_audio_1_move_mix.pl -#0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * /usr/share/astguiclient/AST_CRON_audio_1_move_VDonly.pl -1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58 * * * * /usr/share/astguiclient/AST_CRON_audio_2_compress.pl --GSM -#2,5,8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53,56,59 * * * * /usr/share/astguiclient/AST_CRON_audio_3_ftp.pl --GSM - -### keepalive script for astguiclient processes -* * * * * /usr/share/astguiclient/ADMIN_keepalive_ALL.pl - -### kill Hangup script for Asterisk updaters -* * * * * /usr/share/astguiclient/AST_manager_kill_hung_congested.pl - -### updater for voicemail -* * * * * /usr/share/astguiclient/AST_vm_update.pl - -### updater for conference validator -* * * * * /usr/share/astguiclient/AST_conf_update.pl - -### flush queue DB table every hour for entries older than 1 hour -11 * * * * /usr/share/astguiclient/AST_flush_DBqueue.pl -q - -### fix the vicidial_agent_log once every hour -33 * * * * /usr/share/astguiclient/AST_cleanup_agent_log.pl - -### updater for VICIDIAL hopper -* * * * * /usr/share/astguiclient/AST_VDhopper.pl -q - -### adjust the GMT offset for the leads in the vicidial_list table -1 1,7 * * * /usr/share/astguiclient/ADMIN_adjust_GMTnow_on_leads.pl --debug --postal-code-gmt - -### reset several temporary-info tables in the database -2 1 * * * /usr/share/astguiclient/AST_reset_mysql_vars.pl - -### optimize the database tables within the asterisk database -3 1 * * * /usr/share/astguiclient/AST_DB_optimize.pl - -## adjust time on the server with ntp -30 * * * * /usr/local/bin/ntpdate -u 18.145.0.30 2>/dev/null 1>&2 - -### VICIDIAL agent time log weekly and daily summary report generation -2 0 * * 0 /usr/share/astguiclient/AST_agent_week.pl -22 0 * * * /usr/share/astguiclient/AST_agent_day.pl - -### VICIDIAL campaign export scripts (OPTIONAL) -#32 0 * * * /usr/share/astguiclient/AST_VDsales_export.pl -#42 0 * * * /usr/share/astguiclient/AST_sourceID_summary_export.pl - -### remove old recordings more than 7 days old -24 0 * * * /usr/bin/find /var/spool/asterisk/monitor -maxdepth 2 -type f -mtime +7 -print | xargs rm -f - -### remove old vicidial logs and asterisk logs more than 2 days old -28 0 * * * /usr/bin/find /var/log/astguiclient -maxdepth 1 -type f -mtime +2 -print | xargs rm -f -29 0 * * * /usr/bin/find /var/log/asterisk -maxdepth 3 -type f -mtime +2 -print | xargs rm -f - - - - - - once your system starts up you can attach to the screen running asterisk by -typing "screen -r " find which screen by typing "screen -r" and -looking for the lowest screen number. Then to detach again from the screen -while you are in it type 'Ctrl+a' then 'd' - - you are done - -NOTES: -- The AST_agent_day.pl and AST_agent_week.pl scripts create an ASCII fixed-length report of all agent activity on the system -- The AST_VDsales_export.pl script allows for the exporting(into several different formats) of specified vicidial_list data based on status and campaign as well as inbound group -- The AST_sourceID_summary_export.pl script summarizes leads in the system by source_id and generates a text report - - - - - -SUBPHASE 6.6: adding test leads to the VICIDIAL database and configuring a -VICIDIAL campaign and users - -First we will add a few test leads to the vicidial_list table so that we can -test our system. There is also an application included with the distribution -that will accept a delimited file of leads placed in the /usr/share/astguiclient/VICIDIAL/LEADS_IN/ -directory and load it into the database automatically(VICIDIAL_IN_new_leads_file.pl -[a sample lead file in the proper format is included with this release: - - test_VICIDIAL_lead_file.txt]) -If you want to use the lead import script I suggest looking at the code to make -sure it is entering what you want it to. We are not going to go over that -particular script in this document. - -Also, there is a web-based lead loader that was made available as of the 1.1.1 -release and is accessible from the VICIDIAL admin.php web page(click on the -"LOAD NEW LEADS" link at the top of the admin page). To get to this page you -must have permissions in the vicidial_user table(Load Leads set to 1) . -Instructions on it's use are included on the page through the help question -mark link. -NOTE: in PHP you must have "fileuploads" enabled for this page to work. -NOTE: it is important to have your proper country code in the phone_code field of your leads so that the GMT offset encodding will properly code the time zones for your leads. For the USA/Canada/Caribbean this would be 1. For the UK this is 44 and Mexico is 52 and so on. - -Second we need to add the disposition statuses into the system, all of these -queries are below: -(Note: you may want to replace 7275551212 with a real number to test in these -records) - -1. at the command prompt type go to the mysql client: -/usr/local/mysql/bin/mysql -2. type the following into the mysql client prompt: - (make sure you put your IP address in place of "10.10.10.15" in the queries -below) -######------ BEGIN Mysql data entry(you can copy and paste this into terminal) # - -insert into vicidial_list values('','2004-01-06','','NEW','','','TEST01','101','TESTCAMP','N','1','7275551212','Mr','Matt','X','lead01','1234 Fake St.','','','Clearwater','FL','','33760','USA','M','1970-01-01','','test@test.com','suprise','comments go here','0'); -insert into vicidial_list values('','2004-01-06','','NEW','','','TEST01','101','TESTCAMP','N','1','7275551212','Mr','Matt','X','lead02','1234 Fake St.','','','Clearwater','FL','','33760','USA','M','1970-01-01','','test@test.com','suprise','comments go here','0'); -insert into vicidial_list values('','2004-01-07','','NEW','','','TEST01','101','TESTCAMP','N','1','7275551212','Mr','Matt','X','lead03','1234 Fake St.','','','Clearwater','FL','','33760','USA','M','1970-01-01','','test@test.com','suprise','comments go here','0'); -insert into vicidial_list values('','2004-01-07','','NEW','','','TEST01','101','TESTCAMP','N','1','7275551212','Mr','Matt','X','lead04','1234 Fake St.','','','Clearwater','FL','','33760','USA','M','1970-01-01','','test@test.com','suprise','comments go here','0'); -insert into vicidial_list values('','2004-01-07','','NEW','','','TEST01','101','TESTCAMP','N','1','7275551212','Mr','Matt','X','lead05','1234 Fake St.','','','Clearwater','FL','','33760','USA','M','1970-01-01','','test@test.com','suprise','comments go here','0'); -insert into vicidial_list values('','2004-01-07','','NEW','','','TEST01','101','TESTCAMP','N','1','7275551212','Mr','Matt','X','lead06','1234 Fake St.','','','Clearwater','FL','','33760','USA','M','1970-01-01','','test@test.com','suprise','comments go here','0'); -insert into vicidial_list values('','2004-01-07','','NEW','','','TEST01','101','TESTCAMP','N','1','7275551212','Mr','Matt','X','lead07','1234 Fake St.','','','Clearwater','FL','','33760','USA','M','1970-01-01','','test@test.com','suprise','comments go here','0'); - -### these first 5 must be in all VICIDIAL systems for it to work properly # -insert into vicidial_statuses values('NEW','New Lead','N','N','UNDEFINED'); -insert into vicidial_statuses values('QUEUE','Lead To Be Called','N','N','UNDEFINED'); -insert into vicidial_statuses values('INCALL','Lead Being Called','N','N','UNDEFINED'); -insert into vicidial_statuses values('DROP','Agent Not Available','N','Y','UNDEFINED'); -insert into vicidial_statuses values('XDROP','Agent Not Available IN','N','Y','UNDEFINED'); -insert into vicidial_statuses values('NA','No Answer AutoDial','N','N','UNDEFINED'); - -insert into vicidial_statuses values('CALLBK','Call Back','Y','Y','UNDEFINED'); -insert into vicidial_statuses values('CBHOLD','Call Back Hold','N','Y','UNDEFINED'); -insert into vicidial_statuses values('A','Answering Machine','Y','N','UNDEFINED'); -insert into vicidial_statuses values('AA','Answering Machine Auto','N','N','UNDEFINED'); -insert into vicidial_statuses values('AM','Answering Machine Sent to Mesg','N','N','UNDEFINED'); -insert into vicidial_statuses values('AL','Answering Machine Msg Played','N','N','UNDEFINED'); -insert into vicidial_statuses values('B','Busy','Y','N','UNDEFINED'); -insert into vicidial_statuses values('DC','Disconnected Number','Y','N','UNDEFINED'); -insert into vicidial_statuses values('DEC','Declined Sale','Y','Y','UNDEFINED'); -insert into vicidial_statuses values('DNC','DO NOT CALL','Y','Y','UNDEFINED'); -insert into vicidial_statuses values('SALE','Sale Made','Y','Y','UNDEFINED'); -insert into vicidial_statuses values('N','No Answer','Y','N','UNDEFINED'); -insert into vicidial_statuses values('NI','Not Interested','Y','Y','UNDEFINED'); -insert into vicidial_statuses values('NP','No Pitch No Price','Y','Y','UNDEFINED'); -insert into vicidial_statuses values('XFER','Call Transferred','Y','Y','UNDEFINED'); - -quit -######------ END Mysql data entry ------###### - -Now that the sample leads and disposition codes have been entered, we can go -into the VICIDIAL administration website and set up our campaigns, lists and users. -But first let's make sure that they have the right GMT offset: - run this on the command line: - - /usr/share/astguiclient/ADMIN_adjust_GMTnow_on_leads.pl --postal-code-gmt - -3. Enter the astguiclient administration page: -http://10.10.10.15/vicidial/admin.php -(use the username and password created when we entered a record into the -vicidial_users table in SUBPHASE 6.1, In our case this is 6666 and 1234) -NOTE: if you click on the Logout button you must leave the user/pass empty and click OK - - Now that you are logged into the vicidial administration system we can add -new user entries for each of the new users and enter new campaigns and new -lists. - - The first step is to enter your new users, Click on the ADD A NEW USER -and fill in the appropriate information for each now user you want to -add. - - Next, you need to create a new campaign, click on the ADD A NEW -CAMPAIGN link and fill in what you want the campaign to be called as -well as a description - - Next, you need to define a new list, click on the ADD A NEW LIST link -and fill in what you want the list to be called as well as a using the -list ID of the leads that we loaded in the previous step "101" and -select the new campaign from the pull-down menu that we just created. - - Now that you have created your list, make it active by changing active to Y - - now modify your campaign ang change the first status to be called to -NEW and submit. Now your system is ready to dial. - - you are done - - - -SUBPHASE 6.7: VICIDIAL remote agents: - -With v1.0 of VICIDIAL we have the ability to use a simple web form to give -remote agents a way to receive calls to whatever number they happen to be at, -and they can view/edit call details and see a call log all through a web page -(vdremote.php) or http://10.10.10.15/vicidial/vdremote.php on this installation. -Remote Agents is only recommended for inbound calls because of the extra time -needed to dial a number out to transfer the call to. To set up remote agents, -just go to the vicidial admin.php page and ADD NEW REMOTE AGENTS(Make sure the -userID start also has a user login so they can get to the vdremote page). You -will see that you can set up a remote agent entry to take multiple lines if you -wish meaning that, for example, if you need to send all of your calls to another -location because of a massive snowstorm(and none of your agents showed up at work) -you just log in that remote agent record with say 10 lines and then all of those -calls will be directed to the same number you set up for the remote agent. Then -again you could just get your agents to log in from home if they have a phone -and computer - - - -SUBPHASE 6.8: astGUIclient web-only client: - -With 1.1.1 release of astguiclient we have completely rewritten the astGUIclient -client app in AJAX(PHP/Javascript/XMLHTTPRequest) to enable a full, real-time -GUI interface using only a web browser. The browser requirements for this are: -- Firefox 0.9 or greater (Firefox 1.0.7 is the recommended browser) -- Mozilla 1.7 or greater -- Netscape 8 or greater -- Opera 8.5 or greater -- Microsoft Internet Explorer 6.0 - -This new version also has more flexibility and functionality than the perl/Tk -version as well as being prettier. We have successfully tested this on many -platforms and in remote locations. It functioned wonderfully off-site with one -of our IAX hardphones and offers a lot of promise for road warriors who need -a lot of options on their phone usage like conferencing and a detailed call log. - -To log into this app you will need a login setup in the vicidial_users table -with a user_level of 1 or greater as well as an entry for the phone you are -using in the phones table. You will first get a login prompt for the vicidial -login then you will have the phone login where you enter the Login and Password -for that phone entry. From there the app should display and you will see the -MAIN screen with your phone information, voicemail display and your inbound/ -outbound phone call log. - -The example web page you would go to on this installation would be: -http://10.10.10.15/agc/astguiclient.php - -The inbound log and callerID popup is dependant on having a call_inbound.agi -entry in your dialplan before you phone is dialed(see subphase 6.2 step 2) - -Another thing to note is that you can have the agc folder(with the .php files -in it) copied to multiple web servers, you just need to make sure that the -MySQL database connection works (check the settings in the dbconnect.php file -that is in the agc directory). We have had astguiclient.php running on 3 -separate web servers for the same DB server and Asterisk server. This is an -easy way to allow for auto failover and/or redundancy. Also, this client will -work over SSL connections(https) for encrypted communications with the server. - -New in astGUIclient release 1.1.7 is multi-language support. multi-language -versions of web-clients and admin pages are available in the LANG_www directory -and can be unzipped into your webroot directory. - - - -SUBPHASE 6.9: VICIDIAL web-only client: - -NOTE: There is a VICIDIAL Agent manual available from http://www.eflo.net - -With 1.1.6 release of astguiclient we have finished the rewrite of the VICIDIAL -client app in AJAX(PHP/Javascript/XMLHTTPRequest) to enable a full, real-time -GUI interface using only a web browser like we have done with astGUIclient. -The browser requirements for this are: -- Firefox 0.9 or greater (Firefox 1.0.7 is the recommended browser) -- Mozilla 1.7 or greater -- Netscape 8 or greater -- Opera 8.5 or greater -- Microsoft Internet Explorer 6.0 - -This version is fully functional and has been tested in our production -call center with no problems. - -To log into this app you will need a login setup in the vicidial_users table -with a user_level of 1 or greater as well as an entry for the phone you are -using in the phones table. You will first get a login prompt for the vicidial -login then you will have the phone login where you enter the Login and Password -for that phone entry. From there the app should display and you will see the -VICIDIAL screen with your phone information. - -The example web page you would go to on this installation would be: -http://10.10.10.15/agc/vicidial.php - -One more feature that the VICIDIAL web-client offers is the ability to set up -an EXTERNAL phone extension in the astguiclient admin section so that you can -have agents log in to vicidial.php wherever they have access to a phone with -an external phone number and a web browser. To do this follow these steps: -- "ADD PHONE" in the admin.php web page and enter whatever name you want -- For the dialplan number field put in the full digits that you would dial from - the Asterisk server to get to that agent's external phone(with 91 if used) -- For the Protocol select EXTERNAL -- make sure the agent knows the login and password set for this phone entry. -Then the agent will go to the vicidial.php page and enter in their phone -login/pass, their vicidial user/pass/campaign and their phone should ring in a -few seconds, and they are logged in and ready to take calls. - -Another thing to note is that you can have the agc folder(with the .php files -in it) copied to multiple web servers, you just need to make sure that the -MySQL database connection works (check the settings in the dbconnect.php file -that is in the agc directory). We have had astguiclient.php running on 3 -separate web servers for the same DB server and Asterisk server. This is an -easy way to allow for auto failover and/or redundancy. Also, this client will -work over SSL connections(https) for encrypted communications with the server. - -New in astGUIclient release 1.1.7 is multi-language support. multi-language -versions of web-clients and admin pages are available in the LANG_www directory -and can be unzipped into your webroot directory. - -Admin Note: If you want to enable your agents to login with only their user/pass -you can hardcode the phone_login and phone_pass into the query string(URL) and -use a bookmark on their desktop, taking one more step out of their login process -example: http://10.10.10.15/agc/vicidial.php?pl=gs102&pp=test - -It is recommended if you are in a call center environment that you would disable -the "Saved Form Information" option in Firefox settings. This is a checkbox in -the Privacy settings under the Options menu. - - - -PHASE 7.0: You are done with installation - -If you have problems and it is not working right(and are NOT celebrating right -now), feel free to take a look at the FAQ for solutions to common installation -errors, read the SCRATCH_INSTALL document, visit the VICIDIAL forum or send an -email to the mailing list: -http://www.eflo.net/VICIDIALforum/index.php -https://lists.sourceforge.net/lists/listinfo/astguiclient-users - -Also, check out our weblog: http://astguiclient.blogspot.com/ - - -**** IMPORTANT - In order for vicidial/astguiclient to function correctly please -read the REQUIREMENTS.txt for a minimum requirements list. *** - -End-user Manuals for Agents and Managers are available from http://www.eflo.net +Asterisk/astguiclient install from scratch. v.2.0.4 2007-12-03 + By the VICIDIAL group info@vicidial.com + +**** IMPORTANT - In order for vicidial/astguiclient to function correctly please +read the REQUIREMENTS.txt for a minimum requirements list. *** + +End-user Manuals for Agents and Managers are available from http://www.eflo.net + + +This document is meant to be a very in-depth step-by-step explanation of +installing the Asterisk open-source PBX on a Linux system and also installing +the astGUIclient suite. The instructions will assume starting from nothing and +will try to give several side step instructions to account for some differences +in choices of hardware and software. + +The actual installation that I am doing as I write these instructions will be on +the following hardware: + + - Pentium 3 500MHz + - Intel motherboard D815BN + - 256MB PC133 RAM + - 80GB IBM deskstar 7200RPM Hard Drive + - Digium Wildcard Single Span T1 Card T100P + - 2U rackmount case with 250W power supply + - Phone hardware will be a Grandstream BT102 and a Sipura SPA-2000 because they +are so cheap and readily available + +All of these parts, aside from the Digium card and the two SIP VOIP devices, +were purchased from ebay and the entire package(with the two VOIP devices and +all server hardware included) cost me about $1100 to put together including the +phones and Digium adapter. + +We have many other Asterisk servers at our main office, but this one can be +experimented with easily because it was so cheap to make and has a relatively +small capacity when compared with a multi-processor server with a quad span T1 +card. + +This is our test Asterisk server and functions well for a dozen or so extensions +in use if it were to be used in production. A size that is optimal for many +small offices operating with a fractional data/voice T1 for instance. + +For hardware you can use almost any Pentium-class processor(PII, PIII, Athlon, +Xeon, etc), and you can use any digium telco interface card. Both of these +choices will determine what the capacity of your Asterisk server will be. If you +want to do simple IVR or conference calling and a few extensions, then a PIII +with a single Digium T1 card will work just fine for you. If you want to use the +VICIDIAL application, you will want to get as high-powered of a machine as you +can afford and get a digium quad-span T1 card. + +The following is assumed for these installation procedures: +- You have access to a CD burner and 3 blank CDs +- You have some sort of broadband internet connection +- You understand basic linux commands and can use a file editor like vi +- You have all of the necessary hardware: + - a pentium-class computer + - a digium telco interface card with appropriate telco lines + - at least 1 SIP VOIP device + - a Local Area Network(LAN) with extra ports enough for the new server +and the number of phones you want + + + + + +PHASE 1: INSTALLING AN OPERATING SYSTEM + + +This installation will be using Slackware 11 for the linux distribution, +Slackware 12.X will also work with these instructions. There are several easier +linux distributions and there are others that are more popular, but Slackware is +a nice non-commercial distro that has been around for a long time and proven +itself to be a very uncluttered and stable platform for development. + +1. Go to http://www.ultimatebootcd.com/ , download the latest bootcd and +burn it to a CD. This will be needed to partition the hard drive prior to +installation of Slackware linux. The latest version as of this writing is 4.1 +(If you have problems with your hardware booting some of the utilities with 4.1 +I suggest trying 1.7, that version has older utilities, but still gets the job +done and works on every machine I've tried it on). + +2. Insert the ultimatebootcd you just burned into your CDROM drive and boot +to it. You will select "filesystem utilities" and then "XFDISK" + +3. Select any old partitions and delete them and then create 2 new +partitions: + - 70000 MB, select yes to validate, change partition type to "Linux Native" + - 3332 MB, select yes to validate, change partition type to "Linux Swap" + - press F3 to exit and let it do it's thing, this will take an hour or so. + +4. Go to http://www.slackware.com/getslack/ to download Slackware linux. +The most recent release as of this writing is 12.0. This release fits on 3 CDs +or 1 DVD. Download both installation disks from any close server listed on the +download page and burn them both to CDs. + +5. Insert Disk 1 of the Slackware installation CD and boot your computer. +If you have a simple computer with just an IDE drive just hit enter at the boot: +prompt. If you have other hard drive adapters(SCSI/RAID/SATA/etc..) you will +need to look at the Slackware installation help page to determine what boot +image you will need to use to install Slackware correctly. + +6. Login as root and type "setup" at the prompt to go to the setup menu. +7. Go to ADDSWAP and hit Enter +8. Select the swap partition you just created and hit Yes, The swap +partition will then be formatted +9. Select the root partiton you just created as Linux Native and hit +Select, then select "ext3" for the file system, then select 4096 for the inodes +and the root partition will then be formatted +10. Select "Install Slackware from a CD" and hit OK +11. Select "auto" installation and hit OK +12. Select every package except for "KDEI" and hit OK +13. Select "full" installation and hit OK +14. Insert the next Slackware installation disk (disk 2) when it prompts +you, and hit OK to continue +15. Now you will select the boot kernel that you will use from now on. If +you have a simple system with IDE drives you can probably just select "skip" and +go to the next step. If not then you should probably select "cdrom" and select +the kernel from the list that you selected to boot into the installation. +16. You can make a bootdisk if you like, but you don't have to. +17. For Modem you can select "no modem" and hit OK to continue +18. Enable hotplug, hit Yes to continue +19. Install lilo "simple" and hit OK to continue +20. lilo frame buffer console 640x480 is safe choice if you're not sure +21. Optional Lilo append, leave blank and hit OK to continue +22. Lilo destination, I usually choose MBR but root works most of the time +23. Mouse, select the mouse type that you have hooked up, or select ps/2 +24. Load GPM at boot time, Hit Yes to continue +25. select Yes to configure your network +26. Hostname, we are typing "phone" +27. network, we are typing our local domain name +28. IP address, we are selecting Static IP, here's what we enter for +network, you should enter a network setup that will work with your local LAN: + - IP address: 10.10.10.15 + - subnet: 255.255.0.0 + - gateway: 10.10.10.1 + - name server: 10.10.10.1 +29. Accept your network settings +30. Startup services to run, change nothing and select OK to continue +31. select NO for custom screen fonts +32. Hardware clock to UTC, select NO +33. Select your time zone and hit OK +34. I usually select gnome as the window manager, even though you won't be +using it on this machine +35. Select Yes to enter a root password. type something that you will +remember. +36. Setup of Slackware Linux is complete, hit OK and EXIT then press +CTRL-ALT-DELETE to reboot your computer + + + + + +PHASE 2: COMPILING A CUSTOM LINUX KERNEL + + +From this step on you should be able to continue the installation remotely +although it is wise to at least have quick access to the machine if something +goes wrong. + +To connect remotely through SSH on linux type "slogin serveripaddress" or to use +Windows to connect you can use a piece of free software called putty available +here: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html +Also, for windows you can use SSH file transferring(SFTP) with a program called +filezilla: http://filezilla.sourceforge.net/ + +This is an optional step if your linux system is running, but compiling your own +custom kernel is always a way to optimize your system for the hardware you have +installed or a way to remove the unnecesary modules that are in the default +kernel. You will definately want to build your own kernel if you have a multi +processor machine. If you are new to Linux you probably do not want to do this. + +If you are using a newer Digium Octasic-based echo-cancellation quad T1/E1 card +then you need to use a 2.6 Linux kernel in order to use the echo-cancellation +functionality of the card. + +If you want to compile a 2.6 kernel then start with OPTION 1, otherwise to +compile the 2.4 kernel that comes with Slackware(2.4.33) start with OPTION 2: + +OPTION 1: compile Linux kernel 2.6.17 *RECOMMENDED* + +1. cd /usr/src +2. wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.11.tar.gz +3. gunzip linux-2.6.17.11.tar.gz +4. tar xvf linux-2.6.17.11.tar +5. mv -f /usr/src/linux /usr/src/linux-old +6. ln -s /usr/src/linux-2.6.17.11 /usr/src/linux +7. cd linux +8. make mrproper # prep for kernel assembly +9. make menuconfig # launch configuration menu app + (this part is very dependant upon your own hardware) + (what is mentioned below are only changes beyond what is selected by default) + + Block Layer ---> + -> IO Scheduler + this should be set to CFQ if you do not have a hardware caching controller + if you have a hardware caching controller DEADLINE or NO-OP are the best + choices, if you have a battery backuped caching controller that is set to write-back you should use NO-OP. + Processor Type and Features ---> + ->Symmetric multi-processing support + (if you have multiple processors or a Dual-core or HT enabled) + ->High Memory Support + (if you have more than 900MB of System RAM move upto 4GB) + ->Timer frequency (1000 HZ) + (change to 1000Hz if using ztdummy for timer on pre 2.6.17 kernel) + ->[*]Tickless System (enable UNLESS using ztdummy on pre 2.6.17 kernel) + ->[*]Enable Kernel irq balancing + ->Preemption Model (No Forced Preemption (Server)) + (^This one is very important!!!) + Power management options (ACPI, APM) ---> + ->ACPI (Advanced Configuration and Power Interface) Support + (enable all down to Processor and thermal zone) + Bus options (PCI, PCMCIA, EISA, MCA, ISA) ---> + ->[*] PCI Express support + (if using Sangoma PCI Express card) + Networking ---> + Amateur Radio support ---> + <*> Amateur Radio AX.25 Level 2 protocol + [*] AX.25 DAMA Slave support + <*> Amateur Radio NET/ROM protocol + <*> Amateur Radio X.25 PLP (Rose) + (all needed for new Digium Octasic drivers) + Device Drivers ---> + ATA/ATAPI/MFM/RLL support ---> + <*> SCSI emulation support + (needed for SATA drives, also further down check chipset drivers) + SCSI device support ---> + <*> RAID Transport Class + (needed if you are using a RAID) + SCSI low-level drivers ---> + <*> Serial ATA (SATA) support + (required if using SATA drives) + (if using a SCSI RAID card pick correct driver here) + Multi-device support (RAID and LVM) ---> + (select proper RAID types if using Linux RAID) + Network device support ---> + Ethernet (10 or 100Mbit) ---> + Ethernet (1000 Mbit) ---> + (select proper drivers for the eype of network card you have) + Character devices ---> + <*> Enhanced Real Time Clock Support + (double-check that this is enabled, very important) + Real Time Clock ---> + <*> RTC class + (double-check that this is enabled, very important) + File systems ---> + <*> Ext3 journalling file system support + (important if using ext3 filesystem) + pseudo filesystems ---> + <*> Virtual memory file system support + (this is usually checked anyway but mandatory for recording to RAM[tmpfs]) + Library routines ---> + <*> CRC-CCITT functions + <*> CRC16 functions + <*> CRC32c (Castagnoli, et al) Cyclic Redundancy-Check + (important for new Digium Octasic drivers) + EXIT AND SAVE YOUR CONFIGURATION + +10. make clean # clean up the kernel build areas +11. make bzImage # create a kernel bzImage +12. make modules # build the modules into the image +13. make modules_install # install kernel modules +14. cp arch/i386/boot/bzImage /boot/bzImage-XXXX # copy image + (put whatever you want in XXXX, that is your new kernel name) +15. cp System.map /boot/System.map-XXXX # copy system map +16. mv -f /boot/System.map /boot/System.map-orig +17. ln -s /boot/System.map-XXXX /boot/System.map # symlink map +18. vi /etc/lilo.conf # edit the lilo boot config file + image=/boot/bzImage-XXXX # add the new image in above- + label=test-XXXX # the previous one + root=/dev/hda1 # device of root partition + read-only +19. /sbin/lilo # run the lilo reload script +20. vi /etc/fstab # to include the following line for recording to RAM + tmpfs /var/spool/asterisk/monitor tmpfs rw 0 0 +21. shutdown -r 0 # reboot machine and hope it worked + +OPTION 2: compile Linux kernel 2.4.33.3 (not recommended, very old) + +1. cd /usr/src/linux # move to your linux source directory +2. cp .config config.save # copy old config to a save file +3. make mrproper # prep for kernel assembly +4. make menuconfig # launch configuration menu app + (this part is very dependant upon your own hardware) + enable processor version # select the processor that you have + enable SMP # if more than 1 processor or Intel HT + enable high memory () # if more than 1GB of RAM + enable SCSI Multiple # if SCSI drives + enable SCSI devices AMI Megaraid # if SCSI Megaraid adapter + enable 3com network devices # if 3com network card + enable ext3 file system # for ext3 to work + enable all ACPI options # for SMP to work + enable Enhanced Real Time Clock Support in Character devices section + # for SMP to work + enable any other hardware specific options + exit and save configuration +5. make dep # build the kernel dependancies +6. make clean # clean up the kernel build areas +7. make bzImage # create a kernel bzImage +8. make modules # build the modules into the image +9. make modules_install # install kernel modules +10. # nothing# mkinitrd /boot/initrd-XXXXXX.img XXXXXX *not needed on Slackware* +11. cp arch/i386/boot/bzImage /boot/bzImage-XXXXXX # copy image + (put whatever you want in XXXXXX, that is your new kernel name) +12. cp System.map /boot/System.map-XXXXXXN # copy system map +13. mv -f /boot/System.map /boot/System.map-orig +14. ln -s /boot/System.map-XXXXXX /boot/System.map # symlink map +15. vi /etc/lilo.conf # edit the lilo boot config file + image=/boot/bzImage-XXXXXX # add the new image in above- + label=test-XXXXXX # the previous one + root=/dev/hda1 # device of root partition + read-only +16. /sbin/lilo # run the lilo reload script +17. shutdown -r 0 # reboot machine and hope it worked + + +After compiling your kernel you can run a few commands to verify that you are +running your new kernel and that devices are running as they are supposed to: + ps --info (will show you your linux kernel version and other info) + cat /proc/cpuinfo (will show you processor type and more than one if SMP) + top (will show you system memory) + + + + +PHASE 3: INSTALLING SOFTWARE BEFORE ASTERISK + +In this step we will be installing software that Asterisk and/or astGUIclient +needs to be able to function to its fullest ability. Not all of these software +packages are manditory to successfully install Asterisk and some of them can be +installed on other machines on your network like MySQL or Apache. But, in this +installation we are assuming that there are no other machines on our network to +help the Asterisk server, so it must have everything it needs installed locally. + + + +SUBPHASE 3.0: install new Gnu Make + +A new version of the "make" compilation application replaced the 4-year-old +version that most Linux distros(Including Slackware) use. This is only needed +if you will be building Asterisk from the 1.4 release tree. + + - wget http://mirrors.kernel.org/gnu/make/make-3.81.tar.gz + - gunzip make-3.81.tar.gz + - tar xvf make-3.81.tar + - cd make-3.81 + - ./configure + - make + - make install + + + +SUBPHASE 3.1: MySQL requirements + +You must at least have Mysql client installed on each VICIDIAL server, but you +only need one database server. + +MySQL is a fast database system that is very easy to integrate with any +application. You can either install the server on the local Asterisk system or +have one somewhere on your network. For our purposes, we are creating an Asterisk +installation that is self contained and needs no other local servers to operate, +so we will need to install mysql on this machine. +*REQUIRED and OPTIONAL* (only install MySQL server locally if you don't want to use an installation +on another machine, Mysql client is required on all VICIDIAL servers) +NOTE: a minimum of MySQL server 4.0.X is required + + Go to http://www.mysql.com/ and download the mysql package + - to install this directly on the command line type: + - cd /usr/local + - wget http://mirror.trouble-free.net/mysql_mirror/Downloads/MySQL-4.0/mysql-4.0.27.tar.gz + # http://mirror.trouble-free.net/mysql_mirror/Downloads/MySQL-5.0/mysql-5.0.45.tar.gz + - gunzip mysql-4.0.27.tar.gz + - tar xvf mysql-4.0.27.tar + - cd mysql-4.0.27 + - groupadd mysql + - useradd -g mysql mysql + - "./configure --prefix=/usr/local/mysql --enable-large-files --enable-shared=yes --with-readline" + **** If only MySQL client is needed for DBD::mysql then use this: + - "./configure --prefix=/usr/local/mysql --without-server --enable-shared=yes --with-readline" + **** If using version 5 tree MySQL client then use this: + - "./configure --prefix=/usr/local/mysql --without-server --enable-shared=yes --with-readline --enable-thread-safe-client" + - make + - make install + - scripts/mysql_install_db + - chown -R root /usr/local/mysql + - chown -R mysql /usr/local/mysql/var + - chgrp -R mysql /usr/local/mysql + - cp support-files/my-medium.cnf /etc/my.cnf + - /usr/local/mysql/bin/mysqld_safe --user=mysql --skip-name-resolve --skip-host-cache & + - ln -s /tmp/mysql.sock /var/run/mysql/mysql.sock + **** For some systems you may need to add the mysql/bin directory to your PATH: + - PATH=$PATH:$HOME/bin:/usr/local/mysql/bin/ + - export PATH + **** you may also want to add those two lines to your /root/.bash_profile file + **** For Mysql 5 tree only, you also may need to copy the libmysqlclient.so file to libs + - cp /usr/local/mysql-5.0.45/libmysql/.libs/libmysqlclient.so /usr/lib/ + - cp /usr/local/mysql-5.0.45/libmysql/.libs/libmysqlclient.so.15 /usr/lib/ + - you are done + + ** INSTALLATION NOTE ** + If you are having Linuxthreads problems upon onfigure, just execute the following command: + echo '/* Linuxthreads */' >> /usr/include/pthread.h + + ***** NOTE: if you will be using any of the DBI perl scripts: ***** + Every machine that you will be using the newer BDI perl scripts on will need + to have the perl modules DBI and DBD::mysql installed on them. To do this + you will also need to at least have the MySQL client installed on the server + (see above) then you will need to go to 'cpan' and "install DBI" and + "install DBD::mysql". You may need to "force install DBD::mysql" if the DBD + tests fail on your first try, but that is OK since the tests are not needed + + + +SUBPHASE 3.2: Installing Perl Modules + +NOTE - you can install ActiveState http://www.activestate.com perl which may +improve performance, but it is not required. Here's the source for ActiveState +Perl 5.8: (it's free) + http://downloads.activestate.com/ActivePerl/src/5.8/AP817_source.tgz +I hope to add the lengthy steps for installing it as your default perl on your +server but I need some time and a free machine to do that. + +cpan is the "Comprehensive Perl Archive Network". It's a mirrored archive of +most of the perl modules out there complete with a installation and management +command-line interface. Here's what you do to start it: +*REQUIRED* (needed for perl AGIs) + +1. perl -MCPAN -e shell # type in the command line +2. You will then go through CPAN setup, just hit ENTER for most prompts except +for the mirrors list, you will want to select at least 4 mirrors + - yes for manual configuration + - enter for the next 18 prompts + - for the "make install options" it's a good idea to add UNINST=1 + - enter for the next 4 prompts + - select your continent and country + - select a few cpan mirrors + - enter for the next 2 prompts +3. Once you see the cpan> prompt you can begin installing modules +4. If you've never installed cpan before you should probably install the +following modules first: (say YES if asked to install prerequisites) + - install MD5 + - install Digest::MD5 + - install Digest::SHA1 + - install readline (just hit Enter when it asks for operator) + - install Bundle::CPAN + - reload cpan +- then you can install other modules: + - install DBI + - force install DBD::mysql (must at least have mysqlclientlibs installed) + - install Net::Telnet + - install Time::HiRes + - install Net::Server + - install Switch + - install Unicode::Map (needed for super list loader Excel) + - install Jcode (needed for super list loader Excel) + - install Spreadsheet::WriteExcel (needed for super list loader Excel) + - install OLE::Storage_Lite (needed for super list loader Excel) + - install Proc::ProcessTable (needed for super list loader Excel) + - install IO::Scalar (needed for super list loader Excel) + - install Spreadsheet::ParseExcel (needed for super list loader Excel) +- if Spreadsheet::ParseExcel fails to install try running the following: + - force install Scalar::Util (this will enable weak references) + - install Spreadsheet::ParseExcel +- then quit cpan, you are done +5. Go to http://asterisk.gnuinter.net/ and download the asterisk-perl module +(backup link: http://downloads.vicidial.com/packages/asterisk-perl-0.08.tar.gz) +NOTE: Do NOT use the 0.09 version, it does not work with VICIDIAL + - to install this directly on the command line type: + - cd /usr/local + - wget http://asterisk.gnuinter.net/files/asterisk-perl-0.08.tar.gz + - gunzip asterisk-perl-0.08.tar.gz + - tar xvf asterisk-perl-0.08.tar + - cd asterisk-perl-0.08 + - perl Makefile.PL + - make all + - make install + - you are done + + + +SUBPHASE 3.3: Installing other utilities + +Sox is an audio utility that allows you to mix audio files together at their +start point into one file. it is necessary for Asterisk recordings that record +in and out as separate files +*REQUIRED* (needed for recording mixing) + +1. Go to http://sourceforge.net/projects/sox/ and download the sox package + - to install this directly on the command line type: + - cd /usr/local + - cd /usr/local + - wget http://easynews.dl.sourceforge.net/sourceforge/sox/sox-14.0.1.tar.gz + - gunzip sox-14.0.1.tar.gz + - tar xvf sox-14.0.1.tar + - cd sox-14.0.1 + - ./configure --disable-shared + - make (if alsa.o errors add --disable-alsa-dsp to configure and redo) + - make install + - you are done + + +LAME is an MP3 encoder used to convert audio files from WAV to MP3. We prefer GSM +usually, but some users have standardized on MP3 so they would need this utility +to be loaded to use that option. +*OPTIONAL* (only needed if you will be converting recordings to MP3) + +2. Go to http://lame.sourceforge.net/ and download the lame package + - to install this directly on the command line type: + - cd /usr/local + -wget http://easynews.dl.sourceforge.net/sourceforge/lame/lame-3.96.1.tar.gz + -gunzip lame-3.96.1.tar.gz + -tar xvf lame-3.96.1.tar + -cd lame-3.96.1 + -./configure + -make + -make install + - you are done + + + +Screen is a terminal emulator that allows you to run a process as command line +and be able to detach from them('Ctrl+a' then 'd') and log all output of the +terminal to a screenlog file if desired(add a '-L' to the launching command). +In our installations this is how we launch Asterisk upon startup and still have +the ability to log output and still attach to the screen that executed asterisk +originally. +*REQUIRED* *MANDITORY FOR VICIDIAL SERVERS* + +3. Go to http://www.gnu.org/software/screen/ and download the screen package + - to install this directly on the command line type: + - cd /usr/local + - wget http://ftp.gnu.org/gnu/screen/screen-4.0.2.tar.gz + or for older version: + - wget http://mirrors.kernel.org/gnu/screen/screen-3.9.15.tar.gz + - gunzip screen-4.0.2.tar.gz + - tar xvf screen-4.0.2.tar + - cd screen-4.0.2 + - ./configure + - make + - make install + - you are done + + +ttyload is a simple terminal application that shows the processor load in a +graphical time-based scrolling graph. We use it to view how loaded the system is +and it visualizes load spikes very well +*OPTIONAL* (only for obsessive admins like me) + +4. Go to http://www.daveltd.com/src/util/ttyload/ and download the ttyload +package + - to install this directly on the command line type: + - cd /usr/local + - wget http://www.daveltd.com/src/util/ttyload/ttyload-0.4.4.tar.gz + - gunzip ttyload-0.4.4.tar.gz + - tar xvf ttyload-0.4.4.tar + - cd ttyload-0.4.4 + - make + - ln -s /usr/local/ttyload-0.4.4/ttyload /usr/bin/ttyload + - you are done + + +ntpd is the network time protocol daemon that matches the time on your machine +with the time of a master server somewhere in the world. We use it to make sure +the time is the same on our client computers and our servers. +*MANDITORY FOR VICIDIAL SERVERS* (install on server and all clients) + +5. Go to http://www.ntp.org/ and download the ntpd package + - to install this directly on the command line type: + - cd /usr/local + - wget http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-4.2.2p3.tar.gz + If you get compilation errors here try 4.1.2: + - wget http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.1.2.tar.gz + - gunzip ntp-4.2.2p3.tar.gz + - tar xvf ntp-4.2.2p3.tar + - cd ntp-4.2.2p3 + - ./configure + - make + - make install + - vi /etc/ntp.conf (change to just 1 line: "server 18.145.0.30") + - cp /etc/ntp.conf /etc/ntpd.conf # just to be sure + - /usr/local/bin/ntpdate -u 18.145.0.30 # initial sync + - /usr/sbin/ntpd # run it + - you are done + + +iftop is a good console bandwidth visualization tool that shows you active +connections, where they are going to/from and how much of your precious bandwidth +they are using. *OPTIONAL* +NOTE: another good network analysis utility is "iptraf" and is on most system + +6. Go to http://www.ex-parrot.com/~pdw/iftop/ and download the package + - to install this directly on the command line type: + - cd /usr/local + - wget http://www.tcpdump.org/release/libpcap-0.9.4.tar.gz + - gunzip libpcap-0.9.4.tar.gz + - tar xvf libpcap-0.9.4.tar + - cd libpcap-0.9.4 + - ./configure + - make + - make install + - cd /usr/local + - wget http://www.ex-parrot.com/~pdw/iftop/download/iftop-0.17.tar.gz + - gunzip iftop-0.17.tar.gz + - tar xvf iftop-0.17.tar + - cd iftop-0.17 + - ./configure + - make + - make install + - iftop + - you are done + + +ploticus is a free graph creation package that allows you to create line graphs +within PNG files simply by creating a config file and a data file. We use this +package along with the included PHP script to generate server performance graphs +that can be displayed real-time on a web page. +*OPTIONAL* (only needed for server performance graphing web reports) + +7. Go to http://ploticus.sourceforge.net/ and download the package + - to install this directly on the command line type: + NOTE: you may have to edit the Makefile to remove X11 if you don't have it + - cd /usr/local + - wget http://superb-west.dl.sourceforge.net/sourceforge/ploticus/pl240src.tar.gz + - gunzip pl240src.tar.gz + - tar xvf pl240src.tar + - cd pl240src/src/ + - make clean + - make + - make install + - you are done + NOTE: uncomment these lines to compile on systems without X11(v232): + NOXFLAG = -DNOX11 + XLIBS = + XOBJ = + NOTE: for the graphics to work on the AST_server_performance page you will + need the 'pl' script to be linked or copied into your htdocs/vicidial/ploticus directory + NOTE: you may need to edit the Makefile for ploticus if you do not have X11 + + +openssh is a remote login protocol server that is always a good idea to have +updated on your system, so we're going to install a new version now. +*OPTIONAL* (only updated as a precaution, not manditory) + [NOTE: newer zlib is needed before installing] + +8. Go to http://www.openssh.org/ and download the linux source for openssh + - to install this directly on the command line type: + - cd /usr/local + - wget http://www.zlib.net/zlib-1.2.3.tar.gz + - gunzip zlib-1.2.3.tar.gz + - tar xvf zlib-1.2.3.tar + - cd zlib-1.2.3 + - ./configure + - make + - make install + - cd /usr/local + - wget http://ftp.openssh.zone-h.org/pub/OpenBSD/OpenSSH/portable/openssh-5.0p1.tar.gz + - gunzip openssh-5.0p1.tar.gz + - tar xvf openssh-5.0p1.tar + - cd openssh-5.0p1 + - ./configure + - make + - make install + - you are done + + +openssl is the open-source SSL libraries package, and to install a fake SSL cert +locally and have it work with apache, you need it installed on your machine +*OPTIONAL* (only install openssl if you want to use SSL secured web pages on +your locally installed copy of Apache web server) + +9. Go to http://www.openssl.org/ and download the linux source for openssl + - to install this directly on the command line type: + - cd /usr/local + - wget http://www.openssl.org/source/openssl-0.9.8g.tar.gz + - gunzip openssl-0.9.8g.tar.gz + - tar xvf openssl-0.9.8g.tar + - cd openssl-0.9.8g + - ./config + - make + - make install + - you are done + + +apache is a web server that allows you to use many different modules with it to +extend it's functionality. In order to use some of the astguiclient +functionalities we need to have Apache and PHP installed on this machine. +*OPTIONAL* (only install Apache and PHP locally if you don't want to use an +installation on another machine) + +10. Go to http://www.apache.org/ and download the apache unix source + Go to http://www.php.net/ and download the php unix source code + - to install this directly on the command line type: + - cd /usr/local + - wget http://mirror.candidhosting.com/pub/apache/httpd/httpd-2.2.8.tar.gz + - gunzip httpd-2.2.8.tar.gz + - tar xvf httpd-2.2.8.tar + - wget http://us2.php.net/distributions/php-5.2.6.tar.gz + NOTE: PHP 5.1.1 has also been tested with this release + - gunzip php-5.2.6.tar.gz + - tar xvf php-5.2.6.tar + - cd httpd-2.2.8 + - ./configure --enable-so --with-apxs2 + - make + - make install + - cd ../php-5.2.6 + - ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql + - make + - make install + - cp php.ini-dist /usr/local/lib/php.ini + NOTE: you will want to make sure NOTICE logging is turned off: + error_reporting = E_ALL & ~E_NOTICE ; (this is default) +!!! REQUIRED !!! be sure the memory limit for scripts in php.ini is AT LEAST 48M: + memory_limit = 48M + Make sure short tags are enabled: + short_open_tag = On + some other fields to change if using web-based lead loader: + max_execution_time = 330 + max_input_time = 360 + post_max_size = 48M + upload_max_filesize = 42M + default_socket_timeout = 360 + + - vi /usr/local/apache2/conf/httpd.conf + add the following lines: + "AddType application/x-httpd-php .php .phtml" + "LoadModule php4_module libexec/libphp5.so" + or + "LoadModule php4_module modules/libphp5.so" + modify the index.html line and add index.php to the list + + to disable logging, change: + "CustomLog logs/access_log common" + to this: + "CustomLog /dev/null common" + + to enable web browsing of Recordings on Asterisk server, add this: + Alias /RECORDINGS/ "/var/spool/asterisk/monitorDONE/" + + + Options Indexes MultiViews + AllowOverride None + Order allow,deny + Allow from all + + Forcetype application/forcedownload + + + + - /usr/local/apache2/bin/apachectl start + - go to http://your-new-asterisk-server-ipaddress/ to see if it worked + - you are done + NOTE: If using PHP5 you may need to add the following line to php.ini: + short_open_tag = On + + OPTIONAL- Load eAccelerator PHP-caching application: + Even so this is technically an optional part, it is strongly recommended that you install eAccelerator + since it will slash PHPs processing power requirements greatly. Without eAccelerator load on the system + can be ten times as high, which can cause all kinds of problems, this is especially true for single + system setups. + - Go to http://eaccelerator.net and download the most recent package + - cd /usr/local + - wget http://bart.eaccelerator.net/source/0.9.5/eaccelerator-0.9.5.zip + - unzip eaccelerator-0.9.5.zip + - cd eaccelerator-0.9.5 + - export PHP_PREFIX="/usr/local" + - $PHP_PREFIX/bin/phpize + - ./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config + - make + - make install + - vi /usr/local/lib/php.ini + Add the following lines to the dynamic extensions section of php.ini: + (you may need to change the extension location depending on your install of php) + zend_extension="../../../usr/local/eaccelerator-0.9.5/modules/eaccelerator.so" + eaccelerator.shm_size="48" + eaccelerator.cache_dir="/tmp/eaccelerator" + eaccelerator.enable="1" + eaccelerator.optimizer="1" + eaccelerator.check_mtime="1" + eaccelerator.debug="0" + eaccelerator.filter="" + eaccelerator.shm_max="0" + eaccelerator.shm_ttl="0" + eaccelerator.shm_prune_period="0" + eaccelerator.shm_only="0" + eaccelerator.compress="1" + eaccelerator.compress_level="9" + - mkdir /tmp/eaccelerator + - chmod 0777 /tmp/eaccelerator + # to verify installation: + - php -v + + + + +balance is a load-balancing application for Linux that will allow you to spread +the load of your web traffic across many servers. If you are running more than +70 agents on a single server you may want to install this application and build +another cheap web server to handle the extra load. +*OPTIONAL* + +11. Go to http://balance.sourceforge.net to download the most recent source version + - to install this directly on the command line type: + - cd /usr/local + - wget http://voxel.dl.sourceforge.net/sourceforge/balance/balance-3.34.tgz + - gunzip balance-3.34.tgz + - tar xvf balance-3.34.tar + - cd balance-3.34 + - make + - make install + - /usr/sbin/balance -f 81 localhost:80 10.10.10.16:80 + That command will take port 81 traffic and send it evenly to the local + server and the 10.10.10.16 server reducing the load and speeding up + the applications. More info on balance: http://www.inlab.de/balance.pdf + + +subversion is the new code control framework use by the Asterisk community. If +you want to use the latest development code of Asterisk you will need to have +this loaded on your system. +*OPTIONAL* + +12. Go to http://subversion.tigris.org to download the most recent source version + - to install this directly on the command line type: + - cd /usr/local + - wget http://subversion.tigris.org/downloads/subversion-1.3.2.tar.gz + - gunzip subversion-1.3.2.tar.gz + - tar xvf subversion-1.3.2.tar + - cd subversion-1.3.2 + - ./configure + - make + - make install + + +mtop is a great utility for real-time monitoring of mysql and the queries that +are running in it. +*OPTIONAL* + 13. Go to http://mtop.sourceforge.net to download the most recent version + - to install this directly on the command line type: + - cd /usr/local + - wget http://superb-east.dl.sourceforge.net/sourceforge/mtop/mtop-0.6.6.tar.gz + - gunzip mtop-0.6.6.tar.gz + - tar xvf mtop-0.6.6.tar + - cd mtop-0.6.6 + - cpan + - install Curses + - install Getopt::Long + - install Net::Domain + - quit + - perl Makefile.PL + - make + - make install + - /usr/local/bin/mtop --dbuser=root --seconds=3 + + +sipsak is an optional utility that VICIDIAL can use to send messages to an +agent's SIP-based phone(like the Snom 320) to display text on their LCD screen. +If you want to use this, make sure it is installed on the same server that your +web server is installed on(Apache). +*OPTIONAL* + 14. Go to http://sipsak.org to download the most recent version + - to install this directly on the command line, type: + - cd /usr/local + - wget http://download.berlios.de/sipsak/sipsak-0.9.6-1.tar.gz + - gunzip sipsak-0.9.6-1.tar.gz + - tar xvf sipsak-0.9.6-1.tar + - cd sipsak-0.9.6-1 + - ./configure + - make + - make install + - /usr/local/bin/sipsak --version + + + + + +PHASE 4: INSTALLING ASTERISK + +OK, all the prep work is done, now it's time to start having fun with Asterisk. +There are two basic ways to install Asterisk, an official release(at the time of +this writing the official release is 1.2.27) and the SVN_DEV version(development +branch). We recommend using Asterisk 1.2.27. These instructions are how we get +our Asterisk system with it's T1 line installed with our 2 SIP VOIP devices and +one IAX2 softphone. + +NOTE: If you want to use Asterisk 1.4, you will need to make sure that you set +the servers table "asterisk_version" field to the proper version number and you +can use the docs/conf_examples/extensions.conf.sample-1.4 file for your default +dialplan + +NOTE: If you want to use release 1.0.8 or 9 we would recommend either using the +CVS_v1-0 branch where the issues are fixed, or patching your 1.0.8/1.0.9 code +with the following patch: +(http://astguiclient.sourceforge.net/experimental_code/localmasq.patch) +- If you do patch your system make sure you put the asterisk version + field for the server on the admin pages as '1.0.11.1' + +1. follow these command line steps: + - mkdir /usr/src/asterisk + - cd /usr/src/asterisk + A. if you want 1.2 release (reliable with new features): + - wget http://ftp.digium.com/pub/asterisk/releases/asterisk-1.2.27.tar.gz + - wget http://ftp.digium.com/pub/zaptel/releases/zaptel-1.2.25.tar.gz + - wget http://ftp.digium.com/pub/libpri/releases/libpri-1.2.5.tar.gz + - gunzip asterisk-1.2.27.tar.gz + - tar xvf asterisk-1.2.27.tar + - gunzip zaptel-1.2.25.tar.gz + - tar xvf zaptel-1.2.25.tar + - gunzip libpri-1.2.5.tar.gz + - tar xvf libpri-1.2.5.tar + B. if you want latest SVN_1.2 version (release tree with new patches) + - svn checkout http://svn.digium.com/svn/asterisk/branches/1.2 asterisk-1.2 + - svn checkout http://svn.digium.com/svn/zaptel/branches/1.2 zaptel-1.2 + - svn checkout http://svn.digium.com/svn/libpri/branches/1.2 libpri-1.2 + C. if you want latest SVN_DEV version (not recommended) [1.6 tree] + - svn checkout http://svn.digium.com/svn/asterisk/trunk asterisk + - svn checkout http://svn.digium.com/svn/zaptel/trunk zaptel + - svn checkout http://svn.digium.com/svn/libpri/trunk libpri + - ALL -> + - (1.0 tree)if you want to allow for more than 100 voicemail messages in a + mailbox(warning this will slightly increase memory usage when a call + is in voicemail) edit the voicemail source code file: + - vi /usr/src/asterisk/asterisk/apps/app_voicemail.c + edit this line and change 100 to 999: + #define MAXMSG 100 + - (1.0 tree)if you have no X server installed on your Asterisk machine, then you + will need to comment out the gtk console lib(only affects 1.0 releases) + edit the voicemail source code file: + - vi /usr/src/asterisk/asterisk/pbx/Makefile + edit this line at the top and just add a hash # in front of it as shown: + #PBX_LIBS+=$(shell $(CROSS_COMPILE_BIN)gtk-config --cflags >/dev/null 2>/dev/null && echo "pbx_gtkconsole.so") + + - cd ./zaptel-1.2.25 + - make clean + - make + - make install + - cd ../libpri-1.2.5 + - make clean + - make + - make install + - cd ../asterisk-1.2.27 + - (1.2 tree) If you want to include Answering Machine Detection ability + you will need to download app_amd.c and amd.conf and alter the + apps/Makefile to compile it properly + - cd apps + - wget http://www.eflo.net/files/app_amd2.c + - mv app_amd2.c app_amd.c + - vi Makefile + replace this line(line 32): + app_mixmonitor.so app_stack.so + with this line: + app_mixmonitor.so app_stack.so app_amd.so + - wget http://www.eflo.net/files/amd2.conf + - mkdir /etc/asterisk + - mv amd2.conf /etc/asterisk/amd.conf + *OPTIONAL*(1.2.23 thru 1.2.27) apply the meetme DTMF passthru patch + - wget http://www.eflo.net/files/meetme_DTMF_passthru-1.2.23.patch + - patch -p1 < ./meetme_DTMF_passthru-1.2.23.patch + - File to patch: app_meetme.c + *OPTIONAL*(1.2.12.1 thru 1.2.27) apply the meetme volume control patch + *Different patches available for 1.2.7.1 through 1.2.14 + - wget http://www.eflo.net/files/meetme_volume_control_1.2.16.patch + - patch -p1 < ./meetme_volume_control_1.2.16.patch + - File to patch: app_meetme.c + - cd ../ + + -(1.2 tree) apply the cli delimiter patch + - wget http://www.eflo.net/files/cli_chan_concise_delimiter.patch + - patch -p1 < ./cli_chan_concise_delimiter.patch + - File to patch: cli.c + + *OPTIONAL*(1.2.14 thru 1.2.27) rewrite of waitforsilence + - wget http://www.eflo.net/files/app_waitforsilence.c + - mv -f app_waitforsilence.c apps/app_waitforsilence.c + + *OPTIONAL* shorter enter and leave sounds for meetme + - wget http://www.eflo.net/files/enter.h + - wget http://www.eflo.net/files/leave.h + - mv -f enter.h apps/enter.h + - mv -f leave.h apps/leave.h + + + - make clean + - make + - make install + - make samples # this makes sample conf files (only use for new installs) + + - modprobe zaptel # this loads the zaptel module + - install the module for the digium device that you are using, we are +using the T100P single span T1 card so we use: + - modprobe wct1xxp + Here's the list of all digium cards and the modules you use with +them: + Card Module + ----------------- + TDM400P wctdm + X100P wcfxo + TDM* wcfxs + S100U wcusb + T100P wct1xxp + E100P wct1xxp + T400P tor2 + E400P tor2 + TE110P wcte11xp + TE410P wct4xxp + TE405P wct4xxp + TE411P wct4xxp + TE406P wct4xxp + TE210P wct2xxp + TE205P wct2xxp + TDM2400P wctdm24xxp + - If you have chosen a Sangoma T1/E1 or analog card, you will need to + follow their instructions for installation of their driver software + LATEST Sangoma Wanpipe drivers: + ftp://ftp.sangoma.com/linux/current_wanpipe/wanpipe-3.2.4.tgz + - now your asterisk installation is built and loaded and it's time to +configure it. + +NOTES: If you want to install zttool diagnostics you may need the newt package installed: + - wget http://downloads.vicidial.com/packages/newt-0.51.6.tar.gz + - gunzip newt-0.51.6.tar.gz + - tar xvf newt-0.51.6.tar + - cd newt-0.51.6 + - ./configure + - make + - make install + - cd ../ + - ln -s /usr/lib/libnewt.so.0.51.6 /usr/lib/libnewt.so.0.51 +then go to your zaptel folder and do 'make zttool' + +Digium/Clone X100P EXAMPLE: +Here is an example of a configuration where an X100P single FXO card is used for +zaptel timing and not used for calling: + +NOTE: you can get an X100P through ebay for $10-$30 that will work with Asterisk + + /etc/zaptel.conf: + loadzone=us + defaultzone=us + fxsks=1 + + /etc/asterisk/zapata.conf: + [trunkgroups] + [channels] + context=unused + signalling=fxs_ks + channel => 1 + + Added this to the rc.local file: + # Load zaptel drivers for x100p + modprobe zaptel + modprobe wcfxo + +If you will be doing native music-on-hold for your inbound calls, you will need +musiconhold audio files to be converted to native formats like GSM, ULAW and ALAW: + + cd /var/lib/asterisk/mohmp3/ + mpg123 -s --rate 44100 --mono /var/lib/asterisk/mohmp3/fpm-sunshine.mp3 > /var/lib/asterisk/mohmp3/fpm-sunshine.raw + sox -r 44100 -w -s -c 1 fpm-sunshine.raw -r 8000 -c 1 fpm-sunshine.wav + sox fpm-sunshine.wav -t gsm -r 8000 -b -c 1 fpm-sunshine.gsm + sox fpm-sunshine.wav -t ul -r 8000 -b -c 1 fpm-sunshine.pcm + mpg123 -s --rate 44100 --mono /var/lib/asterisk/mohmp3/fpm-calm-river.mp3 > /var/lib/asterisk/mohmp3/fpm-calm-river.raw + sox -r 44100 -w -s -c 1 fpm-calm-river.raw -r 8000 -c 1 fpm-calm-river.wav + sox fpm-calm-river.wav -t gsm -r 8000 -b -c 1 fpm-calm-river.gsm + sox fpm-calm-river.wav -t ul -r 8000 -b -c 1 fpm-calm-river.pcm + mpg123 -s --rate 44100 --mono /var/lib/asterisk/mohmp3/fpm-world-mix.mp3 > /var/lib/asterisk/mohmp3/fpm-world-mix.raw + sox -r 44100 -w -s -c 1 fpm-world-mix.raw -r 8000 -c 1 fpm-world-mix.wav + sox fpm-world-mix.wav -t gsm -r 8000 -b -c 1 fpm-world-mix.gsm + sox fpm-world-mix.wav -t ul -r 8000 -b -c 1 fpm-world-mix.pcm + mkdir ../orig-mp3 + mv -f *.mp3 ../orig-mp3/ + mkdir ../quiet-mp3 + cd ../quiet-mp3 + sox -r 44100 -w -s -c 1 ../mohmp3/fpm-sunshine.raw -r 8000 -c 1 fpm-sunshine.wav vol 0.25 + sox fpm-sunshine.wav -t gsm -r 8000 -b -c 1 fpm-sunshine.gsm + sox fpm-sunshine.wav -t ul -r 8000 -b -c 1 fpm-sunshine.pcm + sox -r 44100 -w -s -c 1 ../mohmp3/fpm-calm-river.raw -r 8000 -c 1 fpm-calm-river.wav vol 0.25 + sox fpm-calm-river.wav -t gsm -r 8000 -b -c 1 fpm-calm-river.gsm + sox fpm-calm-river.wav -t ul -r 8000 -b -c 1 fpm-calm-river.pcm + sox -r 44100 -w -s -c 1 ../mohmp3/fpm-world-mix.raw -r 8000 -c 1 fpm-world-mix.wav vol 0.25 + sox fpm-world-mix.wav -t gsm -r 8000 -b -c 1 fpm-world-mix.gsm + sox fpm-world-mix.wav -t ul -r 8000 -b -c 1 fpm-world-mix.pcm + rm -f ../mohmp3/*.raw + + + +PHASE 5: CONFIGURING ASTERISK AND YOUR SIP PHONES + +In this phase we will configure the telco lines, the SIP phones, the extensions, +meetme(conference calling) rooms, dialplan extensions and the voicemail boxes. +After this phase your Asterisk system should be able to place and receive calls +to and from the SIP phones you have installed over the telco lines you've hooked +up. There are several things that we will not be showing how to do because +Asterisk is extremely flexible and has so many different ways of being +configured, that if we were to try to explain them all in this document it would +be 99% asterisk configuration and be 20,000 lines long, and that would +just be a barrier for those who just want to get it set up. The "Wiki" and the +mailing list are two very good resources for finding answers if you run into +problems configuring your system, here are links to them: +The Wiki: http://www.voip-info.org/tiki-index.php +The Lists: http://www.asterisk.org/index.php?menu=support + +I need to note that it is possible to install Asterisk and use astGUIclient +applications with no Zaptel(Digium/Sangoma/Rhino/etc...) cards installed, but it +is not recommended even if you are not going to use Zap trunks for your inbound- +outbound calls with no real Zap devices, you would need to use a dummy timer +(zt_dummy) based on you USB ports to get meetme conference rooms working +properly and you may have other issues along the way. We would at least +recommend getting a X100 or X101 board from Digium or a clone manufacturer so +there is a dedicated hardware timer in place on your system. + + + +SUBPHASE 5.0: setting up your Asterisk configuration files + +1. edit zaptel.conf + - vi /etc/zaptel.conf + There are many examples inside of the zaptel.conf file that is +generated with the "make samples" command that we issued at the end +of the last phase. There are many different parameters for the +different telco line possibilities, because we are installing a T1 +that is NON-PRI-isdn B8ZS ExtendedSuperframe(ESF) E&M Wink start and 24 +channels, we will use the following settings for zaptel.conf: + span=1,1,0,esf,b8zs + e&m=1-24 + loadzone = us + defaultzone=us + FOR A PRI YOU WOULD USE SOMETHING LIKE THIS: + span=2,2,0,esf,b8zs + bchan=25-47 + dchan=48 + +2. edit zapata.conf + - vi /etc/asterisk/zapata.conf + There are also many examples of how to configure zapata.conf online. +we decided to separate our T1 into two line groups to keep some +incoming calls from being busy if we filled up all of our lines. +Here's what we used(you can set echocancel=no if you are using PRIs): + [channels] + group=1 + language=en + signalling=em_w + usecallerid=yes + callerid=asreceived + context=default + echocancel=64 + echocancelwhenbridged=yes + rxgain=1.0 + txgain=1.0 + channel => 1-2 + group=2 + language=en + signalling=em_w + usecallerid=yes + callerid=asreceived + context=default + echocancel=64 + echocancelwhenbridged=yes + rxgain=1.0 + txgain=1.0 + channel => 3-24 + FOR A PRI YOU WOULD USE SOMETHING LIKE THIS: + group=3 + language=en + signalling=pri_net + usecallerid=yes + callerid=asreceived + callprogress=no + busydetect=no + context=default + echocancel=64 + echocancelwhenbridged=yes + rxgain=1.0 + txgain=1.0 + channel => 25-47 + +3. edit sip.conf + - vi /etc/asterisk/sip.conf + here is where we will edit the configuration of our SIP compatible +phone devices. As stated at the beginning, we will be setting up a +Grandstream Budgetone 102 phone and a Sipura/Linksys SPA-2000 adapter with +two analog phones connected(each with it's own extension). Here are +the settings we used to set each of them up: + [general] + port = 5060 + bindaddr = 0.0.0.0 + context = default + ; register SIP account on remote machine if using SIP trunks + ; register => testSIPtrunk:test@10.10.10.16:5060 + ; + ; setup account for SIP trunking: + ; [SIPtrunk] + ; disallow=all + ; allow=ulaw + ; allow=alaw + ; type=friend + ; username=testSIPtrunk + ; secret=test + ; host=10.10.10.16 + ; dtmfmode=inband + ; qualify=1000 + + [gs102] + disallow=all + allow=ulaw + allow=alaw + type=friend + username=gs102 + secret=test + host=dynamic + dtmfmode=inband + defaultip=10.10.10.16 + qualify=1000 + mailbox=102 + [spa2000] + disallow=all + allow=ulaw + allow=alaw + type=friend + username=spa2000 + secret=test + host=dynamic + dtmfmode=inband + defaultip=10.10.10.17 + qualify=1000 + mailbox=2000 + [spa2001] + disallow=all + allow=ulaw + allow=alaw + type=friend + username=spa2001 + secret=test + host=dynamic + dtmfmode=inband + defaultip=10.10.10.17 + qualify=1000 + mailbox=2001 +4. edit meetme.conf + - vi /etc/asterisk/meetme.conf + This is known as the conference calling configuration file. We are +just going to add two conferences(one without a pin number and one +with a pin number required for entry): + [rooms] + conf => 8600 + conf => 8601,1234 +5. edit iax.conf + - vi /etc/asterisk/iax.conf + This is the IAX configuration file, below is a very simple config for + having two Asterisk servers connect natively to each other, if you + will be using this, make sure to add the optional lines included + after the extensions.conf section. Also, there is an account setup + here for a firefly IAX softphone to use.(details on that later) + * IMPORTANT NOTE * if you plan to use IAX2 trunks for VICIDIAL + outbound dialing you must register with the remote IAX2 server + through the iax.conf file, not just in the Dial or TRUNK line + of the extensions.conf dialplan. + [general] + bindport=4569 + iaxcompat=yes + bandwidth=high + allow=all + allow=gsm ; Always allow GSM, it's cool :) + jitterbuffer=no + tos=lowdelay + register => ASTtest1:test@10.10.10.16:4569 + + [ASTtest2] + type=friend + accountcode=IAXtrunk2 + context=default + auth=plaintext + host=dynamic + permit=0.0.0.0/0.0.0.0 + secret=test + disallow=all + allow=ulaw + qualify=yes + + [firefly01] + type=friend + accountcode=firefly01 + context=default + auth=plaintext + host=dynamic + permit=0.0.0.0/0.0.0.0 + secret=test + disallow=all + allow=gsm + qualify=yes + +##### EXAMPLE - This is a config example for setting up Binfone service(http://www.binfone.com) + +NOTE: The "1112223333" is your iax username. When you signup, Binfone creates +a default IAX username for you, (a 5 digit number, usually, starting with a 1). +This works for most customers. Folks that want inbound then also sign up for +DIDs, each of which has its own IAX username. (Which is the 10 digit DID). +Each username has its own password which is managed through their web interface. + +NOTE: If you will be using the G729 codec through binfone there is now a +dedicated G729 gateway that only handles G729 calls. Please use this address to +register to if you plan on using G729 as your codec: iax-g729.binfone.com + + iax.conf: + [general] + register => 1112223333:PASSWORD@iax.binfone.com + + [1112223333] + auth=md5 + type=friend + username=1112223333 + secret=PASSWORD + host=iax.binfone.com + context=incoming-IAX-context-in-extensions.conf + + + extensions.conf: + [global] + TRUNKBINFONE=IAX2/1112223333:PASSWORD@iax.binfone.com ; IAX trunk interface + + [default] + exten => _91NXXNXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) + exten => _91NXXNXXXXXX,2,Dial(${TRUNKIAX}/${EXTEN:1},55,o) + exten => _91NXXNXXXXXX,3,Hangup + + [incoming] + exten => 1112223333,1,AGI(agi://127.0.0.1:4577/call_log) + exten => 1112223333,2,Dial(sip/gs102,55,o) + exten => 1112223333,3,Hangup + + + dnsmgr.conf: # It is very helpful to enable dnsmgr + [general] + enable=yes ; enable creation of managed DNS lookups + refreshinterval=300 ; refresh managed DNS lookups every seconds + + +##### END EXAMPLE + + +6. edit voicemail.conf + - vi /etc/asterisk/voicemail.conf + This is where we set up the voicemail boxes for the extensions that +we have set up: + [general] + format=wav49|gsm|wav + serveremail=asterisk + attach=yes + skipms=3000 + maxsilence=10 + silencethreshold=128 + maxlogins=3 + [zonemessages] + eastern=America/New_York|'vm-received' Q 'digits/at' IMp + central=America/Chicago|'vm-received' Q 'digits/at' IMp + central24=America/Chicago|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours' + [default] + 102 => 102,Grandstream Mailbox,root@localhost + 2000 => 2000,Sipura Mailbox 1 + 2001 => 2001,Sipura Mailbox 2 + 3001 => 3001,Firefly Mailbox 1 +7. edit manager.conf + - vi /etc/asterisk/manager.conf + This is where we set up remote logins to the asterisk manager +interface, to allow sending of Action commands from remote +connections to the Asterisk server, this will be important for the +astguiclient applications so let's set that up now: + [general] + enabled = yes + port = 5038 + bindaddr = 0.0.0.0 + [cron] + secret = 1234 + read = system,call,log,verbose,command,agent,user + write = system,call,log,verbose,command,agent,user + [updatecron] + secret = 1234 + read = command + write = command + [listencron] + secret = 1234 + read = system,call,log,verbose,command,agent,user + write = command + [sendcron] + secret = 1234 + read = command + write = system,call,log,verbose,command,agent,user + +8. edit logger.conf + - vi /etc/asterisk/logger.conf + This file determines the messages that are logged to the console and +the /var/log/asterisk/messages file. We usually turn on full logging +to the messages file to more easily diagnose any problems that we may +run into, the problem with this is that is does produce very large +files, so be warned: + [logfiles] + console => notice,warning,error + messages => notice,warning,error,debug,verbose +9. edit extensions.conf + - vi /etc/asterisk/extensions.conf + This is known as the dialplan. Since we are installing a +Long-Distance T1 with one 800 number on it, we will need to put that +800 number in the plan, as well as how to dial out through the T1 +lines and we will need to add an entry for each of the phones that we +have just set up in the sip.conf file. There are many examples both +in the sample file and online for what to put in your dialplan, here +is the simplified dialplan that we are using: +######------ START extensions.conf example ------###### +[general] +static=yes +writeprotect=no + +[globals] +CONSOLE=Console/dsp ; Console interface for demo +TRUNK=Zap/g1 ; Trunk interface +TRUNKX=Zap/g2 ; 2nd trunk interface +TRUNKIAX=IAX2/ASTtest1:test@10.10.10.16:4569 ; IAX trunk interface +TRUNKloop = IAX2/ASTloop:test@127.0.0.1:40569 ; used for blind monitoring +TRUNKblind = IAX2/ASTblind:test@127.0.0.1:41569 ; used for testing + +[default] +; Extension 8600 + 8601 conference rooms +exten => 8600,1,Meetme,8600 +exten => 8601,1,Meetme,8601 + +; Extension 102 - Grandstream hardphone +exten => 102,1,Playback,transfer|skip ; "Please hold while..." +exten => 102,2,Dial,sip/gs102|20|to ; Ring, 20 secs max +exten => 102,3,Voicemail,u102 ; Send to voicemail... +; Extension 2000 Sipura line 1 +exten => 2000,1,Dial,sip/spa2000|30|to ; Ring, 30 secs max +exten => 2000,2,Voicemail,u2000 ; Send to voicemail... +; Extension 2001 Sipura line 2 +exten => 2001,1,Dial,sip/spa2001|30|to ; Ring, 30 secs max +exten => 2001,2,Voicemail,u2001 ; Send to voicemail... +; Extension 2020 rings both sipura lines +exten => 2001,1,Dial,sip/spa2000&sip/spa2001|30|to ; Ring, 30 secs max +exten => 2001,2,Voicemail,u2000 ; Send to voicemail... +; Extension 301 rings the firefly softphone +exten => 301,1,Dial,(IAX2/firefly01@firefly01/s) +exten => 301,2,Hangup + +; Extension 3429 - Inbound 800 number (1-800-555-3429) +exten => _**3429,1,Ringing +exten => _**3429,2,Answer +exten => _**3429,3,Dial,sip/spa2000&sip/spa2001|30|to ; Ring, 30 secs max +exten => _**3429,4,Voicemail,u2000 ; Send to voicemail... +; Extension 3429 - with ANI [callerID] +exten => _*NXXNXXXXXX*3429,1,Ringing +exten => _*NXXNXXXXXX*3429,2,Answer +exten => _*NXXNXXXXXX*3429,3,Dial,sip/spa2000&sip/spa2001|30|to ; Ring, 30 +secs max +exten => _*NXXNXXXXXX*3429,4,Voicemail,u2000 ; Send to voicemail... + +; dial a long distance outbound number to the UK +exten => _901144XXXXXXXXXX,1,Dial(${TRUNKX}/${EXTEN:1},55,tTo) +exten => _901144XXXXXXXXXX,2,Hangup + +; dial a long distance outbound number to Australia +exten => _901161XXXXXXXXX,1,Dial(${TRUNKX}/${EXTEN:1},,tTo) +exten => _901161XXXXXXXXX,2,Hangup + +; dial an 800 outbound number +exten => _91800NXXXXXX,1,Dial(${TRUNK}/${EXTEN:1},,tTo) +exten => _91800NXXXXXX,2,Hangup +exten => _91888NXXXXXX,1,Dial(${TRUNK}/${EXTEN:1},,tTo) +exten => _91888NXXXXXX,2,Hangup +exten => _91877NXXXXXX,1,Dial(${TRUNK}/${EXTEN:1},,tTo) +exten => _91877NXXXXXX,2,Hangup +exten => _91866NXXXXXX,1,Dial(${TRUNK}/${EXTEN:1},,tTo) +exten => _91866NXXXXXX,2,Hangup + +; dial a local 727 outbound number with area code +exten => _9727NXXXXXX,1,Dial(${TRUNK}/1${EXTEN:1},,tTo) +exten => _9727NXXXXXX,2,Hangup + +; dial a local 813 outbound number with area code +exten => _9813NXXXXXX,1,Dial(${TRUNK}/${EXTEN:1},,tTo) +exten => _9813NXXXXXX,2,Hangup + +; dial a long distance outbound number +exten => _91NXXNXXXXXX,1,Dial(${TRUNKX}/${EXTEN:1},,tTo) +exten => _91NXXNXXXXXX,2,Hangup + +; dial a local outbound number (modified because of only LD T1) +exten => _9NXXXXXX,1,Dial(${TRUNK}/1727${EXTEN:1},,tTo) +exten => _9NXXXXXX,2,Hangup + +; barge monitoring extension +exten => 8159,1,ZapBarge +exten => 8159,2,Hangup + +; # timeout invalid rules +exten => #,1,Playback(invalid) ; "Thanks for trying the demo" +exten => #,2,Hangup ; Hang them up. +exten => t,1,Goto(#,1) ; If they take too long, give up +exten => i,1,Playback(invalid) ; "That's not valid, try again" + +; Give voicemail at extension 8500 +exten => 8500,1,VoicemailMain +exten => 8500,2,Goto(s,6) + +; ASTERISK AGENTS LOGINS FOR QUEUES (NOT part of VICIDIAL) +; the following assumes phone agent login and exten are 3 digits and the same +; also assumes that 3-digit login is present in agents.conf and queueus.conf +;Agent Logout then stay onhook, DIAL 54 + 3-digit ID +exten => _54XXX,1,AgentCallbackLogin(||) +; the following are used to login and logout of Asterisk Queues from phone +;Agent Login then stay offhook on the phone, DIAL 55 + 3-digit ID +exten => _55XXX,1,AgentLogin(${EXTEN:1}) +;Agent Login then stay onhook, phones will ring, DIAL 56 + 3-digit ID +exten => _56XXX,1,AgentCallbackLogin(||${EXTEN:1}@default) + +######------ END extensions.conf example ------###### + +### OPTIONAL IAX trunk extensions entries for long distance dialing over IAX + exten => _91NXXNXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) + exten => _91NXXNXXXXXX,2,Dial(${TRUNKIAX}/${EXTEN:1},55,o) + exten => _91NXXNXXXXXX,3,Hangup + +### OPTIONAL SIP trunk extensions entries for long distance dialing over SIP + exten => _91NXXNXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) + exten => _91NXXNXXXXXX,2,Dial(sip/${EXTEN:1}@SIPtrunk,55,o) + exten => _91NXXNXXXXXX,3,Hangup + +### OPTIONAL IAX Load Balance extens to allow for Overflow and Balanced VDAD +### In this setup, the serverIP is the prefix followed by agent conf_exten +### FOR MORE INFORMATION, READ THE LOAD_BALANCING.txt DOCUMENT +### server 1 extens: + exten => _010*010*010*016*.,1,Dial(${TRUNKIAX2}/${EXTEN:16},55,o) +### server 2 extens: + exten => _010*010*010*015*.,1,Dial(${TRUNKIAX1}/${EXTEN:16},55,o) + +10. edit dnsmgr.conf: # It is very helpful to enable dnsmgr + [general] + enable=yes ; enable creation of managed DNS lookups + refreshinterval=300 ; refresh managed DNS lookups every seconds + + +11. Now that you have configured Asterisk, it is time to try to start it for the +first time. + - First make sure that your T1 line(or other telco line) is connected to the +digium card. + - next type the following at the command prompt: "ztcfg -vvvvvv" + - you should see a confirmation that the Zaptel device has loaded + - now you can launch asterisk with the following command: + "asterisk -vvvvvvvvvvvvgc" + - you should see a lot of messages scroll by and at the end you should +be given a CLI> prompt if everything loaded OK. To get out of Asterisk you can +type "stop now". Now that you are sure it is running you can either run it in a +separate terminal window or use the start_asterisk_boot.pl that you will +install with astguiclient to start Asterisk: + /usr/share/astguiclient/start_asterisk_boot.pl + + + +SUBPHASE 5.1: setting up your SIP phones + +You will need to follow the instructions for the phones that you are using with +your system, but here's the way to set up a Grandstream 102 and a Linksys/Sipura +SPA-2000 + +1. Here are basic instructions for setting up a Grandstream BT 102: + - On the phone plug it in to power only at first and follow these +instructions: + - wait for the phone to boot up and press the MENU button + - go through the menu screens with the menu key and the up/down arrow +keys to move from setting to setting. We are setting the following +values: + - DHCP OFF + - IP Addr: 010.010.010.016 + - Subnet: 255.255.000.000 + - router: 010.010.010.001 + - dnS: 010.010.010.001 + - tftp: we leave this blank for now + - menu 7 we change the codec to G-711u + - now wait 10 seconds and unplug the power and plug it back in + - you can also plug the network cable into the LAN port on the phone + - at this time you can go to your workstation and open a new web browser + - go to http://10.10.10.16/ the password is "admin" + - here is where you will enter in the configuration details for the +phone to register with the Asterisk server + - SIP server: 10.10.10.15 + - SIP user ID: gs102 + - Authenticate ID: gs102 + - Password: test + - Name: gs102 + - Voice Mail UserID: 102 + - Send DTMF: in-audio + - NTP Server: tick.mit.edu + - then click update, click review changes, and click reboot + - your phone should now be able to register with the Asterisk server. If you +still have your console screen up you should see a registration message +appear telling you that gs102 has registered. + +2. Here are the basic instructions for setting up a Sipura SPA-2000 analog +adapter with 2 lines. + - Plug power and two analog phones into the adapter. + - pick up the phone plugged into line1 and press **** to enter admin menu + - press 101# then 0# to disable DHCP + - press 111# then 10*10*10*17# to change the IP address + - press 121# then 255*255*0*0# to change the subnet mask + - press 131# then 10*10*10*1# to change the default gateway + - hang up the phone, unplug the power, plug in the network cable and plug in +the power cable + - now you can go the the admin website: http://10.10.10.17/admin/advanced + - you will need to make these setting changes: + - click on the "Line 1" tab at the top and change the following values: + - Proxy: 10.10.10.15 + - Display Name: spa2000 + - userID: spa2000 + - password: test + - authID: spa2000 + - change the dialplan to the following: +(*xx|xxx|xxxx|xxxxx|xxxxxx|xxxxxxx|xxxxxxxx|xxxxxxxxxxx|xxxxxxxxxxxx|xxxxxxxxxxxxxxx|xxxxxxxxxxxxxxxx.) + - then click the "submit all changes" button at the bottom of the page +and your first phone line should work now + - to register the second line, simply click on the "Line 2" tab and go +through the above steps except use spa2001 instead of spa2000 for the use IDs + +3. Now both of your phone devices are set up and you can try making phone calls +between the three phones + + + +SUBPHASE 5.2: setting up an IAX2 phone + +This is optinal and we won't go into too much detail about this, but currently +there are several IAX hard and softphones on the market and more are coming +every month. Follow the instructions with the IAX phone you have chosen and +follow the steps below: + +1. Add an entry into your iax.conf file like below if you have not already + [firefly01] + type=friend + accountcode=firefly01 + context=default + auth=plaintext + host=dynamic + permit=0.0.0.0/0.0.0.0 + secret=test + qualify=yes + +2. Add an entry into your extensions.conf file like below if it is not in there + ; Extension 3001 rings IAX phone + exten => 301,1,Dial(IAX2/firefly01@firefly01/s) + exten => 301,2,Voicemail,u301 ; Send to voicemail... + +3. Download Firefly 3rd party, or IDEfisk for Windows or Linux: + - http://www.virbiage.com/firefly/download/firefly-thirdparty.exe + MIRRORS: + - http://mirror.isp.net.au/ftp/pub/firefly/firefly-thirdparty.exe + - http://downloads.vicidial.com/softphones/firefly-thirdparty.exe + IDEFISK: + - http://www.asteriskguru.com/idefisk/ + - Install the application + - Launch Firefly Softphone + - click the "I wish to connect to a 3rd party network" button + - Enter in network name: Asterisk + - Select IAX2 as the protocol + - enter in your server address: "10.10.10.15" in our case + - enter login and pass: "firefly01" and "test" for in our case + - click OK and you should be logged in and can place calls + + +SUBPHASE 5.3: setting up a Zap phone + +This is optinal and we won't go into too much detail about this either, there +are a few ways to use Zap devices as phones on your Asterisk system: Zaptel +phone cards, Channel Banks going through Zaptel T1 card, outside line call +coming in going through Zaptel line card. There isn't much to do but set your +Zaptel config files up and put entries into your extensions.conf file: + +1. Add an entry into your extensions.conf file like below + ; Extension 4001 rings Zap phone + exten => 4001,1,Dial,Zap/1|30| ; ring Zap device 1 + exten => 4001,2,Voicemail,u4001 ; Send to voicemail... + + + + +PHASE 6: INSTALLING ASTGUICLIENT AND VICIDIAL + +Now that Asterisk is installed and running we can add the astGUIclient and +VICIDIAL components to the system. + + + +SUBPHASE 6.0: putting the files in place + +There are two methods for downloading astGUIclient/VICIDIAL, a release and SVN + +1. Go to http://astguiclient.sf.net/ and download the latest astguiclient +package(as of this writing it is 2.0.4.1) + - for 2.0.X release: + - mkdir /usr/src/astguiclient + - cd /usr/src/astguiclient + - wget http://internap.dl.sourceforge.net/sourceforge/astguiclient/astguiclient_2.0.4.1.zip + - unzip astguiclient_2.0.4.1.zip + - perl install.pl (make sure you are in the directory with the install.pl file) + - for SVN 2.0 trunk: + - mkdir /usr/src/astguiclient + - cd /usr/src/astguiclient + - svn checkout svn://svn.eflo.net:43690/agc_2-X/trunk + - cd trunk + - perl install.pl + select to do interactive setup and customize to your server + - there is one more file you need that's not included with the download +package, it's the conf.gsm file(this is the half-hour music file that we use +to put people on hold). I have a free classical music file that is available +free for download at the following two sites: + http://downloads.vicidial.com/sounds/conf.gsm + http://astguiclient.sf.net/conf.gsm + Once you have downloaded it, you will need to copy it to this folder: + /var/lib/asterisk/sounds/ + Then you will need to execute this command to copy it as the park file + 'cp /var/lib/asterisk/sounds/conf.gsm /var/lib/asterisk/sounds/park.gsm' + Here are the steps spelled out: + cd /var/lib/asterisk/sounds + wget http://downloads.vicidial.com/sounds/conf.gsm + cp conf.gsm park.gsm + + - you are done + + + +SUBPHASE 6.1: creating the MySQL "asterisk" database + +we will create the database and add a few initial records so that we can +use the administrative web interface. Since this is a new install it is easier +to use our new mysql script file to add the tables to the database: + +1. at the command prompt type go to the mysql client: +/usr/local/mysql/bin/mysql +2. type the following into the mysql client prompt: + (make sure you put your IP address in place of "10.10.10.15" in the queries below) +######------ BEGIN Mysql data entry(you can copy and paste this into terminal) # +create database asterisk; + +NOTE: if you will be using lead files with a language that does not use the +standard latin character set then you will want to use UTF8 for your default +characterset in the MySQL database. This requires at least MySQL 4.1.11 and you +can use the following query to create the database: + CREATE DATABASE `asterisk` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; + + +GRANT SELECT,INSERT,UPDATE,DELETE,LOCK TABLES on asterisk.* TO cron@'%' IDENTIFIED BY '1234'; +GRANT SELECT,INSERT,UPDATE,DELETE,LOCK TABLES on asterisk.* TO cron@localhost IDENTIFIED BY '1234'; + +# NOTE: if using MySQL 4.1.12 or higher you may need to run this query too: +UPDATE mysql.user set password=OLD_PASSWORD('1234') where user='cron'; + +# NOTE: make sure you do NOT put any spaces or other punctuation in the +# server_id, phone, extension, or user fields in the queries below if you edit them. + +use asterisk; + +\. /usr/src/astguiclient/trunk/extras/MySQL_AST_CREATE_tables.sql + or you may need to run this if you get an error: + \. /usr/src/astguiclient/agc_2.0.4/extras/MySQL_AST_CREATE_tables.sql + \. /usr/src/astguiclient/astguiclient/MySQL_AST_CREATE_tables.sql + +### to load in default IAX and SIP phone accounts run the following query + +\. /usr/src/astguiclient/trunk/extras/sip-iax_phones.sql + or you may need to run this if you get an error: + \. /usr/src/astguiclient/agc_2.0.4/extras/sip-iax_phones.sql + \. /usr/src/astguiclient/astguiclient/sip-iax_phones.sql + + +insert into servers (server_id,server_description,server_ip,active,asterisk_version)values('TESTasterisk','Test install of Asterisk server', '10.10.10.15','Y','1.2.27'); + +insert into server_updater values('10.10.10.15',''); + +insert into phones (extension, dialplan_number, voicemail_id, phone_ip, computer_ip, server_ip, login, pass, status, active, phone_type, fullname, company, picture, messages, old_messages, protocol) values('gs102','102','102','10.10.10.16','10.10.9.16','10.10.10.15','gs102','test', 'ADMIN','Y','Grandstream BT 102','Test Admin Phone','TEST','','0','0','SIP'); + +insert into vicidial_users (user,pass,full_name,user_level,user_group,load_leads,campaign_detail,ast_admin_access,modify_users) values('6666','1234','Admin','9','ADMIN','1','1','1','1'); + +insert into conferences values('8600001','10.10.10.15',''); +insert into conferences values('8600002','10.10.10.15',''); +insert into conferences values('8600003','10.10.10.15',''); +insert into conferences values('8600004','10.10.10.15',''); +insert into conferences values('8600005','10.10.10.15',''); +insert into conferences values('8600006','10.10.10.15',''); +insert into conferences values('8600007','10.10.10.15',''); +insert into conferences values('8600008','10.10.10.15',''); +insert into conferences values('8600009','10.10.10.15',''); +insert into conferences values('8600010','10.10.10.15',''); +insert into conferences values('8600011','10.10.10.15',''); +insert into conferences values('8600012','10.10.10.15',''); +insert into conferences values('8600013','10.10.10.15',''); +insert into conferences values('8600014','10.10.10.15',''); +insert into conferences values('8600015','10.10.10.15',''); +insert into conferences values('8600016','10.10.10.15',''); +insert into conferences values('8600017','10.10.10.15',''); +insert into conferences values('8600018','10.10.10.15',''); +insert into conferences values('8600019','10.10.10.15',''); +insert into conferences values('8600020','10.10.10.15',''); +insert into conferences values('8600021','10.10.10.15',''); +insert into conferences values('8600022','10.10.10.15',''); +insert into conferences values('8600023','10.10.10.15',''); +insert into conferences values('8600024','10.10.10.15',''); +insert into conferences values('8600025','10.10.10.15',''); +insert into conferences values('8600026','10.10.10.15',''); +insert into conferences values('8600027','10.10.10.15',''); +insert into conferences values('8600028','10.10.10.15',''); +insert into conferences values('8600029','10.10.10.15',''); +insert into conferences values('8600030','10.10.10.15',''); +insert into conferences values('8600031','10.10.10.15',''); +insert into conferences values('8600032','10.10.10.15',''); +insert into conferences values('8600033','10.10.10.15',''); +insert into conferences values('8600034','10.10.10.15',''); +insert into conferences values('8600035','10.10.10.15',''); +insert into conferences values('8600036','10.10.10.15',''); +insert into conferences values('8600037','10.10.10.15',''); +insert into conferences values('8600038','10.10.10.15',''); +insert into conferences values('8600039','10.10.10.15',''); +insert into conferences values('8600040','10.10.10.15',''); +insert into conferences values('8600041','10.10.10.15',''); +insert into conferences values('8600042','10.10.10.15',''); +insert into conferences values('8600043','10.10.10.15',''); +insert into conferences values('8600044','10.10.10.15',''); +insert into conferences values('8600045','10.10.10.15',''); +insert into conferences values('8600046','10.10.10.15',''); +insert into conferences values('8600047','10.10.10.15',''); +insert into conferences values('8600048','10.10.10.15',''); +insert into conferences values('8600049','10.10.10.15',''); + +quit + + to populate the timezone/country table run this command from command line: + - /usr/share/astguiclient/ADMIN_area_code_populate.pl + + to load the performance testing leads run these commands: + - cp /usr/src/astguiclient/trunk/extras/performance_test_leads.txt /usr/share/astguiclient/LEADS_IN/ + or + - cp /usr/src/astguiclient/agc_2.0.4/extras/performance_test_leads.txt /usr/share/astguiclient/LEADS_IN/ + - cp /usr/src/astguiclient_2.0.4.1/trunk/extras/performance_test_leads.txt /usr/share/astguiclient/LEADS_IN/ + + - /usr/share/astguiclient/VICIDIAL_IN_new_leads_file.pl --forcelistid=107 --forcephonecode=1 + + +######------ END Mysql data entry ------###### + +NOTE: If you will be using channelbanks for agent phones you can use the +/extras/single_channelbank_phones.sql file to help enter the phones table entries. + +NOTE: If you will be using IAX or SIP phones for agent phones you can use the +/extras/sip-iax_phones.sql file to help enter the phones table entries. + +NOTE: if you are not installing using default user/pass or have MySQL on another +server, you will need to edit either the /etc/astguiclient.conf file or the +dbconnect.php files in the astguiclient, vicidial and agc directories of your +webroot. + +3. Enter the vicidial administration page: +http://10.10.10.15/vicidial/admin.php +NOTE: if you click on the Logout button you must leave the user/pass empty and click OK + - Here you will enter the login and password that you inserted into the mysql +database in the vicidial_users table (subphase 6.1 [6666/1234]) + - Now that you are logged into the astGUIclient administration system we can +add a new phone entry for each of the sipura lines we created. + - click on the "Admin" link at the top, then the "ADD PHONE" link below +that and enter in the proper information for each of the new phone lines. +Here's what we entered for spa2000: + - Phone extension: spa2000 + - Dialplan Number: 2000 + - Voicemail Box: 2000 + - Phone IP address: 10.10.10.17 + - Computer IP address: 10.10.9.17 + - Server IP: 10.10.10.15 + - Login: spa2000 + - Password: test + - Status: ACTIVE + - Active Account: Y + - Phone Type: Sipura SPA-2000 line 1 + - Full Name: Sipura line 1 test + - Company: TEST + - Picture: + - for the next phone simply replace 2000 with 2001 in the above example + - now your phones are all all set up in the astguiclient system and you can +use this website to add new phones to be used with astguiclient and monitor +the number of calls people are making. + - now your database is set up for the astguiclient conferences which + will allow you to have over 6 remote parties that you called from your + GUI client application in one conference. + - click on the "LIST ALL SERVERS" link at the top then click on the + server to modify. Verify that the GMT time zone and all other fields + are what you want them to be. There is a setting(Max VICIDIAL Trunks) + that can be modified to limit the number of VICIDIAL outbound trunks + that will be allowed to use on this server. + +4. **OPTIONAL** For IAX clients you will need to use full phone name as the +extension on the admin page entry: "firefly01@firefly01" for our IAX phone example +previously. And do not forget to set the protocol on this page to IAX2 + +5. **OPTIONAL** For Zap clients you will need to use full Zap Channel name as the +extension on the admin page entry: "1-1" for our Zap phone example +previously. And do not forget to set the protocol on this page to Zap + + + + +SUBPHASE 6.2: making additions to your Asterisk conf files + +Now that the database is set up and our phones have entries in the system we can +make the additions to the running Asterisk system that will allow astguiclient +to work with it. + +1. Add the call_log entries to all incoming/outgoing extensions entries: + - here is how our sample dialplan changes for adding call_log entries(only +effected extension groups are show): +######------ START extensions.conf changes for call_log ------###### + +##### This 'h' exten is VERY important for VICIDIAL usage, +##### you will have problems if it is not in your dialplan! +exten => h,1,DeadAGI(agi://127.0.0.1:4577/call_log--HVcauses--PRI-----NODEBUG-----${HANGUPCAUSE}-----${DIALSTATUS}-----${DIALEDTIME}-----${ANSWEREDTIME}) + +; MANDITORY VDAD extens: +; In this setup, the serverIP is the prefix followed by agent conf_exten +; These lines are REQUIRED for VICIDIAL to work properly +; local server extens: +; BE SURE TO CHANGE THIS LINE FOR YOUR IP ADDRESS! + exten => _010*010*010*015*.,1,Goto(default,${EXTEN:16},1) + exten => _8600XXX*.,1,AGI(agi-VDADfixCXFER.agi) + exten => _78600XXX*.,1,AGI(agi-VDADfixCXFER.agi) +; Local blind monitoring + exten => _08600XXX,1,Dial(${TRUNKblind}/6${EXTEN:1},55,To) +; OPTIONAL server 2 extens, needed for load balancing: + exten => _010*010*010*016*.,1,Dial(${TRUNKIAX2}/${EXTEN:16},55,o) + +; Extension 3429 - Inbound 800 number (1-800-555-3429) +exten => _**3429,1,Ringing +exten => _**3429,2,AGI(agi://127.0.0.1:4577/call_log) +exten => _**3429,3,Answer +exten => _**3429,4,Dial,sip/spa2000&sip/spa2001,30,to +exten => _**3429,5,Voicemail,u2000 +; Extension 3429 - with ANI [callerID] +exten => _*NXXNXXXXXX*3429,1,Ringing +exten => _*NXXNXXXXXX*3429,2,AGI(agi://127.0.0.1:4577/call_log) +exten => _*NXXNXXXXXX*3429,3,Answer +exten => _*NXXNXXXXXX*3429,4,Dial,sip/spa2000&sip/spa2001,30,to +exten => _*NXXNXXXXXX*3429,5,Voicemail,u2000 + +; Extension 7275551212 - Inbound local number from PRI with 10 digit delivery +; SEE extensions.conf.sample-1.4 for changes needed for use with Asterisk 1.4 +exten => 7275551212,1,Ringing +exten => 7275551212,2,Wait(1) +exten => 7275551212,3,AGI(agi://127.0.0.1:4577/call_log--fullCID--${EXTEN}-----${CALLERID}-----${CALLERIDNUM}-----${CALLERIDNAME}) +exten => 7275551212,4,Answer +exten => 7275551212,5,Dial,sip/spa2000&sip/spa2001,30,to +exten => 7275551212,6,Voicemail,u2000 + +; This 'o' Dial flag is VERY important for VICIDIAL on outbound calls, + +; dial a long distance outbound number to the UK +exten => _901144XXXXXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) +exten => _901144XXXXXXXXXX,2,Dial(${TRUNKX}/${EXTEN:1},55,tTo) +exten => _901144XXXXXXXXXX,3,Hangup + +; dial a long distance outbound number to Australia +exten => _901161XXXXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) +exten => _901161XXXXXXXXX,2,Dial(${TRUNKX}/${EXTEN:1},,tTo) +exten => _901161XXXXXXXXX,3,Hangup + +; Extensions for performance testing +exten => _91999NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) +exten => _91999NXXXXXX,2,Dial(${TRUNKloop}/${EXTEN:2},,tTo) +exten => _91999NXXXXXX,3,Hangup +exten => 999999999999,1,AGI(agi://127.0.0.1:4577/call_log) +exten => 999999999999,2,Dial(${TRUNKloop}/${EXTEN:1},,tTo) +exten => 999999999999,3,Hangup + +; dial an 800 outbound number +exten => _91800NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) +exten => _91800NXXXXXX,2,Dial(${TRUNK}/${EXTEN:1},,tTo) +exten => _91800NXXXXXX,3,Hangup +exten => _91888NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) +exten => _91888NXXXXXX,2,Dial(${TRUNK}/${EXTEN:1},,tTo) +exten => _91888NXXXXXX,3,Hangup +exten => _91877NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) +exten => _91877NXXXXXX,2,Dial(${TRUNK}/${EXTEN:1},,tTo) +exten => _91877NXXXXXX,3,Hangup +exten => _91866NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) +exten => _91866NXXXXXX,2,Dial(${TRUNK}/${EXTEN:1},,tTo) +exten => _91866NXXXXXX,3,Hangup + +; dial a local 727 outbound number with area code +exten => _9727NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) +exten => _9727NXXXXXX,2,Dial(${TRUNK}/1${EXTEN:1},,tTo) +exten => _9727NXXXXXX,3,Hangup + +; This 'o' Dial flag is VERY important for VICIDIAL on outbound calls, +; dial a long distance outbound number +exten => _91NXXNXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) +exten => _91NXXNXXXXXX,2,Dial(${TRUNKX}/${EXTEN:1},,tTo) +exten => _91NXXNXXXXXX,3,Hangup + +; dial a local outbound number (modified because of only LD T1) +exten => _9NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log) +exten => _9NXXXXXX,2,Dial(${TRUNK}/1727${EXTEN:1},,tTo) +exten => _9NXXXXXX,3,Hangup + +######------ END extensions.conf changes ------###### + + +2. Add the call_inbound entries to all incoming extensions entries that you want +CallerID popups on: + - here is how our sample dialplan changes for adding call_inbound +entries(only effected extension groups are show): +######------ START extensions.conf changes for call_inbound ------###### +; parameters for call_inbound.agi (7 fields separated by five dashes "-----"): +; 1. the extension of the phone to ring as defined in the asterisk.phones table +; 2. the phone number that was called, for the live_inbound/_log entry +; 3. a text description of the number that was called in +; 4-7. optional fields, they are also passed as fields in the GUI to web browser + +; Extension 3429 - Inbound 800 number (1-800-555-3429) +exten => _**3429,1,Ringing +exten => _**3429,2,AGI(agi://127.0.0.1:4577/call_log) +exten => _**3429,3,AGI(call_inbound.agi,spa2000-----8005553429-----Inbound 800-----x-----y-----z-----w) +exten => _**3429,4,Answer +exten => _**3429,5,Dial,sip/spa2000&sip/spa2001|30|to +exten => _**3429,6,Voicemail,u2000 +; Extension 3429 - with ANI [callerID] +exten => _*NXXNXXXXXX*3429,1,Ringing +exten => _*NXXNXXXXXX*3429,2,AGI(agi://127.0.0.1:4577/call_log) +exten => _*NXXNXXXXXX*3429,3,AGI(call_inbound.agi,spa2000-----8005553429-----Inbound 800-----x-----y-----z-----w) +exten => _*NXXNXXXXXX*3429,3,Answer +exten => _*NXXNXXXXXX*3429,4,Dial,sip/spa2000&sip/spa2001|30|to +exten => _*NXXNXXXXXX*3429,5,Voicemail,u2000 + +; parameters for agi-VDAD_ALL_inbound.agi (9 fields separated by five dashes "-----"): +; 1. the method of call handling for the script: +; - CID - CID received, add record with phone number +; - CIDLOOKUP - Lookup CID to find record in whole system +; - CIDLOOKUPRL - Restrict lookup to one list +; - CIDLOOKUPRC - Restrict lookup to one campaign's lists +; - CLOSER - Closer calls from VICIDIAL fronters +; - ANI - ANI received, add record with phone number +; - ANILOOKUP - Lookup ANI to find record in whole system +; - ANILOOKUPRL - Restrict lookup to one list +; - 3DIGITID - Enter 3 digit code to go to agent +; - 4DIGITID - Enter 4 digit code to go to agent +; - 5DIGITID - Enter 5 digit code to go to agent +; - 10DIGITID - Enter 10 digit code to go to agent +; 2. the method of searching for an available agent: +; - LO - Load Balance Overflow only (priority to home server) +; - LB - Load Balance total system +; - SO - Home server only +; 3. the full name of the IN GROUP to be used in vicidial for the inbound call +; 4. the phone number that was called, for the log entry +; 5. the callerID or lead_id of the person that called(usually overridden) +; 6. the park extension audio file name if used +; 7. the status of the call initially(usually not used) +; 8. the list_id to insert the new lead under if it is new (and CID/ANI available) +; 9. the phone dialing code to insert with the new lead if new (and CID/ANI available) +; 10. the campaign_id to search within lists if CIDLOOKUPRC +; inbound VICIDIAL call with CID delivery through T1 PRI +exten => 1234,1,Answer ; Answer the line +exten => 1234,2,AGI(agi-VDAD_ALL_inbound.agi,CID-----LB-----CL_GALLERIA-----7274515134-----Closer-----park----------999-----1) +exten => 1234,3,Hangup + +; inbound VICIDIAL transfer calls [can arrive through PRI T1 crossover, IAX or SIP channel] +exten => _90009.,1,Answer ; Answer the line +exten => _90009.,2,AGI(agi-VDAD_ALL_inbound.agi,CLOSER-----LB-----CL_TESTCAMP-----7275551212-----Closer-----park----------999-----1) +exten => _90009.,3,Hangup +exten => _990009.,1,Answer ; Answer the line +exten => _990009.,2,AGI(agi-VDAD_ALL_inbound.agi,CLOSER-----LB-----CL_TESTCAMP-----7275551212-----Closer-----park----------999-----1) +exten => _990009.,3,Hangup + + +### follow these instructions if you plan to have VICIDIAL agents take inbound or closer calls: + 1. in VICIDIAL web admin "add a new in-group" (the above examples would be "CL_GALLERIA") + - group IDs cannot contain spaces ' ' or dashes '-' or plusses '+' + - if you are using a HEX color value make sure to include the hash '#' at the beginning + 2. create a new campaign in VICIDIAL called "CLOSER" and set "allow inbound blended" to Y + 3. check the CL_GALLERIA checknox in the "Allowed In-Groups" section + 4. have agents log in to the CLOSER campaign and select the CL_GALLERIA in-group + 5. they will now start receiving inbound calls + 6. as calls come in, each call is inserted into the vicidial_list table under the + list specified int the AGI string, In the above example that would be list 999 + 7. if you want to take closer calls from the campaign "TEST" you will need to create + an in-group called "CL_TEST_" for internal closing(on the same system) or "CL_TEST_L" + for local closing(closer on different system from fronter) and then the fronter will + click on the "internal closer" button to send the call to a closer + +* NOTE, you need to set the dial_level of the CLOSER campaign to 1 or higher for inbound/closers to work + +######------ END extensions.conf changes for call_inbound ------###### + + +3. Add the ZapBarge entries for all zap lines: + - here is how our sample dialplan changes for adding zapbarge line-specific +entries(this is a pure addition, nothing is being modified): + +; ZapBarge direct channel extensions +exten => _86120XX,1,ZapBarge(${EXTEN:5}) + + +4. Add the meetme entries for astguiclient and VICIDIAL conferences to +meetme.conf: + - here is how our sample meetme.conf file changes for adding conference +entries (this is a pure addition, nothing is being modified): +######------ START meetme.conf additions for conferences ------###### +conf => 8600001 +conf => 8600002 +conf => 8600003 +conf => 8600004 +conf => 8600005 +conf => 8600006 +conf => 8600007 +conf => 8600008 +conf => 8600009 +conf => 8600010 +conf => 8600011 +conf => 8600012 +conf => 8600013 +conf => 8600014 +conf => 8600015 +conf => 8600016 +conf => 8600017 +conf => 8600018 +conf => 8600019 +conf => 8600020 +conf => 8600021 +conf => 8600022 +conf => 8600023 +conf => 8600024 +conf => 8600025 +conf => 8600026 +conf => 8600027 +conf => 8600028 +conf => 8600029 +conf => 8600030 +conf => 8600031 +conf => 8600032 +conf => 8600033 +conf => 8600034 +conf => 8600035 +conf => 8600036 +conf => 8600037 +conf => 8600038 +conf => 8600039 +conf => 8600040 +conf => 8600041 +conf => 8600042 +conf => 8600043 +conf => 8600044 +conf => 8600045 +conf => 8600046 +conf => 8600047 +conf => 8600048 +conf => 8600049 +conf => 8600050 +conf => 8600051 +conf => 8600052 +conf => 8600053 +conf => 8600054 +conf => 8600055 +conf => 8600056 +conf => 8600057 +conf => 8600058 +conf => 8600059 +conf => 8600060 +conf => 8600061 +conf => 8600062 +conf => 8600063 +conf => 8600064 +conf => 8600065 +conf => 8600066 +conf => 8600067 +conf => 8600068 +conf => 8600069 +conf => 8600070 +conf => 8600071 +conf => 8600072 +conf => 8600073 +conf => 8600074 +conf => 8600075 +conf => 8600076 +conf => 8600077 +conf => 8600078 +conf => 8600079 +conf => 8600080 +conf => 8600081 +conf => 8600082 +conf => 8600083 +conf => 8600084 +conf => 8600085 +conf => 8600086 +conf => 8600087 +conf => 8600088 +conf => 8600089 +conf => 8600090 +conf => 8600091 +conf => 8600092 +conf => 8600093 +conf => 8600094 +conf => 8600095 +conf => 8600096 +conf => 8600097 +conf => 8600098 +conf => 8600099 +conf => 8600100 +conf => 8600101 +conf => 8600102 +conf => 8600103 +conf => 8600104 +conf => 8600105 +conf => 8600106 +conf => 8600107 +conf => 8600108 +conf => 8600109 +conf => 8600110 +conf => 8600111 +conf => 8600112 +conf => 8600113 +conf => 8600114 +conf => 8600115 +conf => 8600116 +conf => 8600117 +conf => 8600118 +conf => 8600119 +conf => 8600120 +conf => 8600121 +conf => 8600122 +conf => 8600123 +conf => 8600124 +conf => 8600125 +conf => 8600126 +conf => 8600127 +conf => 8600128 +conf => 8600129 +conf => 8600130 +conf => 8600131 +conf => 8600132 +conf => 8600133 +conf => 8600134 +conf => 8600135 +conf => 8600136 +conf => 8600137 +conf => 8600138 +conf => 8600139 +conf => 8600140 +conf => 8600141 +conf => 8600142 +conf => 8600143 +conf => 8600144 +conf => 8600145 +conf => 8600146 +conf => 8600147 +conf => 8600148 +conf => 8600149 +conf => 8600150 +conf => 8600151 +conf => 8600152 +conf => 8600153 +conf => 8600154 +conf => 8600155 +conf => 8600156 +conf => 8600157 +conf => 8600158 +conf => 8600159 +conf => 8600160 +conf => 8600161 +conf => 8600162 +conf => 8600163 +conf => 8600164 +conf => 8600165 +conf => 8600166 +conf => 8600167 +conf => 8600168 +conf => 8600169 +conf => 8600170 +conf => 8600171 +conf => 8600172 +conf => 8600173 +conf => 8600174 +conf => 8600175 +conf => 8600176 +conf => 8600177 +conf => 8600178 +conf => 8600179 +conf => 8600180 +conf => 8600181 +conf => 8600182 +conf => 8600183 +conf => 8600184 +conf => 8600185 +conf => 8600186 +conf => 8600187 +conf => 8600188 +conf => 8600189 +conf => 8600190 +conf => 8600191 +conf => 8600192 +conf => 8600193 +conf => 8600194 +conf => 8600195 +conf => 8600196 +conf => 8600197 +conf => 8600198 +conf => 8600199 +conf => 8600200 +######------ END meetme.conf additions for conferences ------###### + + +5. Add the conference entries for astguiclient conferences: + - here is how our sample dialplan changes for adding conference entries (this +is a pure addition, nothing is being modified): + +; astGUIclient conferences +exten => _86000[0-4]X,1,Meetme,${EXTEN}|q + + +6. Add the conference entries for VICIDIAL conferences: + - here is how our sample dialplan changes for adding VICIDIAL conference +entries(this is a pure addition, nothing is being modified): +NOTE: see below these entries for app_conference instructions is used +######------ START extensions.conf changes for VD conf ------###### +exten => _X48600XXX,1,MeetMeAdmin(${EXTEN:2},T,${EXTEN:0:1}) +exten => _X48600XXX,2,Hangup + +exten => _X38600XXX,1,MeetMeAdmin(${EXTEN:2},t,${EXTEN:0:1}) +exten => _X38600XXX,2,Hangup + +exten => _X28600XXX,1,MeetMeAdmin(${EXTEN:2},m,${EXTEN:0:1}) +exten => _X28600XXX,2,Hangup + +exten => _X18600XXX,1,MeetMeAdmin(${EXTEN:2},M,${EXTEN:0:1}) +exten => _X18600XXX,2,Hangup + +exten => _55558600XXX,1,MeetMeAdmin(${EXTEN:4},K) +exten => _55558600XXX,2,Hangup +exten => 8300,1,Hangup + +; VICIDIAL conferences +exten => _86000[5-9]X,1,Meetme,${EXTEN}|F +exten => _86001XX,1,Meetme,${EXTEN}|F +exten => _8600200,1,Meetme,${EXTEN}|F +; quiet entry and leaving conferences for VICIDIAL +exten => _78600XXX,1,Meetme,${EXTEN:1}|Fq +; quiet monitor extensions for meetme rooms (for room managers) +exten => _68600XXX,1,Meetme,${EXTEN:1}|Fmq +; Local blind monitoring +exten => _08600XXX,1,Dial(${TRUNKblind}/6${EXTEN:1},55,To) + +; voicelab exten +exten => _86009XX,1,Meetme,${EXTEN}|Fmq +; voicelab exten moderator +exten => _986009XX,1,Meetme,${EXTEN:1} + +######------ END extensions.conf changes for VD conf ------###### + +NOTE: If you want to do DTMF passthru with app_conference bee sure to add the +"i" and "t" flags to the 8600XX lines: Conference(8600051|it) + + +7. Add the more entries for astGUIclient specific uses: + - here are some more dialplan additions needed to use astGUIclient(this is a +pure addition, nothing is being modified): +######------ START extensions.conf other additions ------###### +; park channel for client GUI parking, hangup after 30 minutes +; create a GSM formatted audio file named "park.gsm" that is 30 minutes long +; and put it in /var/lib/asterisk/sounds +exten => 8301,1,Answer +exten => 8301,2,AGI(park_CID.agi) +exten => 8301,3,Playback(park) +exten => 8301,4,Hangup +exten => 8303,1,Answer +exten => 8303,2,AGI(park_CID.agi) +exten => 8303,3,Playback(conf) +exten => 8303,4,Hangup + +; park channel for client GUI conferencing, hangup after 30 minutes +; create a GSM formatted audio file named "conf.gsm" that is 30 minutes long +; and put it in /var/lib/asterisk/sounds +exten => 8302,1,Answer +exten => 8302,2,Playback(conf) +exten => 8302,3,Hangup + +exten => 8304,1,Answer +exten => 8304,2,Playback(ding) +exten => 8304,3,Hangup + +; default audio for safe harbor 2-second-after-hello message then hangup +; create a GSM formatted audio file complies with safe harbor rules +; and put it in /var/lib/asterisk/sounds then change filename below +exten => 8307,1,Answer +exten => 8307,2,Playback(vm-goodbye) +exten => 8307,3,Hangup + +; this is used for recording conference calls, the client app sends the filename +; value as a callerID recordings go to /var/spool/asterisk/monitor (WAV) +; SEE extensions.conf.sample-1.4 for changes needed for use with Asterisk 1.4 +exten => 8309,1,Answer +exten => 8309,2,Monitor(wav,${CALLERIDNAME}) +exten => 8309,3,Wait,3600 +exten => 8309,4,Hangup + +; this is used for recording conference calls, the client app sends the filename +; value as a callerID recordings go to /var/spool/asterisk/monitor (GSM) +; SEE extensions.conf.sample-1.4 for changes needed for use with Asterisk 1.4 +exten => 8310,1,Answer +exten => 8310,2,Monitor(gsm,${CALLERIDNAME}) +exten => 8310,3,Wait,3600 +exten => 8310,4,Hangup + +; this is used for playing a message to an answering machine forwarded from AMD in VICIDIAL +; replace conf with the message file you want to leave +exten => 8320,1,WaitForSilence(2000,2) ; AMD got machine. leave message after recording +exten => 8320,2,Playback(conf) +exten => 8320,3,AGI(VD_amd_post.agi,${EXTEN}) +exten => 8320,4,Hangup + +; this is used to allow the GUI to send you directly into voicemail +; don't forget to set GUI variable $voicemail_exten to this extension +; SEE extensions.conf.sample-1.4 for changes needed for use with Asterisk 1.4 +exten => 8501,1,VoicemailMain(s${CALLERIDNUM}) +exten => 8501,2,Hangup + +; this is used to allow the GUI to send live calls directly into voicemail +; don't forget to set GUI variable $voicemail_dump_exten to this extension +exten => _85026666666666.,1,Wait(2) +exten => _85026666666666.,2,Voicemail(${EXTEN:14}) +exten => _85026666666666.,3,Hangup + +; this is used for sending DTMF signals within conference calls, the client app +; sends the digits to be played in the callerID field +; sound files must be placed in /var/lib/asterisk/sounds +exten => 8500998,1,Answer +exten => 8500998,2,Playback(silence) +exten => 8500998,3,AGI(agi-dtmf.agi) +exten => 8500998,4,Hangup + +; prompts for recording AGI script, ID is 4321 +; first variable is format (gsm/wav) +; second variable is timeout in milliseconds (default is 360000 [6 minutes]) +exten => 8167,1,Answer +exten => 8167,2,AGI(agi-record_prompts.agi,wav-----360000) +exten => 8167,3,Hangup +exten => 8168,1,Answer +exten => 8168,2,AGI(agi-record_prompts.agi,gsm-----360000) +exten => 8168,3,Hangup + +; playback of recorded prompts +exten => _851XXXXX,1,Answer +exten => _851XXXXX,2,Playback(${EXTEN}) +exten => _851XXXXX,3,Hangup + +#### VDAD STANDARD TRANSFER ENTRIES #### +; VICIDIAL_auto_dialer transfer script for no-agent campaigns: +exten => 8364,1,AGI(agi://127.0.0.1:4577/call_log) +exten => 8364,2,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB) +exten => 8364,3,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB) +exten => 8364,4,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB) +exten => 8364,5,Hangup + +; VICIDIAL_auto_dialer transfer script: +exten => 8365,1,AGI(agi://127.0.0.1:4577/call_log) +exten => 8365,2,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----SO) +exten => 8365,3,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----SO) +exten => 8365,4,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----SO) +exten => 8365,5,Hangup + +; VICIDIAL_auto_dialer transfer script SURVEY at beginning: +exten => 8366,1,AGI(agi://127.0.0.1:4577/call_log) +exten => 8366,2,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMP-----LB) +exten => 8366,3,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMP-----LB) +exten => 8366,4,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMP-----LB) +exten => 8366,5,Hangup + +; VICIDIAL_auto_dialer transfer script Load Balance Overflow: +exten => 8367,1,AGI(agi://127.0.0.1:4577/call_log) +exten => 8367,2,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LO) +exten => 8367,3,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LO) +exten => 8367,4,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LO) +exten => 8367,5,Hangup + +; VICIDIAL_auto_dialer transfer script Load Balanced: +exten => 8368,1,AGI(agi://127.0.0.1:4577/call_log) +exten => 8368,2,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB) +exten => 8368,3,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB) +exten => 8368,4,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB) +exten => 8368,5,Hangup + +; VICIDIAL_auto_dialer transfer script AMD with Load Balanced: +exten => 8369,1,AGI(agi://127.0.0.1:4577/call_log) +exten => 8369,2,AMD(2000|2000|1000|5000|120|50|4|256) +exten => 8369,3,AGI(VD_amd.agi,${EXTEN}) +exten => 8369,4,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB) +exten => 8369,5,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB) +exten => 8369,6,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB) +exten => 8369,7,Hangup + +; VICIDIAL auto-dial reminder script +exten => 8372,1,AGI(agi://127.0.0.1:4577/call_log) +exten => 8372,2,AGI(agi-VDADautoREMINDER.agi,${EXTEN}) +exten => 8372,3,AGI(agi-VDADautoREMINDER.agi,${EXTEN}) +exten => 8372,4,AGI(agi-VDADautoREMINDER.agi,${EXTEN}) +exten => 8372,5,Hangup + +; VICIDIAL SURVEY transfer script AMD with Load Balanced: +exten => 8373,1,AGI(agi://127.0.0.1:4577/call_log) +exten => 8373,2,AMD(2000|2000|1000|5000|120|50|4|256) +exten => 8373,3,AGI(VD_amd.agi,${EXTEN}) +exten => 8373,4,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMP-----LB) +exten => 8373,5,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMP-----LB) +exten => 8373,6,Hangup + +#### VDAD SIP UNREGISTERED TRANSFER ENTRIES #### +#### Use these entries IN PLACE OF the entries above if you are using SIP trunks +#### and are not registering your provider in sip.conf +;; VICIDIAL_auto_dialer transfer script for no-agent campaigns: +;exten => 8364,1,Playback(sip-silence) +;exten => 8364,2,AGI(agi://127.0.0.1:4577/call_log) +;exten => 8364,3,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB) +;exten => 8364,4,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB) +;exten => 8364,5,Hangup +; +;; VICIDIAL_auto_dialer transfer script: +;exten => 8365,1,Playback(sip-silence) +;exten => 8365,2,AGI(agi://127.0.0.1:4577/call_log) +;exten => 8365,3,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----SO) +;exten => 8365,4,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----SO) +;exten => 8365,5,Hangup +; +;; VICIDIAL_auto_dialer transfer script SURVEY at beginning: +;exten => 8366,1,Playback(sip-silence) +;exten => 8366,2,AGI(agi://127.0.0.1:4577/call_log) +;exten => 8366,3,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMP-----LB) +;exten => 8366,4,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMP-----LB) +;exten => 8366,5,Hangup +; +;; VICIDIAL_auto_dialer transfer script Load Balance Overflow: +;exten => 8367,1,Playback(sip-silence) +;exten => 8367,2,AGI(agi://127.0.0.1:4577/call_log) +;exten => 8367,3,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LO) +;exten => 8367,4,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LO) +;exten => 8367,5,Hangup +; +;; VICIDIAL_auto_dialer transfer script Load Balanced: +;exten => 8368,1,Playback(sip-silence) +;exten => 8368,2,AGI(agi://127.0.0.1:4577/call_log) +;exten => 8368,3,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB) +;exten => 8368,4,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB) +;exten => 8368,5,Hangup +; +;; VICIDIAL_auto_dialer transfer script AMD with Load Balanced: +;exten => 8369,1,Playback(sip-silence) +;exten => 8369,2,AGI(agi://127.0.0.1:4577/call_log) +;exten => 8369,3,AMD(2000|2000|1000|5000|120|50|4|256) +;exten => 8369,4,AGI(VD_amd.agi,${EXTEN}) +;exten => 8369,5,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB) +;exten => 8369,6,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB) +;exten => 8369,7,Hangup +; +;; VICIDIAL auto-dial reminder script +;exten => 8372,1,Playback(sip-silence) +;exten => 8372,2,AGI(agi://127.0.0.1:4577/call_log) +;exten => 8372,3,AGI(agi-VDADautoREMINDER.agi,${EXTEN}) +;exten => 8372,4,AGI(agi-VDADautoREMINDER.agi,${EXTEN}) +;exten => 8372,5,Hangup +; +;; VICIDIAL SURVEY transfer script AMD with Load Balanced: +;exten => 8373,1,Playback(sip-silence) +;exten => 8373,2,AGI(agi://127.0.0.1:4577/call_log) +;exten => 8373,3,AMD(2000|2000|1000|5000|120|50|4|256) +;exten => 8373,4,AGI(VD_amd.agi,${EXTEN}) +;exten => 8373,5,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMP-----LB) +;exten => 8373,6,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMP-----LB) +;exten => 8373,7,Hangup + + + +SUBPHASE 6.3: adding entries to your MySQL "asterisk" database for vicidial +applications + +We need to add a few initial values to the vicidial tables in the "asterisk" +database in order to start setting up the vicidial dialer system for use. + +1. at the command prompt type this to go to the mysql client: +/usr/local/mysql/bin/mysql +2. type the following into the mysql client prompt: + (make sure you put your IP address in place of "10.10.10.15" in the queries below) +######------ BEGIN Mysql data entry(you can copy and paste this into terminal) # + +insert into vicidial_conferences values('8600051','10.10.10.15',''); +insert into vicidial_conferences values('8600052','10.10.10.15',''); +insert into vicidial_conferences values('8600053','10.10.10.15',''); +insert into vicidial_conferences values('8600054','10.10.10.15',''); +insert into vicidial_conferences values('8600055','10.10.10.15',''); +insert into vicidial_conferences values('8600056','10.10.10.15',''); +insert into vicidial_conferences values('8600057','10.10.10.15',''); +insert into vicidial_conferences values('8600058','10.10.10.15',''); +insert into vicidial_conferences values('8600059','10.10.10.15',''); +insert into vicidial_conferences values('8600060','10.10.10.15',''); +insert into vicidial_conferences values('8600061','10.10.10.15',''); +insert into vicidial_conferences values('8600062','10.10.10.15',''); +insert into vicidial_conferences values('8600063','10.10.10.15',''); +insert into vicidial_conferences values('8600064','10.10.10.15',''); +insert into vicidial_conferences values('8600065','10.10.10.15',''); +insert into vicidial_conferences values('8600066','10.10.10.15',''); +insert into vicidial_conferences values('8600067','10.10.10.15',''); +insert into vicidial_conferences values('8600068','10.10.10.15',''); +insert into vicidial_conferences values('8600069','10.10.10.15',''); +insert into vicidial_conferences values('8600070','10.10.10.15',''); +insert into vicidial_conferences values('8600071','10.10.10.15',''); +insert into vicidial_conferences values('8600072','10.10.10.15',''); +insert into vicidial_conferences values('8600073','10.10.10.15',''); +insert into vicidial_conferences values('8600074','10.10.10.15',''); +insert into vicidial_conferences values('8600075','10.10.10.15',''); +insert into vicidial_conferences values('8600076','10.10.10.15',''); +insert into vicidial_conferences values('8600077','10.10.10.15',''); +insert into vicidial_conferences values('8600078','10.10.10.15',''); +insert into vicidial_conferences values('8600079','10.10.10.15',''); +insert into vicidial_conferences values('8600080','10.10.10.15',''); +insert into vicidial_conferences values('8600081','10.10.10.15',''); +insert into vicidial_conferences values('8600082','10.10.10.15',''); +insert into vicidial_conferences values('8600083','10.10.10.15',''); +insert into vicidial_conferences values('8600084','10.10.10.15',''); +insert into vicidial_conferences values('8600085','10.10.10.15',''); +insert into vicidial_conferences values('8600086','10.10.10.15',''); +insert into vicidial_conferences values('8600087','10.10.10.15',''); +insert into vicidial_conferences values('8600088','10.10.10.15',''); +insert into vicidial_conferences values('8600089','10.10.10.15',''); +insert into vicidial_conferences values('8600090','10.10.10.15',''); +insert into vicidial_conferences values('8600091','10.10.10.15',''); +insert into vicidial_conferences values('8600092','10.10.10.15',''); +insert into vicidial_conferences values('8600093','10.10.10.15',''); +insert into vicidial_conferences values('8600094','10.10.10.15',''); +insert into vicidial_conferences values('8600095','10.10.10.15',''); +insert into vicidial_conferences values('8600096','10.10.10.15',''); +insert into vicidial_conferences values('8600097','10.10.10.15',''); +insert into vicidial_conferences values('8600098','10.10.10.15',''); +insert into vicidial_conferences values('8600099','10.10.10.15',''); +insert into vicidial_conferences values('8600100','10.10.10.15',''); +insert into vicidial_conferences values('8600101','10.10.10.15',''); +insert into vicidial_conferences values('8600102','10.10.10.15',''); +insert into vicidial_conferences values('8600103','10.10.10.15',''); +insert into vicidial_conferences values('8600104','10.10.10.15',''); +insert into vicidial_conferences values('8600105','10.10.10.15',''); +insert into vicidial_conferences values('8600106','10.10.10.15',''); +insert into vicidial_conferences values('8600107','10.10.10.15',''); +insert into vicidial_conferences values('8600108','10.10.10.15',''); +insert into vicidial_conferences values('8600109','10.10.10.15',''); +insert into vicidial_conferences values('8600110','10.10.10.15',''); +insert into vicidial_conferences values('8600111','10.10.10.15',''); +insert into vicidial_conferences values('8600112','10.10.10.15',''); +insert into vicidial_conferences values('8600113','10.10.10.15',''); +insert into vicidial_conferences values('8600114','10.10.10.15',''); +insert into vicidial_conferences values('8600115','10.10.10.15',''); +insert into vicidial_conferences values('8600116','10.10.10.15',''); +insert into vicidial_conferences values('8600117','10.10.10.15',''); +insert into vicidial_conferences values('8600118','10.10.10.15',''); +insert into vicidial_conferences values('8600119','10.10.10.15',''); +insert into vicidial_conferences values('8600120','10.10.10.15',''); +insert into vicidial_conferences values('8600121','10.10.10.15',''); +insert into vicidial_conferences values('8600122','10.10.10.15',''); +insert into vicidial_conferences values('8600123','10.10.10.15',''); +insert into vicidial_conferences values('8600124','10.10.10.15',''); +insert into vicidial_conferences values('8600125','10.10.10.15',''); +insert into vicidial_conferences values('8600126','10.10.10.15',''); +insert into vicidial_conferences values('8600127','10.10.10.15',''); +insert into vicidial_conferences values('8600128','10.10.10.15',''); +insert into vicidial_conferences values('8600129','10.10.10.15',''); +insert into vicidial_conferences values('8600130','10.10.10.15',''); +insert into vicidial_conferences values('8600131','10.10.10.15',''); +insert into vicidial_conferences values('8600132','10.10.10.15',''); +insert into vicidial_conferences values('8600133','10.10.10.15',''); +insert into vicidial_conferences values('8600134','10.10.10.15',''); +insert into vicidial_conferences values('8600135','10.10.10.15',''); +insert into vicidial_conferences values('8600136','10.10.10.15',''); +insert into vicidial_conferences values('8600137','10.10.10.15',''); +insert into vicidial_conferences values('8600138','10.10.10.15',''); +insert into vicidial_conferences values('8600139','10.10.10.15',''); +insert into vicidial_conferences values('8600140','10.10.10.15',''); +insert into vicidial_conferences values('8600141','10.10.10.15',''); +insert into vicidial_conferences values('8600142','10.10.10.15',''); +insert into vicidial_conferences values('8600143','10.10.10.15',''); +insert into vicidial_conferences values('8600144','10.10.10.15',''); +insert into vicidial_conferences values('8600145','10.10.10.15',''); +insert into vicidial_conferences values('8600146','10.10.10.15',''); +insert into vicidial_conferences values('8600147','10.10.10.15',''); +insert into vicidial_conferences values('8600148','10.10.10.15',''); +insert into vicidial_conferences values('8600149','10.10.10.15',''); +insert into vicidial_conferences values('8600150','10.10.10.15',''); +insert into vicidial_conferences values('8600151','10.10.10.15',''); +insert into vicidial_conferences values('8600152','10.10.10.15',''); +insert into vicidial_conferences values('8600153','10.10.10.15',''); +insert into vicidial_conferences values('8600154','10.10.10.15',''); +insert into vicidial_conferences values('8600155','10.10.10.15',''); +insert into vicidial_conferences values('8600156','10.10.10.15',''); +insert into vicidial_conferences values('8600157','10.10.10.15',''); +insert into vicidial_conferences values('8600158','10.10.10.15',''); +insert into vicidial_conferences values('8600159','10.10.10.15',''); +insert into vicidial_conferences values('8600160','10.10.10.15',''); +insert into vicidial_conferences values('8600161','10.10.10.15',''); +insert into vicidial_conferences values('8600162','10.10.10.15',''); +insert into vicidial_conferences values('8600163','10.10.10.15',''); +insert into vicidial_conferences values('8600164','10.10.10.15',''); +insert into vicidial_conferences values('8600165','10.10.10.15',''); +insert into vicidial_conferences values('8600166','10.10.10.15',''); +insert into vicidial_conferences values('8600167','10.10.10.15',''); +insert into vicidial_conferences values('8600168','10.10.10.15',''); +insert into vicidial_conferences values('8600169','10.10.10.15',''); +insert into vicidial_conferences values('8600170','10.10.10.15',''); +insert into vicidial_conferences values('8600171','10.10.10.15',''); +insert into vicidial_conferences values('8600172','10.10.10.15',''); +insert into vicidial_conferences values('8600173','10.10.10.15',''); +insert into vicidial_conferences values('8600174','10.10.10.15',''); +insert into vicidial_conferences values('8600175','10.10.10.15',''); +insert into vicidial_conferences values('8600176','10.10.10.15',''); +insert into vicidial_conferences values('8600177','10.10.10.15',''); +insert into vicidial_conferences values('8600178','10.10.10.15',''); +insert into vicidial_conferences values('8600179','10.10.10.15',''); +insert into vicidial_conferences values('8600180','10.10.10.15',''); +insert into vicidial_conferences values('8600181','10.10.10.15',''); +insert into vicidial_conferences values('8600182','10.10.10.15',''); +insert into vicidial_conferences values('8600183','10.10.10.15',''); +insert into vicidial_conferences values('8600184','10.10.10.15',''); +insert into vicidial_conferences values('8600185','10.10.10.15',''); +insert into vicidial_conferences values('8600186','10.10.10.15',''); +insert into vicidial_conferences values('8600187','10.10.10.15',''); +insert into vicidial_conferences values('8600188','10.10.10.15',''); +insert into vicidial_conferences values('8600189','10.10.10.15',''); +insert into vicidial_conferences values('8600190','10.10.10.15',''); +insert into vicidial_conferences values('8600191','10.10.10.15',''); +insert into vicidial_conferences values('8600192','10.10.10.15',''); +insert into vicidial_conferences values('8600193','10.10.10.15',''); +insert into vicidial_conferences values('8600194','10.10.10.15',''); +insert into vicidial_conferences values('8600195','10.10.10.15',''); +insert into vicidial_conferences values('8600196','10.10.10.15',''); +insert into vicidial_conferences values('8600197','10.10.10.15',''); +insert into vicidial_conferences values('8600198','10.10.10.15',''); +insert into vicidial_conferences values('8600199','10.10.10.15',''); +insert into vicidial_conferences values('8600200','10.10.10.15',''); + +######------ END Mysql data entry ------###### + + + +SUBPHASE 6.4: setting up asterisk and helper applications for startup + +1. Make several entries in the rc.local of your system: + - on the command line type: + - vi /etc/rc.d/rc.local + - add the following entries(here's what we used): + +# OPTIONAL enable ip_relay(for same-machine trunking and blind monitoring) +# /usr/share/astguiclient/ip_relay/relay_control start 2>/dev/null 1>&2 + +# Disable console blanking and powersaving +/usr/bin/setterm -blank +/usr/bin/setterm -powersave off +/usr/bin/setterm -powerdown + +### start time server +/usr/local/bin/ntpdate -u 18.145.0.30 +/usr/sbin/ntpd + +### start up the MySQL server +/usr/local/mysql/bin/mysqld_safe --user=mysql --skip-name-resolve --skip-host-cache & + +### start up the MySQL 4.1.X server (with old passwords) +/usr/local/mysql/bin/safe_mysqld --old-passwords --skip-name-resolve --skip-host-cache & + +### start up the apache web server +/usr/local/apache2/bin/apachectl start + +### roll the Asterisk logs upon reboot +/usr/share/astguiclient/ADMIN_restart_roll_logs.pl + +### clear the server-related records from the database +/usr/share/astguiclient/AST_reset_mysql_vars.pl + +### load digium tormenta 4xT1 drivers into system +modprobe zaptel +modprobe wct1xxp +/sbin/ztcfg -vvvvvvvvvvvv + +### sybsys local login +touch /var/lock/subsys/local + +### sleep for 20 seconds before launching Asterisk +sleep 20 + +### start up asterisk +/usr/share/astguiclient/start_asterisk_boot.pl + + - you are done + + + + +SUBPHASE 6.5: setting up astguiclient scripts for continuous running + +1. Make several entries in the crontab of your system: + - on the command line type: + - cd /usr/share/astguiclient + - crontab -e + - add the following entries(here's what we used): + +### recording mixing/compressing/ftping scripts +0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * /usr/share/astguiclient/AST_CRON_audio_1_move_mix.pl +#0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * /usr/share/astguiclient/AST_CRON_audio_1_move_VDonly.pl +1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58 * * * * /usr/share/astguiclient/AST_CRON_audio_2_compress.pl --GSM +#2,5,8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53,56,59 * * * * /usr/share/astguiclient/AST_CRON_audio_3_ftp.pl --GSM + +### keepalive script for astguiclient processes +* * * * * /usr/share/astguiclient/ADMIN_keepalive_ALL.pl + +### kill Hangup script for Asterisk updaters +* * * * * /usr/share/astguiclient/AST_manager_kill_hung_congested.pl + +### updater for voicemail +* * * * * /usr/share/astguiclient/AST_vm_update.pl + +### updater for conference validator +* * * * * /usr/share/astguiclient/AST_conf_update.pl + +### flush queue DB table every hour for entries older than 1 hour +11 * * * * /usr/share/astguiclient/AST_flush_DBqueue.pl -q + +### fix the vicidial_agent_log once every hour +33 * * * * /usr/share/astguiclient/AST_cleanup_agent_log.pl + +### updater for VICIDIAL hopper +* * * * * /usr/share/astguiclient/AST_VDhopper.pl -q + +### adjust the GMT offset for the leads in the vicidial_list table +1 1,7 * * * /usr/share/astguiclient/ADMIN_adjust_GMTnow_on_leads.pl --debug --postal-code-gmt + +### reset several temporary-info tables in the database +2 1 * * * /usr/share/astguiclient/AST_reset_mysql_vars.pl + +### optimize the database tables within the asterisk database +3 1 * * * /usr/share/astguiclient/AST_DB_optimize.pl + +## adjust time on the server with ntp +30 * * * * /usr/local/bin/ntpdate -u 18.145.0.30 2>/dev/null 1>&2 + +### VICIDIAL agent time log weekly and daily summary report generation +2 0 * * 0 /usr/share/astguiclient/AST_agent_week.pl +22 0 * * * /usr/share/astguiclient/AST_agent_day.pl + +### VICIDIAL campaign export scripts (OPTIONAL) +#32 0 * * * /usr/share/astguiclient/AST_VDsales_export.pl +#42 0 * * * /usr/share/astguiclient/AST_sourceID_summary_export.pl + +### remove old recordings more than 7 days old +24 0 * * * /usr/bin/find /var/spool/asterisk/monitor -maxdepth 2 -type f -mtime +7 -print | xargs rm -f + +### remove old vicidial logs and asterisk logs more than 2 days old +28 0 * * * /usr/bin/find /var/log/astguiclient -maxdepth 1 -type f -mtime +2 -print | xargs rm -f +29 0 * * * /usr/bin/find /var/log/asterisk -maxdepth 3 -type f -mtime +2 -print | xargs rm -f + + + + + - once your system starts up you can attach to the screen running asterisk by +typing "screen -r " find which screen by typing "screen -r" and +looking for the lowest screen number. Then to detach again from the screen +while you are in it type 'Ctrl+a' then 'd' + - you are done + +NOTES: +- The AST_agent_day.pl and AST_agent_week.pl scripts create an ASCII fixed-length report of all agent activity on the system +- The AST_VDsales_export.pl script allows for the exporting(into several different formats) of specified vicidial_list data based on status and campaign as well as inbound group +- The AST_sourceID_summary_export.pl script summarizes leads in the system by source_id and generates a text report + + + + + +SUBPHASE 6.6: adding test leads to the VICIDIAL database and configuring a +VICIDIAL campaign and users + +First we will add a few test leads to the vicidial_list table so that we can +test our system. There is also an application included with the distribution +that will accept a delimited file of leads placed in the /usr/share/astguiclient/VICIDIAL/LEADS_IN/ +directory and load it into the database automatically(VICIDIAL_IN_new_leads_file.pl +[a sample lead file in the proper format is included with this release: + - test_VICIDIAL_lead_file.txt]) +If you want to use the lead import script I suggest looking at the code to make +sure it is entering what you want it to. We are not going to go over that +particular script in this document. + +Also, there is a web-based lead loader that was made available as of the 1.1.1 +release and is accessible from the VICIDIAL admin.php web page(click on the +"LOAD NEW LEADS" link at the top of the admin page). To get to this page you +must have permissions in the vicidial_user table(Load Leads set to 1) . +Instructions on it's use are included on the page through the help question +mark link. +NOTE: in PHP you must have "fileuploads" enabled for this page to work. +NOTE: it is important to have your proper country code in the phone_code field of your leads so that the GMT offset encodding will properly code the time zones for your leads. For the USA/Canada/Caribbean this would be 1. For the UK this is 44 and Mexico is 52 and so on. + +Second we need to add the disposition statuses into the system, all of these +queries are below: +(Note: you may want to replace 7275551212 with a real number to test in these +records) + +1. at the command prompt type go to the mysql client: +/usr/local/mysql/bin/mysql +2. type the following into the mysql client prompt: + (make sure you put your IP address in place of "10.10.10.15" in the queries +below) +######------ BEGIN Mysql data entry(you can copy and paste this into terminal) # + +insert into vicidial_list values('','2004-01-06','','NEW','','','TEST01','101','TESTCAMP','N','1','7275551212','Mr','Matt','X','lead01','1234 Fake St.','','','Clearwater','FL','','33760','USA','M','1970-01-01','','test@test.com','suprise','comments go here','0'); +insert into vicidial_list values('','2004-01-06','','NEW','','','TEST01','101','TESTCAMP','N','1','7275551212','Mr','Matt','X','lead02','1234 Fake St.','','','Clearwater','FL','','33760','USA','M','1970-01-01','','test@test.com','suprise','comments go here','0'); +insert into vicidial_list values('','2004-01-07','','NEW','','','TEST01','101','TESTCAMP','N','1','7275551212','Mr','Matt','X','lead03','1234 Fake St.','','','Clearwater','FL','','33760','USA','M','1970-01-01','','test@test.com','suprise','comments go here','0'); +insert into vicidial_list values('','2004-01-07','','NEW','','','TEST01','101','TESTCAMP','N','1','7275551212','Mr','Matt','X','lead04','1234 Fake St.','','','Clearwater','FL','','33760','USA','M','1970-01-01','','test@test.com','suprise','comments go here','0'); +insert into vicidial_list values('','2004-01-07','','NEW','','','TEST01','101','TESTCAMP','N','1','7275551212','Mr','Matt','X','lead05','1234 Fake St.','','','Clearwater','FL','','33760','USA','M','1970-01-01','','test@test.com','suprise','comments go here','0'); +insert into vicidial_list values('','2004-01-07','','NEW','','','TEST01','101','TESTCAMP','N','1','7275551212','Mr','Matt','X','lead06','1234 Fake St.','','','Clearwater','FL','','33760','USA','M','1970-01-01','','test@test.com','suprise','comments go here','0'); +insert into vicidial_list values('','2004-01-07','','NEW','','','TEST01','101','TESTCAMP','N','1','7275551212','Mr','Matt','X','lead07','1234 Fake St.','','','Clearwater','FL','','33760','USA','M','1970-01-01','','test@test.com','suprise','comments go here','0'); + +### these first 5 must be in all VICIDIAL systems for it to work properly # +insert into vicidial_statuses values('NEW','New Lead','N','N','UNDEFINED'); +insert into vicidial_statuses values('QUEUE','Lead To Be Called','N','N','UNDEFINED'); +insert into vicidial_statuses values('INCALL','Lead Being Called','N','N','UNDEFINED'); +insert into vicidial_statuses values('DROP','Agent Not Available','N','Y','UNDEFINED'); +insert into vicidial_statuses values('XDROP','Agent Not Available IN','N','Y','UNDEFINED'); +insert into vicidial_statuses values('NA','No Answer AutoDial','N','N','UNDEFINED'); + +insert into vicidial_statuses values('CALLBK','Call Back','Y','Y','UNDEFINED'); +insert into vicidial_statuses values('CBHOLD','Call Back Hold','N','Y','UNDEFINED'); +insert into vicidial_statuses values('A','Answering Machine','Y','N','UNDEFINED'); +insert into vicidial_statuses values('AA','Answering Machine Auto','N','N','UNDEFINED'); +insert into vicidial_statuses values('AM','Answering Machine Sent to Mesg','N','N','UNDEFINED'); +insert into vicidial_statuses values('AL','Answering Machine Msg Played','N','N','UNDEFINED'); +insert into vicidial_statuses values('B','Busy','Y','N','UNDEFINED'); +insert into vicidial_statuses values('DC','Disconnected Number','Y','N','UNDEFINED'); +insert into vicidial_statuses values('DEC','Declined Sale','Y','Y','UNDEFINED'); +insert into vicidial_statuses values('DNC','DO NOT CALL','Y','Y','UNDEFINED'); +insert into vicidial_statuses values('SALE','Sale Made','Y','Y','UNDEFINED'); +insert into vicidial_statuses values('N','No Answer','Y','N','UNDEFINED'); +insert into vicidial_statuses values('NI','Not Interested','Y','Y','UNDEFINED'); +insert into vicidial_statuses values('NP','No Pitch No Price','Y','Y','UNDEFINED'); +insert into vicidial_statuses values('XFER','Call Transferred','Y','Y','UNDEFINED'); + +quit +######------ END Mysql data entry ------###### + +Now that the sample leads and disposition codes have been entered, we can go +into the VICIDIAL administration website and set up our campaigns, lists and users. +But first let's make sure that they have the right GMT offset: + run this on the command line: + - /usr/share/astguiclient/ADMIN_adjust_GMTnow_on_leads.pl --postal-code-gmt + +3. Enter the astguiclient administration page: +http://10.10.10.15/vicidial/admin.php +(use the username and password created when we entered a record into the +vicidial_users table in SUBPHASE 6.1, In our case this is 6666 and 1234) +NOTE: if you click on the Logout button you must leave the user/pass empty and click OK + - Now that you are logged into the vicidial administration system we can add +new user entries for each of the new users and enter new campaigns and new +lists. + - The first step is to enter your new users, Click on the ADD A NEW USER +and fill in the appropriate information for each now user you want to +add. + - Next, you need to create a new campaign, click on the ADD A NEW +CAMPAIGN link and fill in what you want the campaign to be called as +well as a description + - Next, you need to define a new list, click on the ADD A NEW LIST link +and fill in what you want the list to be called as well as a using the +list ID of the leads that we loaded in the previous step "101" and +select the new campaign from the pull-down menu that we just created. + - Now that you have created your list, make it active by changing active to Y + - now modify your campaign ang change the first status to be called to +NEW and submit. Now your system is ready to dial. + - you are done + + + +SUBPHASE 6.7: VICIDIAL remote agents: + +With v1.0 of VICIDIAL we have the ability to use a simple web form to give +remote agents a way to receive calls to whatever number they happen to be at, +and they can view/edit call details and see a call log all through a web page +(vdremote.php) or http://10.10.10.15/vicidial/vdremote.php on this installation. +Remote Agents is only recommended for inbound calls because of the extra time +needed to dial a number out to transfer the call to. To set up remote agents, +just go to the vicidial admin.php page and ADD NEW REMOTE AGENTS(Make sure the +userID start also has a user login so they can get to the vdremote page). You +will see that you can set up a remote agent entry to take multiple lines if you +wish meaning that, for example, if you need to send all of your calls to another +location because of a massive snowstorm(and none of your agents showed up at work) +you just log in that remote agent record with say 10 lines and then all of those +calls will be directed to the same number you set up for the remote agent. Then +again you could just get your agents to log in from home if they have a phone +and computer + + + +SUBPHASE 6.8: astGUIclient web-only client: + +With 1.1.1 release of astguiclient we have completely rewritten the astGUIclient +client app in AJAX(PHP/Javascript/XMLHTTPRequest) to enable a full, real-time +GUI interface using only a web browser. The browser requirements for this are: +- Firefox 0.9 or greater (Firefox 1.0.7 is the recommended browser) +- Mozilla 1.7 or greater +- Netscape 8 or greater +- Opera 8.5 or greater +- Microsoft Internet Explorer 6.0 + +This new version also has more flexibility and functionality than the perl/Tk +version as well as being prettier. We have successfully tested this on many +platforms and in remote locations. It functioned wonderfully off-site with one +of our IAX hardphones and offers a lot of promise for road warriors who need +a lot of options on their phone usage like conferencing and a detailed call log. + +To log into this app you will need a login setup in the vicidial_users table +with a user_level of 1 or greater as well as an entry for the phone you are +using in the phones table. You will first get a login prompt for the vicidial +login then you will have the phone login where you enter the Login and Password +for that phone entry. From there the app should display and you will see the +MAIN screen with your phone information, voicemail display and your inbound/ +outbound phone call log. + +The example web page you would go to on this installation would be: +http://10.10.10.15/agc/astguiclient.php + +The inbound log and callerID popup is dependant on having a call_inbound.agi +entry in your dialplan before you phone is dialed(see subphase 6.2 step 2) + +Another thing to note is that you can have the agc folder(with the .php files +in it) copied to multiple web servers, you just need to make sure that the +MySQL database connection works (check the settings in the dbconnect.php file +that is in the agc directory). We have had astguiclient.php running on 3 +separate web servers for the same DB server and Asterisk server. This is an +easy way to allow for auto failover and/or redundancy. Also, this client will +work over SSL connections(https) for encrypted communications with the server. + +New in astGUIclient release 1.1.7 is multi-language support. multi-language +versions of web-clients and admin pages are available in the LANG_www directory +and can be unzipped into your webroot directory. + + + +SUBPHASE 6.9: VICIDIAL web-only client: + +NOTE: There is a VICIDIAL Agent manual available from http://www.eflo.net + +With 1.1.6 release of astguiclient we have finished the rewrite of the VICIDIAL +client app in AJAX(PHP/Javascript/XMLHTTPRequest) to enable a full, real-time +GUI interface using only a web browser like we have done with astGUIclient. +The browser requirements for this are: +- Firefox 0.9 or greater (Firefox 1.0.7 is the recommended browser) +- Mozilla 1.7 or greater +- Netscape 8 or greater +- Opera 8.5 or greater +- Microsoft Internet Explorer 6.0 + +This version is fully functional and has been tested in our production +call center with no problems. + +To log into this app you will need a login setup in the vicidial_users table +with a user_level of 1 or greater as well as an entry for the phone you are +using in the phones table. You will first get a login prompt for the vicidial +login then you will have the phone login where you enter the Login and Password +for that phone entry. From there the app should display and you will see the +VICIDIAL screen with your phone information. + +The example web page you would go to on this installation would be: +http://10.10.10.15/agc/vicidial.php + +One more feature that the VICIDIAL web-client offers is the ability to set up +an EXTERNAL phone extension in the astguiclient admin section so that you can +have agents log in to vicidial.php wherever they have access to a phone with +an external phone number and a web browser. To do this follow these steps: +- "ADD PHONE" in the admin.php web page and enter whatever name you want +- For the dialplan number field put in the full digits that you would dial from + the Asterisk server to get to that agent's external phone(with 91 if used) +- For the Protocol select EXTERNAL +- make sure the agent knows the login and password set for this phone entry. +Then the agent will go to the vicidial.php page and enter in their phone +login/pass, their vicidial user/pass/campaign and their phone should ring in a +few seconds, and they are logged in and ready to take calls. + +Another thing to note is that you can have the agc folder(with the .php files +in it) copied to multiple web servers, you just need to make sure that the +MySQL database connection works (check the settings in the dbconnect.php file +that is in the agc directory). We have had astguiclient.php running on 3 +separate web servers for the same DB server and Asterisk server. This is an +easy way to allow for auto failover and/or redundancy. Also, this client will +work over SSL connections(https) for encrypted communications with the server. + +New in astGUIclient release 1.1.7 is multi-language support. multi-language +versions of web-clients and admin pages are available in the LANG_www directory +and can be unzipped into your webroot directory. + +Admin Note: If you want to enable your agents to login with only their user/pass +you can hardcode the phone_login and phone_pass into the query string(URL) and +use a bookmark on their desktop, taking one more step out of their login process +example: http://10.10.10.15/agc/vicidial.php?pl=gs102&pp=test + +It is recommended if you are in a call center environment that you would disable +the "Saved Form Information" option in Firefox settings. This is a checkbox in +the Privacy settings under the Options menu. + + + +PHASE 7.0: You are done with installation + +If you have problems and it is not working right(and are NOT celebrating right +now), feel free to take a look at the FAQ for solutions to common installation +errors, read the SCRATCH_INSTALL document, visit the VICIDIAL forum or send an +email to the mailing list: +http://www.eflo.net/VICIDIALforum/index.php +https://lists.sourceforge.net/lists/listinfo/astguiclient-users + +Also, check out our weblog: http://astguiclient.blogspot.com/ + + +**** IMPORTANT - In order for vicidial/astguiclient to function correctly please +read the REQUIREMENTS.txt for a minimum requirements list. *** + +End-user Manuals for Agents and Managers are available from http://www.eflo.net diff --git a/agc_2-X/trunk/docs/conf_examples/extensions.conf.sample b/agc_2-X/trunk/docs/conf_examples/extensions.conf.sample index 93d06f5a..e6c13dab 100644 --- a/agc_2-X/trunk/docs/conf_examples/extensions.conf.sample +++ b/agc_2-X/trunk/docs/conf_examples/extensions.conf.sample @@ -237,10 +237,12 @@ exten => _86000[0-4]X,1,Meetme,${EXTEN}|q exten => _86000[5-9]X,1,Meetme,${EXTEN}|F exten => _86001XX,1,Meetme,${EXTEN}|F exten => _8600200,1,Meetme,${EXTEN}|F -; quiet entry and leaving conferences for VICIDIAL +; quiet entry and leaving conferences for VICIDIAL (inbound announce and SendDTMF) exten => _78600XXX,1,Meetme,${EXTEN:1}|Fq -; quiet monitor extensions for meetme rooms (for room managers) +; quiet monitor-only extensions for meetme rooms (for room managers) exten => _68600XXX,1,Meetme,${EXTEN:1}|Fmq +; quiet monitor-only entry and leaving conferences for VICIDIAL (recording) +exten => _58600XXX,1,Meetme,${EXTEN:1}|Fmq ; voicelab exten exten => _86009XX,1,Meetme,${EXTEN}|Fmq @@ -329,8 +331,8 @@ exten => 8501,2,Hangup ; this is used to allow the GUI to send live calls directly into voicemail ; don't forget to set GUI variable $voicemail_dump_exten to this extension -exten => _85026666666666.,1,Wait(2) -exten => _85026666666666.,2,Voicemail(${EXTEN:14}) +exten => _85026666666666.,1,Wait(1) +exten => _85026666666666.,2,Voicemail(${EXTEN:14}|u) exten => _85026666666666.,3,Hangup ; this is used for sending DTMF signals within conference calls, the client app diff --git a/agc_2-X/trunk/docs/conf_examples/extensions.conf.sample-1.4 b/agc_2-X/trunk/docs/conf_examples/extensions.conf.sample-1.4 index d88dec06..fec693e3 100644 --- a/agc_2-X/trunk/docs/conf_examples/extensions.conf.sample-1.4 +++ b/agc_2-X/trunk/docs/conf_examples/extensions.conf.sample-1.4 @@ -80,7 +80,7 @@ exten => h,1,DeadAGI(agi://127.0.0.1:4577/call_log--HVcauses--PRI-----NODEBUG--- ; Extension 7275551212 - Inbound local number from PRI with 10 digit delivery exten => 7275551212,1,Ringing exten => 7275551212,2,Wait(1) -exten => 7275551212,3,AGI(agi://127.0.0.1:4577/call_log--fullCID--${EXTEN}-----{CALLERID(all)}-----${CALLERID(num)}-----${CALLERID(name)}) +exten => 7275551212,3,AGI(agi://127.0.0.1:4577/call_log--fullCID--${EXTEN}-----${CALLERID(all)}-----${CALLERID(num)}-----${CALLERID(name)}) exten => 7275551212,4,Answer exten => 7275551212,5,Dial(sip/spa2000&sip/spa2001,30,To) exten => 7275551212,6,Voicemail,u2000 @@ -241,6 +241,8 @@ exten => _8600200,1,Meetme,${EXTEN}|F exten => _78600XXX,1,Meetme,${EXTEN:1}|Fq ; quiet monitor extensions for meetme rooms (for room managers) exten => _68600XXX,1,Meetme,${EXTEN:1}|Fmq +; quiet monitor-only entry and leaving conferences for VICIDIAL (recording) +exten => _58600XXX,1,Meetme,${EXTEN:1}|Fmq ; voicelab exten exten => _86009XX,1,Meetme,${EXTEN}|Fmq @@ -329,8 +331,8 @@ exten => 8501,2,Hangup ; this is used to allow the GUI to send live calls directly into voicemail ; don't forget to set GUI variable $voicemail_dump_exten to this extension -exten => _85026666666666.,1,Wait(2) -exten => _85026666666666.,2,Voicemail(${EXTEN:14}) +exten => _85026666666666.,1,Wait(1) +exten => _85026666666666.,2,Voicemail(${EXTEN:14}|u) exten => _85026666666666.,3,Hangup ; this is used for sending DTMF signals within conference calls, the client app diff --git a/agc_2-X/trunk/extras/MySQL_AST_CREATE_tables.sql b/agc_2-X/trunk/extras/MySQL_AST_CREATE_tables.sql index 65449f99..c22349e8 100644 --- a/agc_2-X/trunk/extras/MySQL_AST_CREATE_tables.sql +++ b/agc_2-X/trunk/extras/MySQL_AST_CREATE_tables.sql @@ -1,4 +1,4 @@ - CREATE TABLE phones ( +CREATE TABLE phones ( extension VARCHAR(100), dialplan_number VARCHAR(20), voicemail_id VARCHAR(10), @@ -69,7 +69,7 @@ enable_sipsak_messages ENUM('0','1') default '0', index (server_ip) ); - CREATE TABLE servers ( +CREATE TABLE servers ( server_id VARCHAR(10) NOT NULL, server_description VARCHAR(255), server_ip VARCHAR(15) NOT NULL, @@ -95,7 +95,7 @@ balance_trunks_offlimits SMALLINT(5) UNSIGNED default '0' ); - CREATE TABLE live_channels ( +CREATE TABLE live_channels ( channel VARCHAR(100) NOT NULL, server_ip VARCHAR(15) NOT NULL, channel_group VARCHAR(30), @@ -103,7 +103,7 @@ extension VARCHAR(100), channel_data VARCHAR(100) ); - CREATE TABLE live_sip_channels ( +CREATE TABLE live_sip_channels ( channel VARCHAR(100) NOT NULL, server_ip VARCHAR(15) NOT NULL, channel_group VARCHAR(30), @@ -111,7 +111,7 @@ extension VARCHAR(100), channel_data VARCHAR(100) ); - CREATE TABLE parked_channels ( +CREATE TABLE parked_channels ( channel VARCHAR(100) NOT NULL, server_ip VARCHAR(15) NOT NULL, channel_group VARCHAR(30), @@ -120,13 +120,13 @@ parked_by VARCHAR(100), parked_time DATETIME ); - CREATE TABLE conferences ( +CREATE TABLE conferences ( conf_exten INT(7) UNSIGNED NOT NULL, server_ip VARCHAR(15) NOT NULL, extension VARCHAR(100) ); - CREATE TABLE recording_log ( +CREATE TABLE recording_log ( recording_id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, channel VARCHAR(100), server_ip VARCHAR(15), @@ -148,7 +148,7 @@ index(user), index(vicidial_id) ); - CREATE TABLE live_inbound ( +CREATE TABLE live_inbound ( uniqueid VARCHAR(20) NOT NULL, channel VARCHAR(100) NOT NULL, server_ip VARCHAR(15) NOT NULL, @@ -165,7 +165,7 @@ comment_d VARCHAR(50), comment_e VARCHAR(50) ); - CREATE TABLE inbound_numbers ( +CREATE TABLE inbound_numbers ( extension VARCHAR(30) NOT NULL, full_number VARCHAR(30) NOT NULL, server_ip VARCHAR(15) NOT NULL, @@ -173,12 +173,12 @@ inbound_name VARCHAR(30), department VARCHAR(30) ); - CREATE TABLE server_updater ( +CREATE TABLE server_updater ( server_ip VARCHAR(15) NOT NULL, last_update DATETIME ); - CREATE TABLE call_log ( +CREATE TABLE call_log ( uniqueid VARCHAR(20) PRIMARY KEY NOT NULL, channel VARCHAR(100), channel_group VARCHAR(30), @@ -198,7 +198,7 @@ index (server_ip), index (channel) ); - CREATE TABLE park_log ( +CREATE TABLE park_log ( uniqueid VARCHAR(20) PRIMARY KEY NOT NULL, status VARCHAR(10), channel VARCHAR(100), @@ -214,7 +214,7 @@ user VARCHAR(20), index (parked_time) ); - CREATE TABLE vicidial_manager ( +CREATE TABLE vicidial_manager ( man_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, uniqueid VARCHAR(20), entry_date DATETIME, @@ -239,7 +239,7 @@ index (uniqueid), index serverstat(server_ip,status) ); - CREATE TABLE vicidial_list ( +CREATE TABLE vicidial_list ( lead_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, entry_date DATETIME, modify_date TIMESTAMP, @@ -271,7 +271,7 @@ email VARCHAR(70), security_phrase VARCHAR(100), comments VARCHAR(255), called_count SMALLINT(5) UNSIGNED default '0', -last_local_call_time DATETIME +last_local_call_time DATETIME, index (phone_number), index (list_id), index (called_since_last_reset), @@ -281,7 +281,7 @@ index (postal_code), index (last_local_call_time) ); - CREATE TABLE vicidial_hopper ( +CREATE TABLE vicidial_hopper ( hopper_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, lead_id INT(9) UNSIGNED NOT NULL, campaign_id VARCHAR(8), @@ -295,7 +295,7 @@ priority TINYINT(2) default '0', index (lead_id) ); - CREATE TABLE vicidial_live_agents ( +CREATE TABLE vicidial_live_agents ( live_agent_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, user VARCHAR(20), server_ip VARCHAR(15) NOT NULL, @@ -325,7 +325,7 @@ index (last_update_time), index (last_call_finish) ); - CREATE TABLE vicidial_auto_calls ( +CREATE TABLE vicidial_auto_calls ( auto_call_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, server_ip VARCHAR(15) NOT NULL, campaign_id VARCHAR(20), @@ -348,7 +348,7 @@ index (call_time), index (last_update_time) ); - CREATE TABLE vicidial_log ( +CREATE TABLE vicidial_log ( uniqueid VARCHAR(20) PRIMARY KEY NOT NULL, lead_id INT(9) UNSIGNED NOT NULL, list_id BIGINT(14) UNSIGNED, @@ -369,7 +369,7 @@ index (lead_id), index (call_date) ); - CREATE TABLE vicidial_closer_log ( +CREATE TABLE vicidial_closer_log ( closecallid INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, lead_id INT(9) UNSIGNED NOT NULL, list_id BIGINT(14) UNSIGNED, @@ -392,7 +392,7 @@ index (lead_id), index (call_date) ); - CREATE TABLE vicidial_xfer_log ( +CREATE TABLE vicidial_xfer_log ( xfercallid INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, lead_id INT(9) UNSIGNED NOT NULL, list_id BIGINT(14) UNSIGNED, @@ -406,7 +406,7 @@ index (lead_id), index (call_date) ); - CREATE TABLE vicidial_users ( +CREATE TABLE vicidial_users ( user_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, user VARCHAR(20) NOT NULL, pass VARCHAR(20) NOT NULL, @@ -468,7 +468,7 @@ vdc_agent_api_access ENUM('0','1') default '0' CREATE UNIQUE INDEX user ON vicidial_users (user); - CREATE TABLE vicidial_user_log ( +CREATE TABLE vicidial_user_log ( user_log_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, user VARCHAR(20), event VARCHAR(50), @@ -479,7 +479,7 @@ user_group VARCHAR(20), index (user) ); - CREATE TABLE vicidial_user_groups ( +CREATE TABLE vicidial_user_groups ( user_group VARCHAR(20) NOT NULL, group_name VARCHAR(40) NOT NULL, allowed_campaigns TEXT, @@ -488,7 +488,7 @@ qc_allowed_inbound_groups TEXT, group_shifts TEXT ); - CREATE TABLE vicidial_campaigns ( +CREATE TABLE vicidial_campaigns ( campaign_id VARCHAR(8) PRIMARY KEY NOT NULL, campaign_name VARCHAR(40), active ENUM('Y','N'), @@ -563,9 +563,9 @@ drop_inbound_group VARCHAR(20) default '---NONE---', qc_enabled ENUM('Y','N') default 'N', qc_statuses TEXT, qc_lists TEXT, -campaign_shift_start_time VARCHAR(4) default '0900', -campaign_shift_length VARCHAR(5) default '16:00', -campaign_day_start_time VARCHAR(4) default '0100', +qc_shift_id VARCHAR(20) default '24HRMIDNIGHT', +qc_get_record_launch ENUM('NONE','SCRIPT','WEBFORM','QCSCRIPT','QCWEBFORM') default 'NONE', +qc_show_recording ENUM('Y','N') default 'Y', qc_web_form_address VARCHAR(255), qc_script VARCHAR(10), survey_first_audio_file VARCHAR(50) default 'US_pol_survey_hello', @@ -583,7 +583,7 @@ disable_alter_custphone ENUM('Y','N') default 'Y', display_queue_count ENUM('Y','N') default 'Y' ); - CREATE TABLE vicidial_lists ( +CREATE TABLE vicidial_lists ( list_id BIGINT(14) UNSIGNED PRIMARY KEY NOT NULL, list_name VARCHAR(30), campaign_id VARCHAR(8), @@ -593,7 +593,7 @@ list_changedate DATETIME, list_lastcalldate DATETIME ); - CREATE TABLE vicidial_statuses ( +CREATE TABLE vicidial_statuses ( status VARCHAR(6) PRIMARY KEY NOT NULL, status_name VARCHAR(30), selectable ENUM('Y','N'), @@ -601,7 +601,7 @@ human_answered ENUM('Y','N') default 'N', category VARCHAR(20) default 'UNDEFINED' ); - CREATE TABLE vicidial_campaign_statuses ( +CREATE TABLE vicidial_campaign_statuses ( status VARCHAR(6) NOT NULL, status_name VARCHAR(30), selectable ENUM('Y','N'), @@ -611,7 +611,7 @@ category VARCHAR(20) default 'UNDEFINED', index (campaign_id) ); - CREATE TABLE vicidial_campaign_hotkeys ( +CREATE TABLE vicidial_campaign_hotkeys ( status VARCHAR(6) NOT NULL, hotkey VARCHAR(1) NOT NULL, status_name VARCHAR(30), @@ -620,13 +620,13 @@ campaign_id VARCHAR(8), index (campaign_id) ); - CREATE TABLE vicidial_conferences ( +CREATE TABLE vicidial_conferences ( conf_exten INT(7) UNSIGNED NOT NULL, server_ip VARCHAR(15) NOT NULL, extension VARCHAR(100) ); - CREATE TABLE vicidial_phone_codes ( +CREATE TABLE vicidial_phone_codes ( country_code SMALLINT(5) UNSIGNED, country CHAR(3), areacode CHAR(3), @@ -637,7 +637,7 @@ DST_range VARCHAR(8), geographic_description VARCHAR(30) ); - CREATE TABLE vicidial_inbound_groups ( +CREATE TABLE vicidial_inbound_groups ( group_id VARCHAR(20) PRIMARY KEY NOT NULL, group_name VARCHAR(30), group_color VARCHAR(7), @@ -671,7 +671,14 @@ queue_priority TINYINT(2) default '0', drop_inbound_group VARCHAR(20) default '---NONE---', ingroup_recording_override ENUM('DISABLED','NEVER','ONDEMAND','ALLCALLS','ALLFORCE') default 'DISABLED', ingroup_rec_filename VARCHAR(50) default 'NONE', -afterhours_xfer_group VARCHAR(20) default '---NONE---' +afterhours_xfer_group VARCHAR(20) default '---NONE---', +qc_enabled ENUM('Y','N') default 'N', +qc_statuses TEXT, +qc_shift_id VARCHAR(20) default '24HRMIDNIGHT', +qc_get_record_launch ENUM('NONE','SCRIPT','WEBFORM','QCSCRIPT','QCWEBFORM') default 'NONE', +qc_show_recording ENUM('Y','N') default 'Y', +qc_web_form_address VARCHAR(255), +qc_script VARCHAR(10) ); CREATE TABLE vicidial_stations ( @@ -685,7 +692,7 @@ DB_pass VARCHAR(15), DB_port VARCHAR(6) ); - CREATE TABLE vicidial_remote_agents ( +CREATE TABLE vicidial_remote_agents ( remote_agent_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, user_start VARCHAR(20), number_of_lines TINYINT UNSIGNED default '1', @@ -696,7 +703,7 @@ campaign_id VARCHAR(8), closer_campaigns TEXT ); - CREATE TABLE live_inbound_log ( +CREATE TABLE live_inbound_log ( uniqueid VARCHAR(20) NOT NULL, channel VARCHAR(100) NOT NULL, server_ip VARCHAR(15) NOT NULL, @@ -716,7 +723,7 @@ index (phone_ext), index (start_time) ); - CREATE TABLE web_client_sessions ( +CREATE TABLE web_client_sessions ( extension VARCHAR(100) NOT NULL, server_ip VARCHAR(15) NOT NULL, program ENUM('agc','vicidial','monitor','other') default 'agc', @@ -724,7 +731,7 @@ start_time DATETIME NOT NULL, session_name VARCHAR(40) UNIQUE NOT NULL ); - CREATE TABLE server_performance ( +CREATE TABLE server_performance ( start_time DATETIME NOT NULL, server_ip VARCHAR(15) NOT NULL, sysload INT(6) NOT NULL, @@ -744,7 +751,7 @@ cpu_system_percent SMALLINT(3) UNSIGNED NOT NULL default '0', cpu_idle_percent SMALLINT(3) UNSIGNED NOT NULL default '0' ); - CREATE TABLE vicidial_agent_log ( +CREATE TABLE vicidial_agent_log ( agent_log_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, user VARCHAR(20), server_ip VARCHAR(15) NOT NULL, @@ -767,7 +774,7 @@ index (lead_id), index (user) ); - CREATE TABLE vicidial_scripts ( +CREATE TABLE vicidial_scripts ( script_id VARCHAR(10) PRIMARY KEY NOT NULL, script_name VARCHAR(50), script_comments VARCHAR(255), @@ -775,13 +782,13 @@ script_text TEXT, active ENUM('Y','N') ); - CREATE TABLE phone_favorites ( +CREATE TABLE phone_favorites ( extension VARCHAR(100), server_ip VARCHAR(15), extensions_list TEXT ); - CREATE TABLE vicidial_callbacks ( +CREATE TABLE vicidial_callbacks ( callback_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, lead_id INT(9) UNSIGNED, list_id BIGINT(14) UNSIGNED, @@ -799,7 +806,7 @@ index (status), index (callback_time) ); - CREATE TABLE vicidial_list_pins ( +CREATE TABLE vicidial_list_pins ( pins_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, entry_time DATETIME, phone_number VARCHAR(12), @@ -813,14 +820,14 @@ index (phone_number), index (entry_time) ); - CREATE TABLE vicidial_lead_filters ( +CREATE TABLE vicidial_lead_filters ( lead_filter_id VARCHAR(10) PRIMARY KEY NOT NULL, lead_filter_name VARCHAR(30) NOT NULL, lead_filter_comments VARCHAR(255), lead_filter_sql TEXT ); - CREATE TABLE vicidial_call_times ( +CREATE TABLE vicidial_call_times ( call_time_id VARCHAR(10) PRIMARY KEY NOT NULL, call_time_name VARCHAR(30) NOT NULL, call_time_comments VARCHAR(255) default '', @@ -843,7 +850,7 @@ ct_saturday_stop SMALLINT(4) unsigned default '0', ct_state_call_times TEXT default '' ); - CREATE TABLE vicidial_state_call_times ( +CREATE TABLE vicidial_state_call_times ( state_call_time_id VARCHAR(10) PRIMARY KEY NOT NULL, state_call_time_state VARCHAR(2) NOT NULL, state_call_time_name VARCHAR(30) NOT NULL, @@ -866,7 +873,7 @@ sct_saturday_start SMALLINT(4) unsigned default '0', sct_saturday_stop SMALLINT(4) unsigned default '0' ); - CREATE TABLE vicidial_campaign_stats ( +CREATE TABLE vicidial_campaign_stats ( campaign_id VARCHAR(20) PRIMARY KEY NOT NULL, update_time TIMESTAMP, dialable_leads INT(9) UNSIGNED default '0', @@ -904,11 +911,11 @@ status_category_4 VARCHAR(20), status_category_count_4 INT(9) UNSIGNED default '0' ); - CREATE TABLE vicidial_dnc ( +CREATE TABLE vicidial_dnc ( phone_number VARCHAR(12) PRIMARY KEY NOT NULL ); - CREATE TABLE vicidial_lead_recycle ( +CREATE TABLE vicidial_lead_recycle ( recycle_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, campaign_id VARCHAR(8), status VARCHAR(6) NOT NULL, @@ -918,7 +925,7 @@ active ENUM('Y','N') default 'N', index (campaign_id) ); - CREATE TABLE vicidial_campaign_server_stats ( +CREATE TABLE vicidial_campaign_server_stats ( campaign_id VARCHAR(20) NOT NULL, server_ip VARCHAR(15) NOT NULL, update_time TIMESTAMP, @@ -927,7 +934,7 @@ index (campaign_id), index (server_ip) ); - CREATE TABLE vicidial_server_trunks ( +CREATE TABLE vicidial_server_trunks ( server_ip VARCHAR(15) NOT NULL, campaign_id VARCHAR(20) NOT NULL, dedicated_trunks SMALLINT(5) UNSIGNED default '0', @@ -936,7 +943,7 @@ index (campaign_id), index (server_ip) ); - CREATE TABLE vicidial_postal_codes ( +CREATE TABLE vicidial_postal_codes ( postal_code VARCHAR(10) NOT NULL, state VARCHAR(4), GMT_offset VARCHAR(5), @@ -946,7 +953,7 @@ country CHAR(3), country_code SMALLINT(5) UNSIGNED ); - CREATE TABLE vicidial_pause_codes ( +CREATE TABLE vicidial_pause_codes ( pause_code VARCHAR(6) NOT NULL, pause_code_name VARCHAR(30), billable ENUM('NO','YES','HALF') default 'NO', @@ -954,7 +961,7 @@ campaign_id VARCHAR(8), index (campaign_id) ); - CREATE TABLE system_settings ( +CREATE TABLE system_settings ( version VARCHAR(50), install_date VARCHAR(50), use_non_latin ENUM('0','1') default '0', @@ -982,7 +989,7 @@ vdc_agent_api_active ENUM('0','1') default '0', qc_last_pull_time DATETIME ); - CREATE TABLE vicidial_campaigns_list_mix ( +CREATE TABLE vicidial_campaigns_list_mix ( vcl_id VARCHAR(20) PRIMARY KEY NOT NULL, vcl_name VARCHAR(50), campaign_id VARCHAR(8), @@ -992,7 +999,7 @@ status ENUM('ACTIVE','INACTIVE') default 'INACTIVE', index (campaign_id) ); - CREATE TABLE vicidial_status_categories ( +CREATE TABLE vicidial_status_categories ( vsc_id VARCHAR(20) PRIMARY KEY NOT NULL, vsc_name VARCHAR(50), vsc_description VARCHAR(255), @@ -1069,7 +1076,7 @@ index (campaign_id), index (user) ); - CREATE TABLE vicidial_user_closer_log ( +CREATE TABLE vicidial_user_closer_log ( user VARCHAR(20), campaign_id VARCHAR(20), event_date DATETIME, @@ -1079,12 +1086,12 @@ index (user), index (event_date) ); - CREATE TABLE vicidial_qc_codes ( +CREATE TABLE vicidial_qc_codes ( code VARCHAR(8) PRIMARY KEY NOT NULL, code_name VARCHAR(30) ); - CREATE TABLE vicidial_agent_sph ( +CREATE TABLE vicidial_agent_sph ( campaign_group_id VARCHAR(20) NOT NULL, stat_date DATE NOT NULL, shift VARCHAR(20) NOT NULL, @@ -1099,13 +1106,13 @@ index (campaign_group_id), index (stat_date) ); - CREATE TABLE phones_alias ( +CREATE TABLE phones_alias ( alias_id VARCHAR(20) NOT NULL UNIQUE PRIMARY KEY, alias_name VARCHAR(50), logins_list VARCHAR(255) ); - CREATE TABLE vicidial_shifts ( +CREATE TABLE vicidial_shifts ( shift_id VARCHAR(20) NOT NULL, shift_name VARCHAR(50), shift_start_time VARCHAR(4) default '0900', @@ -1114,7 +1121,7 @@ shift_weekdays VARCHAR(7) default '0123456', index (shift_id) ); - CREATE TABLE vicidial_timeclock_log ( +CREATE TABLE vicidial_timeclock_log ( timeclock_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, event_epoch INT(10) UNSIGNED NOT NULL, event_date DATETIME NOT NULL, @@ -1132,7 +1139,7 @@ tcid_link INT(9) UNSIGNED, index (user) ); - CREATE TABLE vicidial_timeclock_status ( +CREATE TABLE vicidial_timeclock_status ( user VARCHAR(20) UNIQUE NOT NULL, user_group VARCHAR(20) NOT NULL, event_epoch INT(10) UNSIGNED, @@ -1143,7 +1150,7 @@ shift_id VARCHAR(20), index (user) ); - CREATE TABLE vicidial_timeclock_audit_log ( +CREATE TABLE vicidial_timeclock_audit_log ( timeclock_id INT(9) UNSIGNED NOT NULL, event_epoch INT(10) UNSIGNED NOT NULL, event_date DATETIME NOT NULL, @@ -1159,7 +1166,7 @@ index (timeclock_id), index (user) ); - CREATE TABLE vicidial_admin_log ( +CREATE TABLE vicidial_admin_log ( admin_log_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, event_date DATETIME NOT NULL, user VARCHAR(20) NOT NULL, @@ -1225,5 +1232,9 @@ INSERT INTO vicidial_state_call_times SET state_call_time_id='utah',state_call_t INSERT INTO vicidial_state_call_times SET state_call_time_id='washington',state_call_time_state='WA',state_call_time_name='Washington 8am',sct_default_start='800',sct_default_stop='2100'; INSERT INTO vicidial_state_call_times SET state_call_time_id='wyoming',state_call_time_state='WY',state_call_time_name='Wyoming 8am-8pm',sct_default_start='800',sct_default_stop='2000'; -UPDATE system_settings SET db_schema_version='1100'; +INSERT INTO vicidial_shifts SET shift_id='24HRMIDNIGHT',shift_name='24 hours 7 days a week',shift_start_time='0000',shift_length='24:00',shift_weekdays='0123456'; + +UPDATE system_settings SET qc_last_pull_time=NOW(); + +UPDATE system_settings SET db_schema_version='1101'; diff --git a/agc_2-X/trunk/extras/upgrade_2.0.5.sql b/agc_2-X/trunk/extras/upgrade_2.0.5.sql index d023b39b..c8a96cbc 100644 --- a/agc_2-X/trunk/extras/upgrade_2.0.5.sql +++ b/agc_2-X/trunk/extras/upgrade_2.0.5.sql @@ -314,3 +314,24 @@ ALTER TABLE vicidial_list ADD last_local_call_time DATETIME; CREATE INDEX last_local_call_time ON vicidial_list (last_local_call_time); UPDATE system_settings SET db_schema_version='1100'; + +INSERT INTO vicidial_shifts SET shift_id='24HRMIDNIGHT',shift_name='24 hours 7 days a week',shift_start_time='0000',shift_length='24:00',shift_weekdays='0123456'; + +ALTER TABLE vicidial_campaigns CHANGE campaign_shift_start_time qc_shift_id VARCHAR(20) default '24HRMIDNIGHT'; +ALTER TABLE vicidial_campaigns CHANGE campaign_shift_length qc_get_record_launch ENUM('NONE','SCRIPT','WEBFORM','QCSCRIPT','QCWEBFORM') default 'NONE'; +ALTER TABLE vicidial_campaigns CHANGE campaign_day_start_time qc_show_recording ENUM('Y','N') default 'Y'; +UPDATE vicidial_campaigns SET qc_shift_id='24HRMIDNIGHT'; +UPDATE vicidial_campaigns SET qc_get_record_launch='NONE'; +UPDATE vicidial_campaigns SET qc_show_recording='Y'; + +ALTER TABLE vicidial_inbound_groups ADD qc_enabled ENUM('Y','N') default 'N'; +ALTER TABLE vicidial_inbound_groups ADD qc_statuses TEXT; +ALTER TABLE vicidial_inbound_groups ADD qc_shift_id VARCHAR(20) default '24HRMIDNIGHT'; +ALTER TABLE vicidial_inbound_groups ADD qc_get_record_launch ENUM('NONE','SCRIPT','WEBFORM','QCSCRIPT','QCWEBFORM') default 'NONE'; +ALTER TABLE vicidial_inbound_groups ADD qc_show_recording ENUM('Y','N') default 'Y'; +ALTER TABLE vicidial_inbound_groups ADD qc_web_form_address VARCHAR(255); +ALTER TABLE vicidial_inbound_groups ADD qc_script VARCHAR(10); + +UPDATE system_settings SET qc_last_pull_time="2008-01-01"; + +UPDATE system_settings SET db_schema_version='1101'; diff --git a/agc_2-X/trunk/translations/raw_translation_files/TO_BE_TRANSLATED_2.0.5.txt b/agc_2-X/trunk/translations/raw_translation_files/TO_BE_TRANSLATED_2.0.5.txt index 14f3b645..1aac5612 100644 --- a/agc_2-X/trunk/translations/raw_translation_files/TO_BE_TRANSLATED_2.0.5.txt +++ b/agc_2-X/trunk/translations/raw_translation_files/TO_BE_TRANSLATED_2.0.5.txt @@ -35,17 +35,9 @@ Drop Transfer Group -<\/B> If Drop Action is set to IN_GROUP, the call will be s QC SETTINGS FOR THIS CAMPAIGN|| QC Enabled: || QC Statuses: || -QC Lists: || -Campaign Shift Start Time: || -Campaign Shift Length: || -Campaign Day Start Time: || Modify Campaign QC Settings|| QC Enabled -<\/B> Setting this field to Y allows for the agent Quality Control features to work. Default is N|| QC Statuses -<\/B> This area is where you select which statuses of leads should be gone over by the QC system. Place a check next to the status that you want QC to review|| -QC Lists -<\/B> This area is where you select which lists of leads should be gone over by the QC system. Place a check next to the list that you want QC to review|| -Campaign Shift Start Time -<\/B> This is the time that the campaign shift begins. Must only be numbers, 9:30 AM would be 0930|| -Campaign Shift Length -<\/B> This is the time in Hours and Minutes that the campaign shift lasts. 8 hours would be 08:00|| -Campaign Day Start Time -<\/B> This is the time that the a new campaign day begins. Must only be numbers, 1:00 AM would be 0100|| QC SETTINGS NOT MODIFIED|| QC SETTINGS MODIFIED|| QC WebForm Address -<\/B> This is the website address that a QC agent can go to when clicking on the WEBFORM link in the QC screen|| @@ -232,6 +224,14 @@ QC Last Pull Time: || and less than 43200 seconds or 12 hours|| LEADS AT LIMIT|| Lead counts taken from active lists in the campaign only|| +QC Get Record Launch-<\/B> This allows one of the following actions to be triggered upon a QC agent receiving a new record|| +QC Show Recording -<\/B> This allows for a recording that may be linked with the QC record to be display in the QC agent screen|| +QC Shift -<\/B> This is the shift timeframe used to pull QC records for a campaign. The days of the week are ignored for these functions|| +QC Get Record Launch|| +QC Show Recording|| +QC Shift|| +Inbound Group QC Settings|| +QC Shift -<\/B> This is the shift timeframe used to pull QC records for an inbound_group. The days of the week are ignored for these functions|| ############################################################ CLIENT diff --git a/agc_2-X/trunk/www/agc/vdc_db_query.php b/agc_2-X/trunk/www/agc/vdc_db_query.php index 29e757ce..e4334888 100644 --- a/agc_2-X/trunk/www/agc/vdc_db_query.php +++ b/agc_2-X/trunk/www/agc/vdc_db_query.php @@ -54,7 +54,7 @@ # - $comments - ('Good Customer',...) # - $auto_dial_level - ('0','1','1.2',...) # - $VDstop_rec_after_each_call - ('0','1') -# - $conf_silent_prefix - ('7','8','',...) +# - $conf_silent_prefix - ('7','8','5',...) # - $extension - ('123','user123','25-1',...) # - $protocol - ('Zap','SIP','IAX2',...) # - $user_abb - ('1234','6666',...) @@ -71,6 +71,7 @@ # - $no_delete_sessions - ('0','1') # - $LogouTKicKAlL - ('0','1'); # - $closer_blended = ('0','1'); +# - $inOUT = ('IN','OUT'); # CHANGELOG: # 50629-1044 - First build of script @@ -152,11 +153,13 @@ # 80630-2153 - Added queue_log logging for Manual dial calls # 80703-0139 - Added alter customer phone permissions # 80707-2325 - Added vicidial_id to recording_log for tracking of vicidial or closer log to recording -# 80713-0624 - Added vicidial_list_last_local_call_time field +# 80713-0624 - Added vicidial_list.last_local_call_time field +# 80717-1604 - Modified logging function to use inOUT to determine call direction and place to log +# 80719-1147 - Changed recording conf prefix # -$version = '2.0.5-77'; -$build = '80713-0624'; +$version = '2.0.5-79'; +$build = '80719-1147'; require("dbconnect.php"); @@ -293,7 +296,8 @@ if (isset($_GET["LogouTKicKAlL"])) {$LogouTKicKAlL=$_GET["LogouTKicKAlL"];} elseif (isset($_POST["LogouTKicKAlL"])) {$LogouTKicKAlL=$_POST["LogouTKicKAlL"];} if (isset($_GET["closer_blended"])) {$closer_blended=$_GET["closer_blended"];} elseif (isset($_POST["closer_blended"])) {$closer_blended=$_POST["closer_blended"];} - +if (isset($_GET["inOUT"])) {$inOUT=$_GET["inOUT"];} + elseif (isset($_POST["inOUT"])) {$inOUT=$_POST["inOUT"];} header ("Content-type: text/html; charset=utf-8"); header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 @@ -1217,15 +1221,12 @@ if ($stage == "end") $term_reason='NONE'; if ($start_epoch < 1000) { - $stmt = "select count(*) from vicidial_campaigns where campaign_id='$campaign' and campaign_allow_inbound='Y';"; - if ($format=='debug') {echo "\n";} - $rslt=mysql_query($stmt, $link); - $row=mysql_fetch_row($rslt); - $check_inbound = $row[0]; - if ($check_inbound > 0) + if ($inOUT == 'IN') { + $four_hours_ago = date("Y-m-d H:i:s", mktime(date("H")-4,date("i"),date("s"),date("m"),date("d"),date("Y"))); + ##### look for the start epoch in the vicidial_closer_log table - $stmt="SELECT start_epoch,term_reason,closecallid FROM vicidial_closer_log where phone_number='$phone_number' and lead_id='$lead_id' and user='$user' order by closecallid desc limit 1;"; + $stmt="SELECT start_epoch,term_reason,closecallid FROM vicidial_closer_log where phone_number='$phone_number' and lead_id='$lead_id' and user='$user' and call_date > \"$four_hours_ago\" order by closecallid desc limit 1;"; } else { @@ -1248,8 +1249,12 @@ if ($stage == "end") $length_in_sec = 0; } - if ( ($length_in_sec < 1) and ($check_inbound > 0) ) + if ( ($length_in_sec < 1) and ($inOUT == 'IN') ) { + $fp = fopen ("./vicidial_debug.txt", "a"); + fwrite ($fp, "$NOW_TIME|INBND_LOG_1|$uniqueid|$lead_id|$user|$inOUT|$length_in_sec|$VDterm_reason|$VDvicidial_id|$start_epoch|\n"); + fclose($fp); + ##### start epoch in the vicidial_log table, couldn't find one in vicidial_closer_log $stmt="SELECT start_epoch,term_reason FROM vicidial_log where uniqueid='$uniqueid' and lead_id='$lead_id';"; $rslt=mysql_query($stmt, $link); @@ -1272,18 +1277,22 @@ if ($stage == "end") $four_hours_ago = date("Y-m-d H:i:s", mktime(date("H")-4,date("i"),date("s"),date("m"),date("d"),date("Y"))); - $closer_logged=0; - if ($check_inbound > 0) + if ($inOUT == 'IN') { - $stmt = "UPDATE vicidial_closer_log set end_epoch='$StarTtime', length_in_sec='$length_in_sec' where lead_id='$lead_id' and call_date > \"$four_hours_ago\" order by call_date desc limit 1;"; + $stmt = "UPDATE vicidial_closer_log set end_epoch='$StarTtime', length_in_sec='$length_in_sec' where lead_id='$lead_id' and user='$user' and call_date > \"$four_hours_ago\" order by call_date desc limit 1;"; if ($DB) {echo "$stmt\n";} $rslt=mysql_query($stmt, $link); $affected_rows = mysql_affected_rows($link); if ($affected_rows > 0) { - $closer_logged=1; echo "$uniqueid\n$channel\n"; } + else + { + $fp = fopen ("./vicidial_debug.txt", "a"); + fwrite ($fp, "$NOW_TIME|INBND_LOG_2|$uniqueid|$lead_id|$user|$inOUT|$length_in_sec|$VDterm_reason|$VDvicidial_id|$start_epoch|\n"); + fclose($fp); + } } ############################################# @@ -1512,7 +1521,7 @@ if ($stage == "end") } } - if ($closer_logged < 1) + if ($inOUT == 'OUT') { $SQLterm = "term_reason='$term_reason',"; @@ -1539,7 +1548,7 @@ if ($stage == "end") } ##### update the duration and end time in the vicidial_log table - $stmt="UPDATE vicidial_log set $SQLterm end_epoch='$StarTtime', length_in_sec='$length_in_sec' where uniqueid='$uniqueid' and lead_id='$lead_id' order by call_date desc limit 1;"; + $stmt="UPDATE vicidial_log set $SQLterm end_epoch='$StarTtime', length_in_sec='$length_in_sec' where uniqueid='$uniqueid' and lead_id='$lead_id' and user='$user' order by call_date desc limit 1;"; if ($DB) {echo "$stmt\n";} $rslt=mysql_query($stmt, $link); $affected_rows = mysql_affected_rows($link); @@ -1653,7 +1662,20 @@ if ($stage == "end") $start_time = $row[1]; $vicidial_id = $row[2]; - if (strlen($vicidial_id)<1) {$vidSQL = ",vicidial_id='$VDvicidial_id'";} + if (strlen($vicidial_id)<1) + {$vidSQL = ",vicidial_id='$VDvicidial_id'";} + else + { + if ( (ereg('.',$vicidial_id)) and ($inOUT == 'IN') ) + { + if (!ereg('.',$VDvicidial_id)) + {$vidSQL = ",vicidial_id='$VDvicidial_id'";} + + $fp = fopen ("./vicidial_debug.txt", "a"); + fwrite ($fp, "$NOW_TIME|INBND_LOG_3|$uniqueid|$lead_id|$user|$inOUT|$length_in_sec|$VDterm_reason|$VDvicidial_id|$vicidial_id|$start_epoch|$recording_id|\n"); + fclose($fp); + } + } $length_in_sec = ($StarTtime - $start_time); $length_in_min = ($length_in_sec / 60); $length_in_min = sprintf("%8.2f", $length_in_min); diff --git a/agc_2-X/trunk/www/agc/vicidial.php b/agc_2-X/trunk/www/agc/vicidial.php index 0c88c83f..5eee9eac 100644 --- a/agc_2-X/trunk/www/agc/vicidial.php +++ b/agc_2-X/trunk/www/agc/vicidial.php @@ -184,10 +184,11 @@ # 80703-1106 - Added API functionality for Hangup and Dispo, added Agent Display Queue Count # 80707-2325 - Added vicidial_id to recording_log for tracking of vicidial or closer log to recording # 80709-0358 - Added Default alt phone dial hard-code option +# 80719-1147 - Changed recording and senddtmf conf prefix # -$version = '2.0.5-162'; -$build = '80709-0358'; +$version = '2.0.5-163'; +$build = '80719-1147'; require("dbconnect.php"); @@ -276,7 +277,11 @@ while ($i < $qm_conf_ct) ##### END SETTINGS LOOKUP ##### ########################################### -$conf_silent_prefix = '7'; # vicidial_conferences prefix to enter silently + +##### DEFINABLE SETTINGS AND OPTIONS +########################################### +$conf_silent_prefix = '5'; # vicidial_conferences prefix to enter silently and muted for recording +$dtmf_silent_prefix = '7'; # vicidial_conferences prefix to enter silently $HKuser_level = '5'; # minimum vicidial user_level for HotKeys $campaign_login_list = '1'; # show drop-down list of campaigns at login $manual_dial_preview = '1'; # allow preview lead option when manual dial @@ -1875,6 +1880,7 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";} var xferchannellive=0; var nochannelinsession=0; var agc_dial_prefix = '91'; + var dtmf_silent_prefix = ''; var conf_silent_prefix = ''; var menuheight = 30; var menuwidth = 30; @@ -2348,7 +2354,7 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";} if (xmlhttp) { var queryCID = dtmf_string; - VMCoriginate_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&ACTION=SysCIDOriginate&format=text&channel=" + dtmf_send_extension + "&queryCID=" + queryCID + "&exten=" + conf_silent_prefix + '' + conf_dtmf_room + "&ext_context=" + ext_context + "&ext_priority=1"; + VMCoriginate_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&ACTION=SysCIDOriginate&format=text&channel=" + dtmf_send_extension + "&queryCID=" + queryCID + "&exten=" + dtmf_silent_prefix + '' + conf_dtmf_room + "&ext_context=" + ext_context + "&ext_priority=1"; xmlhttp.open('POST', 'manager_send.php'); xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8'); xmlhttp.send(VMCoriginate_query); @@ -3052,7 +3058,7 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";} "&list_id=" + document.vicidial_form.list_id.value + "&length_in_sec=0&phone_code=" + document.vicidial_form.phone_code.value + "&phone_number=" + lead_dial_number + - "&exten=" + extension + "&channel=" + lastcustchannel + "&start_epoch=" + MDlogEPOCH + "&auto_dial_level=" + auto_dial_level + "&VDstop_rec_after_each_call=" + VDstop_rec_after_each_call + "&conf_silent_prefix=" + conf_silent_prefix + "&protocol=" + protocol + "&extension=" + extension + "&ext_context=" + ext_context + "&conf_exten=" + session_id + "&user_abb=" + user_abb + "&agent_log_id=" + agent_log_id + "&MDnextCID=" + LasTCID + "&DB=0"; + "&exten=" + extension + "&channel=" + lastcustchannel + "&start_epoch=" + MDlogEPOCH + "&auto_dial_level=" + auto_dial_level + "&VDstop_rec_after_each_call=" + VDstop_rec_after_each_call + "&conf_silent_prefix=" + conf_silent_prefix + "&protocol=" + protocol + "&extension=" + extension + "&ext_context=" + ext_context + "&conf_exten=" + session_id + "&user_abb=" + user_abb + "&agent_log_id=" + agent_log_id + "&MDnextCID=" + LasTCID + "&inOUT=" + inOUT + "&DB=0"; xmlhttp.open('POST', 'vdc_db_query.php'); xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8'); // document.getElementById("busycallsdebug").innerHTML = "vdc_db_query.php?" + manDiaLlog_query; diff --git a/agc_2-X/trunk/www/vicidial/AST_VDADstats.php b/agc_2-X/trunk/www/vicidial/AST_VDADstats.php index 2a3932cc..1f39c86b 100644 --- a/agc_2-X/trunk/www/vicidial/AST_VDADstats.php +++ b/agc_2-X/trunk/www/vicidial/AST_VDADstats.php @@ -12,6 +12,7 @@ # 80430-1920 - Added Customer hangup cause stats # 80620-0031 - Fixed human answered calculation for drop perfentage # 80709-0230 - Added time stats to call statuses +# 80717-2118 - Added calls/hour out of agent login time in status summary # header ("Content-type: text/html; charset=utf-8"); @@ -21,6 +22,8 @@ require("dbconnect.php"); $PHP_AUTH_USER=$_SERVER['PHP_AUTH_USER']; $PHP_AUTH_PW=$_SERVER['PHP_AUTH_PW']; $PHP_SELF=$_SERVER['PHP_SELF']; +if (isset($_GET["agent_hours"])) {$agent_hours=$_GET["agent_hours"];} + elseif (isset($_POST["agent_hours"])) {$agent_hours=$_POST["agent_hours"];} if (isset($_GET["group"])) {$group=$_GET["group"];} elseif (isset($_POST["group"])) {$group=$_POST["group"];} if (isset($_GET["query_date"])) {$query_date=$_GET["query_date"];} @@ -108,6 +111,7 @@ while ($i < $groups_to_print) echo "\n"; echo "VICIDIAL: VDAD Stats\n"; echo "
\n"; +echo "\n"; echo "\n"; echo " to \n"; echo "\n"; echo "\n"; echo "QC Enabled: $NWB#vicidial_campaigns-qc_enabled$NWE\n"; echo "QC Statuses:
$NWB#vicidial_campaigns-qc_statuses$NWE$qc_statuses_list\n"; - echo "QC Lists:
$NWB#vicidial_campaigns-qc_lists$NWE$qc_lists_list\n"; - echo "Campaign Shift Start Time: $NWB#vicidial_campaigns-campaign_shift_start_time$NWE\n"; - echo "Campaign Shift Length: $NWB#vicidial_campaigns-campaign_shift_length$NWE\n"; - echo "Campaign Day Start Time: $NWB#vicidial_campaigns-campaign_day_start_time$NWE\n"; - echo "QC WebForm: $NWB#vicidial_campaigns-qc_web_form_address$NWE\n"; +# echo "QC Lists:
$NWB#vicidial_campaigns-qc_lists$NWE$qc_lists_list\n"; + echo "QC WebForm: $NWB#vicidial_campaigns-qc_web_form_address$NWE\n"; + echo "QC Script: $NWB#vicidial_campaigns-qc_script$NWE\n"; + + echo "QC Shift: $NWB#vicidial_campaigns-qc_shift_id$NWE\n"; + + echo "QC Get Record Launch: $NWB#vicidial_campaigns-qc_get_record_launch$NWE\n"; + echo "QC Show Recording: $NWB#vicidial_campaigns-qc_show_recording$NWE\n"; + echo "\n"; echo "\n"; echo "

\n"; @@ -12648,6 +12735,13 @@ if ($ADD==3111) $ingroup_recording_override = $row[31]; $ingroup_rec_filename = $row[32]; $afterhours_xfer_group = $row[33]; + $qc_enabled = $row[34]; + $qc_statuses = $row[35]; + $qc_shift_id = $row[36]; + $qc_get_record_launch = $row[37]; + $qc_show_recording = $row[38]; + $qc_web_form_address = $row[39]; + $qc_script = $row[40]; ##### get in-groups listings for dynamic pulldown $stmt="SELECT group_id,group_name from vicidial_inbound_groups order by group_id"; @@ -12793,7 +12887,111 @@ if ($ADD==3111) echo "In-Group Recording Filename: $NWB#vicidial_inbound_groups-ingroup_rec_filename$NWE\n"; echo "\n"; - echo "\n"; + + echo "   \n"; + echo " Inbound Group QC Settings: \n"; + + ##### get status listings for dynamic pulldown + $qc_statuses = preg_replace("/^ | -$/","",$qc_statuses); + $QCstatuses = explode(" ", $qc_statuses); + $QCs_to_print = (count($QCstatuses) -0); + $stmt="SELECT * from vicidial_statuses where status NOT IN('QUEUE','INCALL') order by status"; + $rslt=mysql_query($stmt, $link); + $statuses_to_print = mysql_num_rows($rslt); + $qc_statuses_list=''; + + $o=0; + while ($statuses_to_print > $o) + { + $rowx=mysql_fetch_row($rslt); + $qc_statuses_list .= " $o) + { + $rowx=mysql_fetch_row($rslt); + if (!ereg("\"$rowx[0]\"",$qc_statuses_list)) + { + $qc_statuses_list .= " $o) + { + $rowx=mysql_fetch_row($rslt); + $QCscripts_list .= "\n"; + $scriptname_list["$rowx[0]"] = "$rowx[1]"; + $o++; + } + ##### get shifts listings for pulldown + $stmt="SELECT shift_id,shift_name from vicidial_shifts order by shift_id"; + $rslt=mysql_query($stmt, $link); + $shifts_to_print = mysql_num_rows($rslt); + $QCshifts_list=""; + $o=0; + while ($shifts_to_print > $o) + { + $rowx=mysql_fetch_row($rslt); + $QCshifts_list .= "\n"; + $shiftname_list["$rowx[0]"] = "$rowx[1]"; + $o++; + } + + echo "QC Enabled: $NWB#vicidial_inbound_groups-qc_enabled$NWE\n"; + echo "QC Statuses:
$NWB#vicidial_inbound_groups-qc_statuses$NWE$qc_statuses_list\n"; + echo "QC WebForm: $NWB#vicidial_inbound_groups-qc_web_form_address$NWE\n"; + + echo "QC Script: $NWB#vicidial_inbound_groups-qc_script$NWE\n"; + + echo "QC Shift: $NWB#vicidial_inbound_groups-qc_shift_id$NWE\n"; + + echo "QC Get Record Launch: $NWB#vicidial_inbound_groups-qc_get_record_launch$NWE\n"; + echo "QC Show Recording: $NWB#vicidial_inbound_groups-qc_show_recording$NWE\n"; + + echo "\n"; + echo "\n"; + echo "

\n"; + ### list of agent rank or skill-level for this inbound group echo "
\n";