Using LuisDialog with ConfigurationManager or Environment variables for your keys/secrets
Often when working with developers, they (should) ask how they can use the LuisDialog from the C# BotBuilder SDK without hard coding their subscription key and model id. I've seen this asked online too in a few places on StackOverflow and Github eg: here and here: So here's a simple extract which shows how you can pull the keys from ConfigurationManager or the Environment variables in C#
Passing in an instantiated ILuisService into the base class constructor:
[Serializable]
public class RootDialog : LuisDialog<object>
{
public RootDialog() : base(new LuisService(new LuisModelAttribute(ConfigurationManager.AppSettings.Get("LuisModelId"), ConfigurationManager.AppSettings.Get("LuisSubscriptionId"))))
{
}
[LuisIntent("")]
[LuisIntent("None")]
public async Task None(IDialogContext context, IAwaitable<IMessageActivity> message, LuisResult result)
{
// Didn't understand the LUIS request
var msg = await message;
await context.PostAsync($"I'm not a human");
}
If you want to use Environment variables, simply change ConfigurationManager.AppSettings with Environment.GetEnvironmentVariable eg:
public RootDialog() : base(new LuisService(new LuisModelAttribute(Environment.GetEnvironmentVariable("LuisModelId",EnvironmentVariableTarget.Machine), Environment.GetEnvironmentVariable("LuisSubscriptionId", EnvironmentVariableTarget.Machine))))
{
}
And ensure your machine environment has those values from the command line using setx eg:
setx -m LuisModelId your-model-id
setx -m LuisSubscriptionId your-subscription-id
HTH