Example #1
0
        public static PromptRecognizerResult <bool> ConfirmYesOrNo(string utterance, string locale = null)
        {
            var result = new PromptRecognizerResult <bool>();

            if (!string.IsNullOrEmpty(utterance))
            {
                // Recognize utterance
                var results = ChoiceRecognizer.RecognizeBoolean(utterance, locale);
                if (results.Count > 0)
                {
                    var first = results[0];
                    if (bool.TryParse(first.Resolution["value"].ToString(), out var value))
                    {
                        result.Succeeded = true;
                        result.Value     = value;
                    }
                }
            }

            return(result);
        }
Example #2
0
        protected override async Task <PromptRecognizerResult <IList <EventModel> > > OnRecognizeAsync(ITurnContext turnContext, IDictionary <string, object> state, PromptOptions options, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (turnContext == null)
            {
                throw new ArgumentNullException(nameof(turnContext));
            }

            var result = new PromptRecognizerResult <IList <EventModel> >();

            if (turnContext.Activity.Type == ActivityTypes.Message)
            {
                var message = turnContext.Activity.AsMessageActivity();
                var culture = turnContext.Activity.Locale ?? DefaultLocale ?? English;
                var date    = GetTimeFromMessage(message.Text, culture, userTimeZone);
                if (date.Count > 0)
                {
                    // input is a time
                    var results = await GetEventsWithStartTime(date, message.Text);

                    if (results.Count > 0)
                    {
                        result.Succeeded = true;
                        result.Value     = results;
                    }
                }

                if (!result.Succeeded)
                {
                    var results = await GetEventsWithTitle(message.Text);

                    if (results.Count > 0)
                    {
                        result.Succeeded = true;
                        result.Value     = results;
                    }
                }
            }

            return(await Task.FromResult(result));
        }
Example #3
0
        protected override async Task<PromptRecognizerResult<IList<DateTimeResolution>>> OnRecognizeAsync(ITurnContext turnContext, IDictionary<string, object> state, PromptOptions options, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (turnContext == null)
            {
                throw new ArgumentNullException(nameof(turnContext));
            }

            var result = new PromptRecognizerResult<IList<DateTimeResolution>>();
            if (turnContext.Activity.Type == ActivityTypes.Message)
            {
                var message = turnContext.Activity.AsMessageActivity();
                var culture = turnContext.Activity.Locale ?? DefaultLocale ?? English;
                var date = GetDateFromMessage(message.Text, culture);
                if (date.Count > 0)
                {
                    result.Succeeded = true;
                    result.Value = date;
                }
            }

            return await Task.FromResult(result);
        }
        protected override Task <PromptRecognizerResult <Activity> > OnRecognizeAsync(
            ITurnContext turnContext,
            IDictionary <string, object> state,
            PromptOptions options,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            var result   = new PromptRecognizerResult <Activity>();
            var activity = turnContext.Activity;

            if (activity.Type == ActivityTypes.Event)
            {
                var ev = activity.AsEventActivity();

                if (ev.Name == AuthResponseEventName)
                {
                    result.Succeeded = true;
                    result.Value     = activity;
                }
            }

            return(Task.FromResult(result));
        }
        protected override async Task <PromptRecognizerResult <AttributeType?> > OnRecognizeAsync(ITurnContext turnContext, IDictionary <string, object> state, PromptOptions options, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (turnContext == null)
            {
                throw new ArgumentNullException(nameof(turnContext));
            }

            var result = new PromptRecognizerResult <AttributeType?>();

            if (turnContext.Activity.Type == ActivityTypes.Message)
            {
                var message = turnContext.Activity.AsMessageActivity();

                var promptRecognizerResult = ConfirmRecognizerHelper.ConfirmYesOrNo(message.Text, turnContext.Activity.Locale);
                if (promptRecognizerResult.Succeeded && !promptRecognizerResult.Value)
                {
                    result.Succeeded = true;
                    result.Value     = null;
                }

                if (!result.Succeeded)
                {
                    var text = message.Text.ToLowerInvariant();
                    foreach (var attribute in attributes)
                    {
                        if (IsMessageAttributeMatch(text, attribute))
                        {
                            result.Succeeded = true;
                            result.Value     = attribute;
                            break;
                        }
                    }
                }
            }

            return(await Task.FromResult(result));
        }
        protected override Task <InputState> OnRecognizeInput(DialogContext dc)
        {
            var dcState = dc.GetState();

            var input   = dcState.GetValue <object>(VALUE_PROPERTY);
            var options = dcState.GetValue <ChoiceInputOptions>(ThisPath.OPTIONS);

            var choices = options.Choices;

            var result = new PromptRecognizerResult <FoundChoice>();

            if (dc.Context.Activity.Type == ActivityTypes.Message)
            {
                var opt = this.RecognizerOptions?.GetValue(dcState) ?? new FindChoicesOptions();
                opt.Locale = GetCulture(dc);
                var results = ChoiceRecognizers.RecognizeChoices(input.ToString(), choices, opt);
                if (results == null || results.Count == 0)
                {
                    return(Task.FromResult(InputState.Unrecognized));
                }

                var foundChoice = results[0].Resolution;
                switch (this.OutputFormat.GetValue(dcState))
                {
                case ChoiceOutputFormat.Value:
                default:
                    dcState.SetValue(VALUE_PROPERTY, foundChoice.Value);
                    break;

                case ChoiceOutputFormat.Index:
                    dcState.SetValue(VALUE_PROPERTY, foundChoice.Index);
                    break;
                }
            }

            return(Task.FromResult(InputState.Valid));
        }
