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); }
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)); }
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)); }
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)); }
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); }