CHANGE_ : Chat Bot Flow Changes

This commit is contained in:
venbaittech 2024-09-13 17:17:48 +05:30
parent a674dbac42
commit a5d53b6803
6 changed files with 192 additions and 47 deletions

8
.env
View File

@ -1,4 +1,4 @@
API_URL=https://venbait.in/nhance/dev/employeeRest/ API_URL=https://dev.venbait.in/nhance/uat/employeeRest/
TICKET_API_URL=https://venbait.in/nhance/helpdesk/dev/api TICKET_API_URL=https://dev.venbait.in/nhance/helpdesk/uat/api
BASE_HREF=/nhance/employee/dev/ BASE_HREF=/nhance/employee/uat/
ENV=development ENV=production

BIN
assets/Nhance_N.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

View File

@ -993,7 +993,8 @@ class _addOnsDetailsState extends State<addOnsDetails> {
var calculation = { var calculation = {
'client_policy_id': topUpClientPolicyId, 'client_policy_id': topUpClientPolicyId,
'emp_code': empCodeString, 'emp_code': empCodeString,
'si': choosedSiValue 'si': choosedSiValue,
'client_branch_id': empClientBranchId
}; };
print(calculation); print(calculation);
@ -1058,7 +1059,8 @@ class _addOnsDetailsState extends State<addOnsDetails> {
var calculation = { var calculation = {
'client_policy_id': topUpParentClientPolicyId, 'client_policy_id': topUpParentClientPolicyId,
'emp_code': empCodeString, 'emp_code': empCodeString,
'si': choosedSiValue 'si': choosedSiValue,
'client_branch_id': empClientBranchId
}; };
print(calculation); print(calculation);
@ -1125,7 +1127,8 @@ class _addOnsDetailsState extends State<addOnsDetails> {
var calculation = { var calculation = {
'client_policy_id': addOnsDependentClientPolicyId, 'client_policy_id': addOnsDependentClientPolicyId,
'emp_code': empCodeString, 'emp_code': empCodeString,
'si': choosedDependentValue 'si': choosedDependentValue,
'client_branch_id': empClientBranchId
}; };
print(calculation); print(calculation);

View File

@ -85,6 +85,7 @@ class _empDetailsState extends State<empDetails> {
dynamic selfEmpCode; dynamic selfEmpCode;
dynamic selfFamilyFloaterKey; dynamic selfFamilyFloaterKey;
dynamic selfEmpStatus; dynamic selfEmpStatus;
dynamic selfUnit;
dynamic gmcDataIsEmpty = 1; dynamic gmcDataIsEmpty = 1;
dynamic gpaDataIsEmpty = 1; dynamic gpaDataIsEmpty = 1;
dynamic hrPrimaryId; dynamic hrPrimaryId;
@ -219,6 +220,7 @@ class _empDetailsState extends State<empDetails> {
selfFamilyFloaterKey = selfDetails['family_floater_key']; selfFamilyFloaterKey = selfDetails['family_floater_key'];
// print(clientDetails); // print(clientDetails);
selfEmpStatus = selfDetails['emp_status']; selfEmpStatus = selfDetails['emp_status'];
selfUnit = selfDetails['unit'];
}); });
final SharedPreferences prefs = await SharedPreferences.getInstance(); final SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('selfEmpStatus', selfEmpStatus); prefs.setString('selfEmpStatus', selfEmpStatus);
@ -458,6 +460,7 @@ class _empDetailsState extends State<empDetails> {
'client_policy_id': floatedData['client_policy_id'], 'client_policy_id': floatedData['client_policy_id'],
'created_by': primaryId, 'created_by': primaryId,
'is_createdby_hr': is_createdby_hr, 'is_createdby_hr': is_createdby_hr,
'unit': selfUnit,
// Add the 'id' field only if action is 'Edit' // Add the 'id' field only if action is 'Edit'
if (action == 'Edit') 'id': floatedData['employee_id'], if (action == 'Edit') 'id': floatedData['employee_id'],
}); });

View File