Example #7
0
        protected override Task <PromptRecognizerResult <string> > OnRecognizeAsync(ITurnContext turnContext, IDictionary <string, object> state, PromptOptions options, CancellationToken cancellationToken = new CancellationToken())
        {
            if (turnContext == null)
            {
                throw new ArgumentNullException(nameof(turnContext));
            }

            var result = new PromptRecognizerResult <string>();

            if (turnContext.Activity.Type == ActivityTypes.Message)
            {
                var message = turnContext.Activity.AsMessageActivity();
                var culture = turnContext.Activity.Locale ?? DefaultLocale ?? English;

                var recognizeEmail = Microsoft.Recognizers.Text.Sequence.SequenceRecognizer.RecognizeEmail(message.Text, culture);
                if (recognizeEmail?.Count > 0)
                {
                    result.Succeeded = true;
                    result.Value     = recognizeEmail[0].Resolution["value"].ToString();
                }
            }

            return(Task.FromResult(result));
        }
Example #8
0
        private async Task <PromptRecognizerResult <TokenResponse> > RecognizeTokenAsync(DialogContext dc, CancellationToken cancellationToken = default(CancellationToken))
        {
            var result = new PromptRecognizerResult <TokenResponse>();

            if (IsTokenResponseEvent(dc.Context))
            {
                var tokenResponseObject = dc.Context.Activity.Value as JObject;
                var token = tokenResponseObject?.ToObject <TokenResponse>();
                result.Succeeded = true;
                result.Value     = token;
            }
            else if (IsTeamsVerificationInvoke(dc.Context))
            {
                var magicCodeObject = dc.Context.Activity.Value as JObject;
                var magicCode       = magicCodeObject.GetValue("state")?.ToString();

                if (!(dc.Context.Adapter is IUserTokenProvider adapter))
                {
                    throw new InvalidOperationException("OAuthPrompt.Recognize(): not supported by the current adapter");
                }

                // Getting the token follows a different flow in Teams. At the signin completion, Teams
                // will send the bot an "invoke" activity that contains a "magic" code. This code MUST
                // then be used to try fetching the token from Botframework service within some time
                // period. We try here. If it succeeds, we return 200 with an empty body. If it fails
                // with a retriable error, we return 500. Teams will re-send another invoke in this case.
                // If it failes with a non-retriable error, we return 404. Teams will not (still work in
                // progress) retry in that case.
                try
                {
                    var token = await adapter.GetUserTokenAsync(dc.Context, ConnectionName.GetValue(dc.State), magicCode, cancellationToken).ConfigureAwait(false);

                    if (token != null)
                    {
                        result.Succeeded = true;
                        result.Value     = token;

                        await dc.Context.SendActivityAsync(new Activity { Type = ActivityTypesEx.InvokeResponse }, cancellationToken).ConfigureAwait(false);
                    }
                    else
                    {
                        await dc.Context.SendActivityAsync(new Activity { Type = ActivityTypesEx.InvokeResponse, Value = new InvokeResponse {
                                                                              Status = 404
                                                                          } }, cancellationToken).ConfigureAwait(false);
                    }
                }
                catch
                {
                    await dc.Context.SendActivityAsync(new Activity { Type = ActivityTypesEx.InvokeResponse, Value = new InvokeResponse {
                                                                          Status = 500
                                                                      } }, cancellationToken).ConfigureAwait(false);
                }
            }
            else if (dc.Context.Activity.Type == ActivityTypes.Message)
            {
                var matched = _magicCodeRegex.Match(dc.Context.Activity.Text);
                if (matched.Success)
                {
                    if (!(dc.Context.Adapter is IUserTokenProvider adapter))
                    {
                        throw new InvalidOperationException("OAuthPrompt.Recognize(): not supported by the current adapter");
                    }

                    var token = await adapter.GetUserTokenAsync(dc.Context, ConnectionName.GetValue(dc.State), matched.Value, cancellationToken).ConfigureAwait(false);

                    if (token != null)
                    {
                        result.Succeeded = true;
                        result.Value     = token;
                    }
                }
            }

            return(result);
        }