//////////////////////////////// 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;
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter