myLogger = \Config\Services::mylogger(); $this->employeeModel = new EmployeeModel(); $this->employeePolicyModel = new EmployeePolicyModel(); $this->clientModel = new ClientModel(); $this->clientRMModel = new ClientRMModel(); $this->policesModel = new PolicesModel(); $this->relationshipModel = new RelationshipModel(); $this->fileModel= new FileModel(); $this->clientPolicyModel = new ClientPolicyModel(); $this->policyPremium1Model = new PolicyPremium1Model(); $this->policyPremium2Model = new PolicyPremium2Model(); $this->policyTypeModel = new PolicyTypeModel(); $this->notificationModel = new NotificationModel(); $this->userModel = new UserModel(); $this->feContentModel = new FEContentModel(); $this->addImgModel = new AddImgModel(); $this->ChatBotModel = new ChatBotModel(); } public function getChatResponse() { // try { $emp_code = $this->request->getVar('emp_code'); $client_id = $this->request->getVar('client_id'); $client_branch_id = $this->request->getVar('client_branch_id'); $request_for = $this->request->getVar('request_for'); $option = $this->request->getVar('option'); $is_option = $this->request->getVar('is_option'); $responseData = $this->ChatBotModel->where('request', $request_for) ->where('is_active', 1 ) ->first(); if ($responseData) { if(isset($option) && $option != 0) { $decodedData = json_decode($responseData['options'],true); if (isset($decodedData[$option]) && $decodedData[$option] !== null) { $requestFor = $decodedData[$option]; $responseData = $this->ChatBotModel->where('request', $requestFor) ->where('is_active', 1 ) ->first(); if($responseData['request'] == 'Call' || $responseData['request'] == 'Mail'){ $AccountManagerDetails = $this->clientRMModel->select('client_rm.* , user_profiles.*') ->join('user_profiles', 'client_rm.user_id = user_profiles.id', 'left') ->where('client_rm.client_id', $client_id ) ->where('client_rm.level', 3 ) ->findAll(); if(isset($AccountManagerDetails) && $responseData['request'] == 'Call'){ $responseData['options'] = $AccountManagerDetails[0]['mobile']; }else if(isset($AccountManagerDetails) && $responseData['request'] == 'Mail'){ $responseData['options'] = $AccountManagerDetails[0]['email']; } } }else{ if( $request_for == 'Initiate claim'){ $result = [ 'request_for' => $request_for, 'options' => json_decode($responseData['options'], true), 'text' => "Enter Message", 'is_option' => "0", 'policy_id' => $option, 'mobile_no' => $this->request->getVar('mobile_no'), 'navigation' => $responseData['navigation'], 'navigation_type' => $responseData['navigation_type'] ]; return $this->respond(['status' => 'success','code' => 200,'data' => $result ],200); }else{ $result = $this->sendDefaultMessage(); return $this->respond(['status' => 'success','code' => 200,'data' => $result ],200); } } } if(isset($is_option) && $is_option == 0){ $text = $this->request->getVar('text'); $value = $this->request->getVar('value'); $Data = $this->ChatBotModel->where('options', $text)->where('is_active', 1 )->first(); if($Data){ if($Data['options'] == 'Please Enter Your Mobile Number To View Your Policies') { $result = $this->getAllPolicyByMobileNumber($value,'text'); return $this->respond(['status' => 'success','code' => 200,'data' => $result ],200); }else if($Data['options'] == 'Please Enter Your Mobile Number To Raise Claim'){ $result = $this->getAllPolicyByMobileNumber($value,'options'); return $this->respond(['status' => 'success','code' => 200,'data' => $result ],200); }else if( $Data['options'] == 'Enter Your Claim Number'){ $result = $this->getTicket($value,$emp_code,$client_id); return $this->respond(['status' => 'success','code' => 200,'data' => $result ],200); } }else{ if( $request_for == 'Create claim' && $text == 'Enter Message'){ $ticket = $this->claimTicket(); $ticket = json_decode($ticket,true); if (isset($ticket['success']) && $ticket['success'] == 1) { $result = [ 'request_for' => $request_for, 'options' => null, 'text' => $ticket['message'].', Your Claim id is '.$ticket['ticket_id'], 'is_option' => "0", 'navigation' => "0", 'navigation_type' => null ]; }else{ $result = [ 'request_for' => $request_for, 'options' => null, 'text' => $ticket['message'], 'is_option' => "0", 'navigation' => "0", 'navigation_type' => null ]; } return $this->respond(['status' => 'success','code' => 200,'data' => $result ],200); }else{ $result = $this->sendDefaultMessage(); return $this->respond(['status' => 'success','code' => 200,'data' => $result ],200); } } } $result = [ 'request_for' => $responseData['request'], 'options' => json_decode($responseData['options'], true), 'text' => $responseData['is_option'] != 1 ? $responseData['options'] : null, 'is_option' => $responseData['is_option'], 'navigation' => $responseData['navigation'], 'navigation_type' => $responseData['navigation_type'] ]; return $this->respond(['status' => 'success','code' => 200,'data' => $result ],200); } else { return $this->respond(['status' => 'failed','code' => 404,'data' => 'No Data'],404); } // } catch (\Throwable $th) { // return $this->respond(['status' => 'failed','code' => 500,'data' => $th],500); // } } public function sendDefaultMessage() { $responseData = $this->ChatBotModel->where('id', 1)->where('is_active', 1 )->first(); return [ 'request_for' => $responseData['request'], 'options' => json_decode($responseData['options'], true), 'text' => $responseData['is_option'] != 1 ? $responseData['options'] : null, 'is_option' => $responseData['is_option'], 'navigation' => $responseData['navigation'], 'navigation_type' => $responseData['navigation_type'] ]; } public function getAllPolicyByMobileNumber($mobileNo,$action) { $employee = $this->employeeModel->where('mobile', $mobileNo)->where('is_active', 1 )->first(); if($employee){ $employeeData = $this->employeeModel->where('emp_code', $employee['emp_code']) ->where('client_id',$employee['client_id']) ->where('client_branch_id',$employee['client_branch_id']) ->where('is_active', 1 )->findAll(); $whereArrayForId = []; foreach ( $employeeData as $key => $value) { array_push($whereArrayForId, $value['id']); } $ClientPolicyData = $this->clientPolicyModel->select('client_policy.* , policy_type.long_name as policy_name , policy_type.policy_type as policy_type') ->join('policy_type', 'client_policy.policy_type_id = policy_type.id', 'left') ->where('client_policy.client_id', $employee['client_id'] ) ->where('client_policy.client_branch_id', $employee['client_branch_id'] ) ->where('client_policy.is_active', 1 ) ->where('client_policy.policy_status', 1) ->orderby('client_policy.id' , 'ASC') ->findAll(); $options = []; $text = ''; if(count($ClientPolicyData) > 0 && count($employeeData) > 0) { foreach ($ClientPolicyData as $key => $ClientPolicyValue) { $data['policy_name'] = $ClientPolicyValue['policy_name']; $data['policy_type'] = $ClientPolicyValue['policy_type']; $data['policy_no'] = $ClientPolicyValue['policy_no']; $employee_policy = $this->employeePolicyModel->select('employees.*,employee_polices.employee_id , employee_polices.basic_cover_si , employee_polices.premium , employee_polices.gst , employee_polices.tpa_id , employee_polices.rand_string , employee_polices.uhid as uhid') ->join('employees', 'employee_polices.employee_id = employees.id', 'left') ->whereIn('employee_polices.employee_id',$whereArrayForId) ->where('employee_polices.client_policy_id',$ClientPolicyValue['id']) ->where('employee_polices.is_active', 1 )->findAll(); if(count($employee_policy) > 0) { $policy[$ClientPolicyValue['id']] = $ClientPolicyValue['policy_name']."(".$ClientPolicyValue['policy_type'].")"; array_push($options, $policy); $text .= $ClientPolicyValue['policy_name']." % "; }else{ $text .= "There is no any active policies "; } } if($action == 'options'){ return [ 'request_for' => $this->request->getVar('request_for'), 'options' => $options[count($options) - 1], 'text' => null, 'is_option' => "1", 'mobile_no' => $mobileNo, ]; }else{ return [ 'request_for' => $this->request->getVar('request_for'), 'options' => null, 'text' => $text, 'is_option' => "0", 'mobile_no' => $mobileNo, ]; } }else{ return [ 'request_for' => $this->request->getVar('request_for'), 'options' => null, 'text' => "Dear ".$employee['name']." Policy not yet bound for you.", 'is_option' => "0" ]; } }else{ return [ 'request_for' => $this->request->getVar('request_for'), 'options' => null, 'text' => "Invalid Mobile Number", 'is_option' => "0" ]; } } public function claimTicket() { $employee = $this->employeeModel->where('mobile', $this->request->getVar('mobile_no'))->where('is_active', 1 )->first(); if($employee){ $url = 'https://venbait.in/nhance/helpdesk/dev/api/tickets/create'; $token = 'uncp8FvG310bEyYdV9MmStlo7KDRZ65fLWTeXCI2JzwPrNHjBqQhUiAgxsaO'; $headers = [ 'Token: ' . $token, ]; // Form data $data = [ 'opener' => 'user', 'department_id' => 2, 'subject' => 'Claim Raised by Chat Bot', 'body' => $this->request->getVar('value'), 'policy_id' => $this->request->getVar('policy_id'), 'emp_code' => $employee['emp_code'], 'mobile_number' => $this->request->getVar('mobile_no'), 'email' => 'adhavanvalli@gmail.com', 'fullname' => $employee['name'], ]; // Initialize cURL session $ch = curl_init(); // Set cURL options curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($ch); return $response; // Check for errors // if (curl_errno($ch)) { // $error = curl_error($ch); // curl_close($ch); // return ['status' => 'failed', 'response' => $error]; // } else { // // Close cURL session // curl_close($ch); // return ['status' => 'success', 'response' => $response]; // } }else{ return ['status' => 'failed', 'response' => 'Employee Not Found']; } } public function getTicket($value, $emp_code, $client_id) { // Construct the URL with query parameters $url = 'https://venbait.in/nhance/helpdesk/dev/api/tickets/show/' . $value; $token = 'uncp8FvG310bEyYdV9MmStlo7KDRZ65fLWTeXCI2JzwPrNHjBqQhUiAgxsaO'; $headers = [ 'Token: ' . $token, ]; // Initialize cURL session $ch = curl_init(); // Set cURL options curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // Execute cURL request $response = curl_exec($ch); // Check for errors if (curl_errno($ch)) { $error = curl_error($ch); curl_close($ch); return ['status' => 'failed', 'response' => $error]; } else { // Close cURL session curl_close($ch); return ['status' => 'success', 'response' => $response]; } } }