Exemplo n.º 1
0
        private async Task <DialogTurnResult> DisplayLocationFromComposer(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            await stepContext.Context.SendActivityAsync("(reading data back your postcode from the Composer/Adaptive state variable");

            var state     = stepContext.GetState();
            var userScope = state.GetValue <object>("user");

            string postcode = JObject.Parse(userScope.ToString())["postcode"].ToString();

            await stepContext.Context.SendActivityAsync("OK, so your postcode is " + postcode);

            await stepContext.Context.SendActivityAsync("Do any of these match your address?:");

            // invoke http postcode lookup and present choices:
            WebRequest  request     = WebRequest.Create("https://api.postcodes.io/postcodes/" + postcode);
            WebResponse webResponse = request.GetResponse();

            using (Stream dataStream = webResponse.GetResponseStream())
            {
                // Open the stream using a StreamReader for easy access.
                StreamReader reader = new StreamReader(dataStream);
                // Read the content.
                string responseFromServer = reader.ReadToEnd();

                // Display the content.
                await stepContext.Context.SendActivityAsync("I've extracted the following data from postcodes.io for the postcode that you supplied in the Composer/Adaptive Dialog:");

                await stepContext.Context.SendActivityAsync(responseFromServer);
            }

            return(await stepContext.ContinueDialogAsync(cancellationToken));
        }
Exemplo n.º 2
0
        private async Task <DialogTurnResult> DisplayQnAResult(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            var dialogOptions            = GetDialogOptionsValue(stepContext);
            var qnaDialogResponseOptions = dialogOptions[QnADialogResponseOptions] as QnADialogResponseOptions;
            var reply = stepContext.Context.Activity.Text;

            if (reply.Equals(qnaDialogResponseOptions.CardNoMatchText, StringComparison.OrdinalIgnoreCase))
            {
                var activity = await qnaDialogResponseOptions.CardNoMatchResponse.BindToData(stepContext.Context, stepContext.GetState()).ConfigureAwait(false);

                if (activity == null)
                {
                    await stepContext.Context.SendActivityAsync(DefaultCardNoMatchResponse, cancellationToken : cancellationToken).ConfigureAwait(false);
                }
                else
                {
                    await stepContext.Context.SendActivityAsync(activity, cancellationToken : cancellationToken).ConfigureAwait(false);
                }

                return(await stepContext.EndDialogAsync().ConfigureAwait(false));
            }

            // If previous QnAId is present, replace the dialog
            var previousQnAId = Convert.ToInt32(dialogOptions[PreviousQnAId]);

            if (previousQnAId > 0)
            {
                return(await stepContext.ReplaceDialogAsync(QnAMakerDialogName, dialogOptions, cancellationToken).ConfigureAwait(false));
            }

            // If response is present then show that response, else default answer.
            if (stepContext.Result is List <QueryResult> response && response.Count > 0)
            {
                await stepContext.Context.SendActivityAsync(response.First().Answer, cancellationToken : cancellationToken).ConfigureAwait(false);
            }
            else
            {
                var activity = await qnaDialogResponseOptions.NoAnswer.BindToData(stepContext.Context, stepContext.GetState()).ConfigureAwait(false);

                if (activity == null)
                {
                    await stepContext.Context.SendActivityAsync(DefaultNoAnswer, cancellationToken : cancellationToken).ConfigureAwait(false);
                }
                else
                {
                    await stepContext.Context.SendActivityAsync(activity, cancellationToken : cancellationToken).ConfigureAwait(false);
                }
            }

            return(await stepContext.EndDialogAsync().ConfigureAwait(false));
        }
Exemplo n.º 3
0
        private async Task <DialogTurnResult> CallTrain(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            var trainResponses = stepContext.Values[QnAData] as List <QueryResult>;
            var currentQuery   = stepContext.Values[CurrentQuery] as string;

            var reply = stepContext.Context.Activity.Text;

            var dialogOptions            = GetDialogOptionsValue(stepContext);
            var qnaDialogResponseOptions = dialogOptions[QnADialogResponseOptions] as QnADialogResponseOptions;

            if (trainResponses.Count > 1)
            {
                var qnaResult = trainResponses.FirstOrDefault(kvp => kvp.Questions[0] == reply);

                if (qnaResult != null)
                {
                    stepContext.Values[QnAData] = new List <QueryResult>()
                    {
                        qnaResult
                    };

                    var records = new FeedbackRecord[]
                    {
                        new FeedbackRecord
                        {
                            UserId       = stepContext.Context.Activity.Id,
                            UserQuestion = currentQuery,
                            QnaId        = qnaResult.Id,
                        }
                    };

                    var feedbackRecords = new FeedbackRecords {
                        Records = records
                    };

                    // Call Active Learning Train API
                    await _qnaMakerClient.CallTrainAsync(feedbackRecords).ConfigureAwait(false);

                    return(await stepContext.NextAsync(new List <QueryResult>() { qnaResult }, cancellationToken).ConfigureAwait(false));
                }
                else if (reply.Equals(qnaDialogResponseOptions.CardNoMatchText, StringComparison.OrdinalIgnoreCase))
                {
                    var activity = await qnaDialogResponseOptions.CardNoMatchResponse.BindToData(stepContext.Context, stepContext.GetState()).ConfigureAwait(false);

                    if (activity == null)
                    {
                        await stepContext.Context.SendActivityAsync(DefaultCardNoMatchResponse, cancellationToken : cancellationToken).ConfigureAwait(false);
                    }
                    else
                    {
                        await stepContext.Context.SendActivityAsync(activity, cancellationToken : cancellationToken).ConfigureAwait(false);
                    }

                    return(await stepContext.EndDialogAsync().ConfigureAwait(false));
                }
                else
                {
                    return(await stepContext.ReplaceDialogAsync(QnAMakerDialogName, stepContext.ActiveDialog.State["options"], cancellationToken).ConfigureAwait(false));
                }
            }

            return(await stepContext.NextAsync(stepContext.Result, cancellationToken).ConfigureAwait(false));
        }