public API_TroLyAoData_Out TroLyAo_Execute(API_TroLyAoData_In data) { //Output API_TroLyAoData_Out mAPI_TroLyAoData_Out = new API_TroLyAoData_Out(); mAPI_TroLyAoData_Out.Language = "vi-VN"; //Kiểm tra data if (data == null) { mAPI_TroLyAoData_Out.Data = "Bạn hãy hỏi gì đi..."; mAPI_TroLyAoData_Out.ID = Sanita.Utility.Encryption.CryptorEngine.CreateMD5Hash(mAPI_TroLyAoData_Out.Data); return(mAPI_TroLyAoData_Out); } //Kiểm tra device Device mDevice = DevicePresenter.GetDevice(data.DeviceID); if (mDevice.DeviceID <= 0) { mAPI_TroLyAoData_Out.Data = "Thiết bị của bạn chưa được đăng ký."; mAPI_TroLyAoData_Out.ID = Sanita.Utility.Encryption.CryptorEngine.CreateMD5Hash(mAPI_TroLyAoData_Out.Data); return(mAPI_TroLyAoData_Out); } //Kiểm tra user User mUser = UserPresenter.GetUser(mDevice.UserID); if (mUser.APIKey != data.API_Key) { mAPI_TroLyAoData_Out.Data = "API key không đúng."; mAPI_TroLyAoData_Out.ID = Sanita.Utility.Encryption.CryptorEngine.CreateMD5Hash(mAPI_TroLyAoData_Out.Data); return(mAPI_TroLyAoData_Out); } if (!MyVar.mListDevice.Any(p => p.DeviceID == mDevice.DeviceID)) { MyVar.mListDevice.Add(mDevice); } mDevice = MyVar.mListDevice.FirstOrDefault(p => p.DeviceID == mDevice.DeviceID); mDevice.mUser = mUser; //Xử lý input data.Data = XuLyDuLieu(data.Data); //Lấy danh sách request IList <Intent_Request> mListRequest = Intent_RequestPresenter.GetIntent_Requests(data.Data); //Lọc theo bối cảnh hiện tại IList <Intent_Request> mListRequest_Current = mListRequest.Where(p => p.Current_DM_Entity_TypeID == mDevice.Current_DM_Entity_TypeID && p.Current_DM_Intent_TypeID == mDevice.Current_DM_Intent_TypeID).ToList(); if (mListRequest_Current.Count == 0) { mListRequest_Current = mListRequest.Where(p => p.Current_DM_Entity_TypeID == 0 && p.Current_DM_Intent_TypeID == 0).ToList(); } if (mListRequest_Current.Count > 0) { mListRequest = mListRequest_Current; } //Sắp xếp IList <Intent_Request> mListRequest_NoneParam = mListRequest.Where(p => !p.Data.Contains("<") && !p.Data.Contains(">")).OrderByDescending(p => p.Data.Length).ToList(); IList <Intent_Request> mListRequest_Param = mListRequest.Where(p => p.Data.Contains("<") && p.Data.Contains(">")).OrderByDescending(p => p.Data.Length).ToList(); mListRequest = mListRequest_NoneParam.Concat(mListRequest_Param).ToList(); Intent_Request mIntent_Request = new Intent_Request(); foreach (Intent_Request request in mListRequest) { String request_data = request.Data; request_data = request_data ?? ""; request_data = request_data.Replace("<*>", "(.*)"); request_data = request_data.Replace("<", "(?<"); request_data = request_data.Replace(">", ">(.+))"); request_data = "^" + request_data + "$"; Regex mRegex = new Regex(request_data, RegexOptions.IgnoreCase | RegexOptions.Singleline); if (mRegex.IsMatch(data.Data)) { mIntent_Request = request; mDevice.Current_DM_Intent_TypeID = mIntent_Request.DM_Intent_TypeID; mDevice.Current_DM_Entity_TypeID = mIntent_Request.DM_Entity_TypeID; GroupCollection groups = mRegex.Match(data.Data).Groups; foreach (string groupName in mRegex.GetGroupNames()) { EntityParam mEntityParam = new EntityParam(); mEntityParam.Name = groupName; mEntityParam.Value = groups[groupName].Value; mIntent_Request.mListParam.Add(mEntityParam); } } } //Set device mIntent_Request.mDevice = mDevice; //Xử lý request String response_request = XuLyRequest(mIntent_Request); if (!String.IsNullOrEmpty(response_request)) { mAPI_TroLyAoData_Out.Data = response_request; mAPI_TroLyAoData_Out.ID = Sanita.Utility.Encryption.CryptorEngine.CreateMD5Hash(mAPI_TroLyAoData_Out.Data); return(mAPI_TroLyAoData_Out); } //Get response Intent_Response mIntent_Response = Intent_ResponsePresenter.GetIntent_Response_Request(mIntent_Request); if (String.IsNullOrEmpty(mIntent_Response.Data)) { mIntent_Response.Data = "Xin lỗi... Tôi không hiểu !"; } //Update global if (mIntent_Response.Data.Contains("<") && mIntent_Response.Data.Contains(">")) { mIntent_Response.Data.Replace("<thoi_gian_hien_tai>", String.Format("{0:HH:mm}", SystemInfo.NOW)); mIntent_Response.Data.Replace("<ngay_hien_tai>", String.Format("{0:dd/MM/yyyy}", SystemInfo.NOW)); mIntent_Response.Data.Replace("<thu_hien_tai>", String.Format("{0}", SystemInfo.NOW.GetThu())); mIntent_Response.Data.Replace("<ngay_mai>", String.Format("{0:dd/MM/yyyy}", SystemInfo.NOW.AddDays(1))); mIntent_Response.Data.Replace("<thu_mai>", String.Format("{0}", SystemInfo.NOW.AddDays(1).GetThu())); } //Return mAPI_TroLyAoData_Out.Data = mIntent_Response.Data; mAPI_TroLyAoData_Out.ID = Sanita.Utility.Encryption.CryptorEngine.CreateMD5Hash(mAPI_TroLyAoData_Out.Data); return(mAPI_TroLyAoData_Out); #if false //Check if (data.Data.Contains("thời tiết") && data.Data.Contains("hôm nay")) { String thu = ""; if (SystemInfo.NOW.DayOfWeek == DayOfWeek.Sunday) { thu = String.Format("chủ nhật"); } else { thu = String.Format("thứ {0}", (int)SystemInfo.NOW.DayOfWeek + 1); } mAPI_TroLyAoData_Out.Data = String.Format("Dự báo thời tiết hôm nay ở Quan Khê, Hải Dương {0} ngày {1:dd/MM} có mưa rào nhẹ, nhiệt độ từ 26 đến 32 độ, độ ẩm 94%", thu, SystemInfo.NOW); } else if ((data.Data.Contains("thời tiết") && data.Data.Contains("ngày mai")) || data.Data.Contains("còn ngày mai")) { String thu = ""; if (SystemInfo.NOW.AddDays(1).DayOfWeek == DayOfWeek.Sunday) { thu = String.Format("chủ nhật"); } else { thu = String.Format("thứ {0}", (int)SystemInfo.NOW.AddDays(1).DayOfWeek + 1); } mAPI_TroLyAoData_Out.Data = String.Format("Dự báo thời tiết ngày mai ở Quan Khê, Hải Dương {0} ngày {1:dd/MM} trời nhiều mây và nắng nhẹ, nhiệt độ từ 26 đến 33 độ, độ ẩm 76%", thu, SystemInfo.NOW.AddDays(1)); } else if (data.Data.Contains("mấy giờ rồi") || data.Data.Contains("bây giờ là mấy giờ")) { mAPI_TroLyAoData_Out.Data = String.Format("Thời gian là {0:HH:mm} phút", SystemInfo.NOW); } else if (data.Data.Contains("hôm nay") && data.Data.Contains("thứ mấy")) { if (SystemInfo.NOW.DayOfWeek == DayOfWeek.Sunday) { mAPI_TroLyAoData_Out.Data = String.Format("Hôm nay là chủ nhật"); } else { mAPI_TroLyAoData_Out.Data = String.Format("Hôm nay là thứ {0}", (int)SystemInfo.NOW.DayOfWeek + 1); } } else if (data.Data.Contains("ngày mai") && data.Data.Contains("thứ mấy")) { if (SystemInfo.NOW.AddDays(1).DayOfWeek == DayOfWeek.Sunday) { mAPI_TroLyAoData_Out.Data = String.Format("Ngày mai là chủ nhật"); } else { mAPI_TroLyAoData_Out.Data = String.Format("Ngày mai là thứ {0}", (int)SystemInfo.NOW.AddDays(1).DayOfWeek + 1); } } else if (data.Data.EqualText("bạn là ai") || data.Data.EqualText("bạn là cái gì")) { mAPI_TroLyAoData_Out.Data = "Tôi là trợ lý ảo của bạn đây"; } else if (data.Data.EqualText("tên bạn là gì")) { mAPI_TroLyAoData_Out.Data = "Tôi chưa tự giới thiệu sao ? Tên tôi là Daisy !"; } else if (data.Data.Contains("bạn biết hát không") || data.Data.Contains("bạn có biết hát không") || data.Data.Contains("hát cho tôi nghe")) { mAPI_TroLyAoData_Out.Data += "<speak>"; mAPI_TroLyAoData_Out.Data += "<p>"; mAPI_TroLyAoData_Out.Data += "<s>Xin lỗi, giờ tôi vẫn chưa biết hát.</s>"; mAPI_TroLyAoData_Out.Data += "<s>Thay vào đó, tôi có thể đọc lời bài hát cho bạn tự tưởng tượng theo.</s>"; mAPI_TroLyAoData_Out.Data += "<break time=\"300ms\"/>"; mAPI_TroLyAoData_Out.Data += "<s>Kìa con bướm vàng.</s>"; mAPI_TroLyAoData_Out.Data += "<s>Kìa con bướm vàng.</s>"; mAPI_TroLyAoData_Out.Data += "<s>Xòe đôi cánh.</s>"; mAPI_TroLyAoData_Out.Data += "<s>Xòe đôi cánh.</s>"; mAPI_TroLyAoData_Out.Data += "<s>Tung cánh bay năm ba vòng.</s>"; mAPI_TroLyAoData_Out.Data += "<s>Tung cánh bay năm ba vòng.</s>"; mAPI_TroLyAoData_Out.Data += "<s>Em ngồi xem...</s>"; mAPI_TroLyAoData_Out.Data += "<s>Em ngồi xem...</s>"; mAPI_TroLyAoData_Out.Data += "</p>"; mAPI_TroLyAoData_Out.Data += "</speak>"; } else if (data.Data.Contains("bạn đang ở đâu")) { mAPI_TroLyAoData_Out.Data += "<speak>"; mAPI_TroLyAoData_Out.Data += "<p>"; mAPI_TroLyAoData_Out.Data += "<s>Tôi ở trong thiết bị này.</s>"; mAPI_TroLyAoData_Out.Data += "<s>cả máy tính bảng có ngay khi cần.</s>"; mAPI_TroLyAoData_Out.Data += "<s>Google home cũng có phần.</s>"; mAPI_TroLyAoData_Out.Data += "<s>Ôi nhiều nhà quá phân vân chọn hoài.</s>"; mAPI_TroLyAoData_Out.Data += "</p>"; mAPI_TroLyAoData_Out.Data += "</speak>"; } else if (data.Data.Contains("truyện cười") || data.Data.Contains("chuyện cười")) { mAPI_TroLyAoData_Out.Data += "<speak>"; mAPI_TroLyAoData_Out.Data += "<p>"; mAPI_TroLyAoData_Out.Data += "<s>Được, bạn nghe nhé !</s>"; mAPI_TroLyAoData_Out.Data += "<break time=\"300ms\"/>"; mAPI_TroLyAoData_Out.Data += "<s>Trong giờ địa lý, thầy hỏi trò.</s>"; mAPI_TroLyAoData_Out.Data += "<s>Em hãy nói ba lý do khiến em chắc rằng trái đất hình cầu.</s>"; mAPI_TroLyAoData_Out.Data += "<s>Thưa thầy, bố em nói thế, mẹ em nói thế và thầy cũng nói thế ạ !</s>"; mAPI_TroLyAoData_Out.Data += "<audio src=\"https://ia601507.us.archive.org/31/items/google_cuoi/google_cuoi.ogg\"/>"; mAPI_TroLyAoData_Out.Data += "</p>"; mAPI_TroLyAoData_Out.Data += "</speak>"; } else if (data.Data.Contains("truyện khác") || data.Data.Contains("chuyện khác")) { mAPI_TroLyAoData_Out.Data += "<speak>"; mAPI_TroLyAoData_Out.Data += "<p>"; mAPI_TroLyAoData_Out.Data += "<s>Được, nghe tôi kể đây này !</s>"; mAPI_TroLyAoData_Out.Data += "<break time=\"300ms\"/>"; mAPI_TroLyAoData_Out.Data += "<s>Ngày đầu tiên bé đi học về, bố mẹ hỏi. Ở lớp thế nào con ?</s>"; mAPI_TroLyAoData_Out.Data += "<s>Vui lắm bố ạ, cô giáo con xinh lắm !</s>"; mAPI_TroLyAoData_Out.Data += "<s>Thế cô dạy con những gì ?</s>"; mAPI_TroLyAoData_Out.Data += "<s>Cô chẳng biết gì cả ! Cái gì cũng phải hỏi : Em nào cho cô biết nào.</s>"; mAPI_TroLyAoData_Out.Data += "<audio src=\"https://ia601507.us.archive.org/31/items/google_cuoi/google_cuoi.ogg\"/>"; mAPI_TroLyAoData_Out.Data += "</p>"; mAPI_TroLyAoData_Out.Data += "</speak>"; } else if (data.Data.EqualText("bật đèn phòng khách")) { mAPI_TroLyAoData_Out.Data = "OK, đã bật đèn phòng khách"; } else if (data.Data.EqualText("tắt đèn phòng khách")) { mAPI_TroLyAoData_Out.Data = "OK, đã tắt đèn phòng khách"; } else if (data.Data.EqualText("bật điều hòa") || data.Data.EqualText("tôi nóng quá")) { mAPI_TroLyAoData_Out.Data = "OK, đã bật điều hòa"; } else if (data.Data.EqualText("để điều hòa 26 độ")) { mAPI_TroLyAoData_Out.Data = "OK, đã để điều hòa 26 độ C"; } //Return if (String.IsNullOrEmpty(mAPI_TroLyAoData_Out.Data)) { mAPI_TroLyAoData_Out.Data = "Xin lỗi... Tôi không hiểu !"; } mAPI_TroLyAoData_Out.ID = Sanita.Utility.Encryption.CryptorEngine.CreateMD5Hash(mAPI_TroLyAoData_Out.Data); mAPI_TroLyAoData_Out.Language = "vi-VN"; return(mAPI_TroLyAoData_Out); #endif }