@ -1,6 +1,8 @@
import 'package:dash_chat_2/dash_chat_2.dart'; import 'package:dash_chat_2/dash_chat_2.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:nhance_app_pwa/pages/postEnrollment/service/api_service.dart'; import 'package:nhance_app_pwa/pages/postEnrollment/service/api_service.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:url_launcher/url_launcher.dart';
import '../../customAppBar/customAppBar.dart'; import '../../customAppBar/customAppBar.dart';
import 'data.dart'; import 'data.dart';
@ -18,6 +20,11 @@ class _chatbotState extends State<chatbot> {
dynamic returnMessage; dynamic returnMessage;
dynamic mobileNo; dynamic mobileNo;
dynamic policyID; dynamic policyID;
dynamic empCode;
dynamic empClientBranchId;
dynamic client_id;
dynamic navigation_type;
dynamic navigation;
@override @override
void initState() { void initState() {
@ -32,8 +39,31 @@ class _chatbotState extends State<chatbot> {
} }
void quickReplyOptions() async { void quickReplyOptions() async {
final response = final SharedPreferences prefs = await SharedPreferences.getInstance();
await apiService.getBotDetails('Start', '1', '0', '', '', ''); empCode = prefs.getString('empCode');
empClientBranchId = prefs.getString('empClientBranchId');
client_id = prefs.getString('client_id');
Map<String, dynamic> chatBotDataApi = {
'request_for': 'Start',
'is_option': '1',
'option': '0',
'mobile_no': '',
'policy_id': '',
'emp_code': empCode,
'client_id': client_id,
'client_branch_id': empClientBranchId
};
chatBotDataApi =
chatBotDataApi.map((key, value) => MapEntry(key, value.toString()));
// final url;
// if (is_option != '0') {
// url = Uri.parse(
// '${Environment.apiUrl}getChatResponse?request_for=$requestFor&is_option=$is_option&option=$option&mobile_no=$mobileNo&policy_id=$policyID');
// } else {
// url = Uri.parse(
// '${Environment.apiUrl}getChatResponse?request_for=$requestFor&is_option=$is_option&text=$returnMessage&value=$option&mobile_no=$mobileNo&policy_id=$policyID');
// }
final response = await apiService.getBotDetails(chatBotDataApi);
print(response); print(response);
if (response['status'] == 'success') { if (response['status'] == 'success') {
print('check 2'); print('check 2');
@ -45,6 +75,9 @@ class _chatbotState extends State<chatbot> {
print('isOptionStatus: $isOptionStatus'); print('isOptionStatus: $isOptionStatus');
requestStatus = data['request_for']; requestStatus = data['request_for'];
print('requestStatus: $requestStatus'); print('requestStatus: $requestStatus');
navigation = data['navigation'];
navigation_type = data['navigation_type'];
setState(() { setState(() {
firstApiOptions = Map<String, String>.from(optionsData); firstApiOptions = Map<String, String>.from(optionsData);
print('firstApiOptions: $firstApiOptions'); print('firstApiOptions: $firstApiOptions');
@ -107,10 +140,51 @@ class _chatbotState extends State<chatbot> {
messages.insert(0, loadingMessage); messages.insert(0, loadingMessage);
}); });
Map<String, dynamic> chatBotDataApi;
if (isOptionStatus != '0') {
chatBotDataApi = {
'request_for': requestStatus,
'is_option': isOptionStatus,
'option': messageText,
'mobile_no': '',
'policy_id': '',
'emp_code': empCode,
'client_id': client_id,
'client_branch_id': empClientBranchId
};
} else {
chatBotDataApi = {
'request_for': requestStatus,
'is_option': isOptionStatus,
'text': returnMessage,
'value': messageText,
'mobile_no': mobileNo,
'policy_id': policyID,
'emp_code': empCode,
'client_id': client_id,
'client_branch_id': empClientBranchId
};
}
chatBotDataApi =
chatBotDataApi.map((key, value) => MapEntry(key, value.toString()));
// Simulate API call with a delay of 2 seconds // Simulate API call with a delay of 2 seconds
await Future.delayed(Duration(seconds: 2)); await Future.delayed(Duration(seconds: 2));
final response = await apiService.getBotDetails(requestStatus, // final response = await apiService.getBotDetails(requestStatus,
isOptionStatus, messageText, returnMessage, mobileNo, policyID); // isOptionStatus, messageText, returnMessage, mobileNo, policyID);
// Future<Map<String, dynamic>> getBotDetails(String requestFor, is_option,
// option, returnMessage, mobileNo, policyID)
// final url;
// if (is_option != '0') {
// url = Uri.parse(
// '${Environment.apiUrl}getChatResponse?request_for=$requestFor&is_option=$is_option&option=$option&mobile_no=$mobileNo&policy_id=$policyID');
// } else {
// url = Uri.parse(
// '${Environment.apiUrl}getChatResponse?request_for=$requestFor&is_option=$is_option&text=$returnMessage&value=$option&mobile_no=$mobileNo&policy_id=$policyID');
// }
final response = await apiService.getBotDetails(chatBotDataApi);
if (response['status'] == 'success') { if (response['status'] == 'success') {
dynamic chatApiData = response['data']; dynamic chatApiData = response['data'];
@ -119,6 +193,8 @@ class _chatbotState extends State<chatbot> {
returnMessage = chatApiData['text']; returnMessage = chatApiData['text'];
isOptionStatus = chatApiData['is_option']; isOptionStatus = chatApiData['is_option'];
requestStatus = chatApiData['request_for']; requestStatus = chatApiData['request_for'];
navigation = chatApiData['navigation'];
navigation_type = chatApiData['navigation_type'];
if (chatApiData.containsKey('mobile_no')) { if (chatApiData.containsKey('mobile_no')) {
mobileNo = chatApiData['mobile_no']; mobileNo = chatApiData['mobile_no'];
@ -128,27 +204,49 @@ class _chatbotState extends State<chatbot> {
} }
setState(() { setState(() {
print(returnMessage);
// Split and format the returnMessage // Split and format the returnMessage
String formattedMessage = ''; String formattedMessage = '';
if (returnMessage != null) { if (returnMessage != null) {
if (returnMessage.contains('%')) { if (navigation == '1') {
try { if (navigation_type == 'form') {
List<String> messageParts = returnMessage if (returnMessage == 'open_service_form' ||
.split('%') returnMessage == 'open_sales_form' ||
.map((part) => part.trim()) returnMessage == 'open_gmc_form' ||
.cast<String>() returnMessage == 'open_gpa_form') {
.toList(); var details = {'claimsDetails': '', 'fromClaimPage': 1};
formattedMessage = messageParts Navigator.pushNamed(context, 'planclaimsform',
.asMap() arguments: details);
.map((index, part) => MapEntry(index, '${index + 1}. $part')) }
.values } else if (navigation_type == 'dialpad') {
.join('\n'); print(returnMessage);
} catch (e) { _openDialPad(returnMessage);
print('Error splitting returnMessage: $e'); } else if (navigation_type == 'mail') {
formattedMessage = returnMessage; // Fallback to original message print(returnMessage);
_openEmail(returnMessage);
} }
} else { } else {
formattedMessage = returnMessage; if (returnMessage.contains('%')) {
try {
List<String> messageParts = returnMessage
.split('%')
.map((part) => part.trim())
.cast<String>()
.toList();
formattedMessage = messageParts
.asMap()
.map(
(index, part) => MapEntry(index, '${index + 1}. $part'))
.values
.join('\n');
} catch (e) {
print('Error splitting returnMessage: $e');
formattedMessage =
returnMessage; // Fallback to original message
}
} else {
formattedMessage = returnMessage;
}
} }
} else { } else {
print('returnMessage is null'); print('returnMessage is null');
@ -193,6 +291,30 @@ class _chatbotState extends State<chatbot> {
} }
} }
void _openDialPad(String phoneNumber) async {
final url = 'tel:$phoneNumber';
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not open dial pad for $phoneNumber';
}
}
void _openEmail(String email) async {
final Uri params = Uri(
scheme: 'mailto',
path: email,
query:
'subject=Your Subject&body=Hello', // Add default subject and body here
);
var url = params.toString();
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not open email client for $email';
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(

View File

@ -126,34 +126,51 @@ class ApiService {
Navigator.pushNamed(context, 'login'); Navigator.pushNamed(context, 'login');
} }
Future<Map<String, dynamic>> getBotDetails(String requestFor, is_option, Future<Map<String, dynamic>> getBotDetails(
option, returnMessage, mobileNo, policyID) async { Map<String, dynamic> formData) async {
print('requestFor: $requestFor');
print('is_option: $is_option');
print('option: $option');
print('returnMessage: $returnMessage');
print('mobileNo: $mobileNo');
print('policyID: $policyID');
if (_token == null) { if (_token == null) {
await _initializeToken(); await _initializeToken();
} }
final url; final url = Uri.parse('${Environment.apiUrl}getChatResponse');
if (is_option != '0') { // Convert formData to Map<String, String>
url = Uri.parse( Map<String, String> stringFormData =
'${Environment.apiUrl}getChatResponse?request_for=$requestFor&is_option=$is_option&option=$option&mobile_no=$mobileNo&policy_id=$policyID'); formData.map((key, value) => MapEntry(key, value.toString()));
} else {
url = Uri.parse(
'${Environment.apiUrl}getChatResponse?request_for=$requestFor&is_option=$is_option&text=$returnMessage&value=$option&mobile_no=$mobileNo&policy_id=$policyID');
}
print(url); print(url);
final response = await _makePostRequest(url, stringFormData, {
final headers = { 'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Bearer $_token' ?? '', 'Authorization': 'Bearer $_token' ?? '',
}; });
final response = await _makeGetRequest(url, headers);
return response; return response;
} }
// Future<Map<String, dynamic>> getBotDetails(String requestFor, is_option,
// option, returnMessage, mobileNo, policyID) async {
// print('requestFor: $requestFor');
// print('is_option: $is_option');
// print('option: $option');
// print('returnMessage: $returnMessage');
// print('mobileNo: $mobileNo');
// print('policyID: $policyID');
// if (_token == null) {
// await _initializeToken();
// }
// final url;
// if (is_option != '0') {
// url = Uri.parse(
// '${Environment.apiUrl}getChatResponse?request_for=$requestFor&is_option=$is_option&option=$option&mobile_no=$mobileNo&policy_id=$policyID');
// } else {
// url = Uri.parse(
// '${Environment.apiUrl}getChatResponse?request_for=$requestFor&is_option=$is_option&text=$returnMessage&value=$option&mobile_no=$mobileNo&policy_id=$policyID');
// }
// print(url);
//
// final headers = {
// 'Authorization': 'Bearer $_token' ?? '',
// };
// final response = await _makeGetRequest(url, headers);
// return response;
// }
Future<Map<String, dynamic>> _makeGetRequest( Future<Map<String, dynamic>> _makeGetRequest(
Uri url, Map<String, String> headers) async { Uri url, Map<String, String> headers) async {
final response = await http.get(url, headers: headers); final response = await http.get(url, headers: headers);