added option for press-1-to-leave-voicemail while waiting in inbound-group queue

git-svn-id: svn://192.168.202.10@962 3d104415-ff17-0410-8863-d5cf3c621b8a
This commit is contained in:
mattf
2008-10-11 14:22:29 +00:00
parent 8ce9d3fce9
commit ea346764de
6 changed files with 145 additions and 32 deletions
+137 -25
View File
@@ -83,12 +83,13 @@
# 80821-0133 - fixed non-play issue with hold message # 80821-0133 - fixed non-play issue with hold message
# 80918-0505 - Added place in line and estimated time on hold # 80918-0505 - Added place in line and estimated time on hold
# 81002-1120 - Added processing for DID forwarded calls # 81002-1120 - Added processing for DID forwarded calls
# 81011-1019 - Added option for press 1 to leave voicemail if wait time > hold-time-option-seconds
# #
$script = 'agi-VDAD_ALL_inbound.agi'; $script = 'agi-VDAD_ALL_inbound.agi';
$dtmf_silent_prefix = '7'; $dtmf_silent_prefix = '7';
$DROP_TIME = 360; ### default number of seconds to wait until you drop a waiting call $DROP_TIME = 720; ### default number of seconds to wait until you drop a waiting call
$start_moh=1; $start_moh=1;
$at='@'; $at='@';
@@ -895,8 +896,8 @@ if ($channel_status < 1)
if ($channel_status_DC < 1) if ($channel_status_DC < 1)
{ {
if ($AGILOG) {$agi_string = "CHANNEL $channel DOWN $channel_status $DROP_TIME|$drop_timer"; &agi_output;} if ($AGILOG) {$agi_string = "CHANNEL $channel DOWN $channel_status $DROP_TIME|$drop_timer"; &agi_output;}
if ($drop_timer < 360) {$drop_seconds = $drop_timer;} if ($drop_timer < 720) {$drop_seconds = $drop_timer;}
$drop_timer = ($drop_timer + 360); $drop_timer = ($drop_timer + 720);
} }
} }
@@ -1546,6 +1547,8 @@ if ($hold_recall_xfer_group !~ /NONE/)
$affected_rows = $dbhA->do($stmtA); $affected_rows = $dbhA->do($stmtA);
if ($AGILOG) {$agi_string = "-- VDCL vac record deleted: |$affected_rows| $VDADcampaign|"; &agi_output;} if ($AGILOG) {$agi_string = "-- VDCL vac record deleted: |$affected_rows| $VDADcampaign|"; &agi_output;}
if ($drop_seconds < 1) {$drop_seconds = $drop_timer;}
$stmtA = "UPDATE vicidial_closer_log set status='HXFER',end_epoch='$now_date_epoch',length_in_sec='$drop_seconds',queue_seconds='$drop_seconds',term_reason='HOLDRECALLXFER' where lead_id = '$insert_lead_id' order by start_epoch desc limit 1;"; $stmtA = "UPDATE vicidial_closer_log set status='HXFER',end_epoch='$now_date_epoch',length_in_sec='$drop_seconds',queue_seconds='$drop_seconds',term_reason='HOLDRECALLXFER' where lead_id = '$insert_lead_id' order by start_epoch desc limit 1;";
$affected_rows = $dbhA->do($stmtA); $affected_rows = $dbhA->do($stmtA);
if ($AGILOG) {$agi_string = "-- VDCL vcl update: |$affected_rows|$insert_lead_id|\n|$stmtA|"; &agi_output;} if ($AGILOG) {$agi_string = "-- VDCL vcl update: |$affected_rows|$insert_lead_id|\n|$stmtA|"; &agi_output;}
@@ -1613,7 +1616,7 @@ if ( ($hold_message_counter > $prompt_interval) && ($prompt_interval > 0) )
if ($play_place_in_line =~ /Y/i) {$start_place_in_line=1; $moh_delay=2;} if ($play_place_in_line =~ /Y/i) {$start_place_in_line=1; $moh_delay=2;}
if ($play_estimate_hold_time =~ /Y/i) {$start_hold_estimate=1; $moh_delay=2;} if ($play_estimate_hold_time =~ /Y/i) {$start_hold_estimate=1; $moh_delay=2;}
if ($hold_time_option !~ /NONE/) {$start_hold_estimate=1; $moh_delay=2;}; if ($hold_time_option !~ /NONE/) {$start_hold_estimate=1; $moh_delay=2;};
if ($drop_timer > 3) {$drop_timer = ($drop_timer + 5);} # add prompt play time to total queue time if ($drop_timer >= 3) {$drop_timer = ($drop_timer + 5);} # add prompt play time to total queue time
} }
else {$hold_message_counter++;} else {$hold_message_counter++;}
if ($hold_tone_counter > 3) if ($hold_tone_counter > 3)
@@ -1653,12 +1656,12 @@ if ( ($start_place_in_line > 0) && ($moh_delay == '1') )
{ {
$AGI->stream_file('queue-thereare'); # you are currently caller number $AGI->stream_file('queue-thereare'); # you are currently caller number
$AGI->say_number("$place"); $AGI->say_number("$place");
if ($drop_timer > 3) {$drop_timer = ($drop_timer + 2);} # add prompt play time to total queue time if ($drop_timer >= 3) {$drop_timer = ($drop_timer + 2);} # add prompt play time to total queue time
} }
else else
{ {
$AGI->stream_file('queue-youarenext'); # your call is now first in line $AGI->stream_file('queue-youarenext'); # your call is now first in line
if ($drop_timer > 3) {$drop_timer = ($drop_timer + 5);} # add prompt play time to total queue time if ($drop_timer >= 3) {$drop_timer = ($drop_timer + 5);} # add prompt play time to total queue time
} }
$start_place_in_line=0; $start_place_in_line=0;
@@ -1762,9 +1765,10 @@ if ( ($start_hold_estimate > 0) && ($moh_delay == '1') )
} }
} }
} }
if ($drop_timer > 3) {$drop_timer = ($drop_timer + 3);} # add prompt play time to total queue time if ($drop_timer >= 3) {$drop_timer = ($drop_timer + 3);} # add prompt play time to total queue time
$start_hold_estimate=0; $start_hold_estimate=0;
$wait_in_queue = 1; # trigger hold-time-option is applicable
} }
##### check if hold_time_option is set to leave Queue ##### check if hold_time_option is set to leave Queue
@@ -1777,6 +1781,42 @@ if ($hold_time_option =~ /EXTENSION/)
if (length($hold_time_option_exten)>0) if (length($hold_time_option_exten)>0)
{$DROPexten = "$hold_time_option_exten";} {$DROPexten = "$hold_time_option_exten";}
} }
if ($hold_time_option =~ /PRESS_VMAIL/)
{
$now_date_epoch = time();
$FDtarget = ($now_date_epoch + 8);
($Fsec,$Fmin,$Fhour,$Fmday,$Fmon,$Fyear,$Fwday,$Fyday,$Fisdst) = localtime($FDtarget);
$Fyear = ($Fyear + 1900);
$Fmon++;
if ($Fmon < 10) {$Fmon = "0$Fmon";}
if ($Fmday < 10) {$Fmday = "0$Fmday";}
if ($Fhour < 10) {$Fhour = "0$Fhour";}
if ($Fmin < 10) {$Fmin = "0$Fmin";}
if ($Fsec < 10) {$Fsec = "0$Fsec";}
$FDtsSQLdate = "$Fyear$Fmon$Fmday$Fhour$Fmin$Fsec";
$stmtA = "UPDATE vicidial_auto_calls set last_update_time='$FDtsSQLdate' where callerid='$callerid' order by call_time desc limit 1;";
$affected_rows = $dbhA->do($stmtA);
if ($AGILOG) {$agi_string = "-- VDAC posttime record: |$affected_rows|$FDtsSQLdate|$callerid|"; &agi_output;}
if ($drop_timer >= 3) {$drop_timer = ($drop_timer + 8);} # add prompt play time to total queue time
$AGI->stream_file('sip-silence'); # stop music-on-hold process
$AGI->stream_file('sip-silence'); # stop music-on-hold process
&press_one_to_leave_voicemail;
if ($pin =~ /1/)
{
$DROPexten = "$voicemail_dump_exten$hold_time_option_voicemail";
$HT_status='QVMAIL';
}
else
{
$DROPexten='';
$wait_in_queue = 2; #continue waiting on hold
}
}
if ($hold_time_option =~ /VOICEMAIL/) if ($hold_time_option =~ /VOICEMAIL/)
{ {
if (length($hold_time_option_voicemail)>0) if (length($hold_time_option_voicemail)>0)
@@ -1829,12 +1869,12 @@ if ($AGILOG) {$agi_string = "-- VDCL HOLD TIME OPT: |$hold_time_option|$DROPe
if ($wait_in_queue < 1) if ($wait_in_queue < 1)
{ {
### use STDOUT to send call to proper DROP location
$VHqueryCID = "VH$CIDdate$VDADconf_exten";
if (length($DROPexten)>0) if (length($DROPexten)>0)
{ ### if DROP extension is defined then send the dropped call there instead of hangup { ### if DROP extension is defined then send the dropped call there instead of hangup
### use STDOUT to send call to proper DROP location
$VHqueryCID = "VH$CIDdate$VDADconf_exten";
if ($no_delay_call_route =~ /N/) if ($no_delay_call_route =~ /N/)
{ {
$AGI->stream_file('ding'); # stop music-on-hold process $AGI->stream_file('ding'); # stop music-on-hold process
@@ -1848,24 +1888,28 @@ if ($wait_in_queue < 1)
checkresult($result); checkresult($result);
print "SET PRIORITY 1\n"; print "SET PRIORITY 1\n";
checkresult($result); checkresult($result);
$stmtA = "DELETE FROM vicidial_auto_calls where callerid='$callerid' and server_ip='$VARserver_ip' order by call_time desc limit 1;";
$affected_rows = $dbhA->do($stmtA);
if ($AGILOG) {$agi_string = "-- VDCL vac record deleted: |$affected_rows| $VDADcampaign|"; &agi_output;}
if ($drop_seconds < 1) {$drop_seconds = $drop_timer;}
if (length($HT_status)<1) {$HT_status='HOLDTO';}
$stmtA = "UPDATE vicidial_closer_log set status='$HT_status',end_epoch='$now_date_epoch',length_in_sec='$drop_seconds',queue_seconds='$drop_seconds',term_reason='HOLDTIME' where lead_id = '$insert_lead_id' order by start_epoch desc limit 1;";
$affected_rows = $dbhA->do($stmtA);
if ($AGILOG) {$agi_string = "-- VDCL vcl update: |$affected_rows|$insert_lead_id|\n|$stmtA|"; &agi_output;}
$stmtA = "UPDATE vicidial_list set status='HOLDTO' where lead_id = '$insert_lead_id';";
$affected_rows = $dbhA->do($stmtA);
if ($AGILOG) {$agi_string = "-- VDCL vl update: |$affected_rows|$insert_lead_id|\n|$stmtA|"; &agi_output;}
$dbhA->disconnect();
exit;
} }
$stmtA = "DELETE FROM vicidial_auto_calls where callerid='$callerid' and server_ip='$VARserver_ip' order by call_time desc limit 1;";
$affected_rows = $dbhA->do($stmtA);
if ($AGILOG) {$agi_string = "-- VDCL vac record deleted: |$affected_rows| $VDADcampaign|"; &agi_output;}
$stmtA = "UPDATE vicidial_closer_log set status='HOLDTO',end_epoch='$now_date_epoch',length_in_sec='$drop_seconds',queue_seconds='$drop_seconds',term_reason='HOLDTIME' where lead_id = '$insert_lead_id' order by start_epoch desc limit 1;";
$affected_rows = $dbhA->do($stmtA);
if ($AGILOG) {$agi_string = "-- VDCL vcl update: |$affected_rows|$insert_lead_id|\n|$stmtA|"; &agi_output;}
$stmtA = "UPDATE vicidial_list set status='HOLDTO' where lead_id = '$insert_lead_id';";
$affected_rows = $dbhA->do($stmtA);
if ($AGILOG) {$agi_string = "-- VDCL vl update: |$affected_rows|$insert_lead_id|\n|$stmtA|"; &agi_output;}
$dbhA->disconnect();
exit;
} }
} }
@@ -2015,6 +2059,11 @@ $dbhA->disconnect();
exit; exit;
sub enter_pin_number sub enter_pin_number
{ {
@@ -2077,6 +2126,69 @@ if ($totalDTMF) {if ($AGILOG) {$agi_string = "digit |$digit| TotalDTMF |$tot
sub press_one_to_leave_voicemail
{
$digits_to_collect = 1;
# To be called back when a representative is available, press 1
$digit='';
undef $digit;
$interrupt_digit='';
undef $interrupt_digit;
$digit_loop_counter=0;
$interrupt_digit = $AGI->stream_file('to-be-called-back','1');
if ($interrupt_digit < 2)
{$interrupt_digit = $AGI->stream_file('digits/1','1');}
if ($AGILOG) {$agi_string = "interrupt_digit |$interrupt_digit|"; &agi_output;}
$digits_being_entered=1;
$totalDTMF='';
if ($interrupt_digit > 1)
{
if ($interrupt_digit == 48) {$interrupt_digit=0;}
if ($interrupt_digit == 49) {$interrupt_digit=1;}
if ($interrupt_digit == 50) {$interrupt_digit=2;}
if ($interrupt_digit == 51) {$interrupt_digit=3;}
if ($interrupt_digit == 52) {$interrupt_digit=4;}
if ($interrupt_digit == 53) {$interrupt_digit=5;}
if ($interrupt_digit == 54) {$interrupt_digit=6;}
if ($interrupt_digit == 55) {$interrupt_digit=7;}
if ($interrupt_digit == 56) {$interrupt_digit=8;}
if ($interrupt_digit == 57) {$interrupt_digit=9;}
$totalDTMF=$interrupt_digit;
$digit_loop_counter++;
}
while ( ($digit_loop_counter < $digits_to_collect) )
{
$digit = chr($AGI->wait_for_digit('4000')); # wait 4 seconds for input or until the key is pressed
if ($digit =~ /\d/)
{
$totalDTMF = "$totalDTMF$digit";
if ($AGILOG) {$agi_string = "digit |$digit| TotalDTMF |$totalDTMF|"; &agi_output;}
# $AGI->say_digits("$digit");
undef $digit;
}
else
{
$digit_loop_counter=$digits_to_collect;
}
$digit_loop_counter++;
}
$totalDTMF =~ s/\D//gi;
$pin = $totalDTMF;
if ($totalDTMF) {if ($AGILOG) {$agi_string = "digit |$digit| TotalDTMF |$totalDTMF|"; &agi_output;}}
}
sub checkresult { sub checkresult {
my ($res) = @_; my ($res) = @_;
+1
View File
@@ -29,3 +29,4 @@ SVYHU - Survey Hungup - Survey outbound campaign status only
SVYREC - Survey sent to Record - Survey outbound campaign status only SVYREC - Survey sent to Record - Survey outbound campaign status only
HXFER - Hold Recall Transfer to another in-group HXFER - Hold Recall Transfer to another in-group
HOLDTO - Hold time option call termination on inbound call HOLDTO - Hold time option call termination on inbound call
QVMAIL - Queue Abandon Voicemail Left
@@ -696,7 +696,7 @@ qc_web_form_address VARCHAR(255),
qc_script VARCHAR(10), qc_script VARCHAR(10),
play_place_in_line ENUM('Y','N') default 'N', play_place_in_line ENUM('Y','N') default 'N',
play_estimate_hold_time ENUM('Y','N') default 'N', play_estimate_hold_time ENUM('Y','N') default 'N',
hold_time_option ENUM('NONE','EXTENSION','VOICEMAIL','IN_GROUP','CALLERID_CALLBACK','DROP_ACTION') default 'NONE', hold_time_option ENUM('NONE','EXTENSION','VOICEMAIL','IN_GROUP','CALLERID_CALLBACK','DROP_ACTION','PRESS_VMAIL') default 'NONE',
hold_time_option_seconds SMALLINT(5) default '360', hold_time_option_seconds SMALLINT(5) default '360',
hold_time_option_exten VARCHAR(20) default '8300', hold_time_option_exten VARCHAR(20) default '8300',
hold_time_option_voicemail VARCHAR(20) default '', hold_time_option_voicemail VARCHAR(20) default '',
@@ -1324,7 +1324,7 @@ INSERT INTO vicidial_phone_codes (country_code, country, areacode, state, GMT_of
UPDATE system_settings SET qc_last_pull_time=NOW(); UPDATE system_settings SET qc_last_pull_time=NOW();
UPDATE system_settings SET db_schema_version='1108'; UPDATE system_settings SET db_schema_version='1109';
GRANT RELOAD ON *.* TO cron@'%'; GRANT RELOAD ON *.* TO cron@'%';
GRANT RELOAD ON *.* TO cron@localhost; GRANT RELOAD ON *.* TO cron@localhost;
+4 -4
View File
@@ -476,8 +476,8 @@ INSERT INTO vicidial_phone_codes (country_code, country, areacode, state, GMT_of
UPDATE system_settings SET db_schema_version='1108'; UPDATE system_settings SET db_schema_version='1108';
INSERT INTO vicidial_statuses values('QVMAIL','Queue Abandon Voicemail Left','N','N','UNDEFINED'); INSERT INTO vicidial_statuses values('QVMAIL','Queue Abandon Voicemail Left','N','N','UNDEFINED');
ALTER TABLE vicidial_inbound_groups MODIFY hold_time_option ENUM('NONE','EXTENSION','VOICEMAIL','IN_GROUP','CALLERID_CALLBACK','DROP_ACTION','PRESS_VMAIL') default 'NONE';
UPDATE system_settings SET db_schema_version='1109';
Binary file not shown.
+1 -1
View File
@@ -13552,7 +13552,7 @@ if ($ADD==3111)
echo "<tr bgcolor=#B6D3FC><td align=right>Play Estimated Hold Time: </td><td align=left><select size=1 name=play_estimate_hold_time><option>Y</option><option>N</option><option SELECTED>$play_estimate_hold_time</option></select>$NWB#vicidial_inbound_groups-play_estimate_hold_time$NWE</td></tr>\n"; echo "<tr bgcolor=#B6D3FC><td align=right>Play Estimated Hold Time: </td><td align=left><select size=1 name=play_estimate_hold_time><option>Y</option><option>N</option><option SELECTED>$play_estimate_hold_time</option></select>$NWB#vicidial_inbound_groups-play_estimate_hold_time$NWE</td></tr>\n";
echo "<tr bgcolor=#CCFFFF><td align=right>Hold Time Option: </td><td align=left><select size=1 name=hold_time_option><option>NONE</option><option>EXTENSION</option><option>VOICEMAIL</option><option>IN_GROUP</option><option>CALLERID_CALLBACK</option><option>DROP_ACTION</option><option SELECTED>$hold_time_option</option></select>$NWB#vicidial_inbound_groups-hold_time_option$NWE</td></tr>\n"; echo "<tr bgcolor=#CCFFFF><td align=right>Hold Time Option: </td><td align=left><select size=1 name=hold_time_option><option>NONE</option><option>EXTENSION</option><option>VOICEMAIL</option><option>IN_GROUP</option><option>CALLERID_CALLBACK</option><option>DROP_ACTION</option><option>PRESS_VMAIL</option><option SELECTED>$hold_time_option</option></select>$NWB#vicidial_inbound_groups-hold_time_option$NWE</td></tr>\n";
echo "<tr bgcolor=#CCFFFF><td align=right>Hold Time Option Seconds: </td><td align=left><input type=text name=hold_time_option_seconds size=5 maxlength=5 value=\"$hold_time_option_seconds\">$NWB#vicidial_inbound_groups-hold_time_option_seconds$NWE</td></tr>\n"; echo "<tr bgcolor=#CCFFFF><td align=right>Hold Time Option Seconds: </td><td align=left><input type=text name=hold_time_option_seconds size=5 maxlength=5 value=\"$hold_time_option_seconds\">$NWB#vicidial_inbound_groups-hold_time_option_seconds$NWE</td></tr>\n";