예제 #1
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddSingleton(_ => Configuration);
            services.AddBot <MultiBot>(options =>
            {
                options.CredentialProvider = new ConfigurationCredentialProvider(Configuration);
                var middleware             = options.Middleware;
                middleware.Add(new ConversationState <ConversationData>(new MemoryStorage()));

                // Regex Intents
                middleware.Add(new RegExpRecognizerMiddleware()
                               .AddIntent("mainMenu", new Regex("main menu(.*)", RegexOptions.IgnoreCase))
                               .AddIntent("help", new Regex("help(.*)", RegexOptions.IgnoreCase))
                               .AddIntent("cancel", new Regex("cancel(.*)", RegexOptions.IgnoreCase)));

                // Setup LUIS Middleware
                var luisRecognizerOptions = new LuisRecognizerOptions {
                    Verbose = false
                };
                var luisModel = new LuisModel(
                    Configuration["LUIS:AppId"],
                    Configuration["LUIS:SubscriptionKey"],
                    new Uri("https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/"));
                middleware.Add(new LuisRecognizerMiddleware(luisModel, luisRecognizerOptions));
            });
        }
        private IRecognizer GetLuisRecognizer(bool verbose = false, ILuisOptions luisOptions = null)
        {
            var luisRecognizerOptions = new LuisRecognizerOptions {
                Verbose = verbose
            };
            var luisModel = new LuisModel(_luisAppId, _subscriptionKey, new Uri(_luisUriBase), LuisApiVersion.V2);

            return(new LuisRecognizer(luisModel, luisRecognizerOptions, luisOptions));
        }
        private IRecognizer GetLuisRecognizer(HttpMessageHandler messageHandler, bool verbose = false, ILuisOptions luisOptions = null)
        {
            var client = new HttpClient(messageHandler);
            var luisRecognizerOptions = new LuisRecognizerOptions {
                Verbose = verbose
            };
            var luisModel = new LuisModel(_luisAppId, _subscriptionKey, new Uri(_luisUriBase), LuisApiVersion.V2);

            return(new LuisRecognizer(luisModel, luisRecognizerOptions, luisOptions, client));
        }
        private LuisRecognizerMiddleware GetLuisRecognizerMiddleware(bool verbose = false, ILuisOptions luisOptions = null)
        {
            var luisRecognizerOptions = new LuisRecognizerOptions {
                Verbose = verbose
            };
            var luisModel = new LuisModel(_luisAppId, _subscriptionKey, new Uri(_luisUriBase));

            return(new LuisRecognizerMiddleware(luisModel, luisRecognizerOptions, luisOptions ?? new LuisRequest {
                Verbose = verbose
            }));
        }
예제 #5
0
        //private readonly WeatherBotAccessors _accessors;
        //private readonly ILogger _logger;

        public WeatherBotBot(IConfiguration c)
        {
            _dialogs = ComposeRootDialog();

            var options = new LuisRecognizerOptions {
                Verbose = true
            };
            var luisModel = new LuisModel(Constantes.LuisApplicationID,
                                          Constantes.LuisAuthorizationKey,
                                          new Uri(Constantes.LuisEndpoint));

            LuisRecognizer = new LuisRecognizer(luisModel, options, null);
        }
