/// <summary> /// Helper function to update greeting state with entities returned by LUIS. /// </summary> /// <param name="luisResult">LUIS recognizer <see cref="RecognizerResult"/>.</param> /// <param name="turnContext">A <see cref="ITurnContext"/> containing all the data needed /// for processing this conversation turn.</param> /// <returns>A task that represents the work queued to execute.</returns> private async Task UpdateBlockchainState(RecognizerResult luisResult, ITurnContext turnContext) { if (luisResult.Entities != null && luisResult.Entities.HasValues) { // Get latest GreetingState await _blockchainStateAccessor.DeleteAsync(turnContext); BlockchainState blockchainState = await _blockchainStateAccessor.GetAsync(turnContext, () => new BlockchainState()); JObject entities = luisResult.Entities; // Supported LUIS Entities string[] askingPriceEntities = { "askingprice" }; string[] descriptionEntities = { "description" }; // Update any entities // Note: Consider a confirm dialog, instead of just updating. foreach (string askingPriceEntity in askingPriceEntities) { // Check if we found valid slot values in entities returned from LUIS. if (entities[askingPriceEntity] != null) { string askingPrice = (string)entities[askingPriceEntity][0]; blockchainState.AskingPrice = int.Parse(askingPrice); break; } } foreach (string descriptionEntity in descriptionEntities) { if (entities[descriptionEntity] != null) { blockchainState.Description = (string)entities[descriptionEntity][0]; break; } } // Set the new values into state. await _blockchainStateAccessor.SetAsync(turnContext, blockchainState); } }
// Helper function to greet user with information in GreetingState. private async Task <DialogTurnResult> SellOnMarketplace(WaterfallStepContext stepContext) { ITurnContext context = stepContext.Context; BlockchainState greetingState = await UserProfileAccessor.GetAsync(context); HttpClient httpClient = new HttpClient { BaseAddress = new Uri(_botServices.BlockchainEndpoint), }; HttpResponseMessage response = await httpClient.PostAsync("", new StringContent(JsonConvert.SerializeObject(new MarketplaceRequest() { Description = greetingState.Description, AskingPrice = greetingState.AskingPrice, Email = "*****@*****.**", }))); string result = await response.Content.ReadAsStringAsync(); // Display their profile information and end dialog. await context.SendActivityAsync($"Your item is now for sale!"); return(await stepContext.EndDialogAsync()); }