LICENSE: GPLv2 ### ### make sure you have added a user to the vicidial_users MySQL table with at least ### user_level 1 or greater to access this page. Also, you need to have the login ### and pass of a phone listed in the asterisk.phones table. The page grabs the ### server info and other details from this login and pass. ### ### This script works best with Firefox or Mozilla, but will run for a couple ### hours on Internet Explorer before the memory leaks cause a crash. ### ### Other scripts that this application depends on: ### - vdc_db_query.php: Updates information in the database ### - manager_send.php: Sends manager actions to the DB for execution ### ### CHANGES ### 50607-1426 - First Build of VICIDIAL web client basic login process finished ### 50628-1620 - Added some basic formatting and worked on process flow ### 50628-1715 - Startup variables mapped to javascript variables ### 50629-1303 - Added Login Closer in-groups selection box and vla update ### 50629-1530 - Rough layout for customer info form section and button links ### 50630-1453 - Rough Manual Dial/Hangup with customer info displayed ### 50701-1450 - Added vicidial_log entries on dial and hangup ### 50701-1634 - Added Logout function ### 50705-1259 - Added call disposition functionality ### 50705-1432 - Added lead info DB update function ### 50705-1658 - Added web form functionality ### 50706-1043 - Added call park and pickup functions ### 50706-1234 - Added Start/Stop Recording functionality ### 50706-1614 - Added conference channels display option ### 50711-1333 - Removed call check redundancy and fixed a span bug ### 50727-1424 - Added customer channel and participant present sensing/alerts ### 50804-1057 - Added SendDTMF function and reconfigured the transfer span ### 50804-1224 - Added Local and Internal Closer transfer functions ### 50804-1628 - Added Blind transfer, activated LIVE CALL image and fixed bugs ### 50804-1808 - Added button images for left buttons ### 50815-1151 - Added 3Way calling functions to Transfer-conf frame ### 50815-1602 - Added images and buttons for xfer functions ### 50816-1813 - Added basic autodial outbound call pickup functions ### 50817-1113 - Fixes to auto_dialing call receipt ### 50817-1234 - Added inbound call receipt capability ### 50817-1541 - Added customer time display ### 50817-1541 - Added customer time display ### 50818-1327 - Added stop-all-recordings-after-each-vicidial-call option ### 50818-1703 - Added pretty login section ### 50825-1200 - Modified form field lengths, added double-click dispositions ### 50831-1603 - Fixed customer time bug and fronter display bug for CLOSER ### 50901-1314 - Fixed CLOSER IN-GROUP Web Form bug ### 50903-0904 - Added preview-lead code for manual dialing ### 50904-0016 - Added ability to hangup manual dials before pickup ### 50906-1319 - Added override for filters on xfer calls, fixed login display bug ### 50909-1243 - Added hotkeys functionality for quick dispoing in auto-dial mode ### 50912-0958 - Modified hotkeys function, agent must have user_level >= 5 to use ### 50913-1212 - Added campaign_cid to 3rd party calls ### 50923-1546 - Modified to work with language translation ### 50926-1656 - Added campaign pull-down at login of active campaigns ### 50928-1633 - Added manual dial alternate number dial option ### 50930-1538 - Added session_id empty login failure and fixed 2 minor bugs ### 51004-1656 - Fixed recording filename bug and new Spanish translation ### 51020-1103 - Added campaign-specific recording control abilities ### 51020-1352 - Added Basic vicidial_agent_log framework ### 51021-1050 - Fixed custtime display and disable Enter/Return keypresses ### 51021-1718 - Allows for multi-line comments (changes \n to !N in database) ### 51110-1432 - Fixed non-standard http port issue ### 51111-1047 - Added vicidial_agent_log lead_id earlier for manual dial ### 51118-1305 - Activate multi-line comments from $multi_line_comments var ### 51118-1313 - Move Transfer DIV to a floating span to preserve 800x600 view ### 51121-1506 - Small PHP optimizations in many scripts and disabled globalize ### 51129-1010 - Added ability to accept calls from other VICIDIAL servers ### 51129-1254 - Fixed Hangups of other agents channels when customer hangs up ### 51208-1732 - Created user-first login that looks for default phone info ### 51219-1526 - Added variable framework for campaign and in-group scripts ### 51221-1200 - Added SCRIPT tab, layout and functionality ### 51221-1714 - Added auto-switch-to-SCRIPT-tab and auto-webform-popup ### 51222-1605 - Added VMail message blind transfer button to xfer-conf frame ### 51229-1028 - Added checks on web_form_address to allow for var in the DB value ### 60117-1312 - Added Transfer-conf frame toggle on button press ### 60208-1152 - Added DTMF-xfernumber preset links to xfer-conf frame ### 60213-1129 - Added vicidial_users.hotkeys_active for any user hotkeys ### 60213-1210 - Added ability to sort routing of calls by user_level ### 60214-0932 - Initial Callback calendar display framework ### 60214-1407 - Added ability to minimize the dispo screen to see info below ### 60215-1104 - Added ANYONE scheduled callbacks functionality ### require("dbconnect.php"); $DB=$_GET['DB']; if (!$DB) {$DB=$_POST["DB"];} $phone_login=$_GET['phone_login']; if (!$phone_login) {$phone_login=$_POST["phone_login"];} if (!$phone_login) {$phone_login=$_GET["pl"];} $phone_pass=$_GET['phone_pass']; if (!$phone_pass) {$phone_pass=$_POST["phone_pass"];} if (!$phone_pass) {$phone_pass=$_GET["pp"];} $VD_login=$_GET['VD_login']; if (!$VD_login) {$VD_login=$_POST["VD_login"];} $VD_pass=$_GET['VD_pass']; if (!$VD_pass) {$VD_pass=$_POST["VD_pass"];} $VD_campaign=$_GET['VD_campaign']; if (!$VD_campaign) {$VD_campaign=$_POST["VD_campaign"];} $VD_campaign = strtoupper($VD_campaign); $VD_campaign = eregi_replace(" ",'',$VD_campaign); $relogin=$_GET['relogin']; if (!$relogin) {$relogin=$_POST["relogin"];} $forever_stop=0; $version = '1.1.66'; $build = '60215-1104'; if ($force_logout) { echo "You have now logged out. Thank you\n"; exit; } $StarTtimE = date("U"); $NOW_TIME = date("Y-m-d H:i:s"); $tsNOW_TIME = date("YmdHis"); $FILE_TIME = date("Ymd-His"); $CIDdate = date("ymdHis"); $month_old = mktime(0, 0, 0, date("m"), date("d")-2, date("Y")); $past_month_date = date("Y-m-d H:i:s",$month_old); $random = (rand(1000000, 9999999) + 10000000); $conf_silent_prefix = '7'; # vicidial_conferences prefix to enter silently $manual_dial_preview = '1'; # Allow preview lead option when manual dial $HKuser_level = '5'; # minimum vicidial user_level for HotKeys $campaign_login_list = '1'; # show drop-down list of campaigns at login $manual_dial_alt_phone = '1'; # allow manual dial users to call alt phone number $multi_line_comments = '1'; # set to 1 to allow multi-line comment box $user_login_first = '0'; # set to 1 to have the vicidial_user login before the phone login $view_scripts = '1'; # set to 1 to show the SCRIPTS tab $scheduled_callbacks = '1'; # set to 1 to allow agent to choose scheduled callbacks $TEST_all_statuses = '0'; # TEST variable allows all statuses in dispo screen $US='_'; $CL=':'; $AT='@'; $date = date("r"); $ip = getenv("REMOTE_ADDR"); $browser = getenv("HTTP_USER_AGENT"); $script_name = getenv("SCRIPT_NAME"); $server_name = getenv("SERVER_NAME"); $server_port = getenv("SERVER_PORT"); if (eregi("443",$server_port)) {$HTTPprotocol = 'https://';} else {$HTTPprotocol = 'http://';} if (($server_port == '80') or ($server_port == '443') ) {$server_port='';} else {$server_port = "$CL$server_port";} $agcPAGE = "$HTTPprotocol$server_name$server_port$script_name"; $agcDIR = eregi_replace('vicidial.php','',$agcPAGE); header ("Content-type: text/html; charset=utf-8"); header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header ("Pragma: no-cache"); // HTTP/1.0 echo "\n"; echo "\n"; echo "\n"; if ($campaign_login_list > 0) { $camp_form_code = "\n"; } else { $camp_form_code = "\n"; } if ($relogin == 'YES') { echo "VICIDIAL web client: Re-Login\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo "
\n"; echo "\n"; echo "


"; echo ""; echo ""; echo "\n"; echo "\n"; echo ""; echo "\n"; echo ""; echo "\n"; echo ""; echo "\n"; echo ""; echo "\n"; echo ""; echo "\n"; echo "\n"; echo "\n"; echo "
Re-Login
 
Phone Login:
Phone Password:
User Login:
User Password:
Campaign: $camp_form_code

VERSION: $version       BUILD: $build
\n"; echo "\n\n"; echo "\n\n"; echo "\n\n"; exit; } if ($user_login_first == 1) { if ( (strlen($VD_login)<1) or (strlen($VD_pass)<1) or (strlen($VD_campaign)<1) ) { echo "VICIDIAL web client: Campaign Login\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo "
\n"; echo "\n"; #echo "\n"; #echo "\n"; echo "

User Login

"; echo ""; echo ""; echo ""; echo "\n"; echo "\n"; echo ""; echo "\n"; echo ""; echo "\n"; echo ""; echo "\n"; echo "\n"; echo "\n"; echo "
Campaign Login
 
User Login:
User Password:
Campaign: $camp_form_code

VERSION: $version       BUILD: $build
\n"; echo "\n\n"; echo "\n\n"; echo "\n\n"; exit; } else { if ( (strlen($phone_login)<2) or (strlen($phone_pass)<2) ) { $stmt="SELECT phone_login,phone_pass from vicidial_users where user='$VD_login' and pass='$VD_pass' and user_level > 0;"; if ($DB) {echo "|$stmt|\n";} $rslt=mysql_query($stmt, $link); $row=mysql_fetch_row($rslt); $phone_login=$row[0]; $phone_pass=$row[1]; echo "VICIDIAL web client: Login\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo "
\n"; echo "\n"; echo "


