Generated banner for Azure Mgmt Botservice Dotnet
Generated logo for Azure Mgmt Botservice Dotnet

Azure Mgmt Botservice Dotnet

MicrosoftOfficialCreated by Microsoft

  • Skill
  • Tool integration
  • Cloud and DevOps
  • MIT
  • No issues found

From the author

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".
— the description by Microsoft

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

The Azure.ResourceManager.BotService SDK provides a .NET interface for interacting with the Azure Bot Service management plane. It enables developers to automate the lifecycle of Azure Bot resources, including creation, configuration, updates, and deletion. The library supports managing various communication channels such as Microsoft Teams, DirectLine, Slack, and Web Chat, as well as configuring OAuth connection settings and bot properties.

What it does

  • Provision and manage Azure Bot Service resources via code
  • Configure and enable multiple communication channels like Teams and DirectLine
  • Perform CRUD operations on bot resources and channel configurations
  • Regenerate security keys for communication channels
  • Support various bot types including Azure Bot and legacy frameworks
  • Integrate with Azure Identity for secure authentication

When to use it

  • When automating the deployment of Azure Bot infrastructure
  • When managing bot channel configurations programmatically
  • When integrating bot management into CI/CD pipelines
  • When building custom administrative tools for Azure Bot Service

Advantages

  • Native .NET support with strongly-typed objects
  • Consistent with other Azure Resource Manager SDKs
  • Supports asynchronous operations for efficient resource management
  • Provides granular control over bot properties and channel settings

Usage examples

“How do I create a new Azure Bot resource using the .NET SDK?”
The agent provides a code snippet using BotData and BotCollection.CreateOrUpdateAsync to define and deploy a new bot resource with specific SKU and endpoint settings.
“Show me how to enable the Microsoft Teams channel for my bot.”
The agent demonstrates using BotChannelData with MsTeamsChannel properties and the CreateOrUpdateAsync method on the bot's channel collection.
“How can I list all channels configured for a specific bot?”
The agent provides a code example using an asynchronous loop to iterate through the bot's channel collection and print the name of each configured channel.
“How do I regenerate DirectLine keys for my bot?”
The agent shows how to use the BotChannelRegenerateKeysContent object and the GetBotChannelWithRegenerateKeysAsync method to update site keys.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/microsoft/azure-mgmt-botservice-dotnet/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip azure-mgmt-botservice-dotnet.zip -d .agents/skills

Documentation by Microsoft

Azure.ResourceManager.BotService (.NET)

Management plane SDK for provisioning and managing Azure Bot Service resources via Azure Resource Manager.

Installation

dotnet add package Azure.ResourceManager.BotService
dotnet add package Azure.Identity

Current Versions: Stable v1.1.1, Preview v1.1.0-beta.1

Environment Variables

AZURE_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)

Authentication

using 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();

Resource Hierarchy

ArmClient
└── SubscriptionResource
    └── ResourceGroupResource
        └── BotResource
            ├── BotChannelResource (DirectLine, Teams, Slack, etc.)
            ├── BotConnectionSettingResource (OAuth connections)
            └── BotServicePrivateEndpointConnectionResource

Core Workflows

1. Create Bot Resource
using 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}");
2. Configure DirectLine Channel
// 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");
3. Configure Microsoft Teams Channel
var teamsChannelData = new BotChannelData(AzureLocation.WestUS2)
{
    Properties = new MsTeamsChannel()
    {
        Properties = new MsTeamsChannelProperties()
        {
            IsEnabled = true,
            EnableCalling = false
        }
    }
};

await channels.CreateOrUpdateAsync(
    WaitUntil.Completed,
    BotChannelName.MsTeamsChannel,
    teamsChannelData);
4. Configure Web Chat Channel
var 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);
5. Get Bot and List Channels
// 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}");
}
6. Regenerate DirectLine Keys
var regenerateRequest = new BotChannelRegenerateKeysContent(BotChannelName.DirectLineChannel)
{
    SiteName = "Default Site"
};

BotChannelResource channelWithKeys = await bot.GetBotChannelWithRegenerateKeysAsync(regenerateRequest);
7. Update Bot
BotResource 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);
8. Delete Bot
BotResource bot = await botCollection.GetAsync("myBotName");
await bot.DeleteAsync(WaitUntil.Completed);

Supported Channel Types

ChannelConstantClass
Direct LineBotChannelName.DirectLineChannelDirectLineChannel
Direct Line SpeechBotChannelName.DirectLineSpeechChannelDirectLineSpeechChannel
Microsoft TeamsBotChannelName.MsTeamsChannelMsTeamsChannel
Web ChatBotChannelName.WebChatChannelWebChatChannel
SlackBotChannelName.SlackChannelSlackChannel
FacebookBotChannelName.FacebookChannelFacebookChannel
EmailBotChannelName.EmailChannelEmailChannel
TelegramBotChannelName.TelegramChannelTelegramChannel
TelephonyBotChannelName.TelephonyChannelTelephonyChannel

Key Types Reference

TypePurpose
ArmClientEntry point for all ARM operations
BotResourceRepresents an Azure Bot resource
BotCollectionCollection for bot CRUD
BotDataBot resource definition
BotPropertiesBot configuration properties
BotChannelResourceChannel configuration
BotChannelCollectionCollection of channels
BotChannelDataChannel configuration data
BotConnectionSettingResourceOAuth connection settings

BotServiceKind Values

ValueDescription
BotServiceKind.AzurebotAzure Bot (recommended)
BotServiceKind.BotLegacy Bot Framework bot
BotServiceKind.DesignerComposer bot
BotServiceKind.FunctionFunction bot
BotServiceKind.SdkSDK bot

BotServiceSkuName Values

ValueDescription
BotServiceSkuName.F0Free tier
BotServiceSkuName.S1Standard tier

BotMsaAppType Values

ValueDescription
BotMsaAppType.MultiTenantMulti-tenant app
BotMsaAppType.SingleTenantSingle-tenant app
BotMsaAppType.UserAssignedMSIUser-assigned managed identity

Best Practices

  1. Use DefaultAzureCredential — supports multiple auth methods

  2. Use WaitUntil.Completed for synchronous operations

  3. Handle RequestFailedException for API errors

  4. Use async methods (*Async) for all operations

  5. Store MSA App credentials securely — use Key Vault for secrets

  6. Use managed identity (BotMsaAppType.UserAssignedMSI) for production bots

  7. Enable secure sites for DirectLine channels in production

Error Handling

using 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}");
}
SDKPurposeInstall
Azure.ResourceManager.BotServiceBot management (this SDK)dotnet add package Azure.ResourceManager.BotService
Microsoft.Bot.BuilderBot Framework SDKdotnet add package Microsoft.Bot.Builder
Microsoft.Bot.Builder.Integration.AspNet.CoreASP.NET Core integrationdotnet add package Microsoft.Bot.Builder.Integration.AspNet.Core

Files

ATTRIBUTION.md

Attribution

This folder is an unmodified copy of the Agent Skill "azure-mgmt-botservice-dotnet", distributed by AutoGineer (https://autogineer.com/agent-skills).

The skill's own files are unmodified copies. AutoGineer is not affiliated with or endorsed by the author or the publisher.

Files added by AutoGineer

  • ATTRIBUTION.md: this file, written by AutoGineer

  • LICENSE: copied from LICENSE

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Security

No issues found by our static scan· No issues found

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
Microsoft
Publisher
Microsoft (Official)
Source
microsoft/skills · .github/plugins/azure-sdk-dotnet/skills/azure-mgmt-botservice-dotnet · commit 0696600
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Microsoft.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download azure-mgmt-botservice-dotnet.zip