//////////////////////////////// Fetching dymamic messages Start ///////////////////////////////////////////////////////////
messages = zoho.crm.getRecords("Chatbot_Messages");
// info messages;
for each dynamic_message in messages
{
if(dynamic_message.get("Type") == "Welcome")
{
welcome_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "HIPAA Disclaimer")
{
hippa_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "Chat End")
{
chat_end_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "Departments")
{
departments_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "Issue")
{
issue_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "Connect to Agent")
{
connect_to_agent_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "User Not Identified")
{
user_not_identified_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "Other Email")
{
other_mail_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "Select Product")
{
select_product_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "No Support Agreement")
{
no_support_agreement_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "Category")
{
category_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "Read Article")
{
read_article_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "Article Found")
{
article_found_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "Issue Resolved with Article")
{
issue_resolved_with_article_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "Tallk to Agent")
{
talk_to_agent_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "Thank You for Information")
{
thank_you_for_information_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "Need Further Help")
{
need_further_help_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "Thank You")
{
thank_you_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "Ticket Created for Team")
{
ticket_created_for_team_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "Ticket Created for Reference")
{
ticket_created_for_reference_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "Issue Resolved")
{
issue_resolved_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "What Can I Help You")
{
how_can_i_help_you_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "Operator Busy")
{
operator_busy_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "Classification")
{
classification_message = dynamic_message.get("Message");
}
else if(dynamic_message.get("Type") == "Ticket Not Created")
{
ticket_not_created_message = dynamic_message.get("Message");
}
}
//////////////////////////////// Fetching dymamic messages Ends ///////////////////////////////////////////////////////////
response = Map();
response.put("action","context");
response.put("context_id",context_id);
/////////////////////////Checking and Creating Sessions//////////////////////////////////////////////
departmentId = "810990000000014005";
deskDepartmentId = "206833000002271242";
data_mp = zoho.salesiq.visitorsession.get("mediproinc","data_mp","zoho_salesiq").get("data_mp");
if(!isNull(data_mp))
{
department = data_mp.get("department");
if(department == "Sales")
{
//sales
departmentId = "810990000000014003";
deskDepartmentId = "206833000001963132";
}
else if(department == "Client Care")
{
//client care
departmentId = "810990000000014005";
deskDepartmentId = "206833000002271242";
}
accountID = data_mp.get("accountID");
activeAgreement = data_mp.get("activeAgreement");
}
//////////////////////////////////////////////////////////////////////
if(context_id.equals("verifyContact"))
{
contactEmail = answers.get("otherEmail").get("text");
info contactEmail;
///////////////////////////////////////////////////////////////////
set_map = Map();
set_map.put("otherEmail",contactEmail);
temp_store = zoho.salesiq.visitorsession.set("mediproinc",set_map,"zoho_salesiq");
info "Storing data = " + temp_store;
////////////////////////////////////////////////////////
searchContact = invokeurl
[
url :"https://www.zohoapis.com/crm/v3/Contacts/search?criteria=(Email:equals:" + contactEmail + ")"
type :GET
connection:"zohocrm"
];
// info searchContact;
if(isNull(searchContact))
{
// Chat Forward
response.put("action","forward");
response.put("department",departmentId);
response.put("replies",{connect_to_agent_message});
}
else
{
/////////////// User found ///////////////
info "Record Found";
contactDetials = searchContact.get("data").get(0);
accountID = contactDetials.get("Account_Name").get("id");
chatBotActions = invokeurl
[
url :"https://www.zohoapis.com/crm/v2/functions/erphub_test/actions/execute?auth_type=apikey&zapikey=1003.54e865e56692ea2154455b76012a7b71.1a7eab6552466d5f0187d84f8f1785b0&accountID=" + accountID
type :POST
];
info "From function = " + chatBotActions;
classifications = chatBotActions.get("details").get("output").get("classifications");
///////////////////////////////////////////////////
if(!classifications.isEmpty())
{
////////////////////////////////////////////////////////////////////////////////////////
searchAgreement = invokeurl
[
url :"https://www.zohoapis.com/crm/v3/Contracts/search?criteria=((Account:equals:" + accountID + ")and(Status:equals:Active))"
type :GET
connection:"zohocrm"
];
info "searchAgreement: " + searchAgreement;
activeAgreement = false;
if(searchAgreement.size() > 0)
{
activeAgreement = true;
}
else
{
activeAgreement = false;
}
/////////////////////////////////////////////////////////////////////
classification_rep_list = List();
if(activeAgreement == true)
{
classification_rep_list.add(classification_message);
}
else
{
classification_rep_list.add(no_support_agreement_message);
classification_rep_list.add(classification_message);
}
//////////////////////info show question/////////////////////////////
response.put("action","context");
response.put("context_id","clientCare");
question = {"name":"classification","replies":classification_rep_list,"input":{"type":"select","options":classifications}};
response.put("questions",{question});
/////////////////////Create Session//////////////////////////////////
data_mp = Map();
data_mp.put("accountID",accountID);
data_mp.put("activeAgreement",activeAgreement);
data_mp.put("department","Client Care");
set_map = Map();
set_map.put("data_mp",data_mp);
temp_store = zoho.salesiq.visitorsession.set("mediproinc",set_map,"zoho_salesiq");
info "Storing data = " + temp_store;
/////////////////////////////////////////////////////////////////////
}
else
{
// Chat End
response.put("action","end");
response.put("replies",{chat_end_message});
}
}
}
///////////////////// Sales Department ////////////////////////////////////
if(context_id.equals("salesIssueType"))
{
if(!answers.containsKey("whatCanIhelpYouWith"))
{
selectedIssueType = answers.get("issueType").get("text");
///////////////////////////////////////////////////////////////////////////////
response.put("context_id","salesIssueType");
question = {"name":"whatCanIhelpYouWith","replies":{how_can_i_help_you_message}};
response.put("questions",{question});
}
else
{
selectedIssueType = answers.get("issueType").get("text");
helpAnswer = answers.get("whatCanIhelpYouWith").get("text");
leadMap = Map();
fullName = visitor.get("name");
if(fullName.contains(" "))
{
leadMap.put("First_Name",fullName.getPrefix(" "));
leadMap.put("Last_Name",fullName.getSuffix(" "));
}
else
{
leadMap.put("Last_Name",fullName);
}
leadMap.put("Company",fullName);
leadMap.put("Email",visitor.get("email"));
leadMap.put("Phone",visitor.get("phone"));
leadMap.put("Lead_Source","Chat");
leadMap.put("Description",helpAnswer);
options = Map();
optionlist = list();
optionlist.add("workflow");
options.put("trigger",optionlist);
leadResponse = zoho.crm.createRecord("leads",leadMap,options,"zohocrm");
// info "Creating lead: " + leadResponse;
// Chat Forward
response.put("action","forward");
response.put("department",departmentId);
response.put("replies",{connect_to_agent_message});
}
}
///////////////////// Sales Department End /////////////////////////
///////////////////// Client Care //////////////////////////////
////// User not identified ///////////////
if(context_id.equals("userNotIdentified"))
{
if(!answers.containsKey("couldNotIdentify"))
{
response.put("action","context");
response.put("context_id","userNotIdentified");
couldNotIdentify = {"name":"couldNotIdentify","replies":{user_not_identified_message},"input":{"type":"select","options":{"Yes","No"}}};
response.put("questions",{couldNotIdentify});
}
else
{
couldNotIdentify = answers.get("couldNotIdentify").get("text");
if(couldNotIdentify.toString() == "Yes")
{
if(!answers.containsKey("otherEmail"))
{
response.put("action","context");
response.put("context_id","verifyContact");
otherEmail = {"name":"otherEmail","replies":{other_mail_message}};
response.put("questions",{otherEmail});
}
}
else
{
// Chat Forward
response.put("action","forward");
response.put("department",departmentId);
response.put("replies",{connect_to_agent_message});
}
}
}
////// User not identified End ///////////////
////////////////// Client Care /////////////////////
if(context_id.equals("clientCare"))
{
chatBotActions = invokeurl
[
url :"https://www.zohoapis.com/crm/v2/functions/erphub_test/actions/execute?auth_type=apikey&zapikey=1003.54e865e56692ea2154455b76012a7b71.1a7eab6552466d5f0187d84f8f1785b0&accountID=" + accountID
type :POST
];
// info "From function = " + chatBotActions;
classifications = chatBotActions.get("details").get("output").get("classifications");
classificationsVsCategories = chatBotActions.get("details").get("output").get("classificationsVsCategories");
catergoriesVsIssueTypes = chatBotActions.get("details").get("output").get("catergoriesVsIssueTypes");
issueTypeVsrequireInfo = chatBotActions.get("details").get("output").get("issueTypeVsrequireInfo");
if(answers.containsKey("classification") && !answers.containsKey("category"))
{
classification = answers.get("classification").get("text");
response.put("context_id","clientCare");
category = {"name":"category","replies":{category_message},"input":{"type":"select","options":classificationsVsCategories.get(classification)}};
response.put("questions",{category});
}
else
{
keyCombination_issueType = answers.get("classification").get("text") + "/" + answers.get("category").get("text");
returnedCategories = catergoriesVsIssueTypes.get(keyCombination_issueType);
if(!returnedCategories.contains("Empty") && answers.containsKey("classification") && answers.containsKey("category") && !answers.containsKey("issueType"))
{
category = answers.get("category").get("text");
response.put("context_id","clientCare");
issueType = {"name":"issueType","replies":{issue_message},"input":{"type":"select","options":returnedCategories}};
response.put("questions",{issueType});
}
else
{
keyCombination = answers.get("classification").get("text") + "/" + answers.get("category").get("text") + "/" + ifnull(answers.get("issueType"),{"text":"Empty"}).get("text");
info keyCombination;
crmRecordId = issueTypeVsrequireInfo.get(keyCombination);
/////////////////////////////////////////////////////////////////////////////////////////////
tempStoreMap = Map();
tempStoreMap.put("crmRecordId",crmRecordId);
tempStoreMap.put("classification",answers.get("classification").get("text"));
tempStoreMap.put("category",answers.get("category").get("text"));
tempStoreMap.put("issueType",ifnull(answers.get("issueType"),{"text":"Empty"}).get("text"));
storeData = zoho.salesiq.visitorsession.set("mediproinc",tempStoreMap,"zoho_salesiq");
/////////////////////////////////////////////////////////////////////////////////////////////
chatBotActionsRecId = invokeurl
[
url :"https://www.zohoapis.com/crm/v2/functions/Chatbot_Actions_Using_RecId/actions/execute?auth_type=apikey&zapikey=1003.54e865e56692ea2154455b76012a7b71.1a7eab6552466d5f0187d84f8f1785b0&recId=" + crmRecordId
type :POST
];
requiredInfoType = chatBotActionsRecId.get("details").get("output").get("requiredInfoType");
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Free_Typing_Questions_Instructions = chatBotActionsRecId.get("details").get("output").get("Free_Typing_Questions_Instructions");
KB_Instruction_Article = chatBotActionsRecId.get("details").get("output").get("KB_Instruction_Article");
Free_Typing_Formatted_Questions = chatBotActionsRecId.get("details").get("output").get("Free_Typing_Formatted_Questions");
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Multi_Option_Message = chatBotActionsRecId.get("details").get("output").get("Multi_Option_Message");
Multi_Option_Question = chatBotActionsRecId.get("details").get("output").get("Multi_Option_Question");
Multiple_Options = chatBotActionsRecId.get("details").get("output").get("Multiple_Options");
Option_vs_Output_Messages = chatBotActionsRecId.get("details").get("output").get("Option_vs_Output_Messages");
Option_vs_Output_Actions = chatBotActionsRecId.get("details").get("output").get("Option_vs_Output_Actions");
Option_vs_Output_Article = chatBotActionsRecId.get("details").get("output").get("Option_vs_Output_Article");
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Output_Message = chatBotActionsRecId.get("details").get("output").get("Output_Message");
Output_Action = chatBotActionsRecId.get("details").get("output").get("Output_Action");
KB_Article = chatBotActionsRecId.get("details").get("output").get("KB_Article");
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(requiredInfoType == "Free Typing Question")
{
response.put("action","context");
response.put("context_id","output");
////////////////////////////////////////////////
question_count = 1;
questions_list = List();
for each val in Free_Typing_Formatted_Questions
{
replies = Collection();
if(question_count == 1)
{
if(Free_Typing_Questions_Instructions != "-" && Free_Typing_Questions_Instructions != null)
{
if(KB_Instruction_Article != null && KB_Instruction_Article != "-")
{
replies.insert({"type":"links","text":Free_Typing_Questions_Instructions,"links":{{"url":KB_Instruction_Article,"text":read_article_message}}});
}
else
{
replies.insert(Free_Typing_Questions_Instructions);
}
}
}
info val;
replies.insert(val);
question = {"name":val,"replies":replies};
questions_list.add(question);
////////////////////////////////////////////
question_count = question_count + 1;
}
response.put("questions",questions_list);
}
else if(requiredInfoType == "Multi Option Question")
{
response.put("action","context");
response.put("context_id","multi_option_context");
////////////////////////////////////////////////
replies = Collection();
if(!isNull(Multi_Option_Message))
{
replies.insert(Multi_Option_Message);
}
replies.insert(Multi_Option_Question);
question = {"name":"multiOptionSelection","replies":replies,"input":{"type":"select","options":Multiple_Options}};
response.put("questions",{question});
}
else if(requiredInfoType == "Article Only")
{
replies = Collection();
KB_Article = ifnull(KB_Article,"https://www.medipro.com/");
if(Output_Message != "-" && Output_Message != null)
{
replies.insert({"type":"links","text":Output_Message,"links":{{"url":KB_Article,"text":read_article_message}}});
}
else
{
replies.insert({"type":"links","text":article_found_message,"links":{{"url":KB_Article,"text":read_article_message}}});
}
response.put("action","end");
response.put("replies",replies);
}
}
}
}
////////////////////////////////////////////
if(context_id.equals("multi_option_context"))
{
crmRecordId = zoho.salesiq.visitorsession.get("mediproinc","crmRecordId","zoho_salesiq").get("crmRecordId");
/////////////////////////////////////////////////////////////////////////////////////////////
chatBotActionsRecId = invokeurl
[
url :"https://www.zohoapis.com/crm/v2/functions/Chatbot_Actions_Using_RecId/actions/execute?auth_type=apikey&zapikey=1003.54e865e56692ea2154455b76012a7b71.1a7eab6552466d5f0187d84f8f1785b0&recId=" + crmRecordId
type :POST
];
requiredInfoType = chatBotActionsRecId.get("details").get("output").get("requiredInfoType");
Check_Support_Agreement = chatBotActionsRecId.get("details").get("output").get("Check_Support_Agreement");
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Multi_Option_Message = chatBotActionsRecId.get("details").get("output").get("Multi_Option_Message");
Multi_Option_Question = chatBotActionsRecId.get("details").get("output").get("Multi_Option_Question");
Multiple_Options = chatBotActionsRecId.get("details").get("output").get("Multiple_Options");
Option_vs_Output_Messages = chatBotActionsRecId.get("details").get("output").get("Option_vs_Output_Messages");
Option_vs_Output_Actions = chatBotActionsRecId.get("details").get("output").get("Option_vs_Output_Actions");
Option_vs_Output_Article = chatBotActionsRecId.get("details").get("output").get("Option_vs_Output_Article");
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(requiredInfoType == "Multi Option Question")
{
selectedValue = answers.get("multiOptionSelection").get("text");
/////////////////////////////////////////////////////////////////////////////////////////////
tempStoreMap = Map();
tempStoreMap.put("multiOptionSelection",selectedValue);
storeData = zoho.salesiq.visitorsession.set("mediproinc",tempStoreMap,"zoho_salesiq");
/////////////////////////////////////////////////////////////////////////////////////////////
selectedMessages = ifnull(Option_vs_Output_Messages.get(selectedValue),"-");
info "Line 463";
info "selected Messages = " + selectedMessages;
////////////////////////////////////////////////
if(selectedMessages.matches("\d+\.") || selectedMessages.contains("?") || selectedMessages.contains(":"))
{
response.put("action","context");
response.put("context_id","output");
mainQuestion = selectedMessages.getPrefix(":");
if(mainQuestion == null)
{
mainQuestion = selectedMessages;
}
subQuestions = selectedMessages.getSuffix(":");
if(subQuestions != null)
{
finalSubQuestion = subQuestions.replaceAll("\d+\.","<q>").replaceFirst("<q>","").toList("<q>");
}
////////////////////////////////////////////////
question_count = 1;
questions_list = List();
for each val in finalSubQuestion
{
trimmedQuestion = val.trim();
replies = Collection();
if(question_count == 1)
{
if(mainQuestion != "-" && mainQuestion != null)
{
replies.insert(mainQuestion);
}
}
replies.insert(trimmedQuestion);
question = {"name":trimmedQuestion,"replies":replies};
questions_list.add(question);
////////////////////////////////////////////
question_count = question_count + 1;
}
response.put("questions",questions_list);
}
else
{
selectedActions = Option_vs_Output_Actions.get(selectedValue);
selectedArticle = Option_vs_Output_Article.get(selectedValue);
finalActions = selectedActions;
finalArticle = ifnull(selectedArticle,"https://www.medipro.com/");
//////////////////////////////////////////////////////////////////////////////////////////////
if(activeAgreement == false && Check_Support_Agreement == true)
{
finalActions.removeElement("Talk to an Agent");
}
//////////////////////////////////////////////////////
//////////////// Create Ticket //////////////////////////////////////////////////////////
ticketId = "";
ticketNumber = "";
if(finalActions.contains("Open Ticket") || finalActions.contains("Closed Ticket"))
{
otherEmail = zoho.salesiq.visitorsession.get("mediproinc","otherEmail","zoho_salesiq").get("otherEmail");
email = ifnull(otherEmail,visitor.get("email"));
search_param_map = Map();
search_param_map.put("email",email);
Get_Contact = invokeurl
[
url :"https://desk.zoho.com/api/v1/contacts/search?"
type :GET
parameters:search_param_map
connection:"zoho_desk"
];
// info "Searching Customer = "+Get_Contact;
if(Get_Contact.get("data").size() > 0)
{
//// Contact found
deskContactID = Get_Contact.get("data").get(0).get("id");
}
else
{
/// Create Contact
contactMap = Map();
fullName = visitor.get("name");
if(fullName.contains(" "))
{
contactMap.put("firstName",fullName.getPrefix(" "));
contactMap.put("lastName",fullName.getSuffix(" "));
}
else
{
contactMap.put("lastName",fullName);
}
otherEmail = zoho.salesiq.visitorsession.get("mediproinc","otherEmail","zoho_salesiq").get("otherEmail");
email = ifnull(otherEmail,visitor.get("email"));
contactMap.put("email",email);
contactMap.put("phone",visitor.get("phone"));
creatingDeskContact = invokeurl
[
url :"https://desk.zoho.com/api/v1/contacts"
type :POST
parameters:contactMap.toString()
connection:"zoho_desk"
];
info "creatingDeskContact = " + creatingDeskContact;
deskContactID = creatingDeskContact.get("id");
}
////////////////////////////////////////////////////////////
classification = zoho.salesiq.visitorsession.get("mediproinc","classification","zoho_salesiq").get("classification");
category = zoho.salesiq.visitorsession.get("mediproinc","category","zoho_salesiq").get("category");
issueType = zoho.salesiq.visitorsession.get("mediproinc","issueType","zoho_salesiq").get("issueType");
////////////////////////////////////////////////////////////
//// Creating Ticket
create_map = Map();
create_map.put("subject","Ticket submitted by " + visitor.get("name") + " via Chatbot.");
create_map.put("contactId",deskContactID);
create_map.put("departmentId",deskDepartmentId);
create_map.put("channel","Chat");
create_map.put("description","");
create_map.put("classification",classification.replaceAll("[\"#%&'+,;<=>\\^`{}|~]",""));
create_map.put("category",category.replaceAll("[\"#%&'+,;<=>\\^`{}|~]",""));
if(issueType.toString() != "Empty")
{
cf = Map();
cf.put("cf_issue_type",issueType.replaceAll("[\"#%&'+,;<=>\\^`{}|~]",""));
create_map.put("cf",cf);
}
createTicketResp = invokeurl
[
url :"https://desk.zoho.com/api/v1/tickets"
type :POST
parameters:create_map + ""
connection:"zoho_desk"
];
info "createTicketResp = " + createTicketResp;
if(createTicketResp.containsKey("modifiedTime"))
{
ticketId = createTicketResp.get("id");
ticketNumber = createTicketResp.get("ticketNumber");
}
}
/////////////////////////////////////////////////////////////////////////////////////////////
tempStoreMap = Map();
tempStoreMap.put("ticketId",ticketId);
tempStoreMap.put("ticketNumber",ticketNumber);
tempStoreMap.put("finalActions",finalActions);
storeData = zoho.salesiq.visitorsession.set("mediproinc",tempStoreMap,"zoho_salesiq");
/////////////////////////////////////////////////////////////////////////////////////////////
////////////////// Article - Agent - > True ///////////////////////////////////////////////////////
if(finalActions.contains("KB Article") && !finalActions.contains("Talk to an Agent") && !finalActions.contains("Open Ticket") && !finalActions.contains("Closed Ticket"))
{
replies = Collection();
if(selectedMessages != "-")
{
replies.insert(selectedMessages);
}
finalArticle = ifnull(finalArticle,"https://www.medipro.com/");
if(selectedMessages != "-" && selectedMessages != null)
{
replies.insert({"type":"links","text":article_found_message,"links":{{"url":finalArticle,"text":read_article_message}}});
}
else
{
replies.insert({"type":"links","text":article_found_message,"links":{{"url":finalArticle,"text":read_article_message}}});
}
response.put("action","end");
response.put("replies",replies);
}
else if(finalActions.contains("KB Article"))
{
response.put("action","context");
response.put("context_id","issue_resolved_with_kb");
replies = Collection();
if(selectedMessages != "-")
{
replies.insert(selectedMessages);
}
replies.insert({"type":"links","text":article_found_message,"links":{{"url":finalArticle,"text":read_article_message}}});
replies.insert(issue_resolved_with_article_message);
question = {"name":"issueResolvedWithKb","replies":replies,"input":{"type":"select","options":{"Yes","No"}}};
response.put("questions",{question});
}
////////////////// Article - > True | Agent -> False /////////////////////////////////////////
else if(!finalActions.contains("KB Article") && finalActions.contains("Talk to an Agent"))
{
response.put("action","context");
response.put("context_id","talk_to_human");
replies = Collection();
if(selectedMessages != "-")
{
replies.insert(selectedMessages);
}
if(ticketNumber != null && ticketNumber != "")
{
ticket_message = ticket_created_for_team_message.getPrefix("{{") + ticketNumber + ticket_created_for_team_message.getSuffix("}}");
replies.insert(ticket_message);
}
replies.insert(talk_to_agent_message);
question = {"name":"connectTo","replies":replies,"input":{"type":"select","options":{"Yes","No"}}};
response.put("questions",{question});
}
////////////////// Agent - Article -> False /////////////////////////////////////////
else if(!finalActions.contains("KB Article") && !finalActions.contains("Talk to an Agent"))
{
if(ticketId != null)
{
//////////////////////////////// Attaching chat Transcript on the Ticket Starts //////////////////////////////////////////
conversation_id = visitor.get("active_conversation_id");
param = Map();
param.put("data","messages");
param.put("format","pdf");
export_chat = invokeurl
[
url :"https://salesiq.zoho.com/api/v2/mediproinc/conversations/" + conversation_id + "/export"
type :POST
parameters:param + ""
connection:"zoho_salesiq"
];
info "Exporting Chat = " + export_chat;
export_chat.setParamName("file");
header = Map();
header.put("Content-Type","multipart/form-data");
////// attach file to ticket ////
attach = invokeurl
[
url :"https://desk.zoho.com/api/v1/tickets/" + ticketId + "/attachments?isPublic=true"
type :POST
headers:header
files:export_chat
connection:"zoho_desk"
];
//////////////////////////////// Attaching chat Transcript on the Ticket Ends //////////////////////////////////////////
}
replies = Collection();
if(selectedMessages != "-")
{
replies.insert(selectedMessages);
}
if(finalActions.contains("Closed Ticket"))
{
update_map = Map();
update_map.put("status","Closed");
updateTicketResp = invokeurl
[
url :"https://desk.zoho.com/api/v1/tickets/" + ticketId + ""
type :PATCH
parameters:update_map + ""
connection:"zoho_desk"
];
//////////////////////////////////////////////////////////////
replies.insert(thank_you_for_information_message);
need_help_message = need_further_help_message.getPrefix("{{") + ticketNumber + need_further_help_message.getSuffix("}}");
replies.insert(need_help_message);
replies.insert(thank_you_message);
}
else
{
replies.insert(thank_you_for_information_message);
ticket_team_message = ticket_created_for_team_message.getPrefix("{{") + ticketNumber + ticket_created_for_team_message.getSuffix("}}");
replies.insert(ticket_team_message);
replies.insert(thank_you_message);
}
response.put("action","end");
response.put("replies",replies);
}
}
}
}
/////// Output ///////
if(context_id.equals("output"))
{
crmRecordId = zoho.salesiq.visitorsession.get("mediproinc","crmRecordId","zoho_salesiq").get("crmRecordId");
info "Line: 362: crmRecordId: " + crmRecordId;
/////////////////////////////////////////////////////////////////////////////////////////////
chatBotActionsRecId = invokeurl
[
url :"https://www.zohoapis.com/crm/v2/functions/Chatbot_Actions_Using_RecId/actions/execute?auth_type=apikey&zapikey=1003.54e865e56692ea2154455b76012a7b71.1a7eab6552466d5f0187d84f8f1785b0&recId=" + crmRecordId
type :POST
];
info "Line: 369: chatBotActionsRecId: " + chatBotActionsRecId;
requiredInfoType = chatBotActionsRecId.get("details").get("output").get("requiredInfoType");
Check_Support_Agreement = chatBotActionsRecId.get("details").get("output").get("Check_Support_Agreement");
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Output_Action = chatBotActionsRecId.get("details").get("output").get("Output_Action");
KB_Article = chatBotActionsRecId.get("details").get("output").get("KB_Article");
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Option_vs_Output_Actions = chatBotActionsRecId.get("details").get("output").get("Option_vs_Output_Actions");
Option_vs_Output_Article = chatBotActionsRecId.get("details").get("output").get("Option_vs_Output_Article");
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(requiredInfoType == "Free Typing Question")
{
finalActions = Output_Action;
finalArticle = ifnull(KB_Article,"https://www.medipro.com/");
}
else if(requiredInfoType == "Multi Option Question")
{
selectedValue = zoho.salesiq.visitorsession.get("mediproinc","multiOptionSelection","zoho_salesiq").get("multiOptionSelection");
info "selectedValue: " + selectedValue;
selectedActions = Option_vs_Output_Actions.get(selectedValue);
selectedArticle = Option_vs_Output_Article.get(selectedValue);
finalActions = selectedActions;
finalArticle = ifnull(selectedArticle,"https://www.medipro.com/");
}
//////////////////////////////////////////////////////////////////////////////////////////////
if(activeAgreement == false && Check_Support_Agreement == true)
{
finalActions.removeElement("Talk to an Agent");
}
info "Final ACtions: " + finalActions;
//////////////////////////////////////////////////////
inputValuesString = "Questions:<br><br>";
for each keyVal in answers.keys()
{
info keyVal;
inputValuesString = inputValuesString + keyVal + " : " + answers.get(keyVal).get("text") + "<br><br>";
}
info "inputValuesString: " + inputValuesString;
info finalActions;
info finalArticle;
//////////////// Create Ticket //////////////////////////////////////////////////////////
ticketId = "";
ticketNumber = "";
if(finalActions.contains("Open Ticket") || finalActions.contains("Closed Ticket"))
{
otherEmail = zoho.salesiq.visitorsession.get("mediproinc","otherEmail","zoho_salesiq").get("otherEmail");
email = ifnull(otherEmail,visitor.get("email"));
search_param_map = Map();
search_param_map.put("email",email);
Get_Contact = invokeurl
[
url :"https://desk.zoho.com/api/v1/contacts/search?"
type :GET
parameters:search_param_map
connection:"zoho_desk"
];
// info "Searching Customer = "+Get_Contact;
if(Get_Contact.get("data").size() > 0)
{
//// Contact found
deskContactID = Get_Contact.get("data").get(0).get("id");
}
else
{
/// Create Contact
contactMap = Map();
fullName = visitor.get("name");
if(fullName.contains(" "))
{
contactMap.put("firstName",fullName.getPrefix(" "));
contactMap.put("lastName",fullName.getSuffix(" "));
}
else
{
contactMap.put("lastName",fullName);
}
otherEmail = zoho.salesiq.visitorsession.get("mediproinc","otherEmail","zoho_salesiq").get("otherEmail");
email = ifnull(otherEmail,visitor.get("email"));
contactMap.put("email",email);
contactMap.put("phone",visitor.get("phone"));
creatingDeskContact = invokeurl
[
url :"https://desk.zoho.com/api/v1/contacts"
type :POST
parameters:contactMap.toString()
connection:"zoho_desk"
];
info "creatingDeskContact = " + creatingDeskContact;
deskContactID = creatingDeskContact.get("id");
}
////////////////////////////////////////////////////////////
classification = zoho.salesiq.visitorsession.get("mediproinc","classification","zoho_salesiq").get("classification");
category = zoho.salesiq.visitorsession.get("mediproinc","category","zoho_salesiq").get("category");
issueType = zoho.salesiq.visitorsession.get("mediproinc","issueType","zoho_salesiq").get("issueType");
////////////////////////////////////////////////////////////
//// Creating Ticket
create_map = Map();
create_map.put("subject","Ticket submitted by " + visitor.get("name") + " via Chatbot.");
create_map.put("contactId",deskContactID);
create_map.put("departmentId",deskDepartmentId);
create_map.put("channel","Chat");
create_map.put("description",ifnull(inputValuesString,""));
create_map.put("classification",classification.replaceAll("[\"#%&'+,;<=>\\^`{}|~]",""));
create_map.put("category",category.replaceAll("[\"#%&'+,;<=>\\^`{}|~]",""));
if(issueType.toString() != "Empty")
{
cf = Map();
cf.put("cf_issue_type",issueType.replaceAll("[\"#%&'+,;<=>\\^`{}|~]",""));
create_map.put("cf",cf);
}
createTicketResp = invokeurl
[
url :"https://desk.zoho.com/api/v1/tickets"
type :POST
parameters:create_map + ""
connection:"zoho_desk"
];
info "createTicketResp = " + createTicketResp;
if(createTicketResp.containsKey("modifiedTime"))
{
ticketId = createTicketResp.get("id");
ticketNumber = createTicketResp.get("ticketNumber");
}
}
/////////////////////////////////////////////////////////////////////////////////////////////
tempStoreMap = Map();
tempStoreMap.put("ticketId",ticketId);
tempStoreMap.put("ticketNumber",ticketNumber);
tempStoreMap.put("finalActions",finalActions);
storeData = zoho.salesiq.visitorsession.set("mediproinc",tempStoreMap,"zoho_salesiq");
/////////////////////////////////////////////////////////////////////////////////////////////
////////////////// Article - Agent - > True ///////////////////////////////////////////////////////
if(finalActions.contains("KB Article"))
{
info "IN: KB Article Condition";
response.put("action","context");
response.put("context_id","issue_resolved_with_kb");
replies = Collection();
replies.insert({"type":"links","text":article_found_message,"links":{{"url":finalArticle,"text":read_article_message}}});
replies.insert(issue_resolved_with_article_message);
question = {"name":"issueResolvedWithKb","replies":replies,"input":{"type":"select","options":{"Yes","No"}}};
response.put("questions",{question});
}
////////////////// Article - > True | Agent -> False /////////////////////////////////////////
else if(!finalActions.contains("KB Article") && finalActions.contains("Talk to an Agent"))
{
response.put("action","context");
response.put("context_id","talk_to_human");
replies = Collection();
if(ticketNumber != null && ticketNumber != "")
{
ticket_team_message = ticket_created_for_team_message.getPrefix("{{") + ticketNumber + ticket_created_for_team_message.getSuffix("}}");
replies.insert(ticket_team_message);
}
replies.insert(talk_to_agent_message);
question = {"name":"connectTo","replies":replies,"input":{"type":"select","options":{"Yes","No"}}};
response.put("questions",{question});
}
////////////////// Agent - Article -> False /////////////////////////////////////////
else if(!finalActions.contains("KB Article") && !finalActions.contains("Talk to an Agent"))
{
if(ticketId != null)
{
//////////////////////////////// Attaching chat Transcript on the Ticket Starts //////////////////////////////////////////
conversation_id = visitor.get("active_conversation_id");
param = Map();
param.put("data","messages");
param.put("format","pdf");
export_chat = invokeurl
[
url :"https://salesiq.zoho.com/api/v2/mediproinc/conversations/" + conversation_id + "/export"
type :POST
parameters:param + ""
connection:"zoho_salesiq"
];
info "Exporting Chat = " + export_chat;
export_chat.setParamName("file");
header = Map();
header.put("Content-Type","multipart/form-data");
////// attach file to ticket ////
attach = invokeurl
[
url :"https://desk.zoho.com/api/v1/tickets/" + ticketId + "/attachments?isPublic=true"
type :POST
headers:header
files:export_chat
connection:"zoho_desk"
];
//////////////////////////////// Attaching chat Transcript on the Ticket Ends //////////////////////////////////////////
}
replies = Collection();
if(finalActions.contains("Closed Ticket"))
{
update_map = Map();
update_map.put("status","Closed");
updateTicketResp = invokeurl
[
url :"https://desk.zoho.com/api/v1/tickets/" + ticketId + ""
type :PATCH
parameters:update_map + ""
connection:"zoho_desk"
];
//////////////////////////////////////////////////////////////
replies.insert(thank_you_for_information_message);
need_futher_help_ticket_message = need_further_help_message.getPrefix("{{") + ticketNumber + need_further_help_message.getSuffix("}}");
replies.insert(need_futher_help_ticket_message);
replies.insert(thank_you_message);
}
else
{
replies.insert(thank_you_for_information_message);
ticket_message = ticket_created_for_team_message.getPrefix("{{") + ticketNumber + ticket_created_for_team_message.getSuffix("}}");
replies.insert(ticket_message);
replies.insert(thank_you_message);
}
response.put("action","end");
response.put("replies",replies);
}
}
///////////////////////////////////////////////////////////////////////////////////////////
if(context_id.equals("issue_resolved_with_kb"))
{
info "IN: Issue Resolved Context";
if(answers.containsKey("issueResolvedWithKb"))
{
ticketId = zoho.salesiq.visitorsession.get("mediproinc","ticketId","zoho_salesiq").get("ticketId");
ticketNumber = zoho.salesiq.visitorsession.get("mediproinc","ticketNumber","zoho_salesiq").get("ticketNumber");
finalActions = zoho.salesiq.visitorsession.get("mediproinc","finalActions","zoho_salesiq").get("finalActions");
info "finalActions: " + finalActions;
///////////////////////////////////////////////////////////////////////////
issueResolvedWithKb = answers.get("issueResolvedWithKb").get("text");
if(issueResolvedWithKb.toString() == "Yes")
{
if(ticketId != null)
{
//////////////////////////////// Attaching chat Transcript on the Ticket Starts //////////////////////////////////////////
conversation_id = visitor.get("active_conversation_id");
param = Map();
param.put("data","messages");
param.put("format","pdf");
export_chat = invokeurl
[
url :"https://salesiq.zoho.com/api/v2/mediproinc/conversations/" + conversation_id + "/export"
type :POST
parameters:param + ""
connection:"zoho_salesiq"
];
info "Exporting Chat = " + export_chat;
export_chat.setParamName("file");
header = Map();
header.put("Content-Type","multipart/form-data");
////// attach file to ticket ////
attach = invokeurl
[
url :"https://desk.zoho.com/api/v1/tickets/" + ticketId + "/attachments?isPublic=true"
type :POST
headers:header
files:export_chat
connection:"zoho_desk"
];
//////////////////////////////// Attaching chat Transcript on the Ticket Ends //////////////////////////////////////////
}
update_map = Map();
update_map.put("status","Closed");
updateTicketResp = invokeurl
[
url :"https://desk.zoho.com/api/v1/tickets/" + ticketId + ""
type :PATCH
parameters:update_map + ""
connection:"zoho_desk"
];
////////////////////////////////////////////////////////////////////////////////////
replies = Collection();
replies.insert(thank_you_for_information_message);
if(ticketNumber != null && ticketNumber != "")
{
referenct_ticket_message = ticket_created_for_reference_message.getPrefix("{{") + ticketNumber + ticket_created_for_reference_message.getSuffix("}}");
replies.insert(referenct_ticket_message);
}
else
{
replies.insert(issue_resolved_message);
}
replies.insert(thank_you_message);
response.put("action","end");
response.put("replies",replies);
}
else if(issueResolvedWithKb.toString() == "No" && !finalActions.contains("Talk to an Agent"))
{
if(ticketId != null)
{
//////////////////////////////// Attaching chat Transcript on the Ticket Starts //////////////////////////////////////////
conversation_id = visitor.get("active_conversation_id");
param = Map();
param.put("data","messages");
param.put("format","pdf");
export_chat = invokeurl
[
url :"https://salesiq.zoho.com/api/v2/mediproinc/conversations/" + conversation_id + "/export"
type :POST
parameters:param + ""
connection:"zoho_salesiq"
];
info "Exporting Chat = " + export_chat;
export_chat.setParamName("file");
header = Map();
header.put("Content-Type","multipart/form-data");
////// attach file to ticket ////
attach = invokeurl
[
url :"https://desk.zoho.com/api/v1/tickets/" + ticketId + "/attachments?isPublic=true"
type :POST
headers:header
files:export_chat
connection:"zoho_desk"
];
//////////////////////////////// Attaching chat Transcript on the Ticket Ends //////////////////////////////////////////
}
replies = Collection();
replies.insert(thank_you_for_information_message);
if(ticketNumber != null && ticketNumber != "")
{
ticket_message = ticket_created_for_team_message.getPrefix("{{") + ticketNumber + ticket_created_for_team_message.getSuffix("}}");
replies.insert(ticket_message);
}
else
{
replies.insert(ticket_not_created_message);
}
replies.insert(thank_you_message);
response.put("action","end");
response.put("replies",replies);
}
else if(issueResolvedWithKb.toString() == "No" && finalActions.contains("Talk to an Agent"))
{
response.put("action","context");
response.put("context_id","talk_to_human");
replies = Collection();
if(ticketNumber != null && ticketNumber != "")
{
ticket_message = ticket_created_for_team_message.getPrefix("{{") + ticketNumber + ticket_created_for_team_message.getSuffix("}}");
replies.insert(ticket_message);
}
replies.insert(talk_to_agent_message);
question = {"name":"connectTo","replies":replies,"input":{"type":"select","options":{"Yes","No"}}};
response.put("questions",{question});
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////
if(context_id.equals("talk_to_human"))
{
ticketId = zoho.salesiq.visitorsession.get("mediproinc","ticketId","zoho_salesiq").get("ticketId");
if(ticketId != null)
{
//////////////////////////////// Attaching chat Transcript on the Ticket Starts //////////////////////////////////////////
conversation_id = visitor.get("active_conversation_id");
param = Map();
param.put("data","messages");
param.put("format","pdf");
export_chat = invokeurl
[
url :"https://salesiq.zoho.com/api/v2/mediproinc/conversations/" + conversation_id + "/export"
type :POST
parameters:param + ""
connection:"zoho_salesiq"
];
info "Exporting Chat = " + export_chat;
export_chat.setParamName("file");
header = Map();
header.put("Content-Type","multipart/form-data");
////// attach file to ticket ////
attach = invokeurl
[
url :"https://desk.zoho.com/api/v1/tickets/" + ticketId + "/attachments?isPublic=true"
type :POST
headers:header
files:export_chat
connection:"zoho_desk"
];
//////////////////////////////// Attaching chat Transcript on the Ticket Ends //////////////////////////////////////////
}
info "IN: talk_to_human Context";
if(answers.containsKey("connectTo"))
{
connectTo = answers.get("connectTo").get("text");
info "connectTo = " + connectTo;
if(connectTo.toString() == "Yes")
{
info departmentId;
// Chat Forward
response.put("action","forward");
response.put("department",departmentId);
response.put("replies",{connect_to_agent_message});
}
else
{
replies = Collection();
replies.insert(thank_you_for_information_message);
replies.insert(ticket_not_created_message);
response.put("action","end");
response.put("replies",replies);
}
}
}
return response;