예제 #6
0
        public async Task Telemetry_OverrideOnLogAsync()
        {
            // Arrange
            // Note this is NOT a real LUIS application ID nor a real LUIS subscription-key
            // theses are GUIDs edited to look right to the parsing and validation code.
            var endpoint        = "https://westus.api.cognitive.microsoft.com/luis/v3.0-preview/apps/b31aeaf3-3511-495b-a07f-571fc873214b/slots/production/predict?verbose=true&timezoneOffset=-360&subscription-key=048ec46dc58e495482b0c447cfdbd291&q=";
            var clientHandler   = new EmptyLuisResponseClientHandler();
            var luisApp         = new LuisApplication(endpoint);
            var telemetryClient = new Mock <IBotTelemetryClient>();
            var adapter         = new NullAdapter();
            var options         = new LuisRecognizerOptions
            {
                TelemetryClient        = telemetryClient.Object,
                LogPersonalInformation = false,
                HttpClient             = clientHandler,
            };

            var activity = new Activity
            {
                Type         = ActivityTypes.Message,
                Text         = "please book from May 5 to June 6",
                Recipient    = new ChannelAccount(),        // to no where
                From         = new ChannelAccount(),        // from no one
                Conversation = new ConversationAccount(),   // on no conversation
            };

            var turnContext = new TurnContext(adapter, activity);
            var recognizer  = new LuisRecognizer(luisApp, options);

            // Act
            var additionalProperties = new Dictionary <string, string>
            {
                { "test", "testvalue" },
                { "foo", "foovalue" },
            };
            var result = await recognizer.RecognizeAsync(turnContext, additionalProperties).ConfigureAwait(false);

            // Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(telemetryClient.Invocations.Count, 1);
            Assert.AreEqual(telemetryClient.Invocations[0].Arguments[0].ToString(), "LuisResult");
            Assert.IsTrue(((Dictionary <string, string>)telemetryClient.Invocations[0].Arguments[1]).ContainsKey("test"));
            Assert.IsTrue(((Dictionary <string, string>)telemetryClient.Invocations[0].Arguments[1])["test"] == "testvalue");
            Assert.IsTrue(((Dictionary <string, string>)telemetryClient.Invocations[0].Arguments[1]).ContainsKey("foo"));
            Assert.IsTrue(((Dictionary <string, string>)telemetryClient.Invocations[0].Arguments[1])["foo"] == "foovalue");
            Assert.IsTrue(((Dictionary <string, string>)telemetryClient.Invocations[0].Arguments[1]).ContainsKey("applicationId"));
            Assert.IsTrue(((Dictionary <string, string>)telemetryClient.Invocations[0].Arguments[1]).ContainsKey("intent"));
            Assert.IsTrue(((Dictionary <string, string>)telemetryClient.Invocations[0].Arguments[1]).ContainsKey("intentScore"));
            Assert.IsTrue(((Dictionary <string, string>)telemetryClient.Invocations[0].Arguments[1]).ContainsKey("fromId"));
            Assert.IsTrue(((Dictionary <string, string>)telemetryClient.Invocations[0].Arguments[1]).ContainsKey("entities"));
        }
예제 #7
0
        public void LuisRecognizer_Timeout()
        {
            var endpoint           = "https://westus.api.cognitive.microsoft.com/luis/v3.0-preview/apps/b31aeaf3-3511-495b-a07f-571fc873214b/slots/production/predict?verbose=true&timezoneOffset=-360&subscription-key=048ec46dc58e495482b0c447cfdbd291&q=";
            var expectedTimeout    = 300;
            var optionsWithTimeout = new LuisRecognizerOptions()
            {
                Timeout = new TimeSpan(0, 0, 0, 0, expectedTimeout),
            };

            var recognizerWithTimeout = new LuisRecognizer(new LuisApplication(endpoint), optionsWithTimeout);

            Assert.IsNotNull(recognizerWithTimeout);
            Assert.AreEqual(expectedTimeout, LuisRecognizer.DefaultHttpClient.Timeout.Milliseconds);
        }
예제 #8
0
        public MainBot(IConfiguration configuration)
        {
            // Create DialogSet
            _dialogs = ComposeRootDialog();

            // Create the LUIS recognizer for our model.
            var luisRecognizerOptions = new LuisRecognizerOptions {
                Verbose = true
            };
            var luisModel = new LuisModel(
                configuration[Keys.LuisModel],
                configuration[Keys.LuisSubscriptionKey],
                new Uri(configuration[Keys.LuisUriBase]),
                LuisApiVersion.V2);

            LuisRecognizer = new LuisRecognizer(luisModel, luisRecognizerOptions, null);
        }
 public TelemetryOverrideRecognizer(LuisApplication application, LuisRecognizerOptions recognizerOptions = null)
     : base(application, recognizerOptions)
 {
 }
 public OverrideFillRecognizer(LuisApplication application, LuisRecognizerOptions recognizerOptions = null)
     : base(application, recognizerOptions)
 {
 }
