/// <summary> /// Initializes a new instance of the <see cref="LuisBot"/> class. /// </summary> /// <param name="services">Services configured from the ".bot" file.</param> public LuisBot(BotServices services, LuisBotAccessors accessors, GrossIncomeIntentWorker grossIncomeIntentWorker, NetIncomeIntentWorker netIncomeIntentWorker, OutgoingInvoicePaymentCheckWorker outgoingInvoicePaymentCheckWorker, LogoutWorker logoutWorker, HelpWorker helpWorker, GreetingWorker greetingWorker, ILoggerFactory loggerFactory) { _services = services ?? throw new System.ArgumentNullException(nameof(services)); var luisKey = GetLuisKey(); if (!_services.LuisServices.ContainsKey(luisKey)) { throw new System.ArgumentException($"Invalid configuration. Please check your '.bot' file for a LUIS service named '{luisKey}'."); } _stateAccessors = accessors ?? throw new ArgumentNullException(nameof(accessors)); _grossIncomeIntentWorker = grossIncomeIntentWorker ?? throw new System.ArgumentNullException(nameof(grossIncomeIntentWorker)); _netIncomeIntentWorker = netIncomeIntentWorker ?? throw new System.ArgumentNullException(nameof(netIncomeIntentWorker)); _outgoingInvoicePaymentCheckWorker = outgoingInvoicePaymentCheckWorker ?? throw new System.ArgumentNullException(nameof(outgoingInvoicePaymentCheckWorker)); _logoutWorker = logoutWorker ?? throw new System.ArgumentNullException(nameof(logoutWorker)); _helpWorker = helpWorker ?? throw new System.ArgumentNullException(nameof(helpWorker)); _greetingWorker = greetingWorker ?? throw new System.ArgumentNullException(nameof(greetingWorker)); _loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory)); _dialogs = new DialogSet(_stateAccessors.ConversationDialogState); // Add the OAuth prompts and related dialogs into the dialog set _dialogs.Add(LoginPrompt("MastreenoAuth")); }
/// <summary> /// Initializes a new instance of the <see cref="LuisBot"/> class. /// </summary> /// <param name="services">Services configured from the ".bot" file.</param> public LuisBot(BotServices services, GrossIncomeIntentWorker grossIncomeIntentWorker, NetIncomeIntentWorker netIncomeIntentWorker, OutgoingInvoicePaymentCheckWorker outgoingInvoicePaymentCheckWorker, ILoggerFactory loggerFactory) { _services = services ?? throw new System.ArgumentNullException(nameof(services)); if (!_services.LuisServices.ContainsKey(LuisKey)) { throw new System.ArgumentException($"Invalid configuration. Please check your '.bot' file for a LUIS service named '{LuisKey}'."); } _grossIncomeIntentWorker = grossIncomeIntentWorker ?? throw new System.ArgumentNullException(nameof(grossIncomeIntentWorker)); _netIncomeIntentWorker = netIncomeIntentWorker ?? throw new System.ArgumentNullException(nameof(netIncomeIntentWorker)); _outgoingInvoicePaymentCheckWorker = outgoingInvoicePaymentCheckWorker ?? throw new System.ArgumentNullException(nameof(outgoingInvoicePaymentCheckWorker)); _loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory)); }
public async Task InvokeAsync(HttpContext context, GrossIncomeIntentWorker grossIncomeIntentWorker, NetIncomeIntentWorker netIncomeIntentWorker, OutgoingInvoicePaymentCheckWorker outgoingInvoicePaymentCheckWorker, HelpWorker helpWorker, GreetingWorker greetingWorker) { var streamReader = new StreamReader(context.Request.Body); var rawBody = await streamReader.ReadToEndAsync(); var skillRequest = JsonConvert.DeserializeObject <SkillRequest>(rawBody.ToString()); SkillResponse response = null; if (skillRequest.Request is IntentRequest) { var request = (IntentRequest)skillRequest.Request; var intentName = request.Intent.Name; if (intentName == "Gross_Income") { var isUserSignedIn = IsUserSignedIn(skillRequest); if (isUserSignedIn == true) { var queryParams = QueryParametersFactory .Accountancy .GrossIncome.Parse(request); var msg = grossIncomeIntentWorker.Do(queryParams); response = ResponseBuilder.Tell(msg); } else { response = StartLoginDialogResponse(); } } else if (intentName == "Net_Income") { var isUserSignedIn = IsUserSignedIn(skillRequest); if (isUserSignedIn == true) { var queryParams = QueryParametersFactory .Accountancy .NetIncome.Parse(request); var msg = netIncomeIntentWorker.Do(queryParams); response = ResponseBuilder.Tell(msg); } else { response = StartLoginDialogResponse(); } } else if (intentName == "Outgoing_Invoice_Payment_Check") { var isUserSignedIn = IsUserSignedIn(skillRequest); if (isUserSignedIn == true) { var queryParams = QueryParametersFactory .Accountancy .OutgoingInvoicePaymentCheck.Parse(request); var msg = outgoingInvoicePaymentCheckWorker.Do(queryParams); response = ResponseBuilder.Tell(msg); } else { response = StartLoginDialogResponse(); } } else if (intentName == "AMAZON.HelpIntent") { var msg = helpWorker.Do(); var reprompt = $"Ground control to major Tom: {msg}"; response = ResponseBuilder.Ask(msg, new Reprompt(reprompt)); } else if (intentName == "Greeting") { var msg = greetingWorker.Do(); var reprompt = greetingWorker.Do(); response = ResponseBuilder.Ask(msg, new Reprompt(reprompt)); } else { var msg = "Alas, I couldn't understand what you asked for."; response = ResponseBuilder.Tell(msg); } } else if (skillRequest.Request is LaunchRequest) { var request = (LaunchRequest)skillRequest.Request; var msg = "Hi, I am Martin: how can I help you?"; var reprompt = "Ground control to major Tom: Martin's still waiting for you here."; response = ResponseBuilder.Ask(msg, new Reprompt(reprompt)); } var responseJson = JsonConvert.SerializeObject(response); await context.Response.WriteAsync(responseJson); await _next(context); }