"; echo ""; echo ""; echo "\n"; echo "\n"; echo ""; echo "\n"; echo ""; echo "\n"; echo ""; echo "\n"; echo ""; echo "\n"; echo ""; echo "\n"; echo "\n"; echo "\n"; echo "
Login
 
Phone Login:
Phone Password:
User Login:
User Password:
Campaign: $camp_form_code

VERSION: $version       BUILD: $build
\n"; echo "\n\n"; echo "\n\n"; echo "\n\n"; exit; } } } if ( (strlen($phone_login)<2) or (strlen($phone_pass)<2) ) { echo "VICIDIAL web client: Phone Login\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo "
\n"; echo "\n"; echo "


"; echo ""; echo ""; echo "\n"; echo "\n"; echo ""; echo "\n"; echo ""; echo "\n"; echo "\n"; echo "\n"; echo "
Phone Login
 
Phone Login:
Phone Password:

VERSION: $version       BUILD: $build
\n"; echo "\n\n"; echo "\n\n"; echo "\n\n"; exit; } else { $fp = fopen ("./vicidial_auth_entries.txt", "a"); $VDloginDISPLAY=0; if ( (strlen($VD_login)<2) or (strlen($VD_pass)<2) or (strlen($VD_campaign)<2) ) { $VDloginDISPLAY=1; } else { $stmt="SELECT count(*) from vicidial_users where user='$VD_login' and pass='$VD_pass' and user_level > 0;"; if ($DB) {echo "|$stmt|\n";} $rslt=mysql_query($stmt, $link); $row=mysql_fetch_row($rslt); $auth=$row[0]; if($auth>0) { $login=strtoupper($VD_login); $password=strtoupper($VD_pass); ##### grab the full name of the agent $stmt="SELECT full_name,user_level,hotkeys_active,agent_choose_ingroups from vicidial_users where user='$VD_login' and pass='$VD_pass'"; $rslt=mysql_query($stmt, $link); $row=mysql_fetch_row($rslt); $LOGfullname=$row[0]; $user_level=$row[1]; $VU_hotkeys_active=$row[2]; $VU_agent_choose_ingroups=$row[3]; fwrite ($fp, "vdweb|GOOD|$date|$VD_login|$VD_pass|$ip|$browser|$LOGfullname|\n"); fclose($fp); $user_abb = "$VD_login$VD_login$VD_login$VD_login"; while ( (strlen($user_abb) > 4) and ($forever_stop < 200) ) {$user_abb = eregi_replace("^.","",$user_abb); $forever_stop++;} ##### check to see that the campaign is active $stmt="SELECT count(*) FROM vicidial_campaigns where campaign_id='$VD_campaign' and active='Y';"; if ($DB) {echo "|$stmt|\n";} $rslt=mysql_query($stmt, $link); $row=mysql_fetch_row($rslt); $CAMPactive=$row[0]; if($CAMPactive>0) { if ($TEST_all_statuses > 0) {$selectableSQL = '';} else {$selectableSQL = "selectable='Y' and";} $VARstatuses=''; $VARstatusnames=''; ##### grab the statuses that can be used for dispositioning by an agent $stmt="SELECT status,status_name FROM vicidial_statuses WHERE $selectableSQL status != 'NEW' order by status limit 50;"; $rslt=mysql_query($stmt, $link); if ($DB) {echo "$stmt\n";} $VD_statuses_ct = mysql_num_rows($rslt); $i=0; while ($i < $VD_statuses_ct) { $row=mysql_fetch_row($rslt); $statuses[$i] =$row[0]; $status_names[$i] =$row[1]; $VARstatuses = "$VARstatuses'$statuses[$i]',"; $VARstatusnames = "$VARstatusnames'$status_names[$i]',"; $i++; } ##### grab the campaign-specific statuses that can be used for dispositioning by an agent $stmt="SELECT status,status_name FROM vicidial_campaign_statuses WHERE $selectableSQL status != 'NEW' and campaign_id='$VD_campaign' order by status limit 50;"; $rslt=mysql_query($stmt, $link); if ($DB) {echo "$stmt\n";} $VD_statuses_camp = mysql_num_rows($rslt); $j=0; while ($j < $VD_statuses_camp) { $row=mysql_fetch_row($rslt); $statuses[$i] =$row[0]; $status_names[$i] =$row[1]; $VARstatuses = "$VARstatuses'$statuses[$i]',"; $VARstatusnames = "$VARstatusnames'$status_names[$i]',"; $i++; $j++; } $VD_statuses_ct = ($VD_statuses_ct+$VD_statuses_camp); $VARstatuses = substr("$VARstatuses", 0, -1); $VARstatusnames = substr("$VARstatusnames", 0, -1); ##### grab the campaign-specific HotKey statuses that can be used for dispositioning by an agent $stmt="SELECT hotkey,status,status_name FROM vicidial_campaign_hotkeys WHERE selectable='Y' and status != 'NEW' and campaign_id='$VD_campaign' order by hotkey limit 9;"; $rslt=mysql_query($stmt, $link); if ($DB) {echo "$stmt\n";} $HK_statuses_camp = mysql_num_rows($rslt); $w=0; $HKboxA=''; $HKboxB=''; $HKboxC=''; while ($w < $HK_statuses_camp) { $row=mysql_fetch_row($rslt); $HKhotkey[$w] =$row[0]; $HKstatus[$w] =$row[1]; $HKstatus_name[$w] =$row[2]; $HKhotkeys = "$HKhotkeys'$HKhotkey[$w]',"; $HKstatuses = "$HKstatuses'$HKstatus[$w]',"; $HKstatusnames = "$HKstatusnames'$HKstatus_name[$w]',"; if ($w < 3) {$HKboxA = "$HKboxA $HKhotkey[$w] - $HKstatus[$w] - $HKstatus_name[$w]
";} if ( ($w >= 3) and ($w < 6) ) {$HKboxB = "$HKboxB $HKhotkey[$w] - $HKstatus[$w] - $HKstatus_name[$w]
";} if ($w >= 6) {$HKboxC = "$HKboxC $HKhotkey[$w] - $HKstatus[$w] - $HKstatus_name[$w]
";} $w++; } $HKhotkeys = substr("$HKhotkeys", 0, -1); $HKstatuses = substr("$HKstatuses", 0, -1); $HKstatusnames = substr("$HKstatusnames", 0, -1); ##### grab the inbound groups to choose from if campaign contains CLOSER $VARingroups="''"; if (eregi("CLOSER", $VD_campaign)) { $VARingroups=''; $stmt="select group_id from vicidial_inbound_groups where active = 'Y' order by group_id limit 20;"; $rslt=mysql_query($stmt, $link); if ($DB) {echo "$stmt\n";} $closer_ct = mysql_num_rows($rslt); $INgrpCT=0; while ($INgrpCT < $closer_ct) { $row=mysql_fetch_row($rslt); $closer_groups[$INgrpCT] =$row[0]; $VARingroups = "$VARingroups'$closer_groups[$INgrpCT]',"; $INgrpCT++; } $VARingroups = substr("$VARingroups", 0, -1); } ##### grab the statuses to be dialed for your campaign as well as other campaign settings $stmt="SELECT dial_status_a,dial_status_b,dial_status_c,dial_status_d,dial_status_e,park_ext,park_file_name,web_form_address,allow_closers,auto_dial_level,dial_timeout,dial_prefix,campaign_cid,campaign_vdad_exten,campaign_rec_exten,campaign_recording,campaign_rec_filename,campaign_script,get_call_launch,am_message_exten,xferconf_a_dtmf,xferconf_a_number,xferconf_b_dtmf,xferconf_b_number FROM vicidial_campaigns where campaign_id = '$VD_campaign';"; $rslt=mysql_query($stmt, $link); if ($DB) {echo "$stmt\n";} $row=mysql_fetch_row($rslt); $status_A = $row[0]; $status_B = $row[1]; $status_C = $row[2]; $status_D = $row[3]; $status_E = $row[4]; $park_ext = $row[5]; $park_file_name = $row[6]; $web_form_address = $row[7]; $allow_closers = $row[8]; $auto_dial_level = $row[9]; $dial_timeout = $row[10]; $dial_prefix = $row[11]; $campaign_cid = $row[12]; $campaign_vdad_exten = $row[13]; $campaign_rec_exten = $row[14]; $campaign_recording = $row[15]; $campaign_rec_filename = $row[16]; $campaign_script = $row[17]; $get_call_launch = $row[18]; $campaign_am_message_exten = $row[19]; $xferconf_a_dtmf = $row[20]; $xferconf_a_number = $row[21]; $xferconf_b_dtmf = $row[22]; $xferconf_b_number = $row[23]; ##### grab the number of leads in the hopper for this campaign $stmt="SELECT count(*) FROM vicidial_hopper where campaign_id = '$VD_campaign' and status='READY';"; $rslt=mysql_query($stmt, $link); if ($DB) {echo "$stmt\n";} $row=mysql_fetch_row($rslt); $campaign_leads_to_call = $row[0]; print "\n"; } else { $VDloginDISPLAY=1; $VDdisplayMESSAGE = "Campaign not active, please try again
"; } } else { fwrite ($fp, "vdweb|FAIL|$date|$VD_login|$VD_pass|$ip|$browser|\n"); fclose($fp); $VDloginDISPLAY=1; $VDdisplayMESSAGE = "Login incorrect, please try again
"; } } if ($VDloginDISPLAY) { echo "VICIDIAL web client: Campaign Login\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo "
\n"; echo "\n"; echo "\n"; echo "\n"; echo "

