From 37e37dfb94bd043fab62c8c7c28ca02d49c571ea Mon Sep 17 00:00:00 2001 From: mattf Date: Fri, 15 Sep 2006 21:43:47 +0000 Subject: [PATCH] addition of VD_auto_post_VERIFY.agi script fo Verified-by-visa auto callbacks small change to BASE_ISNTALL.txt for SVN astguiclient downloads git-svn-id: svn://192.168.202.10@287 3d104415-ff17-0410-8863-d5cf3c621b8a --- agi/VD_auto_post_VERIFY.agi | 392 ++++++++++++++++++++++++++++++++++++ docs/BASE_INSTALL.txt | 2 +- 2 files changed, 393 insertions(+), 1 deletion(-) create mode 100644 agi/VD_auto_post_VERIFY.agi diff --git a/agi/VD_auto_post_VERIFY.agi b/agi/VD_auto_post_VERIFY.agi new file mode 100644 index 00000000..85d786a7 --- /dev/null +++ b/agi/VD_auto_post_VERIFY.agi @@ -0,0 +1,392 @@ +#!/usr/bin/perl +# +# VD_auto_post_VERIFY.agi version 0.1 *DBI-version* +# +# NOTE: This script is only used with auto-message campaigns with dynamic data +# +# runs after a call is answered +# +# You need to put lines similar to those below in your extensions.conf file: +# +# ; VICIDIAL_auto_dialer transfer script AMD with Load Balanced: +#exten => 8320,1,WaitForSilence(2000,2) ; wait for 2 seconds of silence +#exten => 8320,2,AGI(VD_auto_post_VERIFY.agi,${EXTEN}) +#exten => 8320,3,Hangup +# +# +# Copyright (C) 2006 Matt Florell LICENSE: GPLv2 +# +# changes: +# 60915-1616 - first build +# + +$script = 'VD_auto_post_VERIFY.agi'; + +### files to play for message of not interested or DNC and your request has been processed +$goodbye_audio_file = 'US_reminder_goodbye'; +$mc_one_file = '85100019'; +$mc_two_file = '85100021'; +$visa_one_file = '85100018'; +$visa_two_file = '85100020'; + + +#$A = 1; # set to 1 for AMD output messages mode +$AMD_LOG = 0; # set to 1 for logfile + +($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) {$Fhour = "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"; +$start_time=$now_date; + $CIDdate = "$mon$mday$hour$min$sec"; + $tsSQLdate = "$year$mon$mday$hour$min$sec"; + $SQLdate = "$year-$mon-$mday $hour:$min:$sec"; + $SQLdateBEGIN = $SQLdate; + +# 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++; + } + +if (!$VARDB_port) {$VARDB_port='3306';} +if (!$AGILOGfile) {$AGILOGfile = "$PATHlogs/agiout.$year-$mon-$mday";} + +use DBI; +use Asterisk::AGI; +$AGI = new Asterisk::AGI; + +$dbhA = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VARDB_user", "$VARDB_pass") + or die "Couldn't connect to database: " . DBI->errstr; + +### Grab Server values from the database +$stmtA = "SELECT agi_output FROM servers where server_ip = '$VARserver_ip';"; +$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; +$sthA->execute or die "executing: $stmtA ", $dbhA->errstr; +$sthArows=$sthA->rows; +$rec_count=0; +while ($sthArows > $rec_count) + { + $AGILOG = '0'; + @aryA = $sthA->fetchrow_array; + $DBagi_output = "$aryA[0]"; + if ($DBagi_output =~ /STDERR/) {$AGILOG = '1';} + if ($DBagi_output =~ /FILE/) {$AGILOG = '2';} + if ($DBagi_output =~ /BOTH/) {$AGILOG = '3';} + $rec_count++; + } +$sthA->finish(); + +### 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++; + } + + if ($args =~ /--help/i) + { + print "allowed run time options:\n [-q] = quiet\n [-t] = test\n [-debug] = verbose debug messages\n\n"; + } + else + { + if ($args =~ /-V/i) + { + $V=1; + } + if ($args =~ /-debug/i) + { + $DG=1; + } + if ($args =~ /-dbAVS/i) + { + $DGA=1; + } + if ($args =~ /-q/i) + { + $q=1; + $Q=1; + } + if ($args =~ /-t/i) + { + $TEST=1; + $T=1; + } + } +} + +$|=1; +while() +{ + chomp; + last unless length($_); + if ($AGILOG) + { + if (/^agi_(\w+)\:\s+(.*)$/) + { + $AGI{$1} = $2; + } + } + + if (/^agi_uniqueid\:\s+(.*)$/) {$unique_id = $1; $uniqueid = $unique_id;} + if (/^agi_priority\:\s+(.*)$/) {$priority = $1;} + if (/^agi_channel\:\s+(.*)$/) {$channel = $1;} + if (/^agi_extension\:\s+(.*)$/) {$extension = $1;} + if (/^agi_type\:\s+(.*)$/) {$type = $1;} + if (/^agi_callerid\:\s+(.*)$/) {$callerid = $1;} + if (/^agi_calleridname\:\s+(.*)$/) {$calleridname = $1;} +} + +if ( (length($callerid)>20) && ($callerid =~ /\"\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S/) ) + { + $callerid =~ s/^\"//gi; + $callerid =~ s/\".*$//gi; +# ### set the callerid to the ACQS value(calleridname) +# print "SET CALLERID $callerid\n"; +# checkresult($result); +# print STDERR "callerID changed: $callerid\n"; + + } +if ( ( +(length($calleridname)>5) && ( (!$callerid) or ($callerid =~ /unknown|private|00000000/i) or ($callerid =~ /5551212/) ) +) or ( (length($calleridname)>17) && ($calleridname =~ /\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d/) ) ) + { + $callerid = $calleridname; +# ### set the callerid to the ACQS value(calleridname) +# print "SET CALLERID $callerid\n"; +# checkresult($result); +# print STDERR "callerID changed: $callerid\n"; + } + + +if ($AGILOG) {$agi_string = "AGI Environment Dump:"; &agi_output;} + +foreach $i (sort keys %AGI) +{ + if ($AGILOG) {$agi_string = " -- $i = $AGI{$i}"; &agi_output;} +} + +if ($AGILOG) {$agi_string = "AGI Variables: |$unique_id|$channel|$extension|$type|$callerid|$calleridname|$priority|"; &agi_output;} + +$VDADcampaign=''; +$VDADphone=''; +$VDADphone_code=''; + + +$callerid =~ s/\"//gi; +$CIDlead_id = $callerid; +$CIDlead_id = substr($CIDlead_id, 11, 9); +$CIDlead_id = ($CIDlead_id + 0); +$VD_lead_id = $CIDlead_id; + +if ($AGILOG) {$agi_string = "+++++ VD amd START: |$CIDlead_id|$now_date|$AST_ver|"; &agi_output;} + +if ( ($channel =~ /Local/i) && ($AST_ver !~ /^1\.0\.8|^1\.0\.9/) ) +{ +if ($AGILOG) {$agi_string = "+++++ VDAD START LOCAL CHANNEL: EXITING- $priority"; &agi_output;} +if ($priority > 2) {sleep(1);} +exit; +} + + +# Thank you for your recent purchase of ACME Sprockets, we have +# confirmed your enrollment in the + +# [Verified by Visa| MasterCard SecureCode] + +# program. Please go to www.iconfirm.net and enter your name and +# verification code + +# [verification code] + +# within the next (x amount of hours) to +# complete + +# [Verified by Visa|MasterCard SecureCode] + +# authentication. Your +# participation is optional and does not effect the processing of your +# purchase. Thank you." + + +$AGI->stream_file('beep'); + +$stmtA = "UPDATE vicidial_log set status='PU' where lead_id='$VD_lead_id' order by call_date desc limit 1;"; + if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;} +$affected_rows = $dbhA->do($stmtA); +if ($AGILOG) {$agi_string = "-- VDAD vicidial_log PU update: |$affected_rows|$uniqueid|"; &agi_output;} + +$stmtA = "UPDATE vicidial_list set status='PU' where lead_id='$VD_lead_id';"; + if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;} +$affected_rows = $dbhA->do($stmtA); +if ($AGILOG) {$agi_string = "-- VDAD vicidial_list PU update: |$affected_rows|$uniqueid|"; &agi_output;} + +### Check to see if the number is in the system ### +$stmtA= "SELECT security_phrase,comments from vicidial_list where lead_id='$VD_lead_id';"; +$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; + $security_phrase = "$aryA[0]"; + $comments = "$aryA[1]"; + $sthA->finish(); + } +else + { + $AGI->stream_file("$goodbye_audio_file"); + } + +### first read of the message +if ($comments =~ /Master/i) + { + $message_one = $mc_one_file; + $message_two = $mc_two_file; + } +else + { + $message_one = $visa_one_file; + $message_two = $visa_two_file; + } + +if ($AGILOG) {$agi_string = "Verify message playing: |$VD_lead_id|$security_phrase|$comments|$message_one|$message_two|"; &agi_output;} + +$AGI->stream_file("$message_one"); + + sleep(1); + +$AGI->stream_file("letters/v"); +$AGI->say_digits("$security_phrase"); + + sleep(1); + + +$AGI->stream_file("$message_two"); + + + + + +$stmtA = "UPDATE vicidial_log set status='AL' where lead_id='$VD_lead_id' order by call_date desc limit 1;"; + if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;} +$affected_rows = $dbhA->do($stmtA); +if ($AGILOG) {$agi_string = "-- VDAD vicidial_log AM update: |$affected_rows|$uniqueid|"; &agi_output;} + +$stmtA = "UPDATE vicidial_list set status='AL' where lead_id='$VD_lead_id';"; + if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;} +$affected_rows = $dbhA->do($stmtA); +if ($AGILOG) {$agi_string = "-- VDAD vicidial_list AM update: |$affected_rows|$uniqueid|"; &agi_output;} + +$dbhA->disconnect(); + + + + +### second read of the message + +$AGI->stream_file("$message_one"); + + sleep(1); + +$AGI->stream_file("letters/v"); +$AGI->say_digits("$security_phrase"); + + sleep(1); + + +$AGI->stream_file("$message_two"); + + + $AGI->stream_file("$goodbye_audio_file"); + + + + + + + + +exit; + +sub checkresult { + my ($res) = @_; + my $retval; + $tests++; + chomp $res; + if ($res =~ /^200/) { + $res =~ /result=(-?\d+)/; + if (!length($1)) { + # print STDERR "FAIL ($res)\n"; + $fail++; + } else { + # print STDERR "PASS ($1)\n"; + $pass++; + } + } 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); + } + ### send to STDERR writing ### +if ( ($AGILOG == '1') || ($AGILOG == '3') ) + {print STDERR "$now_date|$script|$agi_string\n";} +$agi_string=''; +} diff --git a/docs/BASE_INSTALL.txt b/docs/BASE_INSTALL.txt index 400129b1..8c37b42b 100644 --- a/docs/BASE_INSTALL.txt +++ b/docs/BASE_INSTALL.txt @@ -185,7 +185,7 @@ package(as of this writing it is 2.0.1) - for SVN 2.0 trunk: - mkdir /usr/src/astguiclient - cd /usr/src/astguiclient - - svn checkout svn://205.201.151.21:43690/agc_2-X + - svn checkout svn://205.201.151.21:43690/agc_2-X/trunk - cd trunk - perl install.pl - there is one more file you need that's not included with the download