private static async Task ResumeAfterHomeQuoteFormDialog(IDialogContext context, IAwaitable <HomeQuote> result) { var state = await result; try { var quoteRepository = new QuoteRepository(Connection); var conversationRepository = new ConversationRepository(Connection); var reply = context.MakeMessage(); var homeService = new Household(); var homeWebServiceRequest = HomeQuote.BuildHomeWebServiceRequest(state); var quotes = new List <HomeQuoteWebServiceResult>(); var response = homeService.GetQuotes(homeWebServiceRequest); if (response.Quotes != null) { foreach (var quote in response.Quotes) { quotes.Add(quote); } reply.AttachmentLayout = AttachmentLayoutTypes.Carousel; reply.Attachments = GetQuoteReceipts(quotes); quoteRepository.StoreQuote ( context.Activity.Conversation.Id, response.Quotes[0].RelayQuoteId, new JavaScriptSerializer().Serialize(quotes) ); } else { reply.Text = "Sorry, we couldn't get any quotes for you."; } await context.PostAsync(reply); if (SendEmails) { var emailBodyForUser = EmailHandler.BuildHomeEmailBodyForUser(response.Quotes, state.FirstName, state.LastName, state.PrimaryContactNumber, state.EmailAddress, state.FirstLineOfAddress, state.Town, state.County, state.PropertyType.GetDescription(), state.ResidenceType.GetDescription(), state.YearBuilt, state.NumberOfBedrooms.ToString()); EmailHandler.SendEmailToUser(state.EmailAddress, $"{state.FirstName} {state.LastName}", emailBodyForUser); var emailBodyForBroker = EmailHandler.BuildHomeEmailBodyForBroker(response.Quotes, state.FirstName, state.LastName, state.PrimaryContactNumber, state.EmailAddress, state.FirstLineOfAddress, state.Town, state.County, state.PropertyType.GetDescription(), state.ResidenceType.GetDescription(), state.YearBuilt, state.NumberOfBedrooms.ToString()); EmailHandler.SendEmailToBroker(state.EmailAddress, $"{state.FirstName} {state.LastName}", emailBodyForBroker); } conversationRepository.StoreConversation ( context.Activity.Conversation.Id, context.Activity.From.Id, DateTime.Now.ToString(new CultureInfo("en-GB")), new JavaScriptSerializer().Serialize(context) ); } catch (Exception exception) { var errorRepository = new ErrorRepository(Connection); errorRepository.LogError(context.Activity.Conversation.Id, context.Activity.From.Id, DateTime.Now.ToString(), context.ConversationData.ToString(), exception.ToString()); throw; } finally { context.Done(state); } }