$VDdisplayMESSAGE

"; echo ""; echo ""; echo ""; echo "\n"; echo "\n"; echo ""; echo "\n"; echo ""; echo "\n"; echo ""; echo "\n"; echo "\n"; echo "\n"; echo "
Campaign Login
 
User Login:
User Password:
Campaign: $camp_form_code

VERSION: $version       BUILD: $build
\n"; echo "\n\n"; echo "\n\n"; echo "\n\n"; exit; } $authphone=0; $stmt="SELECT count(*) from phones where login='$phone_login' and pass='$phone_pass' and active = 'Y';"; if ($DB) {echo "|$stmt|\n";} $rslt=mysql_query($stmt, $link); $row=mysql_fetch_row($rslt); $authphone=$row[0]; if (!$authphone) { echo "VICIDIAL web client: Phone Login Error\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo "
\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "


"; echo ""; echo ""; echo "\n"; echo "\n"; echo ""; echo "\n"; echo ""; echo "\n"; echo "\n"; echo "\n"; echo "
Login Error
 
Sorry, your phone login and password are not active in this system, please try again:
 
Phone Login:
Phone Password:

VERSION: $version       BUILD: $build
\n"; echo "\n\n"; echo "\n\n"; echo "\n\n"; exit; } else { echo "VICIDIAL web client\n"; $stmt="SELECT * from phones where login='$phone_login' and pass='$phone_pass' and active = 'Y';"; if ($DB) {echo "|$stmt|\n";} $rslt=mysql_query($stmt, $link); $row=mysql_fetch_row($rslt); $extension=$row[0]; $dialplan_number=$row[1]; $voicemail_id=$row[2]; $phone_ip=$row[3]; $computer_ip=$row[4]; $server_ip=$row[5]; $login=$row[6]; $pass=$row[7]; $status=$row[8]; $active=$row[9]; $phone_type=$row[10]; $fullname=$row[11]; $company=$row[12]; $picture=$row[13]; $messages=$row[14]; $old_messages=$row[15]; $protocol=$row[16]; $local_gmt=$row[17]; $ASTmgrUSERNAME=$row[18]; $ASTmgrSECRET=$row[19]; $login_user=$row[20]; $login_pass=$row[21]; $login_campaign=$row[22]; $park_on_extension=$row[23]; $conf_on_extension=$row[24]; $VICIDiaL_park_on_extension=$row[25]; $VICIDiaL_park_on_filename=$row[26]; $monitor_prefix=$row[27]; $recording_exten=$row[28]; $voicemail_exten=$row[29]; $voicemail_dump_exten=$row[30]; $ext_context=$row[31]; $dtmf_send_extension=$row[32]; $call_out_number_group=$row[33]; $client_browser=$row[34]; $install_directory=$row[35]; $local_web_callerID_URL=$row[36]; $VICIDiaL_web_URL=$row[37]; $AGI_call_logging_enabled=$row[38]; $user_switching_enabled=$row[39]; $conferencing_enabled=$row[40]; $admin_hangup_enabled=$row[41]; $admin_hijack_enabled=$row[42]; $admin_monitor_enabled=$row[43]; $call_parking_enabled=$row[44]; $updater_check_enabled=$row[45]; $AFLogging_enabled=$row[46]; $QUEUE_ACTION_enabled=$row[47]; $CallerID_popup_enabled=$row[48]; $voicemail_button_enabled=$row[49]; $enable_fast_refresh=$row[50]; $fast_refresh_rate=$row[51]; $enable_persistant_mysql=$row[52]; $auto_dial_next_number=$row[53]; $VDstop_rec_after_each_call=$row[54]; $DBX_server=$row[55]; $DBX_database=$row[56]; $DBX_user=$row[57]; $DBX_pass=$row[58]; $DBX_port=$row[59]; if ($protocol == 'EXTERNAL') { $protocol = 'Local'; $extension = "$dialplan_number$AT$ext_context"; } $SIP_user = "$protocol/$extension"; $stmt="SELECT asterisk_version from servers where server_ip='$server_ip';"; if ($DB) {echo "|$stmt|\n";} $rslt=mysql_query($stmt, $link); $row=mysql_fetch_row($rslt); $asterisk_version=$row[0]; # If a park extension is not set, use the default one if ( (strlen($park_ext)>0) && (strlen($park_file_name)>0) ) { $VICIDiaL_park_on_extension = "$park_ext"; $VICIDiaL_park_on_filename = "$park_file_name"; print "\n"; } print "\n"; # If a web form address is not set, use the default one if (strlen($web_form_address)>0) { $VICIDiaL_web_form_address = "$web_form_address"; print "\n"; } else { $VICIDiaL_web_form_address = "$VICIDiaL_web_URL"; print "\n"; $VICIDiaL_web_form_address_enc = rawurlencode($VICIDiaL_web_form_address); } $VICIDiaL_web_form_address_enc = rawurlencode($VICIDiaL_web_form_address); # If closers are allowed on this campaign if ($allow_closers=="Y") { $VICIDiaL_allow_closers = 1; print "\n"; } else { $VICIDiaL_allow_closers = 0; print "\n"; } $session_ext = eregi_replace("[^a-z0-9]", "", $extension); if (strlen($session_ext) > 10) {$session_ext = substr($session_ext, 0, 10);} $session_rand = (rand(1,9999999) + 10000000); $session_name = "$StarTtimE$US$session_ext$session_rand"; $stmt="DELETE from web_client_sessions where start_time < '$past_month_date' and extension='$extension' and server_ip = '$server_ip' and program = 'vicidial';"; if ($DB) {echo "|$stmt|\n";} $rslt=mysql_query($stmt, $link); $stmt="INSERT INTO web_client_sessions values('$extension','$server_ip','vicidial','$NOW_TIME','$session_name');"; if ($DB) {echo "|$stmt|\n";} $rslt=mysql_query($stmt, $link); if ( (eregi("CLOSER", $VD_campaign)) || ($campaign_leads_to_call > 0) ) { ### insert an entry into the user log for the login event $stmt = "INSERT INTO vicidial_user_log values('','$VD_login','LOGIN','$VD_campaign','$NOW_TIME','$StarTtimE')"; if ($DB) {echo "|$stmt|\n";} $rslt=mysql_query($stmt, $link); ##### check to see if the user has a conf extension already, this happens if they previously exited uncleanly $stmt="SELECT conf_exten FROM vicidial_conferences where extension='$SIP_user' and server_ip = '$server_ip' LIMIT 1;"; $rslt=mysql_query($stmt, $link); if ($DB) {echo "$stmt\n";} $prev_login_ct = mysql_num_rows($rslt); $i=0; while ($i < $prev_login_ct) { $row=mysql_fetch_row($rslt); $session_id =$row[0]; $i++; } if ($prev_login_ct > 0) {print "\n";} else { ##### grab the next available vicidial_conference room and reserve it $stmt="SELECT conf_exten FROM vicidial_conferences where server_ip = '$server_ip' and ((extension='') or (extension is null)) LIMIT 1;"; $rslt=mysql_query($stmt, $link); if ($DB) {echo "$stmt\n";} $free_conf_ct = mysql_num_rows($rslt); $i=0; while ($i < $free_conf_ct) { $row=mysql_fetch_row($rslt); $session_id =$row[0]; $i++; } $stmt="UPDATE vicidial_conferences set extension='$SIP_user' where server_ip='$server_ip' and conf_exten='$session_id';"; $rslt=mysql_query($stmt, $link); print "\n"; } $stmt="UPDATE vicidial_list set status='N', user='' where status IN('QUEUE','INCALL') and user ='$VD_login';"; if ($DB) {echo "$stmt\n";} $rslt=mysql_query($stmt, $link); $affected_rows = mysql_affected_rows($link); print "\n"; $stmt="DELETE from vicidial_hopper where status IN('QUEUE','INCALL','DONE') and user ='$VD_login';"; if ($DB) {echo "$stmt\n";} $rslt=mysql_query($stmt, $link); $affected_rows = mysql_affected_rows($link); print "\n"; $stmt="DELETE from vicidial_live_agents where user ='$VD_login';"; if ($DB) {echo "$stmt\n";} $rslt=mysql_query($stmt, $link); $affected_rows = mysql_affected_rows($link); print "\n"; # print "You have logged in as user: $VD_login on phone: $SIP_user to campaign: $VD_campaign
\n"; $VICIDiaL_is_logged_in=1; ### use manager middleware-app to connect the phone to the user $SIqueryCID = "S$CIDdate$session_id"; ### insert a NEW record to the vicidial_manager table to be processed $stmt="INSERT INTO vicidial_manager values('','','$NOW_TIME','NEW','N','$server_ip','','Originate','$SIqueryCID','Channel: $SIP_user','Context: $ext_context','Exten: $session_id','Priority: 1','Callerid: $SIqueryCID','','','','','');"; if ($DB) {echo "$stmt\n";} $rslt=mysql_query($stmt, $link); $affected_rows = mysql_affected_rows($link); print "\n"; if ($auto_dial_level > 0) { print "\n"; $closer_chooser_string=''; $stmt="INSERT INTO vicidial_live_agents (user,server_ip,conf_exten,extension,status,lead_id,campaign_id,uniqueid,callerid,channel,random_id,last_call_time,last_update_time,last_call_finish,closer_campaigns,user_level) values('$VD_login','$server_ip','$session_id','$SIP_user','PAUSED','','$VD_campaign','','','','$random','$NOW_TIME','$tsNOW_TIME','$NOW_TIME','$closer_chooser_string','$user_level');"; if ($DB) {echo "$stmt\n";} $rslt=mysql_query($stmt, $link); $affected_rows = mysql_affected_rows($link); print "\n"; if (eregi("CLOSER", $VD_campaign)) { print "\n"; } } else { print "\n"; } } else { echo "VICIDIAL web client: VICIDIAL Campaign Login\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo "Sorry, there are no leads in the hopper for this campaign\n"; echo "
\n"; echo "\n"; echo "\n"; echo "\n"; echo "Login: \n
"; echo "Password:
\n"; echo "Campaign: $camp_form_code
\n"; echo "\n"; echo "
\n\n"; echo "\n\n"; echo "\n\n"; exit; } if (strlen($session_id) < 1) { echo "VICIDIAL web client: VICIDIAL Campaign Login\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo "Sorry, there are no available sessions\n"; echo "
\n"; echo "\n"; echo "\n"; echo "\n"; echo "Login: \n
"; echo "Password:
\n"; echo "Campaign: $camp_form_code
\n"; echo "\n"; echo "
\n\n"; echo "\n\n"; echo "\n\n"; exit; } $StarTtimE = date("U"); $NOW_TIME = date("Y-m-d H:i:s"); ##### Agent is going to log in so insert the vicidial_agent_log entry now $stmt="INSERT INTO vicidial_agent_log (user,server_ip,event_time,campaign_id,pause_epoch,pause_sec,wait_epoch) values('$VD_login','$server_ip','$NOW_TIME','$VD_campaign','$StarTtimE','0','$StarTtimE');"; if ($DB) {echo "$stmt\n";} $rslt=mysql_query($stmt, $link); $affected_rows = mysql_affected_rows($link); $agent_log_id = mysql_insert_id(); print "\n"; $S='*'; $D_s_ip = explode('.', $server_ip); if (strlen($D_s_ip[0])<2) {$D_s_ip[0] = "0$D_s_ip[0]";} if (strlen($D_s_ip[0])<3) {$D_s_ip[0] = "0$D_s_ip[0]";} if (strlen($D_s_ip[1])<2) {$D_s_ip[1] = "0$D_s_ip[1]";} if (strlen($D_s_ip[1])<3) {$D_s_ip[1] = "0$D_s_ip[1]";} if (strlen($D_s_ip[2])<2) {$D_s_ip[2] = "0$D_s_ip[2]";} if (strlen($D_s_ip[2])<3) {$D_s_ip[2] = "0$D_s_ip[2]";} if (strlen($D_s_ip[3])<2) {$D_s_ip[3] = "0$D_s_ip[3]";} if (strlen($D_s_ip[3])<3) {$D_s_ip[3] = "0$D_s_ip[3]";} $server_ip_dialstring = "$D_s_ip[0]$S$D_s_ip[1]$S$D_s_ip[2]$S$D_s_ip[3]$S"; ##### grab the datails of all active scripts in the system $stmt="SELECT script_id,script_name,script_text FROM vicidial_scripts WHERE active='Y' order by script_id limit 100;"; $rslt=mysql_query($stmt, $link); if ($DB) {echo "$stmt\n";} $MM_scripts = mysql_num_rows($rslt); $e=0; while ($e < $MM_scripts) { $row=mysql_fetch_row($rslt); $MMscriptid[$e] =$row[0]; $MMscriptname[$e] = rawurlencode($row[1]); $MMscripttext[$e] = rawurlencode($row[2]); $MMscriptids = "$MMscriptids'$MMscriptid[$e]',"; $MMscriptnames = "$MMscriptnames'$MMscriptname[$e]',"; $MMscripttexts = "$MMscripttexts'$MMscripttext[$e]',"; $e++; } $MMscriptids = substr("$MMscriptids", 0, -1); $MMscriptnames = substr("$MMscriptnames", 0, -1); $MMscripttexts = substr("$MMscripttexts", 0, -1); } } ################################################################ ### BEGIN - build the callback calendar (12 months) ### ################################################################ define ('ADAY', (60*60*24)); $CdayARY = getdate(); $Cmon = $CdayARY['mon']; $Cyear = $CdayARY['year']; $CTODAY = date("Y-m"); $CTODAYmday = date("j"); $CINC=0; $Cmonths = Array('January','February','March','April','May','June', 'July','August','September','October','November','December'); $Cdays = Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); $CCAL_OUT = ''; $CCAL_OUT .= ""; while ($CINC < 12) { if ( ($CINC == 0) || ($CINC == 4) ||($CINC == 8) ) {$CCAL_OUT .= "";} $CCAL_OUT .= ""; if ( ($CINC == 3) || ($CINC == 7) ||($CINC == 11) ) {$CCAL_OUT .= "";} $CINC++; } $CCAL_OUT .= "
"; $CYyear = $Cyear; $Cmonth= ($Cmon + $CINC); if ($Cmonth > 12) { $Cmonth = ($Cmonth - 12); $CYyear++; } $Cstart= mktime(0,0,0,$Cmonth,1,$CYyear); $CfirstdayARY = getdate($Cstart); #echo "|$Cmon|$Cmonth|$CINC|\n"; $CPRNTDAY = date("Y-m", $Cstart); $CCAL_OUT .= ""; $CCAL_OUT .= ""; $CCAL_OUT .= ""; $CCAL_OUT .= ""; foreach($Cdays as $Cday) { $CDCLR="#ffffff"; $CCAL_OUT .= ""; } for( $Ccount=0;$Ccount<(6*7);$Ccount++) { $Cdayarray = getdate($Cstart); if((($Ccount) % 7) == 0) { if($Cdayarray['mon'] != $CfirstdayARY['mon']) break; $CCAL_OUT .= ""; } if($Ccount < $CfirstdayARY['wday'] || $Cdayarray['mon'] != $Cmonth) { $CCAL_OUT .= ""; } else { if( ($Cdayarray['mday'] == $CTODAYmday) and ($CPRNTDAY == $CTODAY) ) { $CPRNTmday = $Cdayarray['mday']; if ($CPRNTmday < 10) {$CPRNTmday = "0$CPRNTmday";} $CBL = ""; $CEL = ""; $CCAL_OUT .= ""; $Cstart += ADAY; } else { $CDCLR="#ffffff"; if ( ($Cdayarray['mday'] < $CTODAYmday) and ($CPRNTDAY == $CTODAY) ) { $CDCLR="#CCCCCC"; $CBL = ''; $CEL = ''; } else { $CPRNTmday = $Cdayarray['mday']; if ($CPRNTmday < 10) {$CPRNTmday = "0$CPRNTmday";} $CBL = ""; $CEL = ""; } $CCAL_OUT .= ""; $Cstart += ADAY; } } } $CCAL_OUT .= ""; $CCAL_OUT .= "
"; $CCAL_OUT .= "
"; $CCAL_OUT .= "$CfirstdayARY[month] $CfirstdayARY[year]"; $CCAL_OUT .= "
"; $CCAL_OUT .= "
"; $CCAL_OUT .= "
"; $CCAL_OUT .= "$Cday"; $CCAL_OUT .= "
"; $CCAL_OUT .= "
 "; $CCAL_OUT .= "
