/// <summary> /// Handles the incoming message from the user. /// Checks if its a standard pre-defined message from the user and handles accordingly. /// If not, then it passes the message to the Dialogflow (API.AI) service to decode. /// </summary> public static Activity HandleBotRequest(Activity userMessage) { try { if (BotHelperService.IsGifRecipyRequest(userMessage.Text)) { // Sends a GIF recipe return(RecipePuppyService.GetRecipeGif(userMessage, string.Empty)); } else if (BotHelperService.IsRandomRecipeRequest(userMessage.Text)) { // Sends a random recipe return(RecipePuppyService.GetRandomRecipe(userMessage, string.Empty)); } else if (BotHelperService.IsNewRecipeForRequest(userMessage.Text)) { // Sends a recipe for a particular item queried return(RecipePuppyService.GetRecipeFor(userMessage, BotConstants.OtherConstants.DefaultRecipeDish, string.Empty)); } else if (BotHelperService.IsNewRecipeWithRequest(userMessage.Text)) { // Sends a recipe for the ingredients queried return(RecipePuppyService.GetRecipeWith(userMessage, BotConstants.OtherConstants.DefaultIngredients, string.Empty)); } else if (BotHelperService.IsTopNRecipesRequest(userMessage.Text)) { // Send the top N recipes where N is a number return(RecipePuppyService.GetTopNRecipes(userMessage, BotConstants.OtherConstants.DefaultTopN, string.Empty)); } else if (BotHelperService.IsAboutRequest(userMessage.Text)) { // Return the about us message return(BotHelperService.AboutResponse(userMessage, string.Empty)); } else if (BotHelperService.IsHelpOrGetStartedRequest(userMessage.Text)) { // Returns the get started/help generic message return(BotHelperService.GetStartedResponse(userMessage, string.Empty)); } else if (BotHelperService.IsVersionRequest(userMessage.Text)) { // Returns the version response return(BotHelperService.VersionResponse(userMessage)); } else if (BotHelperService.IsFeedbackRequest(userMessage.Text)) { // Returns the feedback response return(BotHelperService.FeedbackResponse(userMessage, string.Empty)); } else { // Send the queries message to the API.AI handler for further processing return(ApiAiService.HandleNaturalInput(userMessage)); } } catch (Exception e) { System.Diagnostics.Trace.TraceError("Class BotService | HandleBotRequest() | Oops, something happened " + e.Message); System.Diagnostics.Trace.TraceError(e.StackTrace); return(userMessage.CreateReply("Gosh, this is embarrassing. Looks like we're having some trouble with that request. Maybe try sending a different request or try again later?")); } }
/// <summary> /// Handles other non-pre-defined messages in the bot. /// These messages are passed to the DialogFlow API to process. /// </summary> public static Activity HandleNaturalInput(Activity message) { try { var response = SendRequestToApiAi(message); switch (response.Result.Action) { // Returns the recipe for an item searched case BotConstants.ApiAiActionConstants.RecipyCookFor: var entityRecipyCookFor = MiscService.GetFoodEntities(response.Result.Parameters, BotConstants.FoodEntitiesEnum.Recipe); if (string.IsNullOrEmpty(entityRecipyCookFor)) { return(message.CreateReply(response.Result.Fulfillment.Speech)); } return(RecipePuppyService.GetRecipeFor(message, entityRecipyCookFor, response.Result.Fulfillment.Speech)); // Returns the recipe of the day case BotConstants.ApiAiActionConstants.RecipyOfTheDay: return(RecipePuppyService.GetRandomRecipe(message, response.Result.Fulfillment.Speech)); // Returns a random recipe case BotConstants.ApiAiActionConstants.RecipyRandom: return(RecipePuppyService.GetRandomRecipe(message, response.Result.Fulfillment.Speech)); // Return a recipe for the ingredients queried case BotConstants.ApiAiActionConstants.RecipyCookWith: var entityRecipyCookWith = MiscService.GetFoodEntities(response.Result.Parameters, BotConstants.FoodEntitiesEnum.FoodItem); if (string.IsNullOrEmpty(entityRecipyCookWith)) { return(message.CreateReply(response.Result.Fulfillment.Speech)); } return(RecipePuppyService.GetRecipeWith(message, JsonConvert.DeserializeObject <string[]>(entityRecipyCookWith), response.Result.Fulfillment.Speech)); // Returns a GIF recipe case BotConstants.ApiAiActionConstants.RecipyShowGif: return(RecipePuppyService.GetRecipeGif(message, response.Result.Fulfillment.Speech)); // Returns top N recipes where N is a number case BotConstants.ApiAiActionConstants.RecipyTopN: return(RecipePuppyService.GetTopNRecipes(message, MiscService.GetNumericEntity(response.Result.Parameters), response.Result.Fulfillment.Speech)); // Returns a generic about response case BotConstants.ApiAiActionConstants.GeneralAbout: return(BotHelperService.AboutResponse(message, response.Result.Fulfillment.Speech)); // Returns a generic help/get started response case BotConstants.ApiAiActionConstants.GeneralGetStarted: return(BotHelperService.GetStartedResponse(message, response.Result.Fulfillment.Speech)); // Returns a generic help/get started response case BotConstants.ApiAiActionConstants.GeneralHelp: return(BotHelperService.GetStartedResponse(message, response.Result.Fulfillment.Speech)); // Returns a generic version response case BotConstants.ApiAiActionConstants.GeneralVersion: return(BotHelperService.VersionResponse(message)); // Returns a generic feedback response case BotConstants.ApiAiActionConstants.GeneralFeedback: return(BotHelperService.FeedbackResponse(message, response.Result.Fulfillment.Speech)); // Returns a response from API.AI for general smalltalk case BotConstants.ApiAiActionConstants.GeneralSmallTalk: return(message.CreateReply(response.Result.Fulfillment.Speech)); // Returns a response from API.AI directly default: return(message.CreateReply(response.Result.Fulfillment.Speech)); } } catch (Exception e) { System.Diagnostics.Trace.TraceError("Class ApiAiService | HandleNaturalInput() | Oops, something happened " + e.Message); System.Diagnostics.Trace.TraceError(e.StackTrace); return(message.CreateReply("Well, that's unexpected. Apologies, but looks like one of our systems is having some trouble digesting that request. Maybe try a differnt request or try again later?")); } }