From 43363f57852a62c7721e25af6c19244c47eebf97 Mon Sep 17 00:00:00 2001 From: mattf Date: Fri, 11 May 2012 20:29:59 +0000 Subject: [PATCH] Added the ability to login with the agent dial-in AGI script only using user and not password, as well as verifying against contact_information instead of vicidial_users, also option to route through call menu instead of redirecting to agent session Added ability in the cm_lookup.agi script to log user/comments with the agent ID entered in the Agent dial-in AGI script as well as an option to log the call's uniqueid to the address3 field git-svn-id: svn://192.168.202.10@1814 3d104415-ff17-0410-8863-d5cf3c621b8a --- agc_2-X/trunk/agi/agi-AGENT_dial_in.agi | 527 +++++++++++++++--------- agc_2-X/trunk/agi/cm.agi | 4 + agc_2-X/trunk/agi/cm_lookup.agi | 53 ++- 3 files changed, 369 insertions(+), 215 deletions(-) diff --git a/agc_2-X/trunk/agi/agi-AGENT_dial_in.agi b/agc_2-X/trunk/agi/agi-AGENT_dial_in.agi index b7b307a9..3107b5c1 100644 --- a/agc_2-X/trunk/agi/agi-AGENT_dial_in.agi +++ b/agc_2-X/trunk/agi/agi-AGENT_dial_in.agi @@ -10,17 +10,29 @@ # user is prompted for their passcode then press # # then the user is forwarded to the active vicidial agent session # +# ; settings for this script: +# ; 1. allow user_id only login (disabled by default) +# ; Y - allow user ID only with no password +# ; CONTACTS - lookup the user ID as the 'office_num' field in the contact_information table +# ; N or (blank) - require password (default) +# ; 2. forward to A or B within Call Menu instead of logging into an agent session +# ; Y - forward to A option on valid user ID or B option on invalid user ID +# ; N or (blank) - go to agent session (default) +# # can be added as an AGI to a Call Menu, or as below: # ;agent dial-in: #exten => 2345,1,Answer ; Answer the line #exten => 2345,2,AGI(agi-AGENT_dial_in.agi) #exten => 2345,3,Hangup # +# ; call menu with options: +# agi-AGENT_dial_in.agi,Y---Y # -# Copyright (C) 2008 Matt Florell LICENSE: AGPLv2 +# Copyright (C) 2012 Matt Florell LICENSE: AGPLv2 # # CHANGELOG # 81022-2115 - First build +# 120511-1423 - Added new options # &get_time_now; @@ -86,6 +98,31 @@ $dbhA = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VA or die "Couldn't connect to database: " . DBI->errstr; +### BEGIN parsing run-time options ### +if (length($ARGV[0])>1) + { + if ($AGILOG) {$agi_string = "Perl Environment Dump:"; &agi_output;} + $i=0; + while ($#ARGV >= $i) + { + $args = "$args $ARGV[$i]"; + if ($AGILOG) {$agi_string = "$i|$ARGV[$i]"; &agi_output;} + $i++; + } + + ### list of command-line array arguments: + @ARGV_vars = split(/---/, $ARGV[0]); + + $user_id_only = $ARGV_vars[0]; + $use_call_menu = $ARGV_vars[1]; + } +if ( (length($user_id_only) < 1) || ($user_id_only !~ /Y|N/) ) + {$user_id_only = 'N';} +if ( (length($use_call_menu) < 1) || ($use_call_menu !~ /Y|N/) ) + {$use_call_menu = 'N';} +### END parsing run-time options ### + + $|=1; while() { @@ -99,6 +136,7 @@ while() } } + if (/^agi_context\:\s+(.*)$/) {$context = $1;} if (/^agi_uniqueid\:\s+(.*)$/) {$unique_id = $1;} if (/^agi_extension\:\s+(.*)$/) {$extension = $1;} if (/^agi_channel\:\s+(.*)$/) {$channel = $1;} @@ -157,20 +195,66 @@ while ( ($entry_chances < 3) && ($VALID_login < 1) ) ###### Check userID and password against vicidial_users table - $stmtA = "SELECT count(*) FROM vicidial_users where user='$PIN_number' and pass='$PASS_word';"; - $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; - $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; - $sthArows=$sthA->rows; - if ($sthArows > 0) + if ($user_id_only =~ /CONTACT/) { - @aryA = $sthA->fetchrow_array; - $VALID_login = "$aryA[0]"; - } - $sthA->finish(); + ############################################# + ##### START SYSTEM SETTINGS LOOKUP ##### + $stmtA = "SELECT alt_log_server_ip,alt_log_dbname,alt_log_login,alt_log_pass,tables_use_alt_log_db 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; + $alt_log_server_ip = $aryA[0]; + $alt_log_dbname = $aryA[1]; + $alt_log_login = $aryA[2]; + $alt_log_pass = $aryA[3]; + $tables_use_alt_log_db = $aryA[4]; + } + $sthA->finish(); + ##### END SYSTEM SETTINGS LOOKUP ##### + ########################################### + if ( ($tables_use_alt_log_db =~ /contact_information/) && (length($alt_log_server_ip)>4) && (length($alt_log_dbname)>0) ) + { + $linkALT = DBI->connect("DBI:mysql:$alt_log_dbname:$alt_log_server_ip:$VARDB_port", "$alt_log_login", "$alt_log_pass") + or die "Couldn't connect to database: " . DBI->errstr; + } + else + {$linkALT = $dbhA;} + + $stmtA = "SELECT count(*) FROM contact_information where office_num='$PIN_number';"; + $sthA = $linkALT->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtA ", $linkALT->errstr; + $sthArows=$sthA->rows; + if ($sthArows > 0) + { + @aryA = $sthA->fetchrow_array; + $VALID_login = "$aryA[0]"; + } + $sthA->finish(); + } + else + { + $stmtA = "SELECT count(*) FROM vicidial_users where user='$PIN_number' and pass='$PASS_word' and active='Y';"; + if ($user_id_only =~ /Y/) + {$stmtA = "SELECT count(*) FROM vicidial_users where user='$PIN_number' and active='Y';";} + $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; + $VALID_login = "$aryA[0]"; + } + $sthA->finish(); + } if ($VALID_login > 0) { + $AGI->exec("EXEC Set(_agent_user_id=$PIN_number)"); + $AGI->stream_file('pin-number-accepted'); } else @@ -185,11 +269,24 @@ if ($VALID_login < 1) { if ($AGILOG) {$agi_string = "DIAL-IN END: Invalid Login |$VALID_login|$PIN_number|$PASS_word|"; &agi_output;} - $AGI->stream_file('vm-goodbye'); + if ($use_call_menu =~ /Y/) + { + if ($AGILOG) {$agi_string = "exiting the agent dial-in app, transferring call to B @ $context"; &agi_output;} + print "SET CONTEXT $context\n"; + checkresult($result); + print "SET EXTENSION B\n"; + checkresult($result); + print "SET PRIORITY 1\n"; + checkresult($result); + } + else + { + $AGI->stream_file('vm-goodbye'); - $AGI->hangup(); + $AGI->hangup(); - $dbhA->disconnect(); + $dbhA->disconnect(); + } exit; } else @@ -206,69 +303,87 @@ else if ($Psec < 10) {$Psec = "0$Psec";} $PDtsSQLdate = "$Pyear$Pmon$Pmday$Phour$Pmin$Psec"; - ###### Check if user is logged in, vicidial_live_agents table - $stmtA = "SELECT count(*) FROM vicidial_live_agents where user='$PIN_number' and last_update_time > \"$PDtsSQLdate\";"; - $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; - $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; - $sthArows=$sthA->rows; - if ($sthArows > 0) + + if ($use_call_menu =~ /Y/) { - @aryA = $sthA->fetchrow_array; - $ACTIVE_login = "$aryA[0]"; - } - $sthA->finish(); - - if ($ACTIVE_login < 1) - { - if ($AGILOG) {$agi_string = "DIAL-IN END: Inactive Login |$VALID_login|$PIN_number|$PASS_word| |$ACTIVE_login|$PDtsSQLdate|"; &agi_output;} - - $AGI->stream_file('login-fail'); - $AGI->stream_file('you-must-be-logged-in'); - $AGI->stream_file('vm-goodbye'); - - $AGI->hangup(); - - $dbhA->disconnect(); - exit; - } - else - { - $stmtA = "SELECT conf_exten,extension,server_ip from vicidial_live_agents WHERE user='$PIN_number' limit 1;"; - if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;} - $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; - $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; - $sthArows=$sthA->rows; - $rec_countCUSTDATA=0; - if ($sthArows > 0) - { - @aryA = $sthA->fetchrow_array; - - $VDADconf_exten = "$aryA[0]"; - $VDADextension = "$aryA[1]"; - $VDADserver_ip = "$aryA[2]"; - } - $sthA->finish(); - - ### format the remote server dialstring to get the call to the overflow agent meetme room - $S='*'; - if( $VDADserver_ip =~ m/(\S+)\.(\S+)\.(\S+)\.(\S+)/ ) - { - $a = leading_zero($1); - $b = leading_zero($2); - $c = leading_zero($3); - $d = leading_zero($4); - $VDADremDIALstr = "$a$S$b$S$c$S$d$S"; - } - $VDADremDIALstr .= "$VDADconf_exten"; - - if ($AGILOG) {$agi_string = "Agent $PIN_number sent to $VDADremDIALstr"; &agi_output;} - - print "SET CONTEXT $ext_context\n"; + if ($AGILOG) {$agi_string = "exiting the agent dial-in app, transferring call to A @ $context"; &agi_output;} + print "SET CONTEXT $context\n"; checkresult($result); - print "SET EXTENSION $VDADremDIALstr\n"; + print "SET EXTENSION A\n"; checkresult($result); print "SET PRIORITY 1\n"; checkresult($result); + + + exit; + } + + else + { + ###### Check if user is logged in, vicidial_live_agents table + $stmtA = "SELECT count(*) FROM vicidial_live_agents where user='$PIN_number' and last_update_time > \"$PDtsSQLdate\";"; + $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; + $ACTIVE_login = "$aryA[0]"; + } + $sthA->finish(); + + if ($ACTIVE_login < 1) + { + if ($AGILOG) {$agi_string = "DIAL-IN END: Inactive Login |$VALID_login|$PIN_number|$PASS_word| |$ACTIVE_login|$PDtsSQLdate|"; &agi_output;} + + $AGI->stream_file('login-fail'); + $AGI->stream_file('you-must-be-logged-in'); + $AGI->stream_file('vm-goodbye'); + + $AGI->hangup(); + + $dbhA->disconnect(); + exit; + } + else + { + $stmtA = "SELECT conf_exten,extension,server_ip from vicidial_live_agents WHERE user='$PIN_number' limit 1;"; + if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;} + $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; + $sthArows=$sthA->rows; + $rec_countCUSTDATA=0; + if ($sthArows > 0) + { + @aryA = $sthA->fetchrow_array; + + $VDADconf_exten = "$aryA[0]"; + $VDADextension = "$aryA[1]"; + $VDADserver_ip = "$aryA[2]"; + } + $sthA->finish(); + + ### format the remote server dialstring to get the call to the overflow agent meetme room + $S='*'; + if( $VDADserver_ip =~ m/(\S+)\.(\S+)\.(\S+)\.(\S+)/ ) + { + $a = leading_zero($1); + $b = leading_zero($2); + $c = leading_zero($3); + $d = leading_zero($4); + $VDADremDIALstr = "$a$S$b$S$c$S$d$S"; + } + $VDADremDIALstr .= "$VDADconf_exten"; + + if ($AGILOG) {$agi_string = "Agent $PIN_number sent to $VDADremDIALstr"; &agi_output;} + + print "SET CONTEXT $ext_context\n"; + checkresult($result); + print "SET EXTENSION $VDADremDIALstr\n"; + checkresult($result); + print "SET PRIORITY 1\n"; + checkresult($result); + } } } @@ -289,176 +404,184 @@ exit; ##### BEGIN collect the user and password ###################################### sub user_password_gather -{ -################################################################################ -# please enter the pin number followed by the pound key - -$interrupt_digit=''; - -$interrupt_digit = $AGI->stream_file('ld_welcome_pin_number','0123456789'); - - print STDERR "interrupt_digit |$interrupt_digit|\n"; - -$digits_being_entered=1; -$PIN_number=''; -if ($interrupt_digit > 0) { -# if ($interrupt_digit == 35) {$interrupt_digit='#';} -# if ($interrupt_digit == 42) {$interrupt_digit='*';} - 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;} - - $PIN_number=$interrupt_digit; - } + ################################################################################ + # please enter the pin number followed by the pound key -$digit_loop_counter=0; -while ( ($digits_being_entered > 0) && ($digit_loop_counter < 20) ) - { - $digit = chr($AGI->wait_for_digit('10000')); # wait 10 seconds for input or until the pound key is pressed - if ($digit =~ /\d/) + $interrupt_digit=''; + + $interrupt_digit = $AGI->stream_file('ld_welcome_pin_number','0123456789'); + + print STDERR "interrupt_digit |$interrupt_digit|\n"; + + $digits_being_entered=1; + $PIN_number=''; + if ($interrupt_digit > 0) { - $PIN_number = "$PIN_number$digit"; - print STDERR "digit |$digit| PIN_number |$PIN_number|\n"; -# $AGI->say_digits("$digit"); - undef $digit; + # if ($interrupt_digit == 35) {$interrupt_digit='#';} + # if ($interrupt_digit == 42) {$interrupt_digit='*';} + 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;} + + $PIN_number=$interrupt_digit; } - else + + $digit_loop_counter=0; + while ( ($digits_being_entered > 0) && ($digit_loop_counter < 20) ) { - $digits_being_entered=0; + $digit = chr($AGI->wait_for_digit('10000')); # wait 10 seconds for input or until the pound key is pressed + if ($digit =~ /\d/) + { + $PIN_number = "$PIN_number$digit"; + print STDERR "digit |$digit| PIN_number |$PIN_number|\n"; + # $AGI->say_digits("$digit"); + undef $digit; + } + else + { + $digits_being_entered=0; + } + + $digit_loop_counter++; } - - $digit_loop_counter++; - } -$PIN_number =~ s/\D//gi; -if ($PIN_number) {print STDERR "digit |$digit| PIN_number |$PIN_number|\n";} + $PIN_number =~ s/\D//gi; + if ($PIN_number) {print STDERR "digit |$digit| PIN_number |$PIN_number|\n";} - -################################################################################ -# please enter your password followed by the pound key - -$interrupt_digit=''; - -$interrupt_digit = $AGI->stream_file('enter-password','0123456789'); - - print STDERR "interrupt_digit |$interrupt_digit|\n"; - -$digits_being_entered=1; -$PASS_word=''; -if ($interrupt_digit > 0) - { -# if ($interrupt_digit == 35) {$interrupt_digit='#';} -# if ($interrupt_digit == 42) {$interrupt_digit='*';} - 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;} - - $PASS_word=$interrupt_digit; - } - -$digit_loop_counter=0; -while ( ($digits_being_entered > 0) && ($digit_loop_counter < 20) ) - { - $digit = chr($AGI->wait_for_digit('10000')); # wait 10 seconds for input or until the pound key is pressed - if ($digit =~ /\d/) + if ($user_id_only !~ /Y|CONTACT/) { - $PASS_word = "$PASS_word$digit"; - print STDERR "digit |$digit| PASS_word |$PASS_word|\n"; -# $AGI->say_digits("$digit"); - undef $digit; + ################################################################################ + # please enter your password followed by the pound key + + $interrupt_digit=''; + + $interrupt_digit = $AGI->stream_file('enter-password','0123456789'); + + print STDERR "interrupt_digit |$interrupt_digit|\n"; + + $digits_being_entered=1; + $PASS_word=''; + if ($interrupt_digit > 0) + { + # if ($interrupt_digit == 35) {$interrupt_digit='#';} + # if ($interrupt_digit == 42) {$interrupt_digit='*';} + 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;} + + $PASS_word=$interrupt_digit; + } + + $digit_loop_counter=0; + while ( ($digits_being_entered > 0) && ($digit_loop_counter < 20) ) + { + $digit = chr($AGI->wait_for_digit('10000')); # wait 10 seconds for input or until the pound key is pressed + if ($digit =~ /\d/) + { + $PASS_word = "$PASS_word$digit"; + print STDERR "digit |$digit| PASS_word |$PASS_word|\n"; + # $AGI->say_digits("$digit"); + undef $digit; + } + else + { + $digits_being_entered=0; + } + + $digit_loop_counter++; + } + + $PASS_word =~ s/\D//gi; + if ($PASS_word) {print STDERR "digit |$digit| PASS_word |$PASS_word| PIN_number |$PIN_number|\n";} } - else - { - $digits_being_entered=0; - } - - $digit_loop_counter++; } - -$PASS_word =~ s/\D//gi; -if ($PASS_word) {print STDERR "digit |$digit| PASS_word |$PASS_word| PIN_number |$PIN_number|\n";} - -} ##### END collect the user and password ############################################### +##### SUBROUTINES ##### sub get_time_now #get the current date and time and epoch for logging call lengths and datetimes -{ -($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";} + { + ($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";} -$now_date_epoch = time(); -$now_date = "$year-$mon-$mday $hour:$min:$sec"; -$filedate = "$year$mon$mday$hour$min$sec"; -} + $now_date_epoch = time(); + $now_date = "$year-$mon-$mday $hour:$min:$sec"; + $filedate = "$year$mon$mday$hour$min$sec"; + } -sub checkresult { +sub checkresult + { my ($res) = @_; my $retval; $tests++; chomp $res; if ($res =~ /^200/) { $res =~ /result=(-?\d+)/; - if (!length($1)) { + if (!length($1)) + { print STDERR "FAIL ($res)\n"; $fail++; - } else { + } + else + { print STDERR "PASS ($1)\n"; $pass++; - } - } else { + } + } + else + { print STDERR "FAIL (unexpected result '$res')\n"; $fail++; + } } -} sub agi_output -{ -if ($AGILOG >=2) { - ### open the log file for writing ### - open(Lout, ">>$AGILOGfile") - || die "Can't open $AGILOGfile: $!\n"; - print Lout "$now_date|$script|$agi_string\n"; - close(Lout); + if ($AGILOG >=2) + { + ### open the log file for writing ### + open(Lout, ">>$AGILOGfile") + || die "Can't open $AGILOGfile: $!\n"; + print Lout "$now_date|$script|$agi_string\n"; + close(Lout); + } + ### send to STDERR writing ### + if ( ($AGILOG == '1') || ($AGILOG == '3') ) + {print STDERR "$now_date|$script|$agi_string\n";} + $agi_string=''; } - ### send to STDERR writing ### -if ( ($AGILOG == '1') || ($AGILOG == '3') ) - {print STDERR "$now_date|$script|$agi_string\n";} -$agi_string=''; -} sub leading_zero($) -{ - $_ = $_[0]; - s/^(\d)$/0$1/; - s/^(\d\d)$/0$1/; - return $_; -} # End of the leading_zero() routine. + { + $_ = $_[0]; + s/^(\d)$/0$1/; + s/^(\d\d)$/0$1/; + return $_; + } # End of the leading_zero() routine. diff --git a/agc_2-X/trunk/agi/cm.agi b/agc_2-X/trunk/agi/cm.agi index c3111ed1..ad8a7f94 100644 --- a/agc_2-X/trunk/agi/cm.agi +++ b/agc_2-X/trunk/agi/cm.agi @@ -15,6 +15,10 @@ #exten => 1,1,AGI(cm.agi,INBOUND-----1-----province) #exten => 1,2,... # +# ;to allow for multi-digit entries, put similar entry in the Custom Dialplan Entry: +#exten => _XXXXX,1,AGI(cm.agi,INBOUND-----${EXTEN}-----postal_code) +#exten => _XXXXX,n,Goto(next_callmenu_here,s,1) +# # Copyright (C) 2011 Matt Florell LICENSE: AGPLv2 # # changes: diff --git a/agc_2-X/trunk/agi/cm_lookup.agi b/agc_2-X/trunk/agi/cm_lookup.agi index 175368d5..3a7c636f 100644 --- a/agc_2-X/trunk/agi/cm_lookup.agi +++ b/agc_2-X/trunk/agi/cm_lookup.agi @@ -16,18 +16,26 @@ # ; 5. Update the vicidial_list record phone number with the callerID of the caller: # ; Y - update the record with the phone number # ; N - Do nothing (default) +# ; 6. Update lead's address3 field to the uniqueid of the call +# ; Y - update the record with the uniqueid +# ; N - Do nothing (default) +# ; 7. Update the lead's record with the call's agent_user_id variable +# ; Y - update the lead record's 'user' field with the agent_user_id variable +# ; COMMENTS - update the lead record's 'comments' field with the agent_user_id variable +# ; N - Do nothing (default) # # Found entries will send the call to the 'A' option in the source call menu # Not-Found entries will send the call to the 'B' option in the source call menu # #; example with 8-digit vendor lead codes -# exten => _XXXXXXXX,1,AGI(cm_lookup.agi,vendor_lead_code---CAMPLISTSALL---TESTCAMP---lastname_oneyestwono---N) +# exten => _XXXXXXXX,1,AGI(cm_lookup.agi,vendor_lead_code---CAMPLISTSALL---TESTCAMP---lastname_oneyestwono---N---N---Y) # # Copyright (C) 2011 Matt Florell LICENSE: AGPLv2 # # changes: # 111004-1450 - First Build # 111212-1507 - Added update of vicidial_list phone_number with caller callerid number option +# 120511-1508 - Added option for 'address3' uniqueid update and 'user' agent_user_id field update if AGENT-dial-in AGI is used beforoe this AGI # $script = 'cm_lookup.agi'; @@ -137,11 +145,13 @@ if (length($ARGV[0])>1) ### list of command-line array arguments: @ARGV_vars = split(/---/, $ARGV[0]); - $field = $ARGV_vars[0]; - $search_method = $ARGV_vars[1]; - $search_id = $ARGV_vars[2]; - $tts_prompt = $ARGV_vars[3]; - $phone_update = $ARGV_vars[4]; + $field = $ARGV_vars[0]; + $search_method = $ARGV_vars[1]; + $search_id = $ARGV_vars[2]; + $tts_prompt = $ARGV_vars[3]; + $phone_update = $ARGV_vars[4]; + $uniqueid_address3 = $ARGV_vars[5]; + $agent_id_update = $ARGV_vars[6]; } if ( (length($field) < 2) || ($vicidial_list_fields !~ /\|$field\|/) ) {$field = 'vendor_lead_code';} @@ -186,6 +196,8 @@ $calleridname =~ s/unknown|\'//gi; if ( (!$callerid) or ($callerid =~ /unknown/) ) {$callerid = $calleridname;} +$agent_user_id = $AGI->get_variable('agent_user_id'); +if ( ($AGILOG) && (length($agent_user_id)>0) ) {$agi_string = "user id AGI variable: |$agent_user_id|"; &agi_output;} $listSQL = ''; if ($search_method =~ /LIST$/) @@ -439,18 +451,33 @@ if ($sthArows > 0) $AGI->set_callerid($Ynewcallerid); - if ( ($phone_update =~ /Y/i) && ($confirmation > 0) ) + if ($confirmation > 0) { - if ( (length($callerid) > 6) && ($callerid !~ /unknown|private/i) ) + $phone_update_SQL=''; + $user_update_SQL=''; + $uniqueid_address3_SQL=''; + if ($phone_update =~ /Y/i) { - $stmtA = "UPDATE vicidial_list SET phone_number='$callerid' where lead_id='$lead_id';"; - $affected_rows = $dbhA->do($stmtA); - if ($AGILOG) {$agi_string = "-- CMLOOKUP vl record updated: |$affected_rows| $lead_id|$callerid|$phone_number|$first_name|$last_name"; &agi_output;} + if ( (length($callerid) > 6) && ($callerid !~ /unknown|private/i) ) + {$phone_update_SQL = "phone_number='$callerid'";} + else + { + if ($AGILOG) {$agi_string = "-- CMLOOKUP vl record failed: Invalid CIDnumber - $callerid|$phone_number"; &agi_output;} + } } - else + if ($uniqueid_address3 =~ /Y/) + {$uniqueid_address3_SQL = ",address3='$uniqueid'";} + if (length($agent_user_id) > 1) { - if ($AGILOG) {$agi_string = "-- CMLOOKUP vl record failed: Invalid CIDnumber - $callerid|$phone_number"; &agi_output;} + if ($agent_id_update =~ /COMMENT/i) + {$user_update_SQL = ",comments='$agent_user_id'";} + if ($agent_id_update =~ /Y/i) + {$user_update_SQL = ",user='$agent_user_id'";} } + + $stmtA = "UPDATE vicidial_list SET modify_date=NOW() $phone_update_SQL $user_update_SQL $uniqueid_address3_SQL where lead_id='$lead_id';"; + $affected_rows = $dbhA->do($stmtA); + if ($AGILOG) {$agi_string = "-- CMLOOKUP vl record updated: |$affected_rows| $lead_id|$callerid|$phone_number|$first_name|$last_name|$agent_user_id|$uniqueid|"; &agi_output;} } } else