/// <summary> /// Проверка полученного токена на валидность (?) /// </summary> /// <param name="token"></param> /// <returns></returns> public bool CheckAuthorization(string token, string session) { try { WebClient web = new WebClient(); web.Headers.Add(HttpRequestHeader.Authorization, token); /*web.Proxy = new WebProxy() * { * Address = new Uri("http://85.234.124.34:41088"), * BypassProxyOnLocal = true, * UseDefaultCredentials = false, * Credentials = new NetworkCredential("telega", "client") * };*/ string reply = web.DownloadString("https://login.yandex.ru/info?format=json"); YandexPassportReply result = JsonConvert.DeserializeObject <YandexPassportReply>(reply, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore }); var lunchService = new AliceLunchService(); DataSet data = lunchService.Call("AliceUsersService", session, "GET", "USER", new string[] { result.ID }); if (data.Tables[0].Rows.Count == 0) { List <string> keysString = new List <string>(); List <string> valString = new List <string>(); var count = result.GetType().GetProperties(); foreach (var key in result.GetType().GetProperties()) { if (key.GetValue(result) != null && key.GetValue(result).GetType() != typeof(string[]) && key.Name != "bIsAvatarEmpty") { keysString.Add(key.Name); valString.Add("'" + key.GetValue(result).ToString() + "'"); } } string command = ("insert into AliceUsers(" + String.Join(",", keysString) + ")" + "values(" + String.Join(",", valString) + ");" + "insert into AliceSessions(UserID, SessionID)" + "values((select AliceUsers.AliceUser from AliceUsers where AliceUsers.ID = '" + result.ID + "'),'" + session + "'));"); lunchService.Execute(command); return(true); } else { foreach (DataRow row in data.Tables[0].Rows) { if (row["ID"].ToString() == result.ID.ToString()) { return(true); } } return(false); } } catch (Exception e) { return(false); } }
/// <summary> /// Обработка запроса навыка "Обеды в офис" /// </summary> /// <param name="aliceRequest"></param> /// <returns></returns> public string ProcessLunchRequest(AliceRequest aliceRequest) { try { if (aliceRequest.Request.nlu.tokens.Count() == 0) { return("Здравствуйте! ..."); } else { var lunchService = new AliceLunchService(); FillCategoryKeywords(lunchService, aliceRequest.Session.SessionId, "AliceLunchService"); var result = MatchDialogState(aliceRequest.Request.nlu.tokens, 3); if (result == null) { return("Не могу понять, чего вы хотите. Повторите команду."); } switch (result.Id) { case 1: { return("чтобы посмотреть меню произнесите \"Открой меню\", \r\n чтобы сделать заказ произдесите \"Заказать\" и Назовите блюдо из меню, \r\n" + "чтобы сделать доставку на адрес произнесите \"Оформи доставку\""); } case 2: { return("Навык \"\" позволяет посмотреть меню в ресторане \"Name\", сделать заказ в этом ресторане и оформить доставку по адресу"); } case 3: { return("trash"); } case 4: { //история заказов DataSet data = lunchService.Call("AliceLunchService", aliceRequest.Session.SessionId, "GET", "HISTORY", new string[] { aliceRequest.Session.UserId }); ///sessionId ///orderId ///date /// if (data.Tables[0].Rows.Count == 0) { return("Еще не было сделано ни одного заказа"); } string history = "Последние заказы: \r\n"; StringBuilder orders = new StringBuilder(); foreach (DataRow order in data.Tables[0].Rows) { orders.Append(order.ItemArray[data.Tables[0].Columns.IndexOf("OrderDate")].ToString() + ": "); orders.Append("Заказ № " + order.ItemArray[data.Tables[0].Columns.IndexOf("ID")].ToString() + "\r\n"); } return(history + orders.ToString()); } case 5: { //корзина DataSet data = lunchService.Call("AliceLunchService", aliceRequest.Session.SessionId, "GET", "ORDER"); ///sessionId ///orderId ///item ///coast if (data.Tables[0].Rows.Count == 0) { return("Корзина пуста"); } string basket = "Заказ №: " + data.Tables[0].Rows[0]["ID"].ToString() + "\r\n"; StringBuilder orders = new StringBuilder(); foreach (DataRow order in data.Tables[0].Rows) { orders.Append(order["Item"].ToString() + ": "); orders.Append(order["Coast"].ToString() + "\r\n"); } return(basket + orders.ToString()); } case 6: { //меню DataSet data = lunchService.Call("AliceLunchService", aliceRequest.Session.SessionId, "GET", "MENU"); ///groupItem /// if (data.Tables[0].Rows.Count == 0) { return("Нет категорий в меню"); } StringBuilder menu = new StringBuilder(); foreach (DataRow item in data.Tables[0].Rows) { menu.Append(Decode(item["Category"].ToString()) + "\r\n"); } return("Выберите категорию из нижеперечисленных: \r\n" + menu.ToString()); } case 7: { ///элемент категории DataSet data = lunchService.Call("AliceLunchService", aliceRequest.Session.SessionId, "GET", "MENU", aliceRequest.Request.nlu.tokens); if (data.Tables[0].Rows.Count == 0) { return("Нет элементов категории"); } StringBuilder menu = new StringBuilder(); foreach (DataRow item in data.Tables[0].Rows) { menu.Append(item["Item"].ToString() + " : " + item["Coast"].ToString() + "\r\n"); } return(menu.ToString()); } case 8: { //order DataSet data = lunchService.Call("AliceLunchService", aliceRequest.Session.SessionId, "GET", "ORDER"); if (data.Tables[0].Rows.Count == 0) { lunchService.Call("AliceLunchService", aliceRequest.Session.SessionId, "ADD", "ORDER"); } else if (data.Tables[0].Rows[0]["OrderState"].ToString() == "ready") { return("Заказ уже сформирован и отправлен, чтобы отменить заказ - позвоните 7(123) 456 - 78 - 90"); } //addToOrder //убираем из токена активационные фразы //var itemWords = aliceRequest.Request.nlu.tokens.ToList().Where(x => result.Keywords[0].ToList().IndexOf(x) == -1); var itemWords = aliceRequest.Request.nlu.tokens.ToList().Except(result.Keywords[0].ToList()); //запрос в базу на соответствие, возвращает точное название из меню DataSet item = lunchService.Call("AliceLunchService", aliceRequest.Session.SessionId, "UPD", "ORDER", itemWords.ToArray()); if (item.Tables[0].Rows[0]["MenuItem"] != null) { return(item.Tables[0].Rows[0]["MenuItem"] + ", добавлено к заказу, можете добавить к заказу чтото еще, либо завершить заказ"); } else { return("Кажется, такой позиции нет в меню этого ресторана, попробуйте еще раз"); } } case 9: { //order end DataSet data = lunchService.Call("AliceLunchService", aliceRequest.Session.SessionId, "END", "ORDER"); if (data.Tables[0].Rows[0]["OrderState"].ToString() == "ready") { string address = "MagazineAddress"; return($"Заказ № {data.Tables[0].Rows[0]["ID"]} принят, забрать его можно по адресу {address} или можете попросить меня оформить доставку"); } else { return("Произошла ошибка, попробуйте еще раз"); } } case 10: { //доставка DataSet data = lunchService.Call("AliceLunchService", aliceRequest.Session.SessionId, "GET", "DELIVERY"); if (data.Tables[0].Rows.Count == 0) { lunchService.Call("AliceLunchService", aliceRequest.Session.SessionId, "ADD", "DELIVERY"); return("Скажите \"Адрес\" или \"Телефон\" и назовите адрес на который необходимо организовать доставку или телефон для подтверждения"); } else { if (data.Tables[0].Rows[0]["Address"].ToString() == "") { return("Необходимо записать адрес доставки, скажите \"Адрес\" и назовите адрес, на который необходимо организовать доставку"); } else if (data.Tables[0].Rows[0]["Phone"].ToString() == "") { return("Необходимо записать номер телефона, скажите \"Телефон\" и назовите номер телефона"); } else { return("Данные для доставки \r\n Адрес: " + data.Tables[0].Rows[0]["Address"] + ", Телефон: " + data.Tables[0].Rows[0]["Phone"]); } } } case 11: { DataSet data = lunchService.Call("AliceLunchService", aliceRequest.Session.SessionId, "GET", "DELIVERY"); var itemWords = aliceRequest.Request.nlu.tokens.ToList().Except(result.Keywords[0].ToList()); string phrase = String.Join(' ', itemWords); if (data.Tables[0].Rows.Count == 0) { return("Не понимаю о чем вы, попробуйте еще раз"); } else { if (aliceRequest.Request.nlu.tokens.Contains("адрес")) { if (data.Tables[0].Rows[0]["Address"].ToString() == "") { lunchService.Call("AliceLunchService", aliceRequest.Session.SessionId, "ADD", "ADDRESS", new string[] { phrase }); if (data.Tables[0].Rows[0]["Phone"].ToString() == "") { return("Адрес " + phrase + " записан, Необходимо записать номер телефона, скажите \"Телефон\" и назовите номер телефона"); } else { return("Адрес " + phrase + " записан"); } } else { lunchService.Call("AliceLunchService", aliceRequest.Session.SessionId, "ADD", "ADDRESS", new string[] { phrase }); if (data.Tables[0].Rows[0]["Phone"].ToString() == "") { return("Адрес " + phrase + " перезаписан, Необходимо записать номер телефона, скажите \"Телефон\" и назовите номер телефона"); } else { return("Адрес " + phrase + " перезаписан"); } } } else if (aliceRequest.Request.nlu.tokens.Contains("телефон")) { if (data.Tables[0].Rows[0]["Phone"].ToString() == "") { lunchService.Call("AliceLunchService", aliceRequest.Session.SessionId, "ADD", "PHONE", new string[] { phrase }); if (data.Tables[0].Rows[0]["Address"].ToString() == "") { return("Телефон " + phrase + " записан, Необходимо записать адрес доставки, скажите \"Адрес\" и назовите адрес, на который необходимо организовать доставку"); } else { return("Телефон " + phrase + " записан"); } } else { lunchService.Call("AliceLunchService", aliceRequest.Session.SessionId, "ADD", "PHONE", new string[] { phrase }); if (data.Tables[0].Rows[0]["Address"].ToString() == "") { return("Телефон " + phrase + " перезаписан, Необходимо записать адрес доставки, скажите \"Адрес\" и назовите адрес, на который необходимо организовать доставку"); } else { return("Телефон " + phrase + " перезаписан"); } } } else { return("Как вы сюда попали?"); } } } default: { return("абсолютно неожиданная ошибка"); } } } } catch (Exception ex) { return("К сожалению произошла ошибка. Попробуйте перезапустить навык. Прошу прощения за доставленные неудобства."); } }