public OnboardingDialog(BotServices botServices, IStatePropertyAccessor <OnboardingState> accessor) : base(botServices, nameof(OnboardingDialog)) { _accessor = accessor; InitialDialogId = nameof(OnboardingDialog); var onboarding = new WaterfallStep[] { AskForName, AskForEmail, AskForLocation, FinishOnboardingDialog, }; AddDialog(new WaterfallDialog(InitialDialogId, onboarding)); AddDialog(new TextPrompt(NamePrompt)); AddDialog(new TextPrompt(EmailPrompt)); AddDialog(new TextPrompt(LocationPrompt)); }
public OnboardingDialog( IServiceProvider serviceProvider) : base(nameof(OnboardingDialog)) { _templateManager = serviceProvider.GetService <LocaleTemplateManager>(); var userState = serviceProvider.GetService <UserState>(); _accessor = userState.CreateProperty <UserProfileState>(nameof(UserProfileState)); _services = serviceProvider.GetService <BotServices>(); var onboarding = new WaterfallStep[] { AskForNameAsync, FinishOnboardingDialogAsync, }; AddDialog(new WaterfallDialog(nameof(onboarding), onboarding)); AddDialog(new TextPrompt(DialogIds.NamePrompt)); }
public SkillDialogBase( string dialogId, BotSettings settings, BotServices services, ResponseManager responseManager, ConversationState conversationState, IBotTelemetryClient telemetryClient) : base(dialogId) { Services = services; ResponseManager = responseManager; StateAccessor = conversationState.CreateProperty <SkillState>(nameof(SkillState)); TelemetryClient = telemetryClient; // NOTE: Uncomment the following if your skill requires authentication // if (!Settings.OAuthConnections.Any()) // { // throw new Exception("You must configure an authentication connection before using this component."); // } // // AddDialog(new MultiProviderAuthDialog(services)); }
public MainDialog( BotSettings settings, BotServices services, ResponseManager responseManager, UserState userState, ConversationState conversationState, SampleDialog sampleDialog, IBotTelemetryClient telemetryClient) : base(nameof(MainDialog), telemetryClient) { _settings = settings; _services = services; _responseManager = responseManager; TelemetryClient = telemetryClient; // Initialize state accessor _stateAccessor = conversationState.CreateProperty <SkillState>(nameof(SkillState)); _contextAccessor = userState.CreateProperty <SkillContext>(nameof(SkillContext)); // Register dialogs AddDialog(sampleDialog); }
public SampleDialog( BotSettings settings, BotServices services, ResponseManager responseManager, ConversationState conversationState, IBotTelemetryClient telemetryClient) : base(nameof(SampleDialog), settings, services, responseManager, conversationState, telemetryClient) { var sample = new WaterfallStep[] { // NOTE: Uncomment these lines to include authentication steps to this dialog // GetAuthToken, // AfterGetAuthToken, PromptForName, GreetUser, End, }; AddDialog(new WaterfallDialog(nameof(SampleDialog), sample)); AddDialog(new TextPrompt(DialogIds.NamePrompt)); InitialDialogId = nameof(SampleDialog); }
public MainDialog( IServiceProvider serviceProvider) : base(nameof(MainDialog)) { _services = serviceProvider.GetService <BotServices>(); _templateEngine = serviceProvider.GetService <LocaleTemplateManager>(); var steps = new WaterfallStep[] { IntroStepAsync, RouteStepAsync, FinalStepAsync, }; AddDialog(new WaterfallDialog(nameof(MainDialog), steps)); AddDialog(new TextPrompt(nameof(TextPrompt))); InitialDialogId = nameof(MainDialog); // Register dialogs _sampleDialog = serviceProvider.GetService <SampleDialog>(); _sampleAction = serviceProvider.GetService <SampleAction>(); AddDialog(_sampleDialog); AddDialog(_sampleAction); }
public virtual void Initialize() { var builder = new ContainerBuilder(); ConversationState = new ConversationState(new MemoryStorage()); UserState = new UserState(new MemoryStorage()); TelemetryClient = new NullBotTelemetryClient(); BotServices = new BotServices() { DispatchRecognizer = DispatchTestUtil.CreateRecognizer(), LuisServices = new Dictionary <string, ITelemetryLuisRecognizer> { { "general", GeneralTestUtil.CreateRecognizer() } }, QnAServices = new Dictionary <string, ITelemetryQnAMaker> { { "faq", FaqTestUtil.CreateRecognizer() }, { "chitchat", ChitchatTestUtil.CreateRecognizer() } } }; builder.RegisterInstance(new BotStateSet(UserState, ConversationState)); Container = builder.Build(); }
public OnboardingDialog( BotServices botServices, UserState userState, IBotTelemetryClient telemetryClient) : base(nameof(OnboardingDialog)) { _accessor = userState.CreateProperty <OnboardingState>(nameof(OnboardingState)); InitialDialogId = nameof(OnboardingDialog); var onboarding = new WaterfallStep[] { AskForName, FinishOnboardingDialog, }; // To capture built-in waterfall dialog telemetry, set the telemetry client // to the new waterfall dialog and add it to the component dialog TelemetryClient = telemetryClient; AddDialog(new WaterfallDialog(InitialDialogId, onboarding) { TelemetryClient = telemetryClient }); AddDialog(new TextPrompt(DialogIds.NamePrompt)); }
public void ConfigureServices(IServiceCollection services) { // Load the connected services from .bot file. var botFilePath = Configuration.GetSection("botFilePath")?.Value; var botFileSecret = Configuration.GetSection("botFileSecret")?.Value; var botConfig = BotConfiguration.Load(botFilePath, botFileSecret); services.AddSingleton(sp => botConfig ?? throw new InvalidOperationException($"The .bot config file could not be loaded.")); // Get default locale from appsettings.json var defaultLocale = Configuration.GetSection("defaultLocale").Get <string>(); // Use Application Insights services.AddBotApplicationInsights(botConfig); // Initializes your bot service clients and adds a singleton that your Bot can access through dependency injection. var connectedServices = new BotServices(botConfig); services.AddSingleton(sp => connectedServices); // Initialize Bot State var cosmosDbService = botConfig.Services.FirstOrDefault(s => s.Type == ServiceTypes.CosmosDB) ?? throw new Exception("Please configure your CosmosDb service in your .bot file."); var cosmosDb = cosmosDbService as CosmosDbService; var cosmosOptions = new CosmosDbStorageOptions() { CosmosDBEndpoint = new Uri(cosmosDb.Endpoint), AuthKey = cosmosDb.Key, CollectionId = cosmosDb.Collection, DatabaseId = cosmosDb.Database, }; var dataStore = new CosmosDbStorage(cosmosOptions); var userState = new UserState(dataStore); var conversationState = new ConversationState(dataStore); services.AddSingleton(dataStore); services.AddSingleton(userState); services.AddSingleton(conversationState); services.AddSingleton(new BotStateSet(userState, conversationState)); // Add the bot with options services.AddBot <Bot>(options => { // Load the connected services from .bot file. var environment = _isProduction ? "production" : "development"; var service = botConfig.Services.FirstOrDefault(s => s.Type == ServiceTypes.Endpoint && s.Name == environment); if (!(service is EndpointService endpointService)) { throw new InvalidOperationException($"The .bot file does not contain an endpoint with name '{environment}'."); } options.CredentialProvider = new SimpleCredentialProvider(endpointService.AppId, endpointService.AppPassword); // Telemetry Middleware (logs activity messages in Application Insights) var sp = services.BuildServiceProvider(); var telemetryClient = sp.GetService <IBotTelemetryClient>(); var appInsightsLogger = new TelemetryLoggerMiddleware(telemetryClient, logPersonalInformation: true); options.Middleware.Add(appInsightsLogger); // Catches any errors that occur during a conversation turn and logs them to AppInsights. options.OnTurnError = async(context, exception) => { telemetryClient.TrackException(exception); await context.SendActivityAsync(MainStrings.ERROR); }; // Transcript Middleware (saves conversation history in a standard format) var storageService = botConfig.Services.FirstOrDefault(s => s.Type == ServiceTypes.BlobStorage) ?? throw new Exception("Please configure your Azure Storage service in your .bot file."); var blobStorage = storageService as BlobStorageService; var transcriptStore = new AzureBlobTranscriptStore(blobStorage.ConnectionString, blobStorage.Container); var transcriptMiddleware = new TranscriptLoggerMiddleware(transcriptStore); options.Middleware.Add(transcriptMiddleware); // Typing Middleware (automatically shows typing when the bot is responding/working) options.Middleware.Add(new ShowTypingMiddleware()); // Locale Middleware (sets UI culture based on Activity.Locale) options.Middleware.Add(new SetLocaleMiddleware(defaultLocale ?? "en-us")); // Autosave State Middleware (saves bot state after each turn) options.Middleware.Add(new AutoSaveStateMiddleware(userState, conversationState)); }); }
public void ConfigureServices(IServiceCollection services) { // Enable distributed tracing. services.AddApplicationInsightsTelemetry(o => { o.RequestCollectionOptions.EnableW3CDistributedTracing = true; o.RequestCollectionOptions.InjectResponseHeaders = true; o.RequestCollectionOptions.TrackExceptions = true; }); services.AddSingleton <ITelemetryInitializer>(new OperationCorrelationTelemetryInitializer()); _logger = _loggerFactory.CreateLogger <Startup>(); _logger.LogInformation($"Configuring services for {nameof($safeprojectname$)}. IsProduction: {_isProduction}."); // Load the connected services from .bot file. var botFilePath = Configuration.GetSection("botFilePath")?.Value; var botFileSecret = Configuration.GetSection("botFileSecret")?.Value; var botConfig = BotConfiguration.Load(botFilePath, botFileSecret); services.AddSingleton(sp => botConfig ?? throw new InvalidOperationException($"The .bot config file could not be loaded.")); // Initializes your bot service clients and adds a singleton that your Bot can access through dependency injection. var connectedServices = new BotServices(botConfig); services.AddSingleton(sp => connectedServices); // Initialize Bot State var cosmosDbService = botConfig.Services.FirstOrDefault(s => s.Type == ServiceTypes.CosmosDB) ?? throw new Exception("Please configure your CosmosDb service in your .bot file."); var cosmosDb = cosmosDbService as CosmosDbService; var cosmosOptions = new CosmosDbStorageOptions() { CosmosDBEndpoint = new Uri(cosmosDb.Endpoint), AuthKey = cosmosDb.Key, CollectionId = cosmosDb.Collection, DatabaseId = cosmosDb.Database, }; var dataStore = new CosmosDbStorage(cosmosOptions); var userState = new UserState(dataStore); var conversationState = new ConversationState(dataStore); services.AddSingleton(dataStore); services.AddSingleton(userState); services.AddSingleton(conversationState); services.AddSingleton(new BotStateSet(userState, conversationState)); // Add the bot with options services.AddBot <$safeprojectname$>(options => { _logger.LogInformation($"Adding bot {nameof($safeprojectname$)}"); // Load the connected services from .bot file. var environment = _isProduction ? "production" : "development"; var service = botConfig.Services.FirstOrDefault(s => s.Type == ServiceTypes.Endpoint && s.Name == environment); if (!(service is EndpointService endpointService)) { throw new InvalidOperationException($"The .bot file does not contain an endpoint with name '{environment}'."); } options.CredentialProvider = new SimpleCredentialProvider(endpointService.AppId, endpointService.AppPassword); // Telemetry Middleware (logs activity messages in Application Insights) var appInsightsService = botConfig.Services.FirstOrDefault(s => s.Type == ServiceTypes.AppInsights) ?? throw new Exception("Please configure your AppInsights connection in your .bot file."); var instrumentationKey = (appInsightsService as AppInsightsService).InstrumentationKey; var appInsightsLogger = new TelemetryLoggerMiddleware(instrumentationKey, logUserName: true, logOriginalMessage: true); options.Middleware.Add(appInsightsLogger); // Catches any errors that occur during a conversation turn and logs them to AppInsights. options.OnTurnError = async(context, exception) => { await context.SendActivityAsync("Sorry, it looks like something went wrong."); connectedServices.TelemetryClient.TrackException(exception); }; // Transcript Middleware (saves conversation history in a standard format) var storageService = botConfig.Services.FirstOrDefault(s => s.Type == ServiceTypes.BlobStorage) ?? throw new Exception("Please configure your Azure Storage service in your .bot file."); var blobStorage = storageService as BlobStorageService; var transcriptStore = new AzureBlobTranscriptStore(blobStorage.ConnectionString, blobStorage.Container); var transcriptMiddleware = new TranscriptLoggerMiddleware(transcriptStore); options.Middleware.Add(transcriptMiddleware); // Typing Middleware (automatically shows typing when the bot is responding/working) var typingMiddleware = new ShowTypingMiddleware(); options.Middleware.Add(typingMiddleware); options.Middleware.Add(new AutoSaveStateMiddleware(userState, conversationState)); _logger.LogTrace($"Bot added successfully."); }); }
public MainDialog( IServiceProvider serviceProvider, IBotTelemetryClient telemetryClient) : base(nameof(MainDialog)) { _services = serviceProvider.GetService <BotServices>(); _settings = serviceProvider.GetService <BotSettings>(); _templateEngine = serviceProvider.GetService <LocaleTemplateEngineManager>(); _skillsConfig = serviceProvider.GetService <SkillsConfiguration>(); TelemetryClient = telemetryClient; var userState = serviceProvider.GetService <UserState>(); _userProfileState = userState.CreateProperty <UserProfileState>(nameof(UserProfileState)); var conversationState = serviceProvider.GetService <ConversationState>(); _previousResponseAccessor = conversationState.CreateProperty <List <Activity> >(StateProperties.PreviousBotResponse); var steps = new WaterfallStep[] { OnboardingStepAsync, IntroStepAsync, RouteStepAsync, FinalStepAsync, }; AddDialog(new WaterfallDialog(nameof(MainDialog), steps)); AddDialog(new TextPrompt(nameof(TextPrompt))); InitialDialogId = nameof(MainDialog); // Register dialogs _onboardingDialog = serviceProvider.GetService <OnboardingDialog>(); _switchSkillDialog = serviceProvider.GetService <SwitchSkillDialog>(); AddDialog(_onboardingDialog); AddDialog(_switchSkillDialog); // Register a QnAMakerDialog for each registered knowledgebase and ensure localised responses are provided. var localizedServices = _services.GetCognitiveModels(); foreach (var knowledgebase in localizedServices.QnAConfiguration) { var qnaDialog = new QnAMakerDialog( knowledgeBaseId: knowledgebase.Value.KnowledgeBaseId, endpointKey: knowledgebase.Value.EndpointKey, hostName: knowledgebase.Value.Host, noAnswer: _templateEngine.GenerateActivityForLocale("UnsupportedMessage"), activeLearningCardTitle: _templateEngine.GenerateActivityForLocale("QnaMakerAdaptiveLearningCardTitle").Text, cardNoMatchText: _templateEngine.GenerateActivityForLocale("QnaMakerNoMatchText").Text) { Id = knowledgebase.Key }; AddDialog(qnaDialog); } // Register skill dialogs var skillDialogs = serviceProvider.GetServices <SkillDialog>(); foreach (var dialog in skillDialogs) { AddDialog(dialog); } }