Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Azure Resource Manager SDK for Bot Service in .NET. Management plane operations for creating and managing Azure Bot resources, channels (Teams, DirectLine, Slack), and connection settings. Triggers: "Bot Service", "BotResource", "Azure Bot", "DirectLine channel", "Teams channel", "bot management .NET", "create bot".
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 89% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 22% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 90% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 119% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 181% | 0% |
Management plane SDK for provisioning and managing Azure Bot Service resources via Azure Resource Manager.
bashdotnet add package Azure.ResourceManager.BotService dotnet add package Azure.Identity
Current Versions: Stable v1.1.1, Preview v1.1.0-beta.1
bashAZURE_SUBSCRIPTION_ID=<your-subscription-id> # Required: Azure subscription ID AZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production AZURE_TENANT_ID=<tenant-id> # For service principal auth (optional) AZURE_CLIENT_ID=<client-id> # For service principal auth (optional) AZURE_CLIENT_SECRET=<client-secret> # For service principal auth (optional)
csharpusing Azure.Identity; using Azure.ResourceManager; using Azure.ResourceManager.BotService; // Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential> var credential = new DefaultAzureCredential( DefaultAzureCredential.DefaultEnvironmentVariableName ); // Or use a specific credential directly in production: // See https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes // var credential = new ManagedIdentityCredential(); ArmClient armClient = new ArmClient(credential); // Get subscription and resource group SubscriptionResource subscription = await armClient.GetDefaultSubscriptionAsync(); ResourceGroupResource resourceGroup = await subscription.GetResourceGroups().GetAsync("myResourceGroup"); // Access bot collection BotCollection botCollection = resourceGroup.GetBots();
ArmClient
└── SubscriptionResource
└── ResourceGroupResource
└── BotResource
├── BotChannelResource (DirectLine, Teams, Slack, etc.)
├── BotConnectionSettingResource (OAuth connections)
└── BotServicePrivateEndpointConnectionResourcecsharpusing Azure.ResourceManager.BotService; using Azure.ResourceManager.BotService.Models; // Create bot data var botData = new BotData(AzureLocation.WestUS2) { Kind = BotServiceKind.Azurebot, Sku = new BotServiceSku(BotServiceSkuName.F0), Properties = new BotProperties( displayName: "MyBot", endpoint: new Uri("https://mybot.azurewebsites.net/api/messages"), msaAppId: "<your-msa-app-id>") { Description = "My Azure Bot", MsaAppType = BotMsaAppType.MultiTenant } }; // Create or update the bot ArmOperation<BotResource> operation = await botCollection.CreateOrUpdateAsync( WaitUntil.Completed, "myBotName", botData); BotResource bot = operation.Value; Console.WriteLine($"Bot created: {bot.Data.Name}");
csharp// Get the bot BotResource bot = await resourceGroup.GetBots().GetAsync("myBotName"); // Get channel collection BotChannelCollection channels = bot.GetBotChannels(); // Create DirectLine channel configuration var channelData = new BotChannelData(AzureLocation.WestUS2) { Properties = new DirectLineChannel() { Properties = new DirectLineChannelProperties() { Sites = { new DirectLineSite("Default Site") { IsEnabled = true, IsV1Enabled = false, IsV3Enabled = true, IsSecureSiteEnabled = true } } } } }; // Create or update the channel ArmOperation<BotChannelResource> channelOp = await channels.CreateOrUpdateAsync( WaitUntil.Completed, BotChannelName.DirectLineChannel, channelData); Console.WriteLine("DirectLine channel configured");
csharpvar teamsChannelData = new BotChannelData(AzureLocation.WestUS2) { Properties = new MsTeamsChannel() { Properties = new MsTeamsChannelProperties() { IsEnabled = true, EnableCalling = false } } }; await channels.CreateOrUpdateAsync( WaitUntil.Completed, BotChannelName.MsTeamsChannel, teamsChannelData);
csharpvar webChatChannelData = new BotChannelData(AzureLocation.WestUS2) { Properties = new WebChatChannel() { Properties = new WebChatChannelProperties() { Sites = { new WebChatSite("Default Site") { IsEnabled = true } } } } }; await channels.CreateOrUpdateAsync( WaitUntil.Completed, BotChannelName.WebChatChannel, webChatChannelData);
csharp// Get bot BotResource bot = await botCollection.GetAsync("myBotName"); Console.WriteLine($"Bot: {bot.Data.Properties.DisplayName}"); Console.WriteLine($"Endpoint: {bot.Data.Properties.Endpoint}"); // List channels await foreach (BotChannelResource channel in bot.GetBotChannels().GetAllAsync()) { Console.WriteLine($"Channel: {channel.Data.Name}"); }
csharpvar regenerateRequest = new BotChannelRegenerateKeysContent(BotChannelName.DirectLineChannel) { SiteName = "Default Site" }; BotChannelResource channelWithKeys = await bot.GetBotChannelWithRegenerateKeysAsync(regenerateRequest);
csharpBotResource bot = await botCollection.GetAsync("myBotName"); // Update using patch var updateData = new BotData(bot.Data.Location) { Properties = new BotProperties( displayName: "Updated Bot Name", endpoint: bot.Data.Properties.Endpoint, msaAppId: bot.Data.Properties.MsaAppId) { Description = "Updated description" } }; await bot.UpdateAsync(updateData);
csharpBotResource bot = await botCollection.GetAsync("myBotName"); await bot.DeleteAsync(WaitUntil.Completed);
| Channel | Constant | Class | |---------|----------|-------| | Direct Line | BotChannelName.DirectLineChannel | DirectLineChannel | | Direct Line Speech | BotChannelName.DirectLineSpeechChannel | DirectLineSpeechChannel | | Microsoft Teams | BotChannelName.MsTeamsChannel | MsTeamsChannel | | Web Chat | BotChannelName.WebChatChannel | WebChatChannel | | Slack | BotChannelName.SlackChannel | SlackChannel | | Facebook | BotChannelName.FacebookChannel | FacebookChannel | | Email | BotChannelName.EmailChannel | EmailChannel | | Telegram | BotChannelName.TelegramChannel | TelegramChannel | | Telephony | BotChannelName.TelephonyChannel | TelephonyChannel |
| Type | Purpose | |------|---------| | ArmClient | Entry point for all ARM operations | | BotResource | Represents an Azure Bot resource | | BotCollection | Collection for bot CRUD | | BotData | Bot resource definition | | BotProperties | Bot configuration properties | | BotChannelResource | Channel configuration | | BotChannelCollection | Collection of channels | | BotChannelData | Channel configuration data | | BotConnectionSettingResource | OAuth connection settings |
| Value | Description | |-------|-------------| | BotServiceKind.Azurebot | Azure Bot (recommended) | | BotServiceKind.Bot | Legacy Bot Framework bot | | BotServiceKind.Designer | Composer bot | | BotServiceKind.Function | Function bot | | BotServiceKind.Sdk | SDK bot |
| Value | Description | |-------|-------------| | BotServiceSkuName.F0 | Free tier | | BotServiceSkuName.S1 | Standard tier |
| Value | Description | |-------|-------------| | BotMsaAppType.MultiTenant | Multi-tenant app | | BotMsaAppType.SingleTenant | Single-tenant app | | BotMsaAppType.UserAssignedMSI | User-assigned managed identity |
DefaultAzureCredential — supports multiple auth methodsWaitUntil.Completed for synchronous operationsRequestFailedException for API errors*Async) for all operationsBotMsaAppType.UserAssignedMSI) for production botscsharpusing Azure; try { var operation = await botCollection.CreateOrUpdateAsync( WaitUntil.Completed, botName, botData); } catch (RequestFailedException ex) when (ex.Status == 409) { Console.WriteLine("Bot already exists"); } catch (RequestFailedException ex) { Console.WriteLine($"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}"); }
| SDK | Purpose | Install | |-----|---------|---------| | Azure.ResourceManager.BotService | Bot management (this SDK) | dotnet add package Azure.ResourceManager.BotService | | Microsoft.Bot.Builder | Bot Framework SDK | dotnet add package Microsoft.Bot.Builder | | Microsoft.Bot.Builder.Integration.AspNet.Core | ASP.NET Core integration | dotnet add package Microsoft.Bot.Builder.Integration.AspNet.Core |
| Resource | URL | |----------|-----| | NuGet Package | https://www.nuget.org/packages/Azure.ResourceManager.BotService | | API Reference | https://learn.microsoft.com/dotnet/api/azure.resourcemanager.botservice | | GitHub Source | https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/botservice/Azure.ResourceManager.BotService | | Azure Bot Service Docs | https://learn.microsoft.com/azure/bot-service/ |
Other measured skills in the registry, with their headline benchmark lift.