"; $CCAL_OUT .= "$CBL$Cdayarray[mday]$CEL"; $CCAL_OUT .= "
"; $CCAL_OUT .= "
"; $CCAL_OUT .= "
"; $CCAL_OUT .= "$CBL$Cdayarray[mday]$CEL"; $CCAL_OUT .= "
"; $CCAL_OUT .= "
"; $CCAL_OUT .= "
"; #echo "$CCAL_OUT\n"; ################################################################ ### END - build the callback calendar (12 months) ### ################################################################ ?> \n"; ?>
LOGOUT\n"; ?>
VICIDIAL SCRIPT   LIVE     session ID: Live Call

VICIDIAL
Transfer - Conference
INTERNAL CLOSER LOCAL CLOSER CODE Hangup Xfer Line Hangup Both Lines
Number to call   seconds   channel OVERRIDE   D1 D2
Dial With Customer Park Customer Dial LEAVE 3-WAY CALL Dial Blind Transfer Blind Transfer VMail Message
Lead Dispositioned As:

-
Disposition Hot Keys: When active, simply press the keyboard key for the desired disposition for this call. The call will then be hungup and dispositioned automatically:
Noone is in your session:
OK
Customer has hung up:
OK

LOGOUT
 
Any changes made to the customer information below at this time will not be comitted, You must change customer information before you Hangup the call.
DISPOSITION CALL :       minimize
End-of-call Disposition Selection
STOP CALLING
RESET | SUBMIT



 
Select a CallBack Date :
Select a Date Below       Hour:   Minutes:    
CB Comments:

