private async Task <bool> ValidateItemPrompt(PromptValidatorContext <string> promptContext, CancellationToken cancellationToken) { var convState = await StateAccessor.GetAsync(promptContext.Context, () => new HospitalitySkillState()); if (promptContext.Recognized.Succeeded && !string.IsNullOrWhiteSpace(promptContext.Recognized.Value)) { var numWords = promptContext.Recognized.Value.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Length; await GetEntities(promptContext.Context); // TODO handle if item not recognized as entity if (convState.ItemList.Count == 0 && (numWords == 1 || numWords == 2)) { var itemRequest = new ItemRequestClass { Item = new string[] { promptContext.Recognized.Value } }; convState.ItemList.Add(itemRequest); } if (convState.ItemList.Count > 0) { return(await Task.FromResult(true)); } } return(await Task.FromResult(false)); }
private async Task GetEntities(ITurnContext turnContext) { var convState = await StateAccessor.GetAsync(turnContext, () => new HospitalitySkillState()); var entities = convState.LuisResult.Entities; if (entities.ItemRequest != null) { // items with quantity convState.ItemList.AddRange(entities.ItemRequest); } if (!string.IsNullOrWhiteSpace(entities.Item?[0])) { // items identified without specified quantity for (int i = 0; i < entities.Item.Length; i++) { var itemRequest = new ItemRequestClass { Item = new string[] { entities.Item[i] } }; convState.ItemList.Add(itemRequest); } } }