示例#1
0
        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);
        }
示例#2
0
        /// <summary>
        /// Every conversation turn for our LUIS Bot will call this method.
        /// There are no dialogs used, the sample only uses "single turn" processing,
        /// meaning a single request and response, with no stateful conversation.
        /// </summary>
        /// <param name="turnContext">A <see cref="ITurnContext"/> containing all the data needed
        /// for processing this conversation turn. </param>
        /// <param name="cancellationToken">(Optional) A <see cref="CancellationToken"/> that can be used by other objects
        /// or threads to receive notice of cancellation.</param>
        /// <returns>A <see cref="Task"/> that represents the work queued to execute.</returns>
        public async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
        {
            try
            {
                if (turnContext.Activity.Type == ActivityTypes.Message)
                {
                    Regex regex = new Regex(@"^\d{6}$");
                    if (regex.IsMatch(turnContext.Activity.Text))
                    {
                        await ContinueLoginDialog(turnContext.Activity.Text, turnContext, cancellationToken);
                    }
                    else
                    {
                        var recognizerResult = await _services.LuisServices[GetLuisKey()].RecognizeAsync(turnContext, cancellationToken);
                        var topIntent        = recognizerResult?.GetTopScoringIntent();
                        if (topIntent != null && topIntent.HasValue && topIntent.Value.intent != "None")
                        {
                            var intentName = topIntent.Value.intent;
                            if (intentName == "Gross_Income")
                            {
                                var isUserSignedIn = await IsUserSignedIn(turnContext, cancellationToken);

                                if (isUserSignedIn == true)
                                {
                                    var queryParams = QueryParametersFactory
                                                      .Accountancy
                                                      .GrossIncome.Parse(recognizerResult);
                                    var msg = _grossIncomeIntentWorker.Do(queryParams);
                                    await turnContext.SendActivityAsync(msg);
                                }
                                else
                                {
                                    await StartLoginDialog(turnContext, cancellationToken);
                                }
                            }
                            else if (intentName == "Net_Income")
                            {
                                var isUserSignedIn = await IsUserSignedIn(turnContext, cancellationToken);

                                if (isUserSignedIn == true)
                                {
                                    var queryParams = QueryParametersFactory
                                                      .Accountancy
                                                      .NetIncome.Parse(recognizerResult);
                                    var msg = _netIncomeIntentWorker.Do(queryParams);
                                    await turnContext.SendActivityAsync(msg);
                                }
                                else
                                {
                                    await StartLoginDialog(turnContext, cancellationToken);
                                }
                            }
                            else if (intentName == "Outgoing_Invoice_Payment_Check")
                            {
                                var isUserSignedIn = await IsUserSignedIn(turnContext, cancellationToken);

                                if (isUserSignedIn == true)
                                {
                                    var queryParams = QueryParametersFactory
                                                      .Accountancy
                                                      .OutgoingInvoicePaymentCheck.Parse(recognizerResult);
                                    var msg = _outgoingInvoicePaymentCheckWorker.Do(queryParams);
                                    await turnContext.SendActivityAsync(msg);
                                }
                                else
                                {
                                    await StartLoginDialog(turnContext, cancellationToken);
                                }
                            }
                            else if (intentName == "Logout")
                            {
                                var msg = _logoutWorker.Do();
                                await LogoutFromMastreenoAuth(msg, turnContext, cancellationToken);
                            }
                            else if (intentName == "Help")
                            {
                                var msg = _helpWorker.Do();
                                await turnContext.SendActivityAsync(msg);
                            }
                            else if (intentName == "Greeting")
                            {
                                var msg = _greetingWorker.Do();
                                await turnContext.SendActivityAsync(msg);
                            }
                            else
                            {
                                await turnContext.SendActivityAsync($"==>LUIS Top Scoring Intent: {topIntent.Value.intent}, Score: {topIntent.Value.score}\n");
                            }
                        }
                        else
                        {
                            var msg = @"No LUIS intents were found.";
                            await turnContext.SendActivityAsync(msg);
                        }
                    }
                }
                else if (turnContext.Activity.Type == ActivityTypes.ConversationUpdate)
                {
                    // Send a welcome message to the user and tell them what actions they may perform to use this bot
                    await SendWelcomeMessageAsync(turnContext, cancellationToken);
                }
                else
                {
                    await turnContext.SendActivityAsync($"{turnContext.Activity.Type} event detected", cancellationToken : cancellationToken);
                }
            }
            catch (Exception ex)
            {
                ILogger logger = _loggerFactory.CreateLogger <LuisBot>();
                logger.LogError($"\r\nException caught : {ex.StackTrace}\r\n");
            }
        }