SUBMIT



 
CLOSER INBOUND GROUP SELECTION
Closer Inbound Group Selection
BLENDED CALLING(outbound activated)
RESET | SUBMIT



 
LIVE CALL TRANSFER
Channel to be transferred: Channel
Extensions:
Extensions Menu

Send to selected extension

Send to selected vmail box

Send to this number:


REFRESH


Back to Main Window

Conferences:
(click on a number below to send to a conference)
Send my channel too
Conferences Menu
VICIDIAL SCRIPT
STATUS:
Dial Next Number
LEAD PREVIEW
";} if ( ($manual_dial_alt_phone) and ($auto_dial_level==0) ) {echo " ALT PHONE DIAL
";} ?> RECORDING FILE:

RECORD ID:
Start Recording

Web Form

Park Call
Transfer - Conference

Hangup Customer

Send DTMF
\n";} else {echo "\n";} ?>
seconds:   Channel:   Cust Time:
Customer Information:
Title:   First:   MI:   Last:
Address1:
Address2:   Address3:
City:   State:   PostCode:
Province:   Vendor ID:
Phone:   DialCode:   Alt. Phone:
Show:   Email:
Comments:
 

 
VICIDIAL web-client version:     BUILD:               Server:              
Show conference call channel information
0) && ( ($user_level>=$HKuser_level) or ($VU_hotkeys_active > 0) ) ) { ?> HOT KEYS INACTIVE