예제 #11
0
        public async Task OnTurn(ITurnContext context)
        {
            //TODO: is this the right way to handle cards?
            string  utterance = context.Activity.Text;
            JObject cardData  = (JObject)context.Activity.Value;

            if (cardData != null && cardData.Property("intent") != null)
            {
                utterance = cardData["utterance"].ToString();
            }

            var userState         = context.GetUserState <CafeBotUserState>();
            var conversationState = context.GetConversationState <CafeBotConvState>();

            switch (context.Activity.Type)
            {
            case ActivityTypes.ConversationUpdate:
                var newUserName = context.Activity.MembersAdded[0].Name;
                if (!string.IsNullOrWhiteSpace(newUserName) && newUserName != "Bot" && string.IsNullOrEmpty(userState.name))
                {
                    await context.SendActivity($"Hello {newUserName}! I'm the Cafe bot!");

                    // remember the user's name
                    userState.name = newUserName;

                    //userState.sendCards = true;

                    await context.SendActivity("I can help you find contoso cafe locations, book a table and answer questions about Contoso cafe!");

                    // send a welcome card
                    if (userState.sendCards)
                    {
                        await context.SendActivity(CreateCardResponse(context.Activity, createWelcomeCardAttachment()));
                    }
                }
                break;

            case ActivityTypes.Message:

                // create dialogContext
                var dc = _dialogs.CreateContext(context, conversationState);
                // continue with any active dialogs
                await dc.Continue();

                if (!context.Responded)
                {
                    // call LUIS and get results
                    LuisRecognizerOptions lOptions = new LuisRecognizerOptions()
                    {
                        Verbose = true
                    };
                    LuisModel lModel = new LuisModel(
                        "edaadd9b-b632-4733-a25c-5b67271035dd",
                        "be30825b782843dcbbe520ac5338f567",
                        new System.Uri("https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/"), Microsoft.Cognitive.LUIS.LuisApiVersion.V2);
                    LuisRecognizer lRecognizer = new LuisRecognizer(lModel, lOptions);
                    System.Threading.CancellationToken ct;
                    cafeLUISModel lResult = await lRecognizer.Recognize <cafeLUISModel>(context.Activity.Text, ct);

                    // top level dispatch

                    switch (lResult.TopIntent().intent)
                    {
                    case cafeLUISModel.Intent.Greeting:
                        //case "hi":
                        await context.SendActivity("Hello, I'm the contoso cafe bot. How can I help you?");

                        if (userState.sendCards)
                        {
                            await context.SendActivity(CreateCardResponse(context.Activity, createWelcomeCardAttachment()));
                        }
                        break;

                    case cafeLUISModel.Intent.Book_Table:
                        // case "book table":
                        await dc.Begin("BookTable");

                        break;

                    case cafeLUISModel.Intent.Who_are_you_intent:
                        // case "who are you?":
                        await dc.Begin("WhoAreYou");

                        break;

                    case cafeLUISModel.Intent.None:
                    default:
                        var qEndpoint = new QnAMakerEndpoint()
                        {
                            Host            = "https://contosocafeqnamaker.azurewebsites.net/qnamaker",
                            EndpointKey     = "09e2d55b-a44c-41b6-a08a-76a7df9ddffe",
                            KnowledgeBaseId = "b5534d70-bded-45e1-998a-5945174d4ff3"
                        };
                        var qOptions = new QnAMakerOptions()
                        {
                            ScoreThreshold = 0.4F,
                            Top            = 1
                        };
                        var           qnamaker = new QnAMaker(qEndpoint, qOptions);
                        QueryResult[] qResult  = await qnamaker.GetAnswers(context.Activity.Text);

                        if (qResult.Length == 0)
                        {
                            await context.SendActivity("Sorry, I do not understand.");

                            await context.SendActivity("You can say hi or book table or find locations");
                        }
                        else
                        {
                            await context.SendActivity(qResult[0].Answer);
                        }

                        //await context.SendActivity("Sorry, I do not understand.");
                        //await context.SendActivity("You can say hi or book table or find locations");
                        break;
                    }
                }
                break;
            }
        }
예제 #12
0
 public TelemetryOverrideRecognizer(LuisRecognizerOptions recognizerOptions, HttpClientHandler clientHandler = null)
     : base(recognizerOptions, clientHandler)
 {
 }
예제 #13
0
 public OverrideFillRecognizer(LuisRecognizerOptions recognizerOptions, HttpClientHandler clientHandler = null)
     : base(recognizerOptions, clientHandler